src/Controller/PlaylistController.php line 153

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Video;
  4. use App\Entity\Contient;
  5. use App\Entity\Playlist;
  6. use App\Entity\Category;
  7. use App\Form\PlaylistType;
  8. use App\Services\DeviceCheck;
  9. use App\Services\FileUploader;
  10. use App\Repository\VideoRepository;
  11. use App\Repository\ContientRepository;
  12. use App\Repository\PlaylistRepository;
  13. use App\Repository\CategoryRepository;
  14. use App\Repository\UserRepository;
  15. use App\Repository\NoteRepository;
  16. use App\Repository\CommentRepository;
  17. use App\Repository\InstructorRepository;
  18. use App\Entity\Instructor;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Symfony\Component\HttpFoundation\Response;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  23. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  24. use Symfony\Component\HttpKernel\Exception\HttpException;
  25. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  26. #[Route('/playlist')]
  27. class PlaylistController extends AbstractController
  28. {
  29.     #[IsGranted('ROLE_USER_ADMIN',statusCode:'403',message:"don't have access to this ressource")]
  30.     #[Route('/', name: 'app_playlist_index', methods: ['GET'])]
  31.     public function index(PlaylistRepository $playlistRepository): Response
  32.     {
  33.         return $this->render('playlist/list.html.twig', [
  34.             'playlists' => $playlistRepository->findAll(),
  35.         ]);
  36.     }
  37.     #[IsGranted('ROLE_USER_ADMIN',statusCode:'403',message:"don't have access to this ressource")]
  38.     #[Route('/new', name: 'app_playlist_new', methods: ['GET', 'POST'])]
  39.     public function new(Request $request, PlaylistRepository $playlistRepository,FileUploader $fileUploader): Response
  40.     {
  41.         $playlist = new Playlist();
  42.         $form = $this->createForm(PlaylistType::class, $playlist);
  43.         $form->handleRequest($request);
  44.         if ($form->isSubmitted() && $form->isValid()) {
  45.             $imagecname = $fileUploader->up($form->get('image_de_couverture')->getData(),$this->getParameter('image_directory'));
  46.             $playlist->setImageDeCouverture($imagecname);
  47.             $playlistRepository->save($playlist, true);
  48.             return $this->redirectToRoute('app_playlist_index', [], Response::HTTP_SEE_OTHER);
  49.         }
  50.         return $this->renderForm('playlist/new.html.twig', [
  51.             'playlist' => $playlist,
  52.             'form' => $form,
  53.         ]);
  54.     }
  55.     #[IsGranted('ROLE_USER_ADMIN',statusCode:'403',message:"don't have access to this ressource")]
  56.     #[Route('/publish/{id}','app_playlist_publish')]
  57.     public function publish(Playlist $playlist, PlaylistRepository $playlistRepository):Response
  58.     {
  59.         $playlist->setPublish($playlist->isPublish()?false:true);
  60.         $playlistRepository->save($playlist,true);
  61.         return $this->redirectToRoute('app_playlist_show',[
  62.             'id' => $playlist->getId()
  63.         ]);
  64.     }
  65.     #[IsGranted('ROLE_USER_ADMIN',statusCode:'403',message:"don't have access to this ressource")]
  66.     #[Route('/addvid/{id}','app_playlist_add')]
  67.     public function addvideo(Playlist $playlist, PlaylistRepository $playlistRepository,VideoRepository $videoRepository):Response
  68.     {
  69.         return $this->render('playlist/add_video.html.twig', [
  70.             'playlist' => $playlist,
  71.             'video' => $videoRepository->findAll(),
  72.         ]);
  73.     }
  74.     #[IsGranted('ROLE_USER_ADMIN',statusCode:'403',message:"don't have access to this ressource")]
  75.     #[Route('/addthisvid/{id}/{video}','app_playlist_add_video')]
  76.     public function addthisvideo(Playlist $playlist,Video $video, PlaylistRepository $playlistRepository,VideoRepository $videoRepository, ContientRepository $contientRepository):Response
  77.     {
  78.         $contient = new Contient();
  79.         $contient->setVideo($video);
  80.         $contients = $playlist->getContient();
  81.         $i = 1;
  82.         foreach ($contients as $c) {
  83.             $i++;
  84.         }
  85.         $contient->setOrders($i);
  86.         $contientRepository->save($contient,true);
  87.         $playlist->addContient($contient);        
  88.         $playlistRepository->save($playlist,true);
  89.         return $this->render('playlist/add_video.html.twig', [
  90.             'playlist' => $playlist,
  91.             'video' => $videoRepository->findAll(),
  92.         ]);
  93.     }
  94.     #[IsGranted('ROLE_USER_ADMIN',statusCode:'403',message:"don't have access to this ressource")]
  95.     #[Route('/{id}/category/{category}', name: 'app_playlist_set_category', methods: ['GET'])]
  96.     public function setCategory(Playlist $playlist, Category $category, PlaylistRepository $playlistRepository): Response
  97.     {
  98.         $playlist->setCategory($category);
  99.         $playlistRepository->save($playlist, true);
  100.         return $this->redirectToRoute('app_playlist_show', ['id' => $playlist->getId()], Response::HTTP_SEE_OTHER);
  101.     }
  102.     #[IsGranted('ROLE_USER_ADMIN',statusCode:'403',message:"don't have access to this ressource")]
  103.     #[Route('/{id}/category-remove', name: 'app_playlist_remove_category', methods: ['GET'])]
  104.     public function removeCategory(Playlist $playlist, PlaylistRepository $playlistRepository): Response
  105.     {
  106.         $playlist->setCategory(null);
  107.         $playlistRepository->save($playlist, true);
  108.         return $this->redirectToRoute('app_playlist_show', ['id' => $playlist->getId()], Response::HTTP_SEE_OTHER);
  109.     }
  110.     #[IsGranted('ROLE_USER_ADMIN',statusCode:'403',message:"don't have access to this ressource")]
  111.     #[Route('/addinstructor/{id}','app_playlist_add_instructor')]
  112.     public function addinstructor(Playlist $playlist, PlaylistRepository $playlistRepository, InstructorRepository $instructorRepository):Response
  113.     {
  114.         return $this->render('playlist/add_instructor.html.twig', [
  115.             'playlist' => $playlist,
  116.             'instructors' => $instructorRepository->findAll(),
  117.         ]);
  118.     }
  119.     #[IsGranted('ROLE_USER_ADMIN',statusCode:'403',message:"don't have access to this ressource")]
  120.     #[Route('/addthisinstructor/{id}/{instructor}','app_playlist_add_this_instructor')]
  121.     public function addthisinstructor(Playlist $playlist, Instructor $instructor, PlaylistRepository $playlistRepository, InstructorRepository $instructorRepository):Response
  122.     {
  123.         if (!$playlist->getInstructors()->contains($instructor)) {
  124.             $playlist->addInstructor($instructor);
  125.             $playlistRepository->save($playlist, true);
  126.         }
  127.         return $this->redirectToRoute('app_playlist_add_instructor', [
  128.             'id' => $playlist->getId()
  129.         ], Response::HTTP_SEE_OTHER);
  130.     }
  131.     #[IsGranted('ROLE_USER',statusCode:'403',message:"don't have access to this ressource")]
  132.     #[Route('/{id}', name: 'app_playlist_show', methods: ['GET'])]
  133.     public function show(Playlist $playlist,UserRepository $userRepository,AuthorizationCheckerInterface $authorizationChecker, CategoryRepository $categoryRepository): Response
  134.     {   
  135.         $user_connected = $this->getUser();
  136.         $user= $userRepository->findOneBy(['phone' => $user_connected->getUserIdentifier()]);
  137.         $userPlaylist =$user->getUsersPlayslists();
  138.         $found = false;
  139.         foreach ($userPlaylist as $up) {
  140.             if ($up->getPlaylist() == $playlist) {
  141.                 $found = true;
  142.             }
  143.         }
  144.         if (!$authorizationChecker->isGranted('ROLE_USER_ADMIN')) {
  145.             if ($found === false) {
  146.                 throw new HttpException('403','not found');
  147.             }
  148.         } 
  149.         return $this->render('playlist/show.html.twig', [
  150.             'playlist' => $playlist,
  151.             'categories' => $categoryRepository->findAll(),
  152.         ]);
  153.     }
  154.     #[IsGranted('ROLE_USER_ADMIN',statusCode:'403',message:"don't have access to this ressource")]
  155.     #[Route('/{id}/edit', name: 'app_playlist_edit', methods: ['GET', 'POST'])]
  156.     public function edit(Request $request, Playlist $playlist, PlaylistRepository $playlistRepository): Response
  157.     {
  158.         $form = $this->createForm(PlaylistType::class, $playlist);
  159.         $form->handleRequest($request);
  160.         if ($form->isSubmitted() && $form->isValid()) {
  161.             $playlistRepository->save($playlist, true);
  162.             return $this->redirectToRoute('app_playlist_index', [], Response::HTTP_SEE_OTHER);
  163.         }
  164.         return $this->renderForm('playlist/edit.html.twig', [
  165.             'playlist' => $playlist,
  166.             'form' => $form,
  167.         ]);
  168.     }
  169.     #[IsGranted('ROLE_USER_ADMIN',statusCode:'403',message:"don't have access to this ressource")]
  170.     #[Route('/{id}', name: 'app_playlist_delete', methods: ['POST'])]
  171.     public function delete(Request $request, Playlist $playlist, PlaylistRepository $playlistRepository): Response
  172.     {
  173.         if ($this->isCsrfTokenValid('delete'.$playlist->getId(), $request->request->get('_token'))) {
  174.             $playlistRepository->remove($playlist, true);
  175.         }
  176.         return $this->redirectToRoute('app_playlist_index', [], Response::HTTP_SEE_OTHER);
  177.     }
  178.     #[IsGranted('ROLE_USER',statusCode:'403',message:"don't have access to this ressource")]
  179.     #[Route('/{id}/load/{video}','load_this_video')]
  180.     public function load_playlist_video(Playlist $playlist,Video $video,DeviceCheck $deviceCheck,UserRepository $userRepository,AuthorizationCheckerInterface $authorizationChecker,PlaylistRepository $playlistRepository,ContientRepository $contientRepository,NoteRepository $noteRepository,CommentRepository $commentRepository):Response
  181.     {
  182.         $user_connected = $this->getUser();
  183.         $user= $userRepository->findOneBy(['phone' => $user_connected->getUserIdentifier()]);
  184.         $userVideo =$user->getUserVideos();
  185.         $found = false;
  186.         foreach ($userVideo as $uv) {
  187.             if ($uv->getVideo() == $video) {
  188.                 $found = true;
  189.             }
  190.         }
  191.         if (!$authorizationChecker->isGranted('ROLE_USER_ADMIN')) {
  192.             if ($found === false) {
  193.                 throw new HttpException('403','not found');
  194.             }
  195.         } 
  196.         $device =  $deviceCheck->check();
  197.         $supported =true;
  198.         if ($device['is_mobile'] && $device['mobile_os'] == 'iOS') {
  199.             $supported =false;
  200.         }
  201.         $next = 0;
  202.         $order = $playlistRepository->findOrder($playlist->getId(),$video->getId());
  203.         $next_video = $contientRepository->findOneBynextOrder($playlist->getId(),($order + 1));
  204.         if ($next_video) {
  205.             $next = $next_video->getVideo()->getId();
  206.         }
  207.         $basic = false;
  208.         // if(intval($deviceCheck->getBrowser()['version']) < 55){
  209.         //     $basic = true;
  210.         // }
  211.         $advanced = $deviceCheck->supportsAdvancedPlayer();
  212.         $basic    = ! $advanced;
  213.         
  214.         // Récupérer toutes les notes de l'utilisateur pour cette vidéo
  215.         $notes = $noteRepository->findAllByUserAndVideo($user, $video);
  216.         
  217.         // Récupérer les commentaires de la vidéo
  218.         $comments = $commentRepository->findByVideo($video);
  219.         
  220.         return $this->render('playlist/load_video.html.twig',[
  221.             'playlist' => $playlist,
  222.             'video' => $video,
  223.             'supported' => $supported,
  224.             'next' => $next,
  225.             'basic' => $basic,
  226.             'notes' => $notes,
  227.             'comments' => $comments,
  228.             'current_user' => $user
  229.         ]);
  230.     }
  231.     
  232. }