VideothequeController.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  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\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\JsonResponse;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use App\Entity\Film;
  11. use App\Form\CommentaireType;
  12. use App\Form\FilmType;
  13. use App\Repository\CommentaireRepository;
  14. use App\Repository\FilmRepository;
  15. use App\Repository\GenreRepository;
  16. use App\Repository\MediaVideoRepository;
  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\Bundle\SecurityBundle\Security;
  23. use Symfony\Component\Form\FormFactoryInterface;
  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 et films en salle',
  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->render('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): Response
  86. {
  87. $films = array();
  88. $nbFilms = 0;
  89. $nbPages = 0;
  90. $page = (int) $request->query->get('page', 1);
  91. if ($page === 0) {
  92. $page = 1;
  93. }
  94. $recherche = $request->query->get('query', "");
  95. if ($tmdbApiService->query($recherche, $page)) {
  96. $nbFilms = $tmdbApiService->countResults();
  97. $nbPages = $tmdbApiService->countPages();
  98. $films = $tmdbApiService->getFilms();
  99. }
  100. return $this->render('videotheque/add_tmdb.html.twig', [
  101. 'titre' => 'Ajouter via TheMovieDB.org',
  102. 'films' => $films,
  103. 'nbFilms' => $nbFilms,
  104. 'nbPages' => $nbPages,
  105. 'page' => $page,
  106. 'recherche' => $recherche
  107. ]);
  108. }
  109. #[Route("/modifier/{id}", name: "videotheque_modifier")]
  110. public function modifierAction(Request $request, Film $film, FilmManager $filmManager): Response
  111. {
  112. $form = $this->createForm(FilmType::class, $film);
  113. $form->handleRequest($request);
  114. if ($form->isSubmitted() && $form->isValid())
  115. {
  116. $filmManager->editFilm($film);
  117. $this->addFlash('success', 'Le film a été modifié');
  118. return $this->redirectToRoute('videotheque_voirfilm',array('id'=>$film->getId()));
  119. }
  120. return $this->render('videotheque/modifier.html.twig', array(
  121. 'form' => $form,
  122. ));
  123. }
  124. #[Route("/supprimer/{id}", name: "videotheque_supprimer")]
  125. #[IsGranted("ROLE_ADMIN")]
  126. public function supprimerAction(Request $request, Film $film, FilmManager $filmManager, FormFactoryInterface $ffi): Response
  127. {
  128. $form = $ffi->create();
  129. $form->handleRequest($request);
  130. if ($form->isSubmitted() && $form->isValid())
  131. {
  132. $filmManager->delFilm($film);
  133. $this->addFlash('success', 'Le film '.$film->getTitre().' a bien été supprimé.');
  134. return $this->redirectToRoute('videotheque_liste');
  135. }
  136. return $this->render('videotheque/supprimer.html.twig', array(
  137. 'film' => $film,
  138. 'form' => $form
  139. ));
  140. }
  141. #[Route("/fichefilm/{id}", name: "videotheque_voirfilm")]
  142. public function voirFilmAction(Request $request, \App\Entity\Film $film, CommentaireManager $cm, Security $security, CommentaireRepository $repo): Response
  143. {
  144. if ($security->isGranted('IS_AUTHENTICATED_REMEMBERED'))
  145. {
  146. $commentaireUser = $repo->findOneBy(array('film'=>$film, 'user'=>$this->getUser()));
  147. if (is_null($commentaireUser))
  148. {
  149. $commentaireUser = new Commentaire();
  150. }
  151. $form = $this->createForm(CommentaireType::class, $commentaireUser);
  152. $form->handleRequest($request);
  153. if ($form->isSubmitted() && $form->isValid())
  154. {
  155. $cm->delEditAdd($commentaireUser, $film);
  156. $this->addFlash('success', 'Le commentaire a été posté');
  157. return $this->redirectToRoute('videotheque_voirfilm', array('id' => $film->getId()));
  158. }
  159. } else {
  160. $form = $this->createForm(CommentaireType::class, null);
  161. }
  162. return $this->render('videotheque/voirfilm.html.twig', array(
  163. 'film' => $film,
  164. 'form' => $form
  165. ));
  166. }
  167. #[Route("/ajax_req_realisateurs", name: "videotheque_ajax_realisateurs")]
  168. public function ajaxRealisateurs(RealisateurRepository $repo, SerializerInterface $serializer): Response
  169. {
  170. $realisateurs = $repo->findNomsComplets();
  171. $liste = array();
  172. foreach ($realisateurs as $key=>$nom)
  173. {
  174. $liste[$key] = $serializer->serialize($nom, 'json');
  175. }
  176. return new JsonResponse($liste);
  177. }
  178. #[Route("/ajax_req_genres", name: "videotheque_ajax_genres")]
  179. public function ajaxGenres(GenreRepository $repo, SerializerInterface $serializer): Response
  180. {
  181. $genres = $repo->findGenres();
  182. $liste = array();
  183. foreach ($genres as $key=>$nom)
  184. {
  185. $liste[$key] = $serializer->serialize($nom, 'json');
  186. }
  187. return new JsonResponse($liste);
  188. }
  189. }