<?php
namespace App\Controller;
use Pimcore\Controller\FrontendController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Knp\Component\Pager\PaginatorInterface;
use \Pimcore\Model\DataObject;
use Pimcore\Model\DataObject\Movies;
use App\Model\Movie;
use Pimcore\Model\DataObject\Actor;
use Pimcore\Model\Listing;
use Pimcore\Twig\Extension\Templating\HeadTitle;
use Pimcore\Twig\Extension\Templating\Placeholder;
use FFI\Exception;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Pimcore\Model\DataObject\Data\Hotspotimage;
class MovieDataController extends FrontendController
{
public static $perPage = 60;
public static $similarCount = 12; //multiple of 4 preferably
/**
* @Template
*/
public function defaultAction(Request $request)
{
return [];
}
/**
* @param Request $request
*
* @return Response
*
* @throws \Exception
*/
public function movieDataAction(Request $request, PaginatorInterface $paginator, $searchTerm = "")
{
// get a list of Movies objects and order them by name
$movieList = new Movies\Listing();
if($request->get('latest'))
{
$movieList->setOrderKey('o_modificationDate');
$movieList->setOrder('DESC');
}
else
{
$movieList->setOrderKey('title');
$movieList->setOrder('ASC');
}
$movieList->setLocale("de");
if($searchTerm)
$movieList->setCondition("title LIKE ?", ["%".$searchTerm."%"]);
$paginator = $paginator->paginate(
$movieList,
$request->get('page', 1),
self::$perPage
);
$fallbackImage = \Pimcore\Model\Asset::getById(414);
return $this->render('movie/movies.html.twig', [
'movies' => $movieList,
'paginationVariables' => $paginator->getPaginationData(),
'fallbackImage' => $fallbackImage,
'searchTerm' => $searchTerm,
'sortByLatest' => $request->get('latest')
]);
// $this->render('movie/movies.html.twig');
}
#[Route('/import-image/{id}')]
public function movieImportAction(Request $request): Response
{
try
{
$id = $request->get('id');
$object = Movies::getById($id) == null ? throw new Exception() : Movies::getByID($id)->getTitle("de");
$object == null ? throw new Exception() : 0;
}
catch(Exception $e)
{
echo "This ID does not exist or could not be found";
return new Response();
}
$movie = new Movie();
$movieList = new Movies\Listing();
Movie::$DebugMode = true;
$movieList->setCondition("oo_id LIKE ?", ["%".$id."%"]);
$movie->getMovieInformationPerLanguage($movieList, 'de-DE', true);
$movie->getMovieInformationPerLanguage($movieList, 'en-EN', true);
Movie::$DebugMode = false;
return $this->render('simple-page/importInfo.twig',[
'title' => $object
]);
}
#[Route('/movie-detail/{id}')]
public function movieDetailAction(Request $request): Response
{
$id = $request->get('id');
$movie = Movies::getById($id);
$actors = $movie->getActors();
$similarMovies = $this->getSimilarMovies($movie);
return $this->render('movie/movies-detail.html.twig',
[
'movie' => $movie,
'actors' => $actors,
'similarmovies' => $similarMovies
]);
}
#[Route('/actor-detail/{id}')]
public function actorDetailAction(Request $request): Response
{
$id = $request->get('id');
$actor = Actor::getById($id);
$movies = $this->getMoviesForActor($actor);
$similarActors = $this->getSimilarActors($actor);
return $this->render('movie/actors-detail.html.twig',
[
'actor' => $actor,
'movies' => $movies,
'similarActors' => $similarActors
]);
}
public function getSimilarMovies(Movies $movie)
{
$movieList = new Movies\Listing();
$movieList->setOrderKey("RAND()",false);
$movieList->setOrder('ASC');
$movieList->setLocale("de");
$movieList->setCondition("genre LIKE ?", ["%".$movie->getGenre()."%"]);
$movieList->setCondition("oo_id != ?", ["%".$movie->getId()."%"]);
$movieList->setLimit(self::$similarCount);
return $movieList;
}
public function getSimilarActors(Actor $Actor)
{
$actorList = new Actor\Listing();
$actorList->setOrderKey("RAND()", false);
$actorList->setOrder('ASC');
$actorList->setLocale("de");
$actorList->setLimit(self::$similarCount);
return $actorList;
}
public function getMoviesForActor(Actor $actor)
{
$movieList = new Movies\Listing();
$movieList->setOrderKey("RAND()", false);
$movieList->setOrder('ASC');
$movieList->setLocale("de");
// Assuming there is a method in the Movies class to filter by actor ID
$movieList->setCondition("actors LIKE ?", ["%".$actor->getId()."%"]);
$movieList->setLimit(self::$similarCount);
return $movieList;
}
/**
* @Route("/movies/add-new", name="movie_add_form", methods={"GET"})
*/
public function addForm(): Response
{
return $this->render('movie/add-new-movie.html.twig');
}
/**
* @Route("/movies/add-new", name="movie_add", methods={"POST"})
*/
public function addAction(Request $request): Response
{
$title = $request->request->get('title');
$type = $request->request->get('type');
$status = $request->request->get('status');
$image[] = $request->files->get('captureImage');
$image[] = $request->files->get('uploadImage');
if(DataObject::getByPath('/Movies/' . \Pimcore\File::getValidFilename($title)))
return new Response('Movie already exists - nothing added');
$movie = new Movie();
$movie->setKey(\Pimcore\File::getValidFilename($title)); // Ensure a valid filesystem name
$movie->setParentId(3171); // Set the parent ID to a suitable location in your object tree
$movie->setTitle($title,"de");
if($type == "Other")
$typeArray[] = "Sonstiges";
else
$typeArray[] = $type;
$movie->setDisc_Type($typeArray);
$statusArray[] = $status;
$movie->setStatus($statusArray);
$movie->setPublished(true);
$movie->setIsSteelbook(true);
$movie->setOriginalTitle($title, "de");
$movie->setTitle($title,"en");
$movie->setOriginalTitle($title, "en");
if ($image) {
$galleryArray = [];
$it = 0;
foreach($image as $i) { // Corrected the loop to properly iterate over each image
if ($i != null)
{
$asset = new \Pimcore\Model\Asset\Image();
$asset->setParentId(418); // Adjust the parent ID as needed
$asset->setData(file_get_contents($i->getPathname())); // Corrected to use $i for the current image in the loop
// Append a timestamp to the title to avoid duplicate filenames
$timestamp = date('YmdHis'); // Generates a timestamp in the format YearMonthDayHourMinuteSecond
$filename = \Pimcore\File::getValidFilename($title . '_' . $timestamp) . $it . '.png'; // Append the timestamp to the title
$asset->setFilename($filename);
$asset->save();
$it++;
$gimage = new HotspotImage();
$gimage->setImage($asset);
$galleryArray[] = $gimage; // Add each asset to the gallery
}
}
$movie->setSteelbook_Images(new \Pimcore\Model\DataObject\Data\ImageGallery($galleryArray));
}
$movie->getDatabaseInformation($movie, "de-DE");
$movie->getDatabaseInformation($movie,"en-EN");
$movie->save();
return new RedirectResponse('/movie-detail/' . $movie->getId());
}
}