VideothequeController.php 6.4 KB

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