src/Controller/VirtualClassroomController.php line 433

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Evenement;
  4. use App\Entity\InscritSession;
  5. use App\Entity\Qcmcalssroom;
  6. use App\Entity\Signature;
  7. use App\Entity\Support;
  8. use App\Entity\Videoclassroom;
  9. use App\Entity\VirtualClassroom;
  10. use App\Form\VirtualClassroomType;
  11. use App\Repository\EvenementRepository;
  12. use App\Repository\InscritSessionRepository;
  13. use App\Repository\QcmcalssroomRepository;
  14. use App\Repository\SettingRepository;
  15. use App\Repository\SignatureRepository;
  16. use App\Repository\SupportRepository;
  17. use App\Repository\SuspensionInscritRepository;
  18. use App\Repository\UserRepository;
  19. use App\Repository\VideoclassroomRepository;
  20. use App\Repository\VirtualClassroomRepository;
  21. use DateTime;
  22. use Doctrine\ORM\EntityManagerInterface;
  23. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  24. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  25. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  26. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  27. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  28. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  29. use Symfony\Component\HttpFoundation\Request;
  30. use Symfony\Component\HttpFoundation\Response;
  31. use Symfony\Component\Mailer\MailerInterface;
  32. use Symfony\Component\Mime\Address;
  33. use Symfony\Component\Routing\Annotation\Route;
  34. use DateTimeZone;
  35. use Symfony\Component\String\Slugger\SluggerInterface;
  36. #[Route('/virtual/classroom')]
  37. class VirtualClassroomController extends AbstractController
  38. {
  39.     private $fromAddress;
  40.     public function __construct(
  41.         ParameterBagInterface $parameterBag  // Injection du service ParameterBagInterface
  42.     ) {
  43.         $this->fromAddress $parameterBag->get('mailer_from_address');
  44.     }
  45.     #[Route('/sendEmail/{id}'name'save_sendEmail')]
  46.     public function sendEmail(VirtualClassroomRepository $virtualClassroomRepository,MailerInterface $mailer,InscritSessionRepository $inscritSessionRepository,
  47.                                       SignatureRepository $signatureRepository,
  48.                                       Request $request,
  49.                                       QcmcalssroomRepository $qcmcalssroomRepository,
  50.                                       VideoclassroomRepository $videoclassroomRepository,
  51.                                       SupportRepository $supportRepository,
  52.                                       UserRepository $userRepository,
  53.                                       SettingRepository $settingRepository,
  54.                                       InscritSession $inscritSession
  55.     ): Response {
  56.         $date = new \DateTime('now', new DateTimeZone('Africa/Tunis'));
  57.         $session=$inscritSession->getSession();
  58.         $emailinscrit=$inscritSession->getEmail();
  59.         $objet=$request->request->get('subject');
  60.         $message=$request->request->get('message');
  61.         $idclasse=$request->request->get('idclasse');
  62.         $virtual=$virtualClassroomRepository->find($idclasse);
  63.         $setting=$settingRepository->find(1);
  64.         try{
  65.             $email = (new TemplatedEmail())
  66.                 ->from(new Address($this->fromAddress'Sip Academy'))  // Utilisation de Address pour inclure l'email et le nom
  67.                 ->to($emailinscrit)
  68.                 ->subject($objet)
  69.                 ->htmlTemplate(
  70.                     'virtual_classroom/emailInscrit.html.twig'
  71.                 )
  72.                 ->context([
  73.                   'setting'=>$setting,'message'=>$message
  74.                 ]);
  75.             $mailer->send($email);}
  76.         catch (\Exception $e) {
  77.             $this->addFlash('error'"Une erreur s'est produite lors de l'envoi de l'e-mail..");
  78.             // Redirect to the specified route
  79.             return $this->redirectToRoute('app_virtual_classroom_signatures', ['id' => $idclasse], Response::HTTP_SEE_OTHER);
  80.         }
  81.             // Rediriger vers une autre page après sauvegarde
  82.             return $this->redirectToRoute('app_virtual_classroom_signatures', ['id' => $idclasse], Response::HTTP_SEE_OTHER);
  83.         }
  84.     #[Route('/deletesignatureFormateur/{id}'name'app_deletesignatureFormateur')]
  85.     public function deletesignatureFormateur(SignatureRepository $signatureRepositoryRequest $requestQcmcalssroomRepository $qcmcalssroomRepositoryVideoclassroomRepository $videoclassroomRepositorySupportRepository $supportRepositoryUserRepository $userRepositorySettingRepository $settingRepositorySignature $signature): Response
  86.     {
  87.         $student $signature->getUser();
  88.         $classe=$signature->getClassevirtuelle();
  89.         $signature=$signatureRepository->findOneBy(['user'=>$student,'classevirtuelle'=>$classe]);
  90.         $signatureRepository->remove($signaturetrue);
  91.         // Rediriger vers une autre page après sauvegarde
  92.         return $this->redirectToRoute('app_virtual_classroom_index_formateur', ['id'=>$classe->getSession()->getId()], Response::HTTP_SEE_OTHER);
  93.     }
  94.     #[Route('/save-signatureFormateur/{id}/{idstudent}'name'save_signatureFormateur')]
  95.     public function saveSignFormateur(InscritSessionRepository $inscritSessionRepository,
  96.         SignatureRepository $signatureRepository,
  97.                             $idstudent,
  98.         Request $request,
  99.         QcmcalssroomRepository $qcmcalssroomRepository,
  100.         VideoclassroomRepository $videoclassroomRepository,
  101.         SupportRepository $supportRepository,
  102.         UserRepository $userRepository,
  103.         SettingRepository $settingRepository,
  104.         VirtualClassroom $virtualClassroom
  105.     ): Response {
  106.         $date = new \DateTime('now', new DateTimeZone('Africa/Tunis'));
  107.         $student $userRepository->find($idstudent);
  108.         $oldsignature $signatureRepository->findOneBy(['user' => $student'classevirtuelle' => $virtualClassroom]);
  109.         $emailstudet=$student->getEmail();
  110.         $session=$virtualClassroom->getSession();
  111.         $inscrit=$inscritSessionRepository->findOneBy(['session'=>$session,'email'=>$emailstudet]);
  112.         // Calculate the start and end date/time of the virtual class
  113. //        $classeDate = $virtualClassroom->getDate();
  114. //        $classeHeureDebut = $virtualClassroom->getHeureDebut();
  115. //        $classeHeureFin = $virtualClassroom->getHeureFin();
  116. //
  117. //        $classeDateHeureDebut = (new \DateTime($classeDate->format('Y-m-d') . ' ' . $classeHeureDebut->format('H:i:s')))
  118. //            ->setTimezone(new DateTimeZone('Africa/Tunis'));
  119. //        $classeDateHeureFin = (new \DateTime($classeDate->format('Y-m-d') . ' ' . $classeHeureFin->format('H:i:s')))
  120. //            ->setTimezone(new DateTimeZone('Africa/Tunis'));
  121. //
  122. //        // Add 24 hours to the end date and time
  123. //        $classeDateHeureFinPlus24h = clone $classeDateHeureFin;
  124. //        $classeDateHeureFinPlus24h->add(new \DateInterval('PT24H'));
  125. //
  126. //        // Check if the current date and time is after the end date plus 24 hours
  127. //        if ($date > $classeDateHeureFinPlus24h) {
  128. //            $this->addFlash('danger', 'Vous ne pouvez pas signer, la classe virtuelle est terminée depuis plus de 24 heures.');
  129. //            return $this->redirectToRoute('app_virtual_classroom_index_formateur', ['id' => $virtualClassroom->getSession()->getId()], Response::HTTP_SEE_OTHER);
  130. //        }
  131.         if ($oldsignature) {
  132.             $this->addFlash('success''Signature existe déjà!');
  133.             return $this->redirectToRoute('app_virtual_classroom_index_formateur', ['id' => $virtualClassroom->getSession()->getId()], Response::HTTP_SEE_OTHER);
  134.         } else {
  135.             $newsignature = new Signature();
  136.             $newsignature->setUser($student);
  137.             if($inscrit){
  138.                 $newsignature->setInscrit($inscrit);
  139.             }
  140.             $newsignature->setClassevirtuelle($virtualClassroom);
  141.             $newsignature->setDate($date);
  142.             $signatureData $request->request->get('signatureData');
  143.             // Décoder l'image base64 et sauvegarder sur le serveur
  144.             if ($signatureData) {
  145.                 $signatureData str_replace('data:image/png;base64,'''$signatureData);
  146.                 $signatureData str_replace(' ''+'$signatureData);
  147.                 $signatureImage base64_decode($signatureData);
  148.                 // Créer un nom de fichier unique pour la signature
  149.                 $filename sprintf('%s-%s.png'$idstudenttime());
  150.                 // Utiliser le chemin spécifié dans parameters.yaml
  151.                 $filePath $this->getParameter('signature_directory') . '/' $filename;
  152.                 file_put_contents($filePath$signatureImage);
  153.                 // Sauvegarder uniquement le nom de fichier dans la base de données
  154.                 $newsignature->setSignature($filename);
  155.                 $signatureRepository->save($newsignaturetrue);
  156.                 $this->addFlash('success''Signature sauvegardée avec succès !');
  157.             }
  158.             // Rediriger vers une autre page après sauvegarde
  159.             return $this->redirectToRoute('app_virtual_classroom_index_formateur', ['id' => $virtualClassroom->getSession()->getId()], Response::HTTP_SEE_OTHER);
  160.         }
  161.     }
  162.     #[Route('/signatures/{id}'name'app_virtual_classroom_signatures'methods: ['GET'])]
  163.     #[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
  164.     public function signatures(
  165.         SignatureRepository $signatureRepository,
  166.         InscritSessionRepository $inscritSessionRepository,
  167.         UserRepository $userRepository,
  168.         SettingRepository $settingRepository,
  169.         VirtualClassroom $virtualClassroom
  170.     ): Response {
  171.         $id $this->getUser()->getId();
  172.         $user $userRepository->find($id);
  173.         $setting $settingRepository->find(1);
  174.         // Récupérer tous les inscrits liés à la classe virtuelle via une session ou autre champ
  175.         $inscrits $inscritSessionRepository->findBy(['session' => $virtualClassroom->getSession(),'isAffected'=>true]);
  176.         $totalInscrits count($inscrits);
  177.         // Initialiser une liste pour stocker les signatures et les informations des inscrits
  178.         $inscritsWithSignatures = [];
  179.         $inscritsAvecSignature 0;
  180.         foreach ($inscrits as $inscrit) {
  181.             // Chercher la signature de chaque inscrit
  182.             $signature $signatureRepository->findOneBy([
  183.                 'classevirtuelle' => $virtualClassroom,
  184.                 'inscrit' => $inscrit
  185.             ]);
  186.             if ($signature) {
  187.                 $inscritsAvecSignature++;
  188.             }
  189.             // Ajouter l'inscrit, la signature et la date de la signature (si elle existe) au tableau
  190.             $inscritsWithSignatures[] = [
  191.                 'inscrit' => $inscrit,
  192.                 'signature' => $signature $signature->getSignature() : null,
  193.                 'date' => $signature $signature->getDate() : null,
  194.             ];
  195.         }
  196.         // Calculer le nombre d'inscrits sans signature
  197.         $inscritsSansSignature $totalInscrits $inscritsAvecSignature;
  198.         return $this->render('virtual_classroom/signatures.html.twig', [
  199.             'virtual_classroom' => $virtualClassroom,
  200.             'setting' => $setting,
  201.             'user' => $user,
  202.             'inscritsWithSignatures' => $inscritsWithSignatures,
  203.             'totalInscrits' => $totalInscrits,
  204.             'inscritsAvecSignature' => $inscritsAvecSignature,
  205.             'inscritsSansSignature' => $inscritsSansSignature
  206.         ]);
  207.     }
  208.     #[Route('/deletesignature/{id}'name'app_deletesignature')]
  209.     public function deletesignature(InscritSessionRepository $inscritSessionRepository,SignatureRepository $signatureRepositoryRequest $requestQcmcalssroomRepository $qcmcalssroomRepositoryVideoclassroomRepository $videoclassroomRepositorySupportRepository $supportRepositoryUserRepository $userRepositorySettingRepository $settingRepositorySignature $signature): Response
  210.     {
  211.         $student $signature->getUser();
  212. $classe=$signature->getClassevirtuelle();
  213. $session=$classe->getSession();
  214.         $emailstudet=$student->getEmail();
  215.         $signature=$signatureRepository->findOneBy(['user'=>$student,'classevirtuelle'=>$classe]);
  216.         $inscrit=$inscritSessionRepository->findOneBy(['session'=>$session,'email'=>$emailstudet]);
  217.         if ($inscrit ){
  218.             $count=$inscrit->getCount();
  219. if($count 0){
  220.             $inscrit->setCount($count 1);}
  221.             $inscritSessionRepository->save($inscrittrue);
  222.         }
  223.         $signatureRepository->remove($signaturetrue);
  224.         // Rediriger vers une autre page après sauvegarde
  225.         return $this->redirectToRoute('app_virtual_classroom_index_admin', ['id'=>$classe->getSession()->getId()], Response::HTTP_SEE_OTHER);
  226.     }
  227.     #[Route('/save-signature/{id}/{idstudent}'name'save_signature')]
  228.     public function save(InscritSessionRepository $inscritSessionRepository,
  229.                          SignatureRepository $signatureRepository,
  230.                                                   $idstudent,
  231.                          Request $request,
  232.                          QcmcalssroomRepository $qcmcalssroomRepository,
  233.                          VideoclassroomRepository $videoclassroomRepository,
  234.                          SupportRepository $supportRepository,
  235.                          UserRepository $userRepository,
  236.                          SettingRepository $settingRepository,
  237.                          VirtualClassroom $virtualClassroom
  238.     ): Response {
  239.         $date = new \DateTime('now', new DateTimeZone('Africa/Tunis'));
  240.         $student $userRepository->find($idstudent);
  241.         $emailstudet=$student->getEmail();
  242.         $session=$virtualClassroom->getSession();
  243.         $inscrit=$inscritSessionRepository->findOneBy(['session'=>$session,'email'=>$emailstudet]);
  244.         if ($inscrit){
  245.             $count=$inscrit->getCount();
  246.             if($count == null){
  247.                 $inscrit->setCount(0);
  248.                 $inscritSessionRepository->save($inscrittrue);
  249.             }
  250.             $inscrit->setCount($count 1);
  251.             $inscritSessionRepository->save($inscrittrue);
  252.         }
  253.         $oldsignature $signatureRepository->findOneBy(['user' => $student'classevirtuelle' => $virtualClassroom]);
  254. //        // Calculate the start and end date/time of the virtual class
  255. //        $classeDate = $virtualClassroom->getDate();
  256. //        $classeHeureDebut = $virtualClassroom->getHeureDebut();
  257. //        $classeHeureFin = $virtualClassroom->getHeureFin();
  258. //
  259. //        $classeDateHeureDebut = (new \DateTime($classeDate->format('Y-m-d') . ' ' . $classeHeureDebut->format('H:i:s')))
  260. //            ->setTimezone(new DateTimeZone('Africa/Tunis'));
  261. //        $classeDateHeureFin = (new \DateTime($classeDate->format('Y-m-d') . ' ' . $classeHeureFin->format('H:i:s')))
  262. //            ->setTimezone(new DateTimeZone('Africa/Tunis'));
  263. //
  264. //        // Add 24 hours to the end date and time
  265. //        $classeDateHeureFinPlus24h = clone $classeDateHeureFin;
  266. //        $classeDateHeureFinPlus24h->add(new \DateInterval('PT24H'));
  267. //
  268. //        // Check if the current date and time is after the end date plus 24 hours
  269. //        if ($date > $classeDateHeureFinPlus24h) {
  270. //            $this->addFlash('danger', 'Vous ne pouvez pas signer, la classe virtuelle est terminée depuis plus de 24 heures.');
  271. //            return $this->redirectToRoute('app_virtual_classroom_index_formateur', ['id' => $virtualClassroom->getSession()->getId()], Response::HTTP_SEE_OTHER);
  272. //        }
  273.         if ($oldsignature) {
  274.             $this->addFlash('success''Signature existe déjà!');
  275.             return $this->redirectToRoute('app_virtual_classroom_index_admin', ['id' => $virtualClassroom->getSession()->getId()], Response::HTTP_SEE_OTHER);
  276.         } else {
  277.             $newsignature = new Signature();
  278.             $newsignature->setUser($student);
  279.             if($inscrit){
  280.                 $newsignature->setInscrit($inscrit);
  281.             }
  282.             $newsignature->setClassevirtuelle($virtualClassroom);
  283.             $newsignature->setDate($date);
  284.             $signatureData $request->request->get('signatureData');
  285.             // Décoder l'image base64 et sauvegarder sur le serveur
  286.             if ($signatureData) {
  287.                 $signatureData str_replace('data:image/png;base64,'''$signatureData);
  288.                 $signatureData str_replace(' ''+'$signatureData);
  289.                 $signatureImage base64_decode($signatureData);
  290.                 // Créer un nom de fichier unique pour la signature
  291.                 $filename sprintf('%s-%s.png'$idstudenttime());
  292.                 // Utiliser le chemin spécifié dans parameters.yaml
  293.                 $filePath $this->getParameter('signature_directory') . '/' $filename;
  294.                 file_put_contents($filePath$signatureImage);
  295.                 // Sauvegarder uniquement le nom de fichier dans la base de données
  296.                 $newsignature->setSignature($filename);
  297.                 $signatureRepository->save($newsignaturetrue);
  298.                 $this->addFlash('success''Signature sauvegardée avec succès !');
  299.             }
  300.             // Rediriger vers une autre page après sauvegarde
  301.             return $this->redirectToRoute('app_virtual_classroom_index_admin', ['id' => $virtualClassroom->getSession()->getId()], Response::HTTP_SEE_OTHER);
  302.         }
  303.     }
  304.         #[Route('/signature/{id}/{idstudent}'name'app_virtual_classroom_signature'methods: ['GET'])]
  305.     #[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
  306.     public function signature(SignatureRepository $signatureRepository,$idstudent,QcmcalssroomRepository $qcmcalssroomRepository,VideoclassroomRepository $videoclassroomRepository,SupportRepository $supportRepository,UserRepository $userRepository,SettingRepository $settingRepository,VirtualClassroom $virtualClassroom): Response
  307.     {
  308.         $student=$userRepository->find($idstudent);
  309.         $qcms=$qcmcalssroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
  310.         $videos=$videoclassroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
  311.         $supports $supportRepository->findBy(['virtualclassroom'=>$virtualClassroom]);
  312. //            dd($supports);
  313.         $id =  $this->getUser()->getId();
  314.         $user=$userRepository->find($id);
  315.         $setting=$settingRepository->find(1);
  316.         $signature=$signatureRepository->findOneBy(['user'=>$student,'classevirtuelle'=>$virtualClassroom]);
  317.         return $this->render('virtual_classroom/signature.html.twig', [
  318.             'virtual_classroom' => $virtualClassroom,
  319.             'setting'=>$setting,
  320.             'user'=>$user,
  321.             'support'=>$supports,'qcms'=>$qcms,'videos'=>$videos,
  322.             'signature'=>$signature
  323.         ]);
  324.     }
  325.     #[Route('/stagiaire'name'app_virtual_classroom_index_stagiaire'methods: ['GET'])]
  326.     #[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
  327.     public function indexStagiaire(EvenementRepository $evenementRepository,UserRepository $userRepository,SettingRepository $settingRepository,VirtualClassroomRepository $virtualClassroomRepository): Response
  328.     {
  329.         $id =  $this->getUser()->getId();
  330.         $user=$userRepository->find($id);
  331.         $setting=$settingRepository->find(1);
  332.         $inscritsessions=$user->getInscritSessions();
  333.        // dd($inscritsessions);
  334.        $tab=array();
  335.         foreach ($inscritsessions as $session){
  336.             $virtualClassroom $session->getSession()->getId();
  337.             // Vérifier si la virtualClassroom existe et si elle n'est pas déjà ajoutée au tableau
  338.                 array_push($tab$virtualClassroom);
  339.         }
  340.         return $this->render('virtual_classroom/indexStagiaire.html.twig', [
  341.             'virtual_classrooms' => $virtualClassroomRepository->findAll(),
  342.             'setting'=>$setting,
  343.             'user'=>$user,
  344.             'tab'=>$tab
  345.         ]);
  346.     }
  347.     #[Route('/classvirtuel/{id}'name'app_virtual_classroom_index_admin'methods: ['GET'])]
  348.     #[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
  349.     public function indexvirtuelAdmin(InscritSessionRepository $inscritSessionRepository,SignatureRepository $signatureRepository,Evenement $evenement,UserRepository $userRepository,SettingRepository $settingRepository,VirtualClassroomRepository $virtualClassroomRepository): Response
  350.     {
  351.         $id =  $this->getUser()->getId();
  352.         $user=$userRepository->find($id);
  353.         $setting=$settingRepository->find(1);
  354.         $virtualClassrooms=$virtualClassroomRepository->findBy(['session'=>$evenement]);
  355.         $signaturesByClassroom = [];
  356.         foreach ($virtualClassrooms as $classroom) {
  357.             $signature $signatureRepository->findSignatureByUserAndClassroom($user$classroom);
  358.             $signaturesByClassroom[$classroom->getId()] = $signature// Stocker l'objet Signature
  359.         }
  360.         $testInscrit=false;
  361.         $inscrit=$inscritSessionRepository->findOneBy(['session'=>$evenement,'isAffected'=>true]);
  362.         if($inscrit){
  363.             $testInscrit=true;
  364.         }
  365. // Vérification des rôles
  366.         $roles $user->getRoles();
  367.         if (in_array('ROLE_ADMIN'$roles) || in_array('ROLE_COACH'$roles)) {
  368.             $testInscrit true;
  369.         }
  370.         //dd( $testInscrit,$inscrit);
  371.         $virtuals $virtualClassroomRepository->findBy(
  372.             ['session' => $evenement],
  373.             ['date' => 'DESC'// Juste une base rapide, on retrie proprement après
  374.         );
  375. // Trie proprement date + heureDebut
  376.         usort($virtuals, function ($a$b) {
  377.             $aDateTime = (clone $a->getDate())->setTime(
  378.                 (int)$a->getHeureDebut()->format('H'),
  379.                 (int)$a->getHeureDebut()->format('i'),
  380.                 (int)$a->getHeureDebut()->format('s')
  381.             );
  382.             $bDateTime = (clone $b->getDate())->setTime(
  383.                 (int)$b->getHeureDebut()->format('H'),
  384.                 (int)$b->getHeureDebut()->format('i'),
  385.                 (int)$b->getHeureDebut()->format('s')
  386.             );
  387.             return $bDateTime <=> $aDateTime;
  388.         });
  389.         return $this->render('virtual_classroom/index.html.twig', [
  390.             'virtual_classrooms' => $virtuals,
  391.             'setting'=>$setting,
  392.             'user'=>$user,'signaturesByClassroom' => $signaturesByClassroom,
  393.             'testInscrit'=>$testInscrit,'session'=>$evenement
  394.         ]);
  395.     }
  396.     #[Route('/formateur/{id}'name'app_virtual_classroom_index_formateur'methods: ['GET'])]
  397.     #[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_PARTNER') ")]
  398.     public function indexFormateur(InscritSessionRepository $inscritSessionRepository,SignatureRepository $signatureRepository,Evenement $evenement,UserRepository $userRepository,SettingRepository $settingRepository,VirtualClassroomRepository $virtualClassroomRepository): Response
  399.     {
  400.         $id =  $this->getUser()->getId();
  401.         $user=$userRepository->find($id);
  402.         $setting=$settingRepository->find(1);
  403.        // $this->addFlash('error', "Une erreur s'est produite lors de l'envoi de l'e-mail..");
  404.         $virtualClassrooms=$virtualClassroomRepository->findBy(['session'=>$evenement]);
  405.         $signaturesByClassroom = [];
  406.         foreach ($virtualClassrooms as $classroom) {
  407.             $signature $signatureRepository->findSignatureByUserAndClassroom($user$classroom);
  408.             $signaturesByClassroom[$classroom->getId()] = $signature// Stocker l'objet Signature
  409.         }
  410.             $testInscrit true;
  411.         $virtuals $virtualClassroomRepository->findBy(
  412.             ['session' => $evenement],
  413.             ['date' => 'DESC'// Juste une base rapide, on retrie proprement après
  414.         );
  415. // Trie proprement date + heureDebut
  416.         usort($virtuals, function ($a$b) {
  417.             $aDateTime = (clone $a->getDate())->setTime(
  418.                 (int)$a->getHeureDebut()->format('H'),
  419.                 (int)$a->getHeureDebut()->format('i'),
  420.                 (int)$a->getHeureDebut()->format('s')
  421.             );
  422.             $bDateTime = (clone $b->getDate())->setTime(
  423.                 (int)$b->getHeureDebut()->format('H'),
  424.                 (int)$b->getHeureDebut()->format('i'),
  425.                 (int)$b->getHeureDebut()->format('s')
  426.             );
  427.             return $bDateTime <=> $aDateTime;
  428.         });
  429.         return $this->render('virtual_classroom/index.html.twig', [
  430.             'virtual_classrooms' => $virtuals,
  431.             'setting'=>$setting,
  432.             'user'=>$user,'session'=>$evenement,'signaturesByClassroom' => $signaturesByClassroom,
  433.             'testInscrit'=>$testInscrit,'session'=>$evenement
  434.         ]);
  435.     }
  436.     #[Route('/'name'app_virtual_classroom_index'methods: ['GET'])]
  437.     #[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
  438.     public function index(InscritSessionRepository $inscritSessionRepository,UserRepository $userRepository,SettingRepository $settingRepository,VirtualClassroomRepository $virtualClassroomRepository): Response
  439.     {
  440.         $id =  $this->getUser()->getId();
  441.         $user=$userRepository->find($id);
  442.         $setting=$settingRepository->find(1);
  443.         $testInscrit=false;
  444. // Vérification des rôles
  445.         $roles $user->getRoles();
  446.         if (in_array('ROLE_ADMIN'$roles) || in_array('ROLE_COACH'$roles)) {
  447.             $testInscrit true;
  448.         }
  449.         return $this->render('virtual_classroom/index.html.twig', [
  450.             'virtual_classrooms' => $virtualClassroomRepository->findAll(),
  451.             'setting'=>$setting,
  452.             'user'=>$user,
  453.             'testInscrit'=>$testInscrit
  454.         ]);
  455.     }
  456.     #[Route('/newclassroom'name'app_virtual_classroom_newclassroom'methods: ['GET''POST'])]
  457.     #[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
  458.     public function newclasse(QcmcalssroomRepository $qcmcalssroomRepository,SupportRepository $supportRepository,VideoclassroomRepository $videoclassroomRepository,InscritSessionRepository $inscritSessionRepository,MailerInterface $mailer,EvenementRepository $evenementRepository,EntityManagerInterface $entityManager,SluggerInterface $slugger,UserRepository $userRepository,SettingRepository $settingRepository,Request $requestVirtualClassroomRepository $virtualClassroomRepository): Response
  459.     {
  460.         $dateclasse = new \DateTime('now', new DateTimeZone('Africa/Tunis'));
  461.         $id =  $this->getUser()->getId();
  462.         $user=$userRepository->find($id);
  463.         $setting=$settingRepository->find(1);
  464.         $virtualClassroom = new VirtualClassroom();
  465.         $virtualClassroom->setFormateur($user);
  466. //        $support = new Support();
  467.         $idsession=  $request->request->get('session');
  468.        $session=$evenementRepository->find($idsession);
  469.        $virtualClassroom->setSession($session);
  470.         $inscrits=$inscritSessionRepository->findBy(['isAffected'=>true,'session'=>$session]);
  471.         $tabinscrits=array();
  472. //        foreach ($inscrits as $u){
  473. //            array_push($tabinscrits, $u->getEmail() );
  474. //
  475. //        }
  476.         foreach ($inscrits as $u) {
  477.             $email trim($u->getEmail()); // Supprime les espaces ou les caractères \n et \r
  478.             if (filter_var($emailFILTER_VALIDATE_EMAIL)) {
  479.                 array_push($tabinscrits$email);
  480.             }
  481.         }
  482.         $titre=  $request->request->get('titre');
  483.         $virtualClassroom->setTitre($titre);
  484.         $lienmeet=  $request->request->get('lienmeet');
  485.         $virtualClassroom->setLienmeet($lienmeet);
  486.         $drive=  $request->request->get('drive');
  487.         $virtualClassroom->setDrive($drive);
  488.         $dateInput $request->request->get('date');          // ex: 2026-05-22
  489.         $heureDebutInput $request->request->get('heureDebut'); // ex: 14:00
  490.         $heureFinInput $request->request->get('heureFin');     // ex: 16:00
  491.         $date = new \DateTime($dateInput, new \DateTimeZone('Africa/Tunis'));
  492.         $heureDebut = new \DateTime(
  493.             $dateInput ' ' $heureDebutInput,
  494.             new \DateTimeZone('Africa/Tunis')
  495.         );
  496.         $heureFin = new \DateTime(
  497.             $dateInput ' ' $heureFinInput,
  498.             new \DateTimeZone('Africa/Tunis')
  499.         );
  500.         $virtualClassroom->setDate($date);
  501.         $virtualClassroom->setHeureDebut($heureDebut);
  502.         $virtualClassroom->setHeureFin($heureFin);
  503.         $description=  $request->request->get('description');
  504.         $virtualClassroom->setDescription($description);
  505. //SUPPORT
  506.         $nbr=  $request->request->get('nbrc_a');
  507.         if ($nbr == 0) {
  508. //            $pdf = $request->request->get('pdf0');
  509.             $titre $request->request->get('titres0');
  510.             $pdf $request->files->get('pdf0');
  511.             if ($pdf) {
  512.                 $pr = new Support();
  513.                 $pr->setTitre($titre);
  514.                 $pr->setVirtualclassroom($virtualClassroom);
  515.                 $originalLogoname pathinfo($pdf->getClientOriginalName(), PATHINFO_FILENAME);
  516.                 $newLogoname $originalLogoname '-' uniqid() . '.' $pdf->guessExtension();
  517.                 // Move the file to the directory where brochures are stored
  518.                 try {
  519.                     $pdf->move(
  520.                         $this->getParameter('support_directory'),
  521.                         $newLogoname
  522.                     );
  523.                 } catch (FileException $e) {
  524.                     // ... handle exception if something happens during file upload
  525.                 }
  526.                 $pr->setPdf($newLogoname);
  527.                 $entityManager->persist($pr);
  528.             }
  529.         }
  530.         elseif ($nbr 0) {
  531.             for ($i 0$i <= $nbr$i++) {
  532.                 if ($request->files->get('pdf'$i)) {
  533.                     $pr = new Support();
  534.                     $titre $request->request->get('titres'$i);
  535.                     $pr->setTitre($titre);
  536.                     $pdf $request->files->get('pdf'$i);
  537.                     if ($pdf) {
  538.                         $originalLogoname pathinfo($pdf->getClientOriginalName(), PATHINFO_FILENAME);
  539.                         $newLogoname $originalLogoname '-' uniqid() . '.' $pdf->guessExtension();
  540.                         // Move the file to the directory where brochures are stored
  541.                         try {
  542.                             $pdf->move(
  543.                                 $this->getParameter('support_directory'),
  544.                                 $newLogoname
  545.                             );
  546.                         } catch (FileException $e) {
  547.                             // ... handle exception if something happens during file upload
  548.                         }
  549.                         $pr->setPdf($newLogoname);
  550.                     }
  551.                     $pr->setVirtualclassroom($virtualClassroom);
  552.                     $entityManager->persist($pr);
  553.                 }
  554.             }
  555.         }
  556. //QCM
  557.         $nbrqcm=  $request->request->get('nbrc_q');
  558.         if ($nbrqcm == 0) {
  559. //            $pdf = $request->request->get('pdf0');
  560.             $qcm$request->request->get('qcm0');
  561.             $titre $request->request->get('titreq0');
  562.             if($qcm != ""){
  563.                 $pr = new Qcmcalssroom();
  564.                 $pr->setTitre($titre);
  565.                 $pr->setQcm($qcm);
  566.             $pr->setVirtualclass($virtualClassroom);
  567. //            $video = $request->files->get('video0');
  568. //
  569. //            if ($video) {
  570. //                $originalLogoname = pathinfo($video->getClientOriginalName(), PATHINFO_FILENAME);
  571. //                $newLogoname = $originalLogoname . '-' . uniqid() . '.' . $video->guessExtension();
  572. //
  573. //                // Move the file to the directory where brochures are stored
  574. //                try {
  575. //                    $video->move(
  576. //                        $this->getParameter('support_directory'),
  577. //                        $newLogoname
  578. //                    );
  579. //                } catch (FileException $e) {
  580. //                    // ... handle exception if something happens during file upload
  581. //                }
  582. //
  583. //                $pr->setVideo($newLogoname);
  584. //            }
  585.             $entityManager->persist($pr);}
  586.         }
  587.         elseif ($nbrqcm 0) {
  588.             for ($i 0$i <= $nbrqcm$i++) {
  589.                 if ( $request->request->get('qcm'$i)) {
  590.                     $pr = new Qcmcalssroom();
  591.                     $titre $request->request->get('titreq'$i);
  592.                     $pr->setTitre($titre);
  593.                     $qcm$request->request->get('qcm'$i);
  594.                     $pr->setQcm($qcm);
  595.                     $pr->setVirtualclass($virtualClassroom);
  596.                     $entityManager->persist($pr);
  597.                 }
  598.             }
  599.         }
  600. //video
  601.         $nbrvideo=  $request->request->get('nbrc_v');
  602.         if ($nbrvideo == 0) {
  603.             $embed $request->request->get('embed0');
  604.             $video $request->request->get('idvideo0');
  605.             $titre $request->request->get('titrev0');
  606.             if($video) {
  607.                 $pr = new Videoclassroom();
  608.                 $pr->setTitre($titre);
  609.                 $pr->setVirtualclass($virtualClassroom);
  610.                 $pr->setEmbed($embed);
  611.                 $pr->setIdvideo($video);
  612.                 $pr->setDate($dateclasse);
  613.                 $entityManager->persist($pr);
  614.             }
  615.         }
  616.         elseif ($nbrvideo 0) {
  617.             for ($i 0$i <= $nbrvideo$i++) {
  618.                 if ($request->request->get('idvideo'$i)) {
  619.                     $pr = new Videoclassroom();
  620.                     $titre $request->request->get('titrev'$i);
  621.                     $pr->setTitre($titre);
  622.                     $video $request->request->get('idvideo'$i);
  623.                     $embed $request->request->get('embed'$i);
  624.                     $pr->setDate($dateclasse);
  625.                     $pr->setVirtualclass($virtualClassroom);
  626.                     $pr->setEmbed($embed);
  627.                     $pr->setIdvideo($video);
  628.                     $entityManager->persist($pr);
  629.                 }
  630.             }
  631.         }
  632.         $virtualClassroomRepository->save($virtualClassroomtrue);
  633. $supports=$supportRepository->findBy(['virtualclassroom'=>$virtualClassroom]);
  634. $qcms=$qcmcalssroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
  635. $videos=$videoclassroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
  636.         // Récupérer la case à cocher "notify"
  637.         $sendNotification $request->request->get('notify'); // '1' si cochée, null si décochée
  638.         if ($sendNotification) {
  639.             try {
  640.                 $email = (new TemplatedEmail())
  641.                     ->from(new Address($this->fromAddress'Sip Academy'))  // Utilisation de Address pour inclure l'email et le nom
  642.                     // ->to('sameh.trabelsi@sesame.com.tn')
  643.                     ->subject('Nouvelle Virtual Classroom ' $virtualClassroom->getTitre())
  644.                     ->htmlTemplate(
  645.                         'virtual_classroom/email.html.twig'
  646.                     )
  647.                     ->context([
  648.                         'virtual' => $virtualClassroom'setting' => $setting,
  649.                         'supports' => $supports'qcms' => $qcms,
  650.                         'videos' => $videos
  651.                     ]);
  652. //        $attachmentPath = $this->getParameter('news_directory') . '/' . $newLogoname;
  653. //        $email->attachFromPath($attachmentPath);
  654.                 foreach ($tabinscrits as $recipientEmail) {
  655.                     $email->addBcc($recipientEmail);
  656.                 }
  657.                 $mailer->send($email);
  658.             } catch (\Exception $e) {
  659.                 $this->addFlash('error'"Une erreur s'est produite lors de l'envoi de l'e-mail..");
  660.                 // Redirect to the specified route
  661.                 return $this->redirectToRoute('app_virtual_classroom_index_formateur', ['id' => $virtualClassroom->getSession()->getId()], Response::HTTP_SEE_OTHER);
  662.             }
  663.         }
  664.         return $this->redirectToRoute('app_virtual_classroom_index_formateur', ['id'=>$virtualClassroom->getSession()->getId()], Response::HTTP_SEE_OTHER);
  665.     }
  666.     #[Route('/new/{ids}'name'app_virtual_classroom_new'methods: ['GET''POST'])]
  667.     #[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
  668.     public function new($ids,EvenementRepository $evenementRepository,EntityManagerInterface $entityManager,SluggerInterface $slugger,UserRepository $userRepository,SettingRepository $settingRepository,Request $requestVirtualClassroomRepository $virtualClassroomRepository): Response
  669.     {
  670.         $session=$evenementRepository->find($ids);
  671.         $id =  $this->getUser()->getId();
  672.         $user=$userRepository->find($id);
  673.         $sesions=$evenementRepository->findBy(['formateur'=>$user]);
  674.         $setting=$settingRepository->find(1);
  675.         $virtualClassroom = new VirtualClassroom();
  676. //        $support = new Support();
  677.         $form $this->createForm(VirtualClassroomType::class, $virtualClassroom);
  678.         $form->handleRequest($request);
  679.         if ($form->isSubmitted() && $form->isValid()) {
  680. //            $virtualClassroom = $support->getVirtualclassroom();
  681.             // On récupère le nombre de fichiers PDF et vidéo à ajouter
  682.             $virtualClassroomRepository->save($virtualClassroomtrue);
  683.             return $this->redirectToRoute('app_virtual_classroom_index', [], Response::HTTP_SEE_OTHER);
  684.         }
  685.         return $this->renderForm('virtual_classroom/new.html.twig', [
  686.             'virtualclassroom' => $virtualClassroom,
  687.             'form' => $form,
  688.             'setting'=>$setting,
  689.             'user'=>$user,
  690.             'sessions'=>$sesions,'evenement'=>$session
  691.         ]);
  692.     }
  693.     #[Route('/videos/{id}'name'app_virtual_classroom_showVideo'methods: ['GET'])]
  694.     #[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
  695.     public function showVideos(SuspensionInscritRepository $suspensionInscritRepository,InscritSessionRepository $inscritSessionRepository,QcmcalssroomRepository $qcmcalssroomRepository,VideoclassroomRepository $videoclassroomRepository,SupportRepository $supportRepository,UserRepository $userRepository,SettingRepository $settingRepository,VirtualClassroom $virtualClassroom): Response
  696.     {
  697.         $qcms=$qcmcalssroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
  698.         $videos=$videoclassroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
  699.         $supports $supportRepository->findBy(['virtualclassroom'=>$virtualClassroom]);
  700. //            dd($supports);
  701.         $id =  $this->getUser()->getId();
  702.         $user=$userRepository->find($id);
  703.         $setting=$settingRepository->find(1);
  704.         $testInscrit=false;
  705.         $evenement=$virtualClassroom->getSession();
  706.         $inscrit=$inscritSessionRepository->findOneBy(['session'=>$evenement,'stagiaire'=>$user,'isAffected'=>true]);
  707.         $isActive=false;
  708.         if($inscrit){
  709.            $isActive$inscrit->isIsActive();
  710.             $testInscrit=true;
  711.         }
  712.         $isSuspension false;
  713.        $suspension=$suspensionInscritRepository->findOneBy(['user'=>$inscrit],['id'=>'DESC']);
  714.         if ($isActive === false && $suspension) {
  715.             $suspensionDate $suspension->getDate(); // Assurez-vous que la méthode getDate() existe pour obtenir la date de la suspension.
  716.             $virtualClassroomDate $virtualClassroom->getDate(); // Assurez-vous que la méthode getDate() existe pour obtenir la date du virtualClassroom.
  717.             if ($suspensionDate <= $virtualClassroomDate) {
  718.                 $isSuspension true;
  719.             }
  720.         }
  721. // Vérification des rôles
  722.         $roles $user->getRoles();
  723.         if (in_array('ROLE_ADMIN'$roles) || in_array('ROLE_COACH'$roles)) {
  724.             $testInscrit true;
  725.             //dd( $testInscrit);
  726.         }
  727.         return $this->render('virtual_classroom/videos.html.twig', [
  728.             'virtual_classroom' => $virtualClassroom,
  729.             'setting'=>$setting,
  730.             'user'=>$user,
  731.             'support'=>$supports,'qcms'=>$qcms,'videos'=>$videos,
  732.             'testInscrit'=>$testInscrit,
  733.             'isActive'=>$isActive,'isSuspension'=>$isSuspension
  734.         ]);
  735.     }
  736.     #[Route('/{id}'name'app_virtual_classroom_show'methods: ['GET'])]
  737.     #[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
  738.     public function show(QcmcalssroomRepository $qcmcalssroomRepository,VideoclassroomRepository $videoclassroomRepository,SupportRepository $supportRepository,UserRepository $userRepository,SettingRepository $settingRepository,VirtualClassroom $virtualClassroom): Response
  739.     {
  740. $qcms=$qcmcalssroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
  741. $videos=$videoclassroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
  742.         $supports $supportRepository->findBy(['virtualclassroom'=>$virtualClassroom]);
  743. //            dd($supports);
  744.         $id =  $this->getUser()->getId();
  745.         $user=$userRepository->find($id);
  746.         $setting=$settingRepository->find(1);
  747.         return $this->render('virtual_classroom/show.html.twig', [
  748.             'virtual_classroom' => $virtualClassroom,
  749.             'setting'=>$setting,
  750.             'user'=>$user,
  751.             'support'=>$supports,'qcms'=>$qcms,'videos'=>$videos
  752.         ]);
  753.     }
  754.     #[Route('/editclassroom/{id}'name'app_virtual_classroom_editclassroom'methods: ['GET''POST'])]
  755.     #[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
  756.     public function editclasse(InscritSessionRepository $inscritSessionRepository,MailerInterface $mailer,QcmcalssroomRepository $qcmcalssroomRepository,VideoclassroomRepository $videoclassroomRepository,SupportRepository $supportRepository,$id,EntityManagerInterface $entityManager,SluggerInterface $slugger,UserRepository $userRepository,SettingRepository $settingRepository,Request $requestVirtualClassroomRepository $virtualClassroomRepository): Response
  757.     {
  758.         $dateclasse = new \DateTime('now', new DateTimeZone('Africa/Tunis'));
  759.         $iduser =  $this->getUser()->getId();
  760.         $user=$userRepository->find($iduser);
  761.         $setting=$settingRepository->find(1);
  762.         $virtualClassroom $virtualClassroomRepository->find($id);
  763.         $supports $supportRepository->findBy(['virtualclassroom'=>$virtualClassroom]);
  764.         $qcms $qcmcalssroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
  765.         $videos $videoclassroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
  766. $session=$virtualClassroom->getSession();
  767.         $inscrits=$inscritSessionRepository->findBy(['isAffected'=>true,'session'=>$session]);
  768.         $tabinscrits=array();
  769. //        foreach ($inscrits as $u){
  770. //            array_push($tabinscrits, $u->getEmail() );
  771. //
  772. //        }
  773.         foreach ($inscrits as $u) {
  774.             $email trim($u->getEmail()); // Supprime les espaces ou les caractères \n et \r
  775.             if (filter_var($emailFILTER_VALIDATE_EMAIL)) {
  776.                 array_push($tabinscrits$email);
  777.             }
  778.         }
  779.         $titre=  $request->request->get('titre');
  780.         $virtualClassroom->setTitre($titre);
  781.         $lienmeet=  $request->request->get('lienmeet');
  782.         $virtualClassroom->setLienmeet($lienmeet);
  783.         $drive=  $request->request->get('drive');
  784.         $virtualClassroom->setDrive($drive);
  785.         $date=  $request->request->get('date');
  786.         $date = new DateTime($date);
  787.         $virtualClassroom->setDate($date);
  788.         $heureDebut=  $request->request->get('heureDebut');
  789.         $heureDebut = new DateTime($heureDebut);
  790.         $virtualClassroom->setHeureDebut($heureDebut);
  791.         $heureFin=  $request->request->get('heureFin');
  792.         $heureFin = new DateTime($heureFin);
  793.         $virtualClassroom->setHeureFin($heureFin);
  794.         $description=  $request->request->get('description');
  795.         $virtualClassroom->setDescription($description);
  796.         $nbr=  $request->request->get('nbrc_a');
  797.         $count $request->request->get('count');
  798.         $nbrqcm=  $request->request->get('nbrc_q');
  799.         $countqcm $request->request->get('countqcm');
  800.         $nbrvideo=  $request->request->get('nbrc_v');
  801.         $countvideo $request->request->get('countvideo');
  802.         if(!$supports){
  803.             if ($nbr == 0) {
  804. //            $pdf = $request->request->get('pdf0');
  805. //            $duree = $request->request->get('date0');
  806.                 $titre $request->request->get('titres0');
  807.                 $pdf $request->files->get('pdf0');
  808.                 if ($pdf) {
  809.                     $pr = new Support();
  810.                     $pr->setTitre($titre);
  811.                     $originalLogoname pathinfo($pdf->getClientOriginalName(), PATHINFO_FILENAME);
  812.                     $newLogoname $originalLogoname '-' uniqid() . '.' $pdf->guessExtension();
  813.                     // Move the file to the directory where brochures are stored
  814.                     try {
  815.                         $pdf->move(
  816.                             $this->getParameter('support_directory'),
  817.                             $newLogoname
  818.                         );
  819.                     } catch (FileException $e) {
  820.                         // ... handle exception if something happens during file upload
  821.                     }
  822.                     $pr->setPdf($newLogoname);
  823.                     $pr->setVirtualclassroom($virtualClassroom);
  824.                     $entityManager->persist($pr);
  825.                 }
  826.             }
  827.             elseif ($nbr 0) {
  828.                 for ($i 0$i <= $nbr$i++) {
  829.                     if ($request->files->get('pdf'$i)) {
  830.                         $pr = new Support();
  831.                         $titre $request->request->get('titres'.$i);
  832.                         $pr->setTitre($titre);
  833.                         $pdf $request->files->get('pdf'$i);
  834.                         if ($pdf) {
  835.                             $originalLogoname pathinfo($pdf->getClientOriginalName(), PATHINFO_FILENAME);
  836.                             $newLogoname $originalLogoname '-' uniqid() . '.' $pdf->guessExtension();
  837.                             // Move the file to the directory where brochures are stored
  838.                             try {
  839.                                 $pdf->move(
  840.                                     $this->getParameter('support_directory'),
  841.                                     $newLogoname
  842.                                 );
  843.                             } catch (FileException $e) {
  844.                                 // ... handle exception if something happens during file upload
  845.                             }
  846.                             $pr->setPdf($newLogoname);
  847.                         }
  848.                         $pr->setVirtualclassroom($virtualClassroom);
  849.                         $entityManager->persist($pr);
  850.                     }
  851.                 }
  852.             }
  853.         }
  854.         else{
  855.             if ($nbr == 0) {
  856.                 $k=0;
  857.                 foreach ($supports as $support){
  858.                     $pdf $request->files->get('pdf'.$k);
  859.                     $titre $request->request->get('titres'.$k);
  860.                     $support->setTitre($titre);
  861.                     if ($pdf) {
  862.                         $originalLogoname pathinfo($pdf->getClientOriginalName(), PATHINFO_FILENAME);
  863.                         $newLogoname $originalLogoname '-' uniqid() . '.' $pdf->guessExtension();
  864.                         // Move the file to the directory where brochures are stored
  865.                         try {
  866.                             $pdf->move(
  867.                                 $this->getParameter('support_directory'),
  868.                                 $newLogoname
  869.                             );
  870.                         } catch (FileException $e) {
  871.                             // ... handle exception if something happens during file upload
  872.                         }
  873.                         $support->setPdf($newLogoname);
  874.                     }
  875.                     $entityManager->persist($support);
  876.                     $k++;}
  877.             }
  878.             elseif ($nbr >= $count) {
  879.                 $k=0;
  880.                 foreach ($supports as $support){
  881.                     $pdf $request->files->get('pdf'.$k);
  882.                     $titre $request->request->get('titres'.$k);
  883.                     $support->setTitre($titre);
  884.                     if ($pdf) {
  885.                         $originalLogoname pathinfo($pdf->getClientOriginalName(), PATHINFO_FILENAME);
  886.                         $newLogoname $originalLogoname '-' uniqid() . '.' $pdf->guessExtension();
  887.                         // Move the file to the directory where brochures are stored
  888.                         try {
  889.                             $pdf->move(
  890.                                 $this->getParameter('support_directory'),
  891.                                 $newLogoname
  892.                             );
  893.                         } catch (FileException $e) {
  894.                             // ... handle exception if something happens during file upload
  895.                         }
  896.                         $support->setPdf($newLogoname);
  897.                     }
  898.                     $entityManager->persist($support);
  899.                     $k++;}
  900.                 for ($i=$count+$i <= ($nbr+$count) ; $i++) {
  901.                     if ($request->files->get('pdf'$i)) {
  902.                         $pr = new Support();
  903.                         $titre $request->request->get('titres'.$i);
  904.                         $pr->setTitre($titre);
  905.                         $pdf $request->files->get('pdf'$i);
  906.                         if ($pdf) {
  907.                             $originalLogoname pathinfo($pdf->getClientOriginalName(), PATHINFO_FILENAME);
  908.                             $newLogoname $originalLogoname '-' uniqid() . '.' $pdf->guessExtension();
  909.                             // Move the file to the directory where brochures are stored
  910.                             try {
  911.                                 $pdf->move(
  912.                                     $this->getParameter('support_directory'),
  913.                                     $newLogoname
  914.                                 );
  915.                             } catch (FileException $e) {
  916.                                 // ... handle exception if something happens during file upload
  917.                             }
  918.                             $pr->setPdf($newLogoname);
  919.                         }
  920.                         $pr->setVirtualclassroom($virtualClassroom);
  921.                         $entityManager->persist($pr);
  922.                     }
  923.                 }
  924.             }
  925.         }
  926.         if(!$qcms){
  927.             if ($nbrqcm == 0) {
  928.                 $pr = new Qcmcalssroom();
  929. //            $pdf = $request->request->get('pdf0');
  930.                 $titre $request->request->get('titreq0');
  931.                 $pr->setTitre($titre);
  932.                 $qcm$request->request->get('qcm0');
  933.                 if($qcm != ""){
  934.                     $pr->setQcm($qcm);
  935.                     $pr->setVirtualclass($virtualClassroom);
  936. //            $video = $request->files->get('video0');
  937. //
  938. //            if ($video) {
  939. //                $originalLogoname = pathinfo($video->getClientOriginalName(), PATHINFO_FILENAME);
  940. //                $newLogoname = $originalLogoname . '-' . uniqid() . '.' . $video->guessExtension();
  941. //
  942. //                // Move the file to the directory where brochures are stored
  943. //                try {
  944. //                    $video->move(
  945. //                        $this->getParameter('support_directory'),
  946. //                        $newLogoname
  947. //                    );
  948. //                } catch (FileException $e) {
  949. //                    // ... handle exception if something happens during file upload
  950. //                }
  951. //
  952. //                $pr->setVideo($newLogoname);
  953. //            }
  954.                     $entityManager->persist($pr);}
  955.             }
  956.             elseif ($nbrqcm 0) {
  957.                 for ($i 0$i <= $nbrqcm$i++) {
  958.                     if ( $request->request->get('qcm'$i)) {
  959.                         $pr = new Qcmcalssroom();
  960.                         $titre $request->request->get('titreq'.$i);
  961.                         $pr->setTitre($titre);
  962.                         $qcm$request->request->get('qcm'$i);
  963.                         $pr->setQcm($qcm);
  964.                         $pr->setVirtualclass($virtualClassroom);
  965.                         $entityManager->persist($pr);
  966.                     }
  967.                 }
  968.             }
  969.         }
  970.         else{
  971.             if ($nbrqcm == 0) {
  972.                 $k=0;
  973.                 foreach ($qcms as $q){
  974.                     $qcm$request->request->get('qcm'$k);
  975.                     $titre $request->request->get('titreq'.$k);
  976.                     $q->setTitre($titre);
  977.                     $q->setQcm($qcm);
  978.                     $entityManager->persist($q);
  979.                     $k++;
  980.                     $k++;}
  981.             }
  982.             elseif ($nbrqcm >= $countqcm) {
  983.                 $k=0;
  984.                 foreach ($qcms as $q){
  985.                     $qcm$request->request->get('qcm'$k);
  986.                     $titre $request->request->get('titreq'.$k);
  987.                     $q->setTitre($titre);
  988.                     $q->setQcm($qcm);
  989.                     $entityManager->persist($q);
  990.                     $k++;
  991.                 }
  992.                 for ($i=$countqcm+$i <= ($nbrqcm+$countqcm) ; $i++) {
  993.                     if ( $request->request->get('qcm'$i)) {
  994.                         $pr = new Qcmcalssroom();
  995.                         $titre $request->request->get('titreq'.$i);
  996.                         $pr->setTitre($titre);
  997.                         $qcm$request->request->get('qcm'$i);
  998.                         $pr->setQcm($qcm);
  999.                         $pr->setVirtualclass($virtualClassroom);
  1000.                         $entityManager->persist($pr);
  1001.                     }
  1002.                 }
  1003.             }
  1004.         }
  1005. $testVideo=false;
  1006.         if(!$videos){
  1007.             if ($nbrvideo == 0) {
  1008.                 $titre $request->request->get('titrev0');
  1009.                 $video $request->request->get('idvideo0');
  1010.                 $embed $request->request->get('embed0');
  1011.                 if($video) {
  1012.                     $testVideo true;
  1013.                     $pr = new Videoclassroom();
  1014.                     $pr->setTitre($titre);
  1015.                     $pr->setIdvideo($video);
  1016.                     $pr->setEmbed($embed);
  1017.                     $pr->setVirtualclass($virtualClassroom);
  1018.                     $pr->setDate($dateclasse);
  1019.                     $entityManager->persist($pr);
  1020.                 }
  1021.             }
  1022.             elseif ($nbrvideo 0) {
  1023.                 for ($i 0$i <= $nbrvideo$i++) {
  1024.                     if ($request->request->get('idvideo'$i)) {
  1025.                         $testVideo=true;
  1026.                         $pr = new Videoclassroom();
  1027.                         $titre $request->request->get('titrev'.$i);
  1028.                         $pr->setTitre($titre);
  1029.                         $pr->setDate($dateclasse);
  1030.                         $video $request->request->get('idvideo'$i);
  1031.                         $embed $request->request->get('embed'$i);
  1032.                         $pr->setIdvideo($video);
  1033.                         $pr->setEmbed($embed);
  1034.                         $pr->setVirtualclass($virtualClassroom);
  1035.                         $entityManager->persist($pr);
  1036.                     }
  1037.                 }
  1038.             }
  1039.         }
  1040.         else{
  1041.             if ($nbrvideo == 0) {
  1042.                 $k=0;                $testVideo=true;
  1043.                 foreach ($videos as $v){
  1044.                     $titre $request->request->get('titrev'.$k);
  1045.                     $v->setTitre($titre);
  1046.                     $video $request->request->get('idvideo'$k);
  1047.                     $embed $request->request->get('embed'$k);
  1048.                     $v->setIdvideo($video);
  1049.                     $v->setEmbed($embed);
  1050.                     $v->setDate($dateclasse);
  1051.                     $v->setVirtualclass($virtualClassroom);
  1052.                     $entityManager->persist($v);
  1053.                     $k++;}
  1054.             }
  1055.             elseif ($nbrvideo >= $countvideo) {
  1056.                 $testVideo=true;
  1057.                 $k=0;
  1058.                 foreach ($videos as $v){
  1059.                     $video $request->request->get('idvideo'$k);
  1060.                     $embed $request->request->get('embed'$k);
  1061.                     $v->setIdvideo($video);
  1062.                     $v->setEmbed($embed);
  1063.                     $titre $request->request->get('titrev'.$k);
  1064.                     $v->setTitre($titre);
  1065.                     $v->setDate($dateclasse);
  1066.                     $entityManager->persist($v);
  1067.                     $k++;}
  1068.                 for ($i=$countvideo+$i <= ($nbrvideo+$countvideo) ; $i++) {
  1069.                     if ($request->request->get('idvideo'$i)) {
  1070.                         $pr = new Videoclassroom();
  1071.                         $titre $request->request->get('titrev'.$i);
  1072.                         $pr->setTitre($titre);
  1073.                         $video $request->request->get('idvideo'$i);
  1074.                         $embed $request->request->get('embed'$i);
  1075.                         $pr->setIdvideo($video);
  1076.                         $pr->setEmbed($embed);
  1077.                         $pr->setDate($dateclasse);
  1078.                         $pr->setVirtualclass($virtualClassroom);
  1079.                         $entityManager->persist($pr);
  1080.                     }
  1081.                 }
  1082.             }
  1083.         }
  1084.         $virtualClassroomRepository->save($virtualClassroomtrue);
  1085.         $supports=$supportRepository->findBy(['virtualclassroom'=>$virtualClassroom]);
  1086.         $qcms=$qcmcalssroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
  1087.         $videos=$videoclassroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
  1088.         $sendNotification $request->request->get('notify');
  1089.         if ($sendNotification) {
  1090.             if ($testVideo) {
  1091.                 try {
  1092.                     $email = (new TemplatedEmail())
  1093.                         ->from(new Address($this->fromAddress'Sip Academy'))  // Utilisation de Address pour inclure l'email et le nom
  1094.                         //     ->to('sameh.trabelsi@sesame.com.tn')
  1095.                         ->subject('Nouvelles vidéos disponibles dans ' $virtualClassroom->getTitre())
  1096.                         ->htmlTemplate(
  1097.                             'virtual_classroom/emailVideo.html.twig')
  1098.                         ->context([
  1099.                             'virtual' => $virtualClassroom'setting' => $setting,
  1100.                             'supports' => $supports'qcms' => $qcms,
  1101.                             'videos' => $videos
  1102.                         ]);
  1103. //        $attachmentPath = $this->getParameter('news_directory') . '/' . $newLogoname;
  1104. //        $email->attachFromPath($attachmentPath);
  1105.                     foreach ($tabinscrits as $recipientEmail) {
  1106.                         $email->addBcc($recipientEmail);
  1107.                     }
  1108.                     $mailer->send($email);
  1109.                 } catch (\Exception $e) {
  1110.                     $this->addFlash('error'"Une erreur s'est produite lors de l'envoi de l'e-mail..");
  1111.                     // Redirect to the specified route
  1112.                     return $this->redirectToRoute('app_virtual_classroom_index_formateur', ['id' => $virtualClassroom->getSession()->getId()], Response::HTTP_SEE_OTHER);
  1113.                 }
  1114.             } else {
  1115.                 try {
  1116.                     $email = (new TemplatedEmail())
  1117.                         ->from(new Address($this->fromAddress'Sip Academy'))  // Utilisation de Address pour inclure l'email et le nom
  1118.                         //     ->to('sameh.trabelsi@sesame.com.tn')
  1119.                         ->subject('Virtual Classroom ' $virtualClassroom->getTitre())
  1120.                         ->htmlTemplate(
  1121.                             'virtual_classroom/emailEdit.html.twig')
  1122.                         ->context([
  1123.                             'virtual' => $virtualClassroom'setting' => $setting,
  1124.                             'supports' => $supports'qcms' => $qcms,
  1125.                             'videos' => $videos
  1126.                         ]);
  1127. //        $attachmentPath = $this->getParameter('news_directory') . '/' . $newLogoname;
  1128. //        $email->attachFromPath($attachmentPath);
  1129.                     foreach ($tabinscrits as $recipientEmail) {
  1130.                         $email->addBcc($recipientEmail);
  1131.                     }
  1132.                     $mailer->send($email);
  1133.                 } catch (\Exception $e) {
  1134.                     $this->addFlash('error'"Une erreur s'est produite lors de l'envoi de l'e-mail..");
  1135.                     // Redirect to the specified route
  1136.                     return $this->redirectToRoute('app_virtual_classroom_index_formateur', ['id' => $virtualClassroom->getSession()->getId()], Response::HTTP_SEE_OTHER);
  1137.                 }
  1138.             }
  1139.         }
  1140.         return $this->redirectToRoute('app_virtual_classroom_index_formateur', ['id'=>$virtualClassroom->getSession()->getId()], Response::HTTP_SEE_OTHER);
  1141.     }
  1142.     #[Route('/{id}/edit'name'app_virtual_classroom_edit'methods: ['GET''POST'])]
  1143.     #[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
  1144.     public function edit(VideoclassroomRepository $videoclassroomRepository,QcmcalssroomRepository $qcmcalssroomRepository,EvenementRepository $evenementRepository,SupportRepository $supportRepository,EntityManagerInterface $entityManager,SluggerInterface $slugger,UserRepository $userRepository,SettingRepository $settingRepository,Request $requestVirtualClassroom $virtualClassroomVirtualClassroomRepository $virtualClassroomRepository): Response
  1145.     {
  1146.         $supports $supportRepository->findBy(['virtualclassroom'=>$virtualClassroom]);
  1147.         $qcms $qcmcalssroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
  1148.         $videos $videoclassroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
  1149.         $id =  $this->getUser()->getId();
  1150.         $user=$userRepository->find($id);
  1151.         $sesions=$evenementRepository->findBy(['formateur'=>$user]);
  1152.         $setting=$settingRepository->find(1);
  1153.         return $this->renderForm('virtual_classroom/edit.html.twig', [
  1154.             'virtual_classroom' => $virtualClassroom,
  1155.             'setting'=>$setting,
  1156.             'user'=>$user,
  1157.             'supports'=>$supports,
  1158.             'sessions'=>$sesions,
  1159.             'qcms'=>$qcms,
  1160.             'videos'=>$videos,
  1161.             'evenement'=>$virtualClassroom->getSession()
  1162.         ]);
  1163.     }
  1164.     #[Route('/delete/{id}'name'app_virtual_classroom_delete')]
  1165.     #[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
  1166.     public function delete(MailerInterface $mailer,SettingRepository $settingRepository,InscritSessionRepository $inscritSessionRepository,VideoclassroomRepository $videoclassroomRepository,QcmcalssroomRepository $qcmcalssroomRepository,SupportRepository $supportRepository,Request $requestVirtualClassroom $virtualClassroomVirtualClassroomRepository $virtualClassroomRepository): Response
  1167.     {
  1168.         // Supprimer les fichiers PDF associés aux supports avant de supprimer le virtualClassroom
  1169. //        foreach ($virtualClassroom->getSupports() as $support) {
  1170. //            $pdfFilename = $support->getPdf();
  1171. //            if ($pdfFilename) {
  1172. //                $pdfPath = $this->getParameter('support_directory') . '/' . $pdfFilename;
  1173. //                if (file_exists($pdfPath)) {
  1174. //                    unlink($pdfPath);
  1175. //                }
  1176. //            }
  1177. //        }
  1178. //        $videoFilename = $support->getVideo();
  1179. //        if ($videoFilename) {
  1180. //            $videoPath = $this->getParameter('support_directory') . '/' . $videoFilename;
  1181. //            if (file_exists($videoPath)) {
  1182. //                unlink($videoPath);
  1183. //            }
  1184. //        }
  1185.         $session=$virtualClassroom->getSession();
  1186.         $inscrits=$inscritSessionRepository->findBy(['isAffected'=>true,'session'=>$session]);
  1187.         $tabinscrits=array();
  1188.         foreach ($inscrits as $u) {
  1189.             $email trim($u->getEmail()); // Supprime les espaces ou les caractères \n et \r
  1190.             if (filter_var($emailFILTER_VALIDATE_EMAIL)) {
  1191.                 array_push($tabinscrits$email);
  1192.             }
  1193.         }
  1194.         $supports=$supportRepository->findBy(['virtualclassroom'=>$virtualClassroom]);
  1195.         foreach ($supports as $support) {
  1196.             $supportRepository->remove($support,true);
  1197.         }
  1198.         $videos=$videoclassroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
  1199.         foreach ($videos as $video) {
  1200.             $videoclassroomRepository->remove($video,true);
  1201.         }
  1202.         $qcms=$qcmcalssroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
  1203.         foreach ($qcms as $qcm) {
  1204.             $qcmcalssroomRepository->remove($qcm,true);
  1205.         }
  1206.         if (!empty($tabinscrits)) {
  1207.         try {
  1208.             $email = (new TemplatedEmail())
  1209.                 ->from(new Address($this->fromAddress'Sip Academy'))  // Utilisation de Address pour inclure l'email et le nom
  1210.                 //     ->to('sameh.trabelsi@sesame.com.tn')
  1211.                 ->subject('Virtual Classroom ' $virtualClassroom->getTitre())
  1212.                 ->htmlTemplate(
  1213.                     'virtual_classroom/emailDelete.html.twig')
  1214.                 ->context([
  1215.                     'virtual' => $virtualClassroom'setting' => $settingRepository->find(1),
  1216.                     'supports' => $supports'qcms' => $qcms,
  1217.                     'videos' => $videos
  1218.                 ]);
  1219. //        $attachmentPath = $this->getParameter('news_directory') . '/' . $newLogoname;
  1220. //        $email->attachFromPath($attachmentPath);
  1221.             foreach ($tabinscrits as $recipientEmail) {
  1222.                 $email->addBcc($recipientEmail);
  1223.             }
  1224.             $mailer->send($email);
  1225.         } catch (\Exception $e) {
  1226.             $this->addFlash('error'"Une erreur s'est produite lors de l'envoi de l'e-mail..");
  1227.             $virtualClassroomRepository->remove($virtualClassroomtrue);
  1228.             // Redirect to the specified route
  1229.             return $this->redirectToRoute('app_virtual_classroom_index_formateur', ['id'=>$virtualClassroom->getSession()->getId()], Response::HTTP_SEE_OTHER);
  1230.         }}
  1231.         $virtualClassroomRepository->remove($virtualClassroomtrue);
  1232.         return $this->redirectToRoute('app_virtual_classroom_index_formateur', ['id'=>$virtualClassroom->getSession()->getId()], Response::HTTP_SEE_OTHER);
  1233.     }
  1234.     #[Route('/deleteVideo/{id}'name'app_virtual_classroom_deleteVideo')]
  1235.     #[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
  1236.     public function deleteVideo(VideoclassroomRepository $videoclassroomRepository,QcmcalssroomRepository $qcmcalssroomRepository,SupportRepository $supportRepository,Request $requestVideoclassroom $videoclassroomVirtualClassroomRepository $virtualClassroomRepository): Response
  1237.     {
  1238.         $videoclassroomRepository->remove($videoclassroomtrue);
  1239.         return $this->redirectToRoute('app_virtual_classroom_edit', ['id'=>$videoclassroom->getVirtualclass()->getId()], Response::HTTP_SEE_OTHER);
  1240.     }
  1241. }