VideothequeController.php 7.7 KB

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