VideothequeController.php 8.0 KB

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