VideothequeController.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Commentaire;
  4. use App\Entity\Realisateur;
  5. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  6. use Symfony\Component\Security\Core\Security;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\JsonResponse;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use App\Entity\Film;
  12. use App\Form\CommentaireType;
  13. use App\Form\FilmType;
  14. use App\Repository\CommentaireRepository;
  15. use App\Repository\FilmRepository;
  16. use App\Repository\GenreRepository;
  17. use App\Repository\RealisateurRepository;
  18. use App\Service\CommentaireManager;
  19. use App\Service\FilmManager;
  20. use App\Service\OptionsManager;
  21. use App\Service\TmdbApiService;
  22. use Symfony\Component\Form\FormFactoryInterface;
  23. use Symfony\Component\HtmlSanitizer\HtmlSanitizerInterface;
  24. use Symfony\Component\HttpFoundation\Response;
  25. use Symfony\Component\Serializer\SerializerInterface;
  26. class VideothequeController extends AbstractController
  27. {
  28. #[Route("/", name: "videotheque_liste")]
  29. public function listeAction(Request $request, FilmRepository $repo, OptionsManager $options): Response
  30. {
  31. $listeFilms = $repo->findTous();
  32. return $this->render('videotheque/liste_'.$options->vue().'.html.twig', array(
  33. 'listeFilms' => $listeFilms,
  34. 'titre' => 'Liste complète',
  35. ));
  36. }
  37. #[Route("/prochaines-sorties", name: "prochaines_sorties")]
  38. public function prochainesSorties(Request $request, FilmRepository $repo, OptionsManager $options): Response
  39. {
  40. $listeFilms = $repo->findProchaines();
  41. return $this->render('videotheque/liste_'.$options->vue().'.html.twig', array(
  42. 'listeFilms' => $listeFilms,
  43. 'titre' => 'Prochaines sorties',
  44. ));
  45. }
  46. #[Route("/liste-by/{id}", name: "videotheque_listepargenre")]
  47. public function listeParGenreAction(\App\Entity\Genre $genre, FilmRepository $repo, OptionsManager $options): Response
  48. {
  49. $films = $repo->findFilmWithGenre(array($genre->getName()));
  50. return $this->render('videotheque/liste_'.$options->vue().'.html.twig', array(
  51. 'listeFilms' => $films,
  52. 'titre' => 'Films par catégorie : '.$genre->getName()
  53. ));
  54. }
  55. #[Route("/liste-by_real/{id}", name: "videotheque_listeparreal")]
  56. public function listeParRealisateurAction(Realisateur $realisateur, FilmRepository $repo, OptionsManager $options): Response
  57. {
  58. $films = $repo->findFilmWithReal(array($realisateur->getNomComplet()));
  59. return $this->render('videotheque/liste_'.$options->vue().'.html.twig', array(
  60. 'listeFilms' => $films,
  61. 'titre' => 'Films par réalisateur : '.$realisateur->getNomComplet()
  62. ));
  63. }
  64. #[Route("/ajouter/{idtmdb}", name: "videotheque_ajouter")]
  65. public function ajouterAction(Request $request, FilmManager $filmManager, TmdbApiService $tmdbApiService, string $idtmdb=null): Response
  66. {
  67. if ($idtmdb !== null) {
  68. $film = $tmdbApiService->hydrateFilm($idtmdb);
  69. } else {
  70. $film = new Film;
  71. }
  72. $form = $this->createForm(FilmType::class, $film);
  73. $form->handleRequest($request);
  74. if ($form->isSubmitted() && $form->isValid())
  75. {
  76. $filmManager->addFilm($film);
  77. $this->addFlash('success', 'Le film a été ajouté');
  78. return $this->redirectToRoute('videotheque_voirfilm', array('id'=>$film->getId()));
  79. }
  80. return $this->renderForm('videotheque/ajouter.html.twig', array(
  81. 'form' => $form,
  82. ));
  83. }
  84. #[Route("/addtmdb", name: "videotheque_ajouter_tmdb")]
  85. public function ajouterTmdb(Request $request, TmdbApiService $tmdbApiService, HtmlSanitizerInterface $htmlSanitizerInterface): Response
  86. {
  87. $films = array();
  88. $nbFilms = 0;
  89. $nbPages = 0;
  90. $page = (int) $htmlSanitizerInterface->sanitize($request->query->get('page', 1));
  91. $recherche = $htmlSanitizerInterface->sanitize($request->query->get('query', ""));
  92. if ($tmdbApiService->query($recherche, $page)) {
  93. $nbFilms = $tmdbApiService->countResults();
  94. $nbPages = $tmdbApiService->countPages();
  95. $films = $tmdbApiService->getFilms();
  96. }
  97. return $this->renderForm('videotheque/add_tmdb.html.twig', [
  98. 'titre' => 'Ajouter via TheMovieDB.org',
  99. 'films' => $films,
  100. 'nbFilms' => $nbFilms,
  101. 'nbPages' => $nbPages,
  102. 'page' => $page,
  103. 'recherche' => $recherche
  104. ]);
  105. }
  106. #[Route("/modifier/{id}", name: "videotheque_modifier")]
  107. public function modifierAction(Request $request, Film $film, FilmManager $filmManager): Response
  108. {
  109. $form = $this->createForm(FilmType::class, $film);
  110. $form->handleRequest($request);
  111. if ($form->isSubmitted() && $form->isValid())
  112. {
  113. $filmManager->editFilm($film);
  114. $this->addFlash('success', 'Le film a été modifié');
  115. return $this->redirectToRoute('videotheque_voirfilm',array('id'=>$film->getId()));
  116. }
  117. return $this->renderForm('videotheque/modifier.html.twig', array(
  118. 'form' => $form,
  119. ));
  120. }
  121. #[Route("/supprimer/{id}", name: "videotheque_supprimer")]
  122. #[IsGranted("ROLE_ADMIN")]
  123. public function supprimerAction(Request $request, Film $film, FilmManager $filmManager, FormFactoryInterface $ffi): Response
  124. {
  125. $form = $ffi->create();
  126. $form->handleRequest($request);
  127. if ($form->isSubmitted() && $form->isValid())
  128. {
  129. $filmManager->delFilm($film);
  130. $this->addFlash('success', 'Le film '.$film->getTitre().' a bien été supprimé.');
  131. return $this->redirectToRoute('videotheque_liste');
  132. }
  133. return $this->renderForm('videotheque/supprimer.html.twig', array(
  134. 'film' => $film,
  135. 'form' => $form
  136. ));
  137. }
  138. #[Route("/fichefilm/{id}", name: "videotheque_voirfilm")]
  139. public function voirFilmAction(Request $request, \App\Entity\Film $film, CommentaireManager $cm, Security $security, CommentaireRepository $repo): Response
  140. {
  141. if ($security->isGranted('IS_AUTHENTICATED_REMEMBERED'))
  142. {
  143. $commentaireUser = $repo->findOneBy(array('film'=>$film, 'user'=>$this->getUser()));
  144. if (is_null($commentaireUser))
  145. {
  146. $commentaireUser = new Commentaire();
  147. }
  148. $form = $this->createForm(CommentaireType::class, $commentaireUser);
  149. $form->handleRequest($request);
  150. if ($form->isSubmitted() && $form->isValid())
  151. {
  152. $cm->delEditAdd($commentaireUser, $film);
  153. $this->addFlash('success', 'Le commentaire a été posté');
  154. return $this->redirectToRoute('videotheque_voirfilm', array('id' => $film->getId()));
  155. }
  156. } else {
  157. $form = $this->createForm(CommentaireType::class, null);
  158. }
  159. return $this->renderForm('videotheque/voirfilm.html.twig', array(
  160. 'film' => $film,
  161. 'form' => $form
  162. ));
  163. }
  164. #[Route("/ajax_req_realisateurs", name: "videotheque_ajax_realisateurs")]
  165. public function ajaxRealisateurs(RealisateurRepository $repo, SerializerInterface $serializer): Response
  166. {
  167. $realisateurs = $repo->findNomsComplets();
  168. $liste = array();
  169. foreach ($realisateurs as $key=>$nom)
  170. {
  171. $liste[$key] = $serializer->serialize($nom, 'json');
  172. }
  173. return new JsonResponse($liste);
  174. }
  175. #[Route("/ajax_req_genres", name: "videotheque_ajax_genres")]
  176. public function ajaxGenres(GenreRepository $repo, SerializerInterface $serializer): Response
  177. {
  178. $genres = $repo->findGenres();
  179. $liste = array();
  180. foreach ($genres as $key=>$nom)
  181. {
  182. $liste[$key] = $serializer->serialize($nom, 'json');
  183. }
  184. return new JsonResponse($liste);
  185. }
  186. }