VideothequeCrudController.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Film;
  4. use App\Form\FilmType;
  5. use App\Repository\FilmRepository;
  6. use App\Service\FilmManager;
  7. use App\Service\TmdbApiService;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\Form\FormFactoryInterface;
  11. use Symfony\Component\HttpFoundation\JsonResponse;
  12. use Symfony\Component\Routing\Attribute\Route;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Security\Http\Attribute\IsGranted;
  16. class VideothequeCrudController extends AbstractController
  17. {
  18. #[Route("/maliste/modifieravoir", name:"maliste_modifier_a_voir", methods: ['PATCH'])]
  19. public function modifierFilmDansListeAction(Request $request, EntityManagerInterface $em, FilmRepository $repo, FilmManager $filmManager): Response
  20. {
  21. $result = null;
  22. $film = $repo->find($request->toArray()['id_film']);
  23. $result = $filmManager->inverseUserWantToView($film);
  24. $em->flush();
  25. /*$resultat = $this->get('serializer')->serialize($film, 'json');*/
  26. return new JsonResponse((object)['newState' => $result]);
  27. }
  28. #[Route("/maliste/modifiervus", name:"maliste_modifier_vus", methods: ['PATCH'])]
  29. public function modifierFilmVusAction(Request $request, FilmRepository $repo, EntityManagerInterface $em, FilmManager $filmManager): Response
  30. {
  31. $result = null;
  32. $film = $repo->find($request->toArray()['id_film']);
  33. $result = $filmManager->inverseUserWhoSeen($film);
  34. $em->flush();
  35. return new JsonResponse((object)['newState' => $result]);
  36. }
  37. #[Route("/ajouter/{idtmdb}", name: "videotheque_ajouter")]
  38. public function ajouterAction(Request $request, FilmManager $filmManager, TmdbApiService $tmdbApiService, string $idtmdb=null): Response
  39. {
  40. if ($idtmdb !== null) {
  41. $film = $tmdbApiService->hydrateFilm($idtmdb);
  42. } else {
  43. $film = new Film;
  44. }
  45. $form = $this->createForm(FilmType::class, $film);
  46. $form->handleRequest($request);
  47. if ($form->isSubmitted() && $form->isValid())
  48. {
  49. $filmManager->addFilm($film);
  50. $this->addFlash('success', 'Le film a été ajouté');
  51. return $this->redirectToRoute('videotheque_voirfilm', array('id'=>$film->getId()));
  52. }
  53. return $this->render('videotheque/ajouter.html.twig', array(
  54. 'form' => $form,
  55. ));
  56. }
  57. #[Route("/addtmdb", name: "videotheque_ajouter_tmdb")]
  58. public function ajouterTmdb(
  59. Request $request,
  60. TmdbApiService $tmdbApiService,
  61. FilmRepository $filmRepository
  62. ): Response
  63. {
  64. $films = [];
  65. $nbFilms = 0;
  66. $nbPages = 0;
  67. $page = (int) $request->query->get('page', 1);
  68. if ($page === 0) {
  69. $page = 1;
  70. }
  71. $recherche = $request->query->get('query', "");
  72. if ($tmdbApiService->query($recherche, $page)) {
  73. $nbFilms = $tmdbApiService->countResults();
  74. $nbPages = $tmdbApiService->countPages();
  75. $films = $tmdbApiService->getFilms();
  76. foreach($films as $key => $film) {
  77. $filmDejaEnBase = $filmRepository->findFilmInImdb($film['data']);
  78. foreach($filmDejaEnBase as $filmInBdd) {
  79. $films[$key]['filmBdd'][] = $filmInBdd;
  80. }
  81. }
  82. }
  83. return $this->render('videotheque/add_tmdb.html.twig', [
  84. 'titre' => 'Ajouter via TheMovieDB.org',
  85. 'films' => $films,
  86. 'nbFilms' => $nbFilms,
  87. 'nbPages' => $nbPages,
  88. 'page' => $page,
  89. 'recherche' => $recherche
  90. ]);
  91. }
  92. #[Route("/modifier/{id}", name: "videotheque_modifier")]
  93. public function modifierAction(Request $request, Film $film, FilmManager $filmManager): Response
  94. {
  95. $form = $this->createForm(FilmType::class, $film);
  96. $form->handleRequest($request);
  97. if ($form->isSubmitted() && $form->isValid())
  98. {
  99. $filmManager->editFilm($film);
  100. $this->addFlash('success', 'Le film a été modifié');
  101. return $this->redirectToRoute('videotheque_voirfilm',array('id'=>$film->getId()));
  102. }
  103. return $this->render('videotheque/modifier.html.twig', array(
  104. 'form' => $form,
  105. ));
  106. }
  107. #[Route("/supprimer/{id}", name: "videotheque_supprimer")]
  108. #[IsGranted("ROLE_ADMIN")]
  109. public function supprimerAction(Request $request, Film $film, FilmManager $filmManager, FormFactoryInterface $ffi): Response
  110. {
  111. $form = $ffi->create();
  112. $form->handleRequest($request);
  113. if ($form->isSubmitted() && $form->isValid())
  114. {
  115. $filmManager->delFilm($film);
  116. $this->addFlash('success', 'Le film '.$film->getTitre().' a bien été supprimé.');
  117. return $this->redirectToRoute('videotheque_liste');
  118. }
  119. return $this->render('videotheque/supprimer.html.twig', array(
  120. 'film' => $film,
  121. 'form' => $form
  122. ));
  123. }
  124. }