VideothequeListController.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. <?php
  2. namespace App\Controller;
  3. use App\Dto\FiltersDTO;
  4. use App\Entity\Commentaire;
  5. use App\Entity\Realisateur;
  6. use Symfony\Component\HttpFoundation\JsonResponse;
  7. use Symfony\Component\Routing\Attribute\Route;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use App\Entity\Genre;
  10. use App\Form\CommentaireType;
  11. use App\Form\FiltersType;
  12. use App\Repository\CommentaireRepository;
  13. use App\Repository\FilmRepository;
  14. use App\Repository\GenreRepository;
  15. use App\Repository\RealisateurRepository;
  16. use App\Service\CommentaireManager;
  17. use App\Service\OptionsManager;
  18. use App\Service\Pagination;
  19. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  20. use Symfony\Bundle\SecurityBundle\Security;
  21. use Symfony\Component\Form\FormFactoryInterface;
  22. use Symfony\Component\HttpFoundation\Response;
  23. use Symfony\Component\HttpKernel\Attribute\MapQueryString;
  24. class VideothequeListController extends AbstractController
  25. {
  26. #[Route("/", name: "videotheque_liste")]
  27. public function listeAction(
  28. Request $request,
  29. FilmRepository $filmRepository,
  30. OptionsManager $options,
  31. #[MapQueryString]
  32. ?FiltersDTO $filters,
  33. FormFactoryInterface $formFactory,
  34. ): Response
  35. {
  36. $filters = $filters ?? new FiltersDTO();
  37. $filtersForm = $formFactory->createNamed('', FiltersType::class, $filters);
  38. $filtersForm->handleRequest($request);
  39. $qb = $filmRepository->queryTous($filtersForm->getData()->page, $filtersForm->getData()->toArray());
  40. $pagination = new Pagination($qb, $filtersForm->getData()->limit, $filtersForm->getData()->page);
  41. return $this->render('videotheque/liste_'.$options->vue().'.html.twig', array(
  42. 'listeFilms' => $pagination->getPaginator(),
  43. 'titre' => 'Liste complète',
  44. 'filtersForm' => $filtersForm->createView(),
  45. 'pagination' => $pagination
  46. ));
  47. }
  48. #[Route("/maliste", name:"videothequepersonnelle_maliste")]
  49. public function maListeAction (
  50. Request $request,
  51. FilmRepository $filmRepository,
  52. OptionsManager $options,
  53. #[MapQueryString]
  54. ?FiltersDTO $filters,
  55. FormFactoryInterface $formFactory,
  56. ): Response
  57. {
  58. $filters = $filters ?? new FiltersDTO();
  59. $filters->userWantToView = $this->getUser();
  60. $filtersForm = $formFactory->createNamed('', FiltersType::class, $filters);
  61. $filtersForm->handleRequest($request);
  62. $qb = $filmRepository->queryTous($filtersForm->getData()->page, $filtersForm->getData()->toArray());
  63. $pagination = new Pagination($qb, $filtersForm->getData()->limit, $filtersForm->getData()->page);
  64. return $this->render('videotheque/liste_'.$options->vue().'.html.twig', array(
  65. 'listeFilms' => $pagination->getPaginator(),
  66. 'titre' => 'Ma liste de films à voir',
  67. 'filtersForm' => $filtersForm->createView(),
  68. 'pagination' => $pagination
  69. ));
  70. }
  71. #[Route("/prochaines-sorties", name: "prochaines_sorties")]
  72. public function prochainesSorties(FilmRepository $repo, OptionsManager $options): Response
  73. {
  74. $listeFilms = $repo->findProchaines();
  75. return $this->render('videotheque/liste_'.$options->vue().'.html.twig', array(
  76. 'listeFilms' => $listeFilms,
  77. 'titre' => 'Prochaines sorties et films en salle',
  78. ));
  79. }
  80. #[Route("/liste-by/{id}", name: "videotheque_listepargenre")]
  81. public function listeParGenreAction(
  82. Request $request,
  83. Genre $genre,
  84. FilmRepository $filmRepository,
  85. OptionsManager $options,
  86. #[MapQueryString]
  87. ?FiltersDTO $filters,
  88. FormFactoryInterface $formFactory,
  89. ): Response
  90. {
  91. $filters = $filters ?? new FiltersDTO();
  92. $filtersForm = $formFactory->createNamed('', FiltersType::class, $filters);
  93. $filtersForm->handleRequest($request);
  94. $qb = $filmRepository->queryFilmWithGenre([$genre->getName()], $filtersForm->getData()->page, $filtersForm->getData()->toArray());
  95. $pagination = new Pagination($qb, $filtersForm->getData()->limit, $filtersForm->getData()->page);
  96. return $this->render('videotheque/liste_'.$options->vue().'.html.twig', array(
  97. 'listeFilms' => $pagination->getPaginator(),
  98. 'titre' => 'Films par genre : ' . $genre->getName(),
  99. 'filtersForm' => $filtersForm->createView(),
  100. 'pagination' => $pagination
  101. ));
  102. }
  103. #[Route("/liste-by_real/{id}", name: "videotheque_listeparreal")]
  104. public function listeParRealisateurAction(
  105. Request $request,
  106. Realisateur $realisateur,
  107. FilmRepository $filmRepository,
  108. OptionsManager $options,
  109. #[MapQueryString]
  110. ?FiltersDTO $filters,
  111. FormFactoryInterface $formFactory,): Response
  112. {
  113. $filters = $filters ?? new FiltersDTO();
  114. $filtersForm = $formFactory->createNamed('', FiltersType::class, $filters);
  115. $filtersForm->handleRequest($request);
  116. $qb = $filmRepository->queryFilmWithReal([$realisateur->getNomComplet()], $filtersForm->getData()->page, $filtersForm->getData()->toArray());
  117. $pagination = new Pagination($qb, $filtersForm->getData()->limit, $filtersForm->getData()->page);
  118. return $this->render('videotheque/liste_'.$options->vue().'.html.twig', [
  119. 'listeFilms' => $pagination->getPaginator(),
  120. 'titre' => 'Films par réalisateur : ' . $realisateur->getNomComplet(),
  121. 'filtersForm' => $filtersForm->createView(),
  122. 'pagination' => $pagination
  123. ]);
  124. }
  125. #[Route('/pif', name: 'videotheque_random')]
  126. public function randomAction(FilmRepository $filmRepository, OptionsManager $options): Response
  127. {
  128. $films = $filmRepository->findRandom(5);
  129. return $this->render('videotheque/liste_'.$options->vue().'.html.twig', [
  130. 'listeFilms' => $films,
  131. 'titre' => '5 films au hasard'
  132. ]);
  133. }
  134. #[Route("/fichefilm/{id}", name: "videotheque_voirfilm")]
  135. public function voirFilmAction(Request $request, \App\Entity\Film $film, CommentaireManager $cm, Security $security, CommentaireRepository $repo): Response
  136. {
  137. if ($security->isGranted('IS_AUTHENTICATED_REMEMBERED'))
  138. {
  139. $commentaireUser = $repo->findOneBy(array('film'=>$film, 'user'=>$this->getUser()));
  140. if (is_null($commentaireUser))
  141. {
  142. $commentaireUser = new Commentaire();
  143. }
  144. $form = $this->createForm(CommentaireType::class, $commentaireUser);
  145. $form->handleRequest($request);
  146. if ($form->isSubmitted() && $form->isValid())
  147. {
  148. $cm->delEditAdd($commentaireUser, $film);
  149. $this->addFlash('success', 'Le commentaire a été posté');
  150. return $this->redirectToRoute('videotheque_voirfilm', array('id' => $film->getId()));
  151. }
  152. } else {
  153. $form = $this->createForm(CommentaireType::class, null);
  154. }
  155. return $this->render('videotheque/voirfilm.html.twig', array(
  156. 'film' => $film,
  157. 'form' => $form
  158. ));
  159. }
  160. #[Route("/ajax_req_realisateurs", name: "videotheque_ajax_realisateurs")]
  161. public function ajaxRealisateurs(Request $request, RealisateurRepository $repo): Response
  162. {
  163. $query = $request->query->get('query');
  164. $realisateurs = $repo->findRealisateurLike($query);
  165. $liste = array();
  166. foreach ($realisateurs as $realisateur)
  167. {
  168. $liste[] = $realisateur->getNomComplet();
  169. }
  170. return new JsonResponse($liste);
  171. }
  172. #[Route("/ajax_req_genres", name: "videotheque_ajax_genres")]
  173. public function ajaxGenres(Request $request, GenreRepository $repo): Response
  174. {
  175. $query = $request->query->get('query');
  176. $genres = $repo->findGenreLike($query);
  177. $liste = array();
  178. foreach ($genres as $genre)
  179. {
  180. $liste[] = $genre->getName();
  181. }
  182. return new JsonResponse($liste);
  183. }
  184. }