<?php
namespace App\Controller;
use App\Entity\Evenement;
use App\Entity\InscritSession;
use App\Entity\Qcmcalssroom;
use App\Entity\Signature;
use App\Entity\Support;
use App\Entity\Videoclassroom;
use App\Entity\VirtualClassroom;
use App\Form\VirtualClassroomType;
use App\Repository\EvenementRepository;
use App\Repository\InscritSessionRepository;
use App\Repository\QcmcalssroomRepository;
use App\Repository\SettingRepository;
use App\Repository\SignatureRepository;
use App\Repository\SupportRepository;
use App\Repository\SuspensionInscritRepository;
use App\Repository\UserRepository;
use App\Repository\VideoclassroomRepository;
use App\Repository\VirtualClassroomRepository;
use DateTime;
use Doctrine\ORM\EntityManagerInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\HttpFoundation\File\Exception\FileException;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Address;
use Symfony\Component\Routing\Annotation\Route;
use DateTimeZone;
use Symfony\Component\String\Slugger\SluggerInterface;
#[Route('/virtual/classroom')]
class VirtualClassroomController extends AbstractController
{
private $fromAddress;
public function __construct(
ParameterBagInterface $parameterBag // Injection du service ParameterBagInterface
) {
$this->fromAddress = $parameterBag->get('mailer_from_address');
}
#[Route('/sendEmail/{id}', name: 'save_sendEmail')]
public function sendEmail(VirtualClassroomRepository $virtualClassroomRepository,MailerInterface $mailer,InscritSessionRepository $inscritSessionRepository,
SignatureRepository $signatureRepository,
Request $request,
QcmcalssroomRepository $qcmcalssroomRepository,
VideoclassroomRepository $videoclassroomRepository,
SupportRepository $supportRepository,
UserRepository $userRepository,
SettingRepository $settingRepository,
InscritSession $inscritSession
): Response {
$date = new \DateTime('now', new DateTimeZone('Africa/Tunis'));
$session=$inscritSession->getSession();
$emailinscrit=$inscritSession->getEmail();
$objet=$request->request->get('subject');
$message=$request->request->get('message');
$idclasse=$request->request->get('idclasse');
$virtual=$virtualClassroomRepository->find($idclasse);
$setting=$settingRepository->find(1);
try{
$email = (new TemplatedEmail())
->from(new Address($this->fromAddress, 'Sip Academy')) // Utilisation de Address pour inclure l'email et le nom
->to($emailinscrit)
->subject($objet)
->htmlTemplate(
'virtual_classroom/emailInscrit.html.twig'
)
->context([
'setting'=>$setting,'message'=>$message
]);
$mailer->send($email);}
catch (\Exception $e) {
$this->addFlash('error', "Une erreur s'est produite lors de l'envoi de l'e-mail..");
// Redirect to the specified route
return $this->redirectToRoute('app_virtual_classroom_signatures', ['id' => $idclasse], Response::HTTP_SEE_OTHER);
}
// Rediriger vers une autre page après sauvegarde
return $this->redirectToRoute('app_virtual_classroom_signatures', ['id' => $idclasse], Response::HTTP_SEE_OTHER);
}
#[Route('/deletesignatureFormateur/{id}', name: 'app_deletesignatureFormateur')]
public function deletesignatureFormateur(SignatureRepository $signatureRepository, Request $request, QcmcalssroomRepository $qcmcalssroomRepository, VideoclassroomRepository $videoclassroomRepository, SupportRepository $supportRepository, UserRepository $userRepository, SettingRepository $settingRepository, Signature $signature): Response
{
$student = $signature->getUser();
$classe=$signature->getClassevirtuelle();
$signature=$signatureRepository->findOneBy(['user'=>$student,'classevirtuelle'=>$classe]);
$signatureRepository->remove($signature, true);
// Rediriger vers une autre page après sauvegarde
return $this->redirectToRoute('app_virtual_classroom_index_formateur', ['id'=>$classe->getSession()->getId()], Response::HTTP_SEE_OTHER);
}
#[Route('/save-signatureFormateur/{id}/{idstudent}', name: 'save_signatureFormateur')]
public function saveSignFormateur(InscritSessionRepository $inscritSessionRepository,
SignatureRepository $signatureRepository,
$idstudent,
Request $request,
QcmcalssroomRepository $qcmcalssroomRepository,
VideoclassroomRepository $videoclassroomRepository,
SupportRepository $supportRepository,
UserRepository $userRepository,
SettingRepository $settingRepository,
VirtualClassroom $virtualClassroom
): Response {
$date = new \DateTime('now', new DateTimeZone('Africa/Tunis'));
$student = $userRepository->find($idstudent);
$oldsignature = $signatureRepository->findOneBy(['user' => $student, 'classevirtuelle' => $virtualClassroom]);
$emailstudet=$student->getEmail();
$session=$virtualClassroom->getSession();
$inscrit=$inscritSessionRepository->findOneBy(['session'=>$session,'email'=>$emailstudet]);
// Calculate the start and end date/time of the virtual class
// $classeDate = $virtualClassroom->getDate();
// $classeHeureDebut = $virtualClassroom->getHeureDebut();
// $classeHeureFin = $virtualClassroom->getHeureFin();
//
// $classeDateHeureDebut = (new \DateTime($classeDate->format('Y-m-d') . ' ' . $classeHeureDebut->format('H:i:s')))
// ->setTimezone(new DateTimeZone('Africa/Tunis'));
// $classeDateHeureFin = (new \DateTime($classeDate->format('Y-m-d') . ' ' . $classeHeureFin->format('H:i:s')))
// ->setTimezone(new DateTimeZone('Africa/Tunis'));
//
// // Add 24 hours to the end date and time
// $classeDateHeureFinPlus24h = clone $classeDateHeureFin;
// $classeDateHeureFinPlus24h->add(new \DateInterval('PT24H'));
//
// // Check if the current date and time is after the end date plus 24 hours
// if ($date > $classeDateHeureFinPlus24h) {
// $this->addFlash('danger', 'Vous ne pouvez pas signer, la classe virtuelle est terminée depuis plus de 24 heures.');
// return $this->redirectToRoute('app_virtual_classroom_index_formateur', ['id' => $virtualClassroom->getSession()->getId()], Response::HTTP_SEE_OTHER);
// }
if ($oldsignature) {
$this->addFlash('success', 'Signature existe déjà!');
return $this->redirectToRoute('app_virtual_classroom_index_formateur', ['id' => $virtualClassroom->getSession()->getId()], Response::HTTP_SEE_OTHER);
} else {
$newsignature = new Signature();
$newsignature->setUser($student);
if($inscrit){
$newsignature->setInscrit($inscrit);
}
$newsignature->setClassevirtuelle($virtualClassroom);
$newsignature->setDate($date);
$signatureData = $request->request->get('signatureData');
// Décoder l'image base64 et sauvegarder sur le serveur
if ($signatureData) {
$signatureData = str_replace('data:image/png;base64,', '', $signatureData);
$signatureData = str_replace(' ', '+', $signatureData);
$signatureImage = base64_decode($signatureData);
// Créer un nom de fichier unique pour la signature
$filename = sprintf('%s-%s.png', $idstudent, time());
// Utiliser le chemin spécifié dans parameters.yaml
$filePath = $this->getParameter('signature_directory') . '/' . $filename;
file_put_contents($filePath, $signatureImage);
// Sauvegarder uniquement le nom de fichier dans la base de données
$newsignature->setSignature($filename);
$signatureRepository->save($newsignature, true);
$this->addFlash('success', 'Signature sauvegardée avec succès !');
}
// Rediriger vers une autre page après sauvegarde
return $this->redirectToRoute('app_virtual_classroom_index_formateur', ['id' => $virtualClassroom->getSession()->getId()], Response::HTTP_SEE_OTHER);
}
}
#[Route('/signatures/{id}', name: 'app_virtual_classroom_signatures', methods: ['GET'])]
#[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
public function signatures(
SignatureRepository $signatureRepository,
InscritSessionRepository $inscritSessionRepository,
UserRepository $userRepository,
SettingRepository $settingRepository,
VirtualClassroom $virtualClassroom
): Response {
$id = $this->getUser()->getId();
$user = $userRepository->find($id);
$setting = $settingRepository->find(1);
// Récupérer tous les inscrits liés à la classe virtuelle via une session ou autre champ
$inscrits = $inscritSessionRepository->findBy(['session' => $virtualClassroom->getSession(),'isAffected'=>true]);
$totalInscrits = count($inscrits);
// Initialiser une liste pour stocker les signatures et les informations des inscrits
$inscritsWithSignatures = [];
$inscritsAvecSignature = 0;
foreach ($inscrits as $inscrit) {
// Chercher la signature de chaque inscrit
$signature = $signatureRepository->findOneBy([
'classevirtuelle' => $virtualClassroom,
'inscrit' => $inscrit
]);
if ($signature) {
$inscritsAvecSignature++;
}
// Ajouter l'inscrit, la signature et la date de la signature (si elle existe) au tableau
$inscritsWithSignatures[] = [
'inscrit' => $inscrit,
'signature' => $signature ? $signature->getSignature() : null,
'date' => $signature ? $signature->getDate() : null,
];
}
// Calculer le nombre d'inscrits sans signature
$inscritsSansSignature = $totalInscrits - $inscritsAvecSignature;
return $this->render('virtual_classroom/signatures.html.twig', [
'virtual_classroom' => $virtualClassroom,
'setting' => $setting,
'user' => $user,
'inscritsWithSignatures' => $inscritsWithSignatures,
'totalInscrits' => $totalInscrits,
'inscritsAvecSignature' => $inscritsAvecSignature,
'inscritsSansSignature' => $inscritsSansSignature
]);
}
#[Route('/deletesignature/{id}', name: 'app_deletesignature')]
public function deletesignature(InscritSessionRepository $inscritSessionRepository,SignatureRepository $signatureRepository, Request $request, QcmcalssroomRepository $qcmcalssroomRepository, VideoclassroomRepository $videoclassroomRepository, SupportRepository $supportRepository, UserRepository $userRepository, SettingRepository $settingRepository, Signature $signature): Response
{
$student = $signature->getUser();
$classe=$signature->getClassevirtuelle();
$session=$classe->getSession();
$emailstudet=$student->getEmail();
$signature=$signatureRepository->findOneBy(['user'=>$student,'classevirtuelle'=>$classe]);
$inscrit=$inscritSessionRepository->findOneBy(['session'=>$session,'email'=>$emailstudet]);
if ($inscrit ){
$count=$inscrit->getCount();
if($count > 0){
$inscrit->setCount($count - 1);}
$inscritSessionRepository->save($inscrit, true);
}
$signatureRepository->remove($signature, true);
// Rediriger vers une autre page après sauvegarde
return $this->redirectToRoute('app_virtual_classroom_index_admin', ['id'=>$classe->getSession()->getId()], Response::HTTP_SEE_OTHER);
}
#[Route('/save-signature/{id}/{idstudent}', name: 'save_signature')]
public function save(InscritSessionRepository $inscritSessionRepository,
SignatureRepository $signatureRepository,
$idstudent,
Request $request,
QcmcalssroomRepository $qcmcalssroomRepository,
VideoclassroomRepository $videoclassroomRepository,
SupportRepository $supportRepository,
UserRepository $userRepository,
SettingRepository $settingRepository,
VirtualClassroom $virtualClassroom
): Response {
$date = new \DateTime('now', new DateTimeZone('Africa/Tunis'));
$student = $userRepository->find($idstudent);
$emailstudet=$student->getEmail();
$session=$virtualClassroom->getSession();
$inscrit=$inscritSessionRepository->findOneBy(['session'=>$session,'email'=>$emailstudet]);
if ($inscrit){
$count=$inscrit->getCount();
if($count == null){
$inscrit->setCount(0);
$inscritSessionRepository->save($inscrit, true);
}
$inscrit->setCount($count + 1);
$inscritSessionRepository->save($inscrit, true);
}
$oldsignature = $signatureRepository->findOneBy(['user' => $student, 'classevirtuelle' => $virtualClassroom]);
// // Calculate the start and end date/time of the virtual class
// $classeDate = $virtualClassroom->getDate();
// $classeHeureDebut = $virtualClassroom->getHeureDebut();
// $classeHeureFin = $virtualClassroom->getHeureFin();
//
// $classeDateHeureDebut = (new \DateTime($classeDate->format('Y-m-d') . ' ' . $classeHeureDebut->format('H:i:s')))
// ->setTimezone(new DateTimeZone('Africa/Tunis'));
// $classeDateHeureFin = (new \DateTime($classeDate->format('Y-m-d') . ' ' . $classeHeureFin->format('H:i:s')))
// ->setTimezone(new DateTimeZone('Africa/Tunis'));
//
// // Add 24 hours to the end date and time
// $classeDateHeureFinPlus24h = clone $classeDateHeureFin;
// $classeDateHeureFinPlus24h->add(new \DateInterval('PT24H'));
//
// // Check if the current date and time is after the end date plus 24 hours
// if ($date > $classeDateHeureFinPlus24h) {
// $this->addFlash('danger', 'Vous ne pouvez pas signer, la classe virtuelle est terminée depuis plus de 24 heures.');
// return $this->redirectToRoute('app_virtual_classroom_index_formateur', ['id' => $virtualClassroom->getSession()->getId()], Response::HTTP_SEE_OTHER);
// }
if ($oldsignature) {
$this->addFlash('success', 'Signature existe déjà!');
return $this->redirectToRoute('app_virtual_classroom_index_admin', ['id' => $virtualClassroom->getSession()->getId()], Response::HTTP_SEE_OTHER);
} else {
$newsignature = new Signature();
$newsignature->setUser($student);
if($inscrit){
$newsignature->setInscrit($inscrit);
}
$newsignature->setClassevirtuelle($virtualClassroom);
$newsignature->setDate($date);
$signatureData = $request->request->get('signatureData');
// Décoder l'image base64 et sauvegarder sur le serveur
if ($signatureData) {
$signatureData = str_replace('data:image/png;base64,', '', $signatureData);
$signatureData = str_replace(' ', '+', $signatureData);
$signatureImage = base64_decode($signatureData);
// Créer un nom de fichier unique pour la signature
$filename = sprintf('%s-%s.png', $idstudent, time());
// Utiliser le chemin spécifié dans parameters.yaml
$filePath = $this->getParameter('signature_directory') . '/' . $filename;
file_put_contents($filePath, $signatureImage);
// Sauvegarder uniquement le nom de fichier dans la base de données
$newsignature->setSignature($filename);
$signatureRepository->save($newsignature, true);
$this->addFlash('success', 'Signature sauvegardée avec succès !');
}
// Rediriger vers une autre page après sauvegarde
return $this->redirectToRoute('app_virtual_classroom_index_admin', ['id' => $virtualClassroom->getSession()->getId()], Response::HTTP_SEE_OTHER);
}
}
#[Route('/signature/{id}/{idstudent}', name: 'app_virtual_classroom_signature', methods: ['GET'])]
#[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
public function signature(SignatureRepository $signatureRepository,$idstudent,QcmcalssroomRepository $qcmcalssroomRepository,VideoclassroomRepository $videoclassroomRepository,SupportRepository $supportRepository,UserRepository $userRepository,SettingRepository $settingRepository,VirtualClassroom $virtualClassroom): Response
{
$student=$userRepository->find($idstudent);
$qcms=$qcmcalssroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
$videos=$videoclassroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
$supports = $supportRepository->findBy(['virtualclassroom'=>$virtualClassroom]);
// dd($supports);
$id = $this->getUser()->getId();
$user=$userRepository->find($id);
$setting=$settingRepository->find(1);
$signature=$signatureRepository->findOneBy(['user'=>$student,'classevirtuelle'=>$virtualClassroom]);
return $this->render('virtual_classroom/signature.html.twig', [
'virtual_classroom' => $virtualClassroom,
'setting'=>$setting,
'user'=>$user,
'support'=>$supports,'qcms'=>$qcms,'videos'=>$videos,
'signature'=>$signature
]);
}
#[Route('/stagiaire', name: 'app_virtual_classroom_index_stagiaire', methods: ['GET'])]
#[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
public function indexStagiaire(EvenementRepository $evenementRepository,UserRepository $userRepository,SettingRepository $settingRepository,VirtualClassroomRepository $virtualClassroomRepository): Response
{
$id = $this->getUser()->getId();
$user=$userRepository->find($id);
$setting=$settingRepository->find(1);
$inscritsessions=$user->getInscritSessions();
// dd($inscritsessions);
$tab=array();
foreach ($inscritsessions as $session){
$virtualClassroom = $session->getSession()->getId();
// Vérifier si la virtualClassroom existe et si elle n'est pas déjà ajoutée au tableau
array_push($tab, $virtualClassroom);
}
return $this->render('virtual_classroom/indexStagiaire.html.twig', [
'virtual_classrooms' => $virtualClassroomRepository->findAll(),
'setting'=>$setting,
'user'=>$user,
'tab'=>$tab
]);
}
#[Route('/classvirtuel/{id}', name: 'app_virtual_classroom_index_admin', methods: ['GET'])]
#[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
public function indexvirtuelAdmin(InscritSessionRepository $inscritSessionRepository,SignatureRepository $signatureRepository,Evenement $evenement,UserRepository $userRepository,SettingRepository $settingRepository,VirtualClassroomRepository $virtualClassroomRepository): Response
{
$id = $this->getUser()->getId();
$user=$userRepository->find($id);
$setting=$settingRepository->find(1);
$virtualClassrooms=$virtualClassroomRepository->findBy(['session'=>$evenement]);
$signaturesByClassroom = [];
foreach ($virtualClassrooms as $classroom) {
$signature = $signatureRepository->findSignatureByUserAndClassroom($user, $classroom);
$signaturesByClassroom[$classroom->getId()] = $signature; // Stocker l'objet Signature
}
$testInscrit=false;
$inscrit=$inscritSessionRepository->findOneBy(['session'=>$evenement,'isAffected'=>true]);
if($inscrit){
$testInscrit=true;
}
// Vérification des rôles
$roles = $user->getRoles();
if (in_array('ROLE_ADMIN', $roles) || in_array('ROLE_COACH', $roles)) {
$testInscrit = true;
}
//dd( $testInscrit,$inscrit);
$virtuals = $virtualClassroomRepository->findBy(
['session' => $evenement],
['date' => 'DESC'] // Juste une base rapide, on retrie proprement après
);
// Trie proprement date + heureDebut
usort($virtuals, function ($a, $b) {
$aDateTime = (clone $a->getDate())->setTime(
(int)$a->getHeureDebut()->format('H'),
(int)$a->getHeureDebut()->format('i'),
(int)$a->getHeureDebut()->format('s')
);
$bDateTime = (clone $b->getDate())->setTime(
(int)$b->getHeureDebut()->format('H'),
(int)$b->getHeureDebut()->format('i'),
(int)$b->getHeureDebut()->format('s')
);
return $bDateTime <=> $aDateTime;
});
return $this->render('virtual_classroom/index.html.twig', [
'virtual_classrooms' => $virtuals,
'setting'=>$setting,
'user'=>$user,'signaturesByClassroom' => $signaturesByClassroom,
'testInscrit'=>$testInscrit,'session'=>$evenement
]);
}
#[Route('/formateur/{id}', name: 'app_virtual_classroom_index_formateur', methods: ['GET'])]
#[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_PARTNER') ")]
public function indexFormateur(InscritSessionRepository $inscritSessionRepository,SignatureRepository $signatureRepository,Evenement $evenement,UserRepository $userRepository,SettingRepository $settingRepository,VirtualClassroomRepository $virtualClassroomRepository): Response
{
$id = $this->getUser()->getId();
$user=$userRepository->find($id);
$setting=$settingRepository->find(1);
// $this->addFlash('error', "Une erreur s'est produite lors de l'envoi de l'e-mail..");
$virtualClassrooms=$virtualClassroomRepository->findBy(['session'=>$evenement]);
$signaturesByClassroom = [];
foreach ($virtualClassrooms as $classroom) {
$signature = $signatureRepository->findSignatureByUserAndClassroom($user, $classroom);
$signaturesByClassroom[$classroom->getId()] = $signature; // Stocker l'objet Signature
}
$testInscrit = true;
$virtuals = $virtualClassroomRepository->findBy(
['session' => $evenement],
['date' => 'DESC'] // Juste une base rapide, on retrie proprement après
);
// Trie proprement date + heureDebut
usort($virtuals, function ($a, $b) {
$aDateTime = (clone $a->getDate())->setTime(
(int)$a->getHeureDebut()->format('H'),
(int)$a->getHeureDebut()->format('i'),
(int)$a->getHeureDebut()->format('s')
);
$bDateTime = (clone $b->getDate())->setTime(
(int)$b->getHeureDebut()->format('H'),
(int)$b->getHeureDebut()->format('i'),
(int)$b->getHeureDebut()->format('s')
);
return $bDateTime <=> $aDateTime;
});
return $this->render('virtual_classroom/index.html.twig', [
'virtual_classrooms' => $virtuals,
'setting'=>$setting,
'user'=>$user,'session'=>$evenement,'signaturesByClassroom' => $signaturesByClassroom,
'testInscrit'=>$testInscrit,'session'=>$evenement
]);
}
#[Route('/', name: 'app_virtual_classroom_index', methods: ['GET'])]
#[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
public function index(InscritSessionRepository $inscritSessionRepository,UserRepository $userRepository,SettingRepository $settingRepository,VirtualClassroomRepository $virtualClassroomRepository): Response
{
$id = $this->getUser()->getId();
$user=$userRepository->find($id);
$setting=$settingRepository->find(1);
$testInscrit=false;
// Vérification des rôles
$roles = $user->getRoles();
if (in_array('ROLE_ADMIN', $roles) || in_array('ROLE_COACH', $roles)) {
$testInscrit = true;
}
return $this->render('virtual_classroom/index.html.twig', [
'virtual_classrooms' => $virtualClassroomRepository->findAll(),
'setting'=>$setting,
'user'=>$user,
'testInscrit'=>$testInscrit
]);
}
#[Route('/newclassroom', name: 'app_virtual_classroom_newclassroom', methods: ['GET', 'POST'])]
#[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
public function newclasse(QcmcalssroomRepository $qcmcalssroomRepository,SupportRepository $supportRepository,VideoclassroomRepository $videoclassroomRepository,InscritSessionRepository $inscritSessionRepository,MailerInterface $mailer,EvenementRepository $evenementRepository,EntityManagerInterface $entityManager,SluggerInterface $slugger,UserRepository $userRepository,SettingRepository $settingRepository,Request $request, VirtualClassroomRepository $virtualClassroomRepository): Response
{
$dateclasse = new \DateTime('now', new DateTimeZone('Africa/Tunis'));
$id = $this->getUser()->getId();
$user=$userRepository->find($id);
$setting=$settingRepository->find(1);
$virtualClassroom = new VirtualClassroom();
$virtualClassroom->setFormateur($user);
// $support = new Support();
$idsession= $request->request->get('session');
$session=$evenementRepository->find($idsession);
$virtualClassroom->setSession($session);
$inscrits=$inscritSessionRepository->findBy(['isAffected'=>true,'session'=>$session]);
$tabinscrits=array();
// foreach ($inscrits as $u){
// array_push($tabinscrits, $u->getEmail() );
//
// }
foreach ($inscrits as $u) {
$email = trim($u->getEmail()); // Supprime les espaces ou les caractères \n et \r
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
array_push($tabinscrits, $email);
}
}
$titre= $request->request->get('titre');
$virtualClassroom->setTitre($titre);
$lienmeet= $request->request->get('lienmeet');
$virtualClassroom->setLienmeet($lienmeet);
$drive= $request->request->get('drive');
$virtualClassroom->setDrive($drive);
$dateInput = $request->request->get('date'); // ex: 2026-05-22
$heureDebutInput = $request->request->get('heureDebut'); // ex: 14:00
$heureFinInput = $request->request->get('heureFin'); // ex: 16:00
$date = new \DateTime($dateInput, new \DateTimeZone('Africa/Tunis'));
$heureDebut = new \DateTime(
$dateInput . ' ' . $heureDebutInput,
new \DateTimeZone('Africa/Tunis')
);
$heureFin = new \DateTime(
$dateInput . ' ' . $heureFinInput,
new \DateTimeZone('Africa/Tunis')
);
$virtualClassroom->setDate($date);
$virtualClassroom->setHeureDebut($heureDebut);
$virtualClassroom->setHeureFin($heureFin);
$description= $request->request->get('description');
$virtualClassroom->setDescription($description);
//SUPPORT
$nbr= $request->request->get('nbrc_a');
if ($nbr == 0) {
// $pdf = $request->request->get('pdf0');
$titre = $request->request->get('titres0');
$pdf = $request->files->get('pdf0');
if ($pdf) {
$pr = new Support();
$pr->setTitre($titre);
$pr->setVirtualclassroom($virtualClassroom);
$originalLogoname = pathinfo($pdf->getClientOriginalName(), PATHINFO_FILENAME);
$newLogoname = $originalLogoname . '-' . uniqid() . '.' . $pdf->guessExtension();
// Move the file to the directory where brochures are stored
try {
$pdf->move(
$this->getParameter('support_directory'),
$newLogoname
);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
}
$pr->setPdf($newLogoname);
$entityManager->persist($pr);
}
}
elseif ($nbr > 0) {
for ($i = 0; $i <= $nbr; $i++) {
if ($request->files->get('pdf'. $i)) {
$pr = new Support();
$titre = $request->request->get('titres'. $i);
$pr->setTitre($titre);
$pdf = $request->files->get('pdf'. $i);
if ($pdf) {
$originalLogoname = pathinfo($pdf->getClientOriginalName(), PATHINFO_FILENAME);
$newLogoname = $originalLogoname . '-' . uniqid() . '.' . $pdf->guessExtension();
// Move the file to the directory where brochures are stored
try {
$pdf->move(
$this->getParameter('support_directory'),
$newLogoname
);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
}
$pr->setPdf($newLogoname);
}
$pr->setVirtualclassroom($virtualClassroom);
$entityManager->persist($pr);
}
}
}
//QCM
$nbrqcm= $request->request->get('nbrc_q');
if ($nbrqcm == 0) {
// $pdf = $request->request->get('pdf0');
$qcm= $request->request->get('qcm0');
$titre = $request->request->get('titreq0');
if($qcm != ""){
$pr = new Qcmcalssroom();
$pr->setTitre($titre);
$pr->setQcm($qcm);
$pr->setVirtualclass($virtualClassroom);
// $video = $request->files->get('video0');
//
// if ($video) {
// $originalLogoname = pathinfo($video->getClientOriginalName(), PATHINFO_FILENAME);
// $newLogoname = $originalLogoname . '-' . uniqid() . '.' . $video->guessExtension();
//
// // Move the file to the directory where brochures are stored
// try {
// $video->move(
// $this->getParameter('support_directory'),
// $newLogoname
// );
// } catch (FileException $e) {
// // ... handle exception if something happens during file upload
// }
//
// $pr->setVideo($newLogoname);
// }
$entityManager->persist($pr);}
}
elseif ($nbrqcm > 0) {
for ($i = 0; $i <= $nbrqcm; $i++) {
if ( $request->request->get('qcm'. $i)) {
$pr = new Qcmcalssroom();
$titre = $request->request->get('titreq'. $i);
$pr->setTitre($titre);
$qcm= $request->request->get('qcm'. $i);
$pr->setQcm($qcm);
$pr->setVirtualclass($virtualClassroom);
$entityManager->persist($pr);
}
}
}
//video
$nbrvideo= $request->request->get('nbrc_v');
if ($nbrvideo == 0) {
$embed = $request->request->get('embed0');
$video = $request->request->get('idvideo0');
$titre = $request->request->get('titrev0');
if($video) {
$pr = new Videoclassroom();
$pr->setTitre($titre);
$pr->setVirtualclass($virtualClassroom);
$pr->setEmbed($embed);
$pr->setIdvideo($video);
$pr->setDate($dateclasse);
$entityManager->persist($pr);
}
}
elseif ($nbrvideo > 0) {
for ($i = 0; $i <= $nbrvideo; $i++) {
if ($request->request->get('idvideo'. $i)) {
$pr = new Videoclassroom();
$titre = $request->request->get('titrev'. $i);
$pr->setTitre($titre);
$video = $request->request->get('idvideo'. $i);
$embed = $request->request->get('embed'. $i);
$pr->setDate($dateclasse);
$pr->setVirtualclass($virtualClassroom);
$pr->setEmbed($embed);
$pr->setIdvideo($video);
$entityManager->persist($pr);
}
}
}
$virtualClassroomRepository->save($virtualClassroom, true);
$supports=$supportRepository->findBy(['virtualclassroom'=>$virtualClassroom]);
$qcms=$qcmcalssroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
$videos=$videoclassroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
// Récupérer la case à cocher "notify"
$sendNotification = $request->request->get('notify'); // '1' si cochée, null si décochée
if ($sendNotification) {
try {
$email = (new TemplatedEmail())
->from(new Address($this->fromAddress, 'Sip Academy')) // Utilisation de Address pour inclure l'email et le nom
// ->to('sameh.trabelsi@sesame.com.tn')
->subject('Nouvelle Virtual Classroom ' . $virtualClassroom->getTitre())
->htmlTemplate(
'virtual_classroom/email.html.twig'
)
->context([
'virtual' => $virtualClassroom, 'setting' => $setting,
'supports' => $supports, 'qcms' => $qcms,
'videos' => $videos
]);
// $attachmentPath = $this->getParameter('news_directory') . '/' . $newLogoname;
// $email->attachFromPath($attachmentPath);
foreach ($tabinscrits as $recipientEmail) {
$email->addBcc($recipientEmail);
}
$mailer->send($email);
} catch (\Exception $e) {
$this->addFlash('error', "Une erreur s'est produite lors de l'envoi de l'e-mail..");
// Redirect to the specified route
return $this->redirectToRoute('app_virtual_classroom_index_formateur', ['id' => $virtualClassroom->getSession()->getId()], Response::HTTP_SEE_OTHER);
}
}
return $this->redirectToRoute('app_virtual_classroom_index_formateur', ['id'=>$virtualClassroom->getSession()->getId()], Response::HTTP_SEE_OTHER);
}
#[Route('/new/{ids}', name: 'app_virtual_classroom_new', methods: ['GET', 'POST'])]
#[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
public function new($ids,EvenementRepository $evenementRepository,EntityManagerInterface $entityManager,SluggerInterface $slugger,UserRepository $userRepository,SettingRepository $settingRepository,Request $request, VirtualClassroomRepository $virtualClassroomRepository): Response
{
$session=$evenementRepository->find($ids);
$id = $this->getUser()->getId();
$user=$userRepository->find($id);
$sesions=$evenementRepository->findBy(['formateur'=>$user]);
$setting=$settingRepository->find(1);
$virtualClassroom = new VirtualClassroom();
// $support = new Support();
$form = $this->createForm(VirtualClassroomType::class, $virtualClassroom);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// $virtualClassroom = $support->getVirtualclassroom();
// On récupère le nombre de fichiers PDF et vidéo à ajouter
$virtualClassroomRepository->save($virtualClassroom, true);
return $this->redirectToRoute('app_virtual_classroom_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('virtual_classroom/new.html.twig', [
'virtualclassroom' => $virtualClassroom,
'form' => $form,
'setting'=>$setting,
'user'=>$user,
'sessions'=>$sesions,'evenement'=>$session
]);
}
#[Route('/videos/{id}', name: 'app_virtual_classroom_showVideo', methods: ['GET'])]
#[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
public function showVideos(SuspensionInscritRepository $suspensionInscritRepository,InscritSessionRepository $inscritSessionRepository,QcmcalssroomRepository $qcmcalssroomRepository,VideoclassroomRepository $videoclassroomRepository,SupportRepository $supportRepository,UserRepository $userRepository,SettingRepository $settingRepository,VirtualClassroom $virtualClassroom): Response
{
$qcms=$qcmcalssroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
$videos=$videoclassroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
$supports = $supportRepository->findBy(['virtualclassroom'=>$virtualClassroom]);
// dd($supports);
$id = $this->getUser()->getId();
$user=$userRepository->find($id);
$setting=$settingRepository->find(1);
$testInscrit=false;
$evenement=$virtualClassroom->getSession();
$inscrit=$inscritSessionRepository->findOneBy(['session'=>$evenement,'stagiaire'=>$user,'isAffected'=>true]);
$isActive=false;
if($inscrit){
$isActive= $inscrit->isIsActive();
$testInscrit=true;
}
$isSuspension = false;
$suspension=$suspensionInscritRepository->findOneBy(['user'=>$inscrit],['id'=>'DESC']);
if ($isActive === false && $suspension) {
$suspensionDate = $suspension->getDate(); // Assurez-vous que la méthode getDate() existe pour obtenir la date de la suspension.
$virtualClassroomDate = $virtualClassroom->getDate(); // Assurez-vous que la méthode getDate() existe pour obtenir la date du virtualClassroom.
if ($suspensionDate <= $virtualClassroomDate) {
$isSuspension = true;
}
}
// Vérification des rôles
$roles = $user->getRoles();
if (in_array('ROLE_ADMIN', $roles) || in_array('ROLE_COACH', $roles)) {
$testInscrit = true;
//dd( $testInscrit);
}
return $this->render('virtual_classroom/videos.html.twig', [
'virtual_classroom' => $virtualClassroom,
'setting'=>$setting,
'user'=>$user,
'support'=>$supports,'qcms'=>$qcms,'videos'=>$videos,
'testInscrit'=>$testInscrit,
'isActive'=>$isActive,'isSuspension'=>$isSuspension
]);
}
#[Route('/{id}', name: 'app_virtual_classroom_show', methods: ['GET'])]
#[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
public function show(QcmcalssroomRepository $qcmcalssroomRepository,VideoclassroomRepository $videoclassroomRepository,SupportRepository $supportRepository,UserRepository $userRepository,SettingRepository $settingRepository,VirtualClassroom $virtualClassroom): Response
{
$qcms=$qcmcalssroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
$videos=$videoclassroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
$supports = $supportRepository->findBy(['virtualclassroom'=>$virtualClassroom]);
// dd($supports);
$id = $this->getUser()->getId();
$user=$userRepository->find($id);
$setting=$settingRepository->find(1);
return $this->render('virtual_classroom/show.html.twig', [
'virtual_classroom' => $virtualClassroom,
'setting'=>$setting,
'user'=>$user,
'support'=>$supports,'qcms'=>$qcms,'videos'=>$videos
]);
}
#[Route('/editclassroom/{id}', name: 'app_virtual_classroom_editclassroom', methods: ['GET', 'POST'])]
#[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
public function editclasse(InscritSessionRepository $inscritSessionRepository,MailerInterface $mailer,QcmcalssroomRepository $qcmcalssroomRepository,VideoclassroomRepository $videoclassroomRepository,SupportRepository $supportRepository,$id,EntityManagerInterface $entityManager,SluggerInterface $slugger,UserRepository $userRepository,SettingRepository $settingRepository,Request $request, VirtualClassroomRepository $virtualClassroomRepository): Response
{
$dateclasse = new \DateTime('now', new DateTimeZone('Africa/Tunis'));
$iduser = $this->getUser()->getId();
$user=$userRepository->find($iduser);
$setting=$settingRepository->find(1);
$virtualClassroom = $virtualClassroomRepository->find($id);
$supports = $supportRepository->findBy(['virtualclassroom'=>$virtualClassroom]);
$qcms = $qcmcalssroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
$videos = $videoclassroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
$session=$virtualClassroom->getSession();
$inscrits=$inscritSessionRepository->findBy(['isAffected'=>true,'session'=>$session]);
$tabinscrits=array();
// foreach ($inscrits as $u){
// array_push($tabinscrits, $u->getEmail() );
//
// }
foreach ($inscrits as $u) {
$email = trim($u->getEmail()); // Supprime les espaces ou les caractères \n et \r
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
array_push($tabinscrits, $email);
}
}
$titre= $request->request->get('titre');
$virtualClassroom->setTitre($titre);
$lienmeet= $request->request->get('lienmeet');
$virtualClassroom->setLienmeet($lienmeet);
$drive= $request->request->get('drive');
$virtualClassroom->setDrive($drive);
$date= $request->request->get('date');
$date = new DateTime($date);
$virtualClassroom->setDate($date);
$heureDebut= $request->request->get('heureDebut');
$heureDebut = new DateTime($heureDebut);
$virtualClassroom->setHeureDebut($heureDebut);
$heureFin= $request->request->get('heureFin');
$heureFin = new DateTime($heureFin);
$virtualClassroom->setHeureFin($heureFin);
$description= $request->request->get('description');
$virtualClassroom->setDescription($description);
$nbr= $request->request->get('nbrc_a');
$count = $request->request->get('count');
$nbrqcm= $request->request->get('nbrc_q');
$countqcm = $request->request->get('countqcm');
$nbrvideo= $request->request->get('nbrc_v');
$countvideo = $request->request->get('countvideo');
if(!$supports){
if ($nbr == 0) {
// $pdf = $request->request->get('pdf0');
// $duree = $request->request->get('date0');
$titre = $request->request->get('titres0');
$pdf = $request->files->get('pdf0');
if ($pdf) {
$pr = new Support();
$pr->setTitre($titre);
$originalLogoname = pathinfo($pdf->getClientOriginalName(), PATHINFO_FILENAME);
$newLogoname = $originalLogoname . '-' . uniqid() . '.' . $pdf->guessExtension();
// Move the file to the directory where brochures are stored
try {
$pdf->move(
$this->getParameter('support_directory'),
$newLogoname
);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
}
$pr->setPdf($newLogoname);
$pr->setVirtualclassroom($virtualClassroom);
$entityManager->persist($pr);
}
}
elseif ($nbr > 0) {
for ($i = 0; $i <= $nbr; $i++) {
if ($request->files->get('pdf'. $i)) {
$pr = new Support();
$titre = $request->request->get('titres'.$i);
$pr->setTitre($titre);
$pdf = $request->files->get('pdf'. $i);
if ($pdf) {
$originalLogoname = pathinfo($pdf->getClientOriginalName(), PATHINFO_FILENAME);
$newLogoname = $originalLogoname . '-' . uniqid() . '.' . $pdf->guessExtension();
// Move the file to the directory where brochures are stored
try {
$pdf->move(
$this->getParameter('support_directory'),
$newLogoname
);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
}
$pr->setPdf($newLogoname);
}
$pr->setVirtualclassroom($virtualClassroom);
$entityManager->persist($pr);
}
}
}
}
else{
if ($nbr == 0) {
$k=0;
foreach ($supports as $support){
$pdf = $request->files->get('pdf'.$k);
$titre = $request->request->get('titres'.$k);
$support->setTitre($titre);
if ($pdf) {
$originalLogoname = pathinfo($pdf->getClientOriginalName(), PATHINFO_FILENAME);
$newLogoname = $originalLogoname . '-' . uniqid() . '.' . $pdf->guessExtension();
// Move the file to the directory where brochures are stored
try {
$pdf->move(
$this->getParameter('support_directory'),
$newLogoname
);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
}
$support->setPdf($newLogoname);
}
$entityManager->persist($support);
$k++;}
}
elseif ($nbr >= $count) {
$k=0;
foreach ($supports as $support){
$pdf = $request->files->get('pdf'.$k);
$titre = $request->request->get('titres'.$k);
$support->setTitre($titre);
if ($pdf) {
$originalLogoname = pathinfo($pdf->getClientOriginalName(), PATHINFO_FILENAME);
$newLogoname = $originalLogoname . '-' . uniqid() . '.' . $pdf->guessExtension();
// Move the file to the directory where brochures are stored
try {
$pdf->move(
$this->getParameter('support_directory'),
$newLogoname
);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
}
$support->setPdf($newLogoname);
}
$entityManager->persist($support);
$k++;}
for ($i=$count+1 ; $i <= ($nbr+$count) ; $i++) {
if ($request->files->get('pdf'. $i)) {
$pr = new Support();
$titre = $request->request->get('titres'.$i);
$pr->setTitre($titre);
$pdf = $request->files->get('pdf'. $i);
if ($pdf) {
$originalLogoname = pathinfo($pdf->getClientOriginalName(), PATHINFO_FILENAME);
$newLogoname = $originalLogoname . '-' . uniqid() . '.' . $pdf->guessExtension();
// Move the file to the directory where brochures are stored
try {
$pdf->move(
$this->getParameter('support_directory'),
$newLogoname
);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
}
$pr->setPdf($newLogoname);
}
$pr->setVirtualclassroom($virtualClassroom);
$entityManager->persist($pr);
}
}
}
}
if(!$qcms){
if ($nbrqcm == 0) {
$pr = new Qcmcalssroom();
// $pdf = $request->request->get('pdf0');
$titre = $request->request->get('titreq0');
$pr->setTitre($titre);
$qcm= $request->request->get('qcm0');
if($qcm != ""){
$pr->setQcm($qcm);
$pr->setVirtualclass($virtualClassroom);
// $video = $request->files->get('video0');
//
// if ($video) {
// $originalLogoname = pathinfo($video->getClientOriginalName(), PATHINFO_FILENAME);
// $newLogoname = $originalLogoname . '-' . uniqid() . '.' . $video->guessExtension();
//
// // Move the file to the directory where brochures are stored
// try {
// $video->move(
// $this->getParameter('support_directory'),
// $newLogoname
// );
// } catch (FileException $e) {
// // ... handle exception if something happens during file upload
// }
//
// $pr->setVideo($newLogoname);
// }
$entityManager->persist($pr);}
}
elseif ($nbrqcm > 0) {
for ($i = 0; $i <= $nbrqcm; $i++) {
if ( $request->request->get('qcm'. $i)) {
$pr = new Qcmcalssroom();
$titre = $request->request->get('titreq'.$i);
$pr->setTitre($titre);
$qcm= $request->request->get('qcm'. $i);
$pr->setQcm($qcm);
$pr->setVirtualclass($virtualClassroom);
$entityManager->persist($pr);
}
}
}
}
else{
if ($nbrqcm == 0) {
$k=0;
foreach ($qcms as $q){
$qcm= $request->request->get('qcm'. $k);
$titre = $request->request->get('titreq'.$k);
$q->setTitre($titre);
$q->setQcm($qcm);
$entityManager->persist($q);
$k++;
$k++;}
}
elseif ($nbrqcm >= $countqcm) {
$k=0;
foreach ($qcms as $q){
$qcm= $request->request->get('qcm'. $k);
$titre = $request->request->get('titreq'.$k);
$q->setTitre($titre);
$q->setQcm($qcm);
$entityManager->persist($q);
$k++;
}
for ($i=$countqcm+1 ; $i <= ($nbrqcm+$countqcm) ; $i++) {
if ( $request->request->get('qcm'. $i)) {
$pr = new Qcmcalssroom();
$titre = $request->request->get('titreq'.$i);
$pr->setTitre($titre);
$qcm= $request->request->get('qcm'. $i);
$pr->setQcm($qcm);
$pr->setVirtualclass($virtualClassroom);
$entityManager->persist($pr);
}
}
}
}
$testVideo=false;
if(!$videos){
if ($nbrvideo == 0) {
$titre = $request->request->get('titrev0');
$video = $request->request->get('idvideo0');
$embed = $request->request->get('embed0');
if($video) {
$testVideo = true;
$pr = new Videoclassroom();
$pr->setTitre($titre);
$pr->setIdvideo($video);
$pr->setEmbed($embed);
$pr->setVirtualclass($virtualClassroom);
$pr->setDate($dateclasse);
$entityManager->persist($pr);
}
}
elseif ($nbrvideo > 0) {
for ($i = 0; $i <= $nbrvideo; $i++) {
if ($request->request->get('idvideo'. $i)) {
$testVideo=true;
$pr = new Videoclassroom();
$titre = $request->request->get('titrev'.$i);
$pr->setTitre($titre);
$pr->setDate($dateclasse);
$video = $request->request->get('idvideo'. $i);
$embed = $request->request->get('embed'. $i);
$pr->setIdvideo($video);
$pr->setEmbed($embed);
$pr->setVirtualclass($virtualClassroom);
$entityManager->persist($pr);
}
}
}
}
else{
if ($nbrvideo == 0) {
$k=0; $testVideo=true;
foreach ($videos as $v){
$titre = $request->request->get('titrev'.$k);
$v->setTitre($titre);
$video = $request->request->get('idvideo'. $k);
$embed = $request->request->get('embed'. $k);
$v->setIdvideo($video);
$v->setEmbed($embed);
$v->setDate($dateclasse);
$v->setVirtualclass($virtualClassroom);
$entityManager->persist($v);
$k++;}
}
elseif ($nbrvideo >= $countvideo) {
$testVideo=true;
$k=0;
foreach ($videos as $v){
$video = $request->request->get('idvideo'. $k);
$embed = $request->request->get('embed'. $k);
$v->setIdvideo($video);
$v->setEmbed($embed);
$titre = $request->request->get('titrev'.$k);
$v->setTitre($titre);
$v->setDate($dateclasse);
$entityManager->persist($v);
$k++;}
for ($i=$countvideo+1 ; $i <= ($nbrvideo+$countvideo) ; $i++) {
if ($request->request->get('idvideo'. $i)) {
$pr = new Videoclassroom();
$titre = $request->request->get('titrev'.$i);
$pr->setTitre($titre);
$video = $request->request->get('idvideo'. $i);
$embed = $request->request->get('embed'. $i);
$pr->setIdvideo($video);
$pr->setEmbed($embed);
$pr->setDate($dateclasse);
$pr->setVirtualclass($virtualClassroom);
$entityManager->persist($pr);
}
}
}
}
$virtualClassroomRepository->save($virtualClassroom, true);
$supports=$supportRepository->findBy(['virtualclassroom'=>$virtualClassroom]);
$qcms=$qcmcalssroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
$videos=$videoclassroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
$sendNotification = $request->request->get('notify');
if ($sendNotification) {
if ($testVideo) {
try {
$email = (new TemplatedEmail())
->from(new Address($this->fromAddress, 'Sip Academy')) // Utilisation de Address pour inclure l'email et le nom
// ->to('sameh.trabelsi@sesame.com.tn')
->subject('Nouvelles vidéos disponibles dans ' . $virtualClassroom->getTitre())
->htmlTemplate(
'virtual_classroom/emailVideo.html.twig')
->context([
'virtual' => $virtualClassroom, 'setting' => $setting,
'supports' => $supports, 'qcms' => $qcms,
'videos' => $videos
]);
// $attachmentPath = $this->getParameter('news_directory') . '/' . $newLogoname;
// $email->attachFromPath($attachmentPath);
foreach ($tabinscrits as $recipientEmail) {
$email->addBcc($recipientEmail);
}
$mailer->send($email);
} catch (\Exception $e) {
$this->addFlash('error', "Une erreur s'est produite lors de l'envoi de l'e-mail..");
// Redirect to the specified route
return $this->redirectToRoute('app_virtual_classroom_index_formateur', ['id' => $virtualClassroom->getSession()->getId()], Response::HTTP_SEE_OTHER);
}
} else {
try {
$email = (new TemplatedEmail())
->from(new Address($this->fromAddress, 'Sip Academy')) // Utilisation de Address pour inclure l'email et le nom
// ->to('sameh.trabelsi@sesame.com.tn')
->subject('Virtual Classroom ' . $virtualClassroom->getTitre())
->htmlTemplate(
'virtual_classroom/emailEdit.html.twig')
->context([
'virtual' => $virtualClassroom, 'setting' => $setting,
'supports' => $supports, 'qcms' => $qcms,
'videos' => $videos
]);
// $attachmentPath = $this->getParameter('news_directory') . '/' . $newLogoname;
// $email->attachFromPath($attachmentPath);
foreach ($tabinscrits as $recipientEmail) {
$email->addBcc($recipientEmail);
}
$mailer->send($email);
} catch (\Exception $e) {
$this->addFlash('error', "Une erreur s'est produite lors de l'envoi de l'e-mail..");
// Redirect to the specified route
return $this->redirectToRoute('app_virtual_classroom_index_formateur', ['id' => $virtualClassroom->getSession()->getId()], Response::HTTP_SEE_OTHER);
}
}
}
return $this->redirectToRoute('app_virtual_classroom_index_formateur', ['id'=>$virtualClassroom->getSession()->getId()], Response::HTTP_SEE_OTHER);
}
#[Route('/{id}/edit', name: 'app_virtual_classroom_edit', methods: ['GET', 'POST'])]
#[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
public function edit(VideoclassroomRepository $videoclassroomRepository,QcmcalssroomRepository $qcmcalssroomRepository,EvenementRepository $evenementRepository,SupportRepository $supportRepository,EntityManagerInterface $entityManager,SluggerInterface $slugger,UserRepository $userRepository,SettingRepository $settingRepository,Request $request, VirtualClassroom $virtualClassroom, VirtualClassroomRepository $virtualClassroomRepository): Response
{
$supports = $supportRepository->findBy(['virtualclassroom'=>$virtualClassroom]);
$qcms = $qcmcalssroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
$videos = $videoclassroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
$id = $this->getUser()->getId();
$user=$userRepository->find($id);
$sesions=$evenementRepository->findBy(['formateur'=>$user]);
$setting=$settingRepository->find(1);
return $this->renderForm('virtual_classroom/edit.html.twig', [
'virtual_classroom' => $virtualClassroom,
'setting'=>$setting,
'user'=>$user,
'supports'=>$supports,
'sessions'=>$sesions,
'qcms'=>$qcms,
'videos'=>$videos,
'evenement'=>$virtualClassroom->getSession()
]);
}
#[Route('/delete/{id}', name: 'app_virtual_classroom_delete')]
#[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
public function delete(MailerInterface $mailer,SettingRepository $settingRepository,InscritSessionRepository $inscritSessionRepository,VideoclassroomRepository $videoclassroomRepository,QcmcalssroomRepository $qcmcalssroomRepository,SupportRepository $supportRepository,Request $request, VirtualClassroom $virtualClassroom, VirtualClassroomRepository $virtualClassroomRepository): Response
{
// Supprimer les fichiers PDF associés aux supports avant de supprimer le virtualClassroom
// foreach ($virtualClassroom->getSupports() as $support) {
// $pdfFilename = $support->getPdf();
// if ($pdfFilename) {
// $pdfPath = $this->getParameter('support_directory') . '/' . $pdfFilename;
// if (file_exists($pdfPath)) {
// unlink($pdfPath);
// }
// }
// }
// $videoFilename = $support->getVideo();
// if ($videoFilename) {
// $videoPath = $this->getParameter('support_directory') . '/' . $videoFilename;
// if (file_exists($videoPath)) {
// unlink($videoPath);
// }
// }
$session=$virtualClassroom->getSession();
$inscrits=$inscritSessionRepository->findBy(['isAffected'=>true,'session'=>$session]);
$tabinscrits=array();
foreach ($inscrits as $u) {
$email = trim($u->getEmail()); // Supprime les espaces ou les caractères \n et \r
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
array_push($tabinscrits, $email);
}
}
$supports=$supportRepository->findBy(['virtualclassroom'=>$virtualClassroom]);
foreach ($supports as $support) {
$supportRepository->remove($support,true);
}
$videos=$videoclassroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
foreach ($videos as $video) {
$videoclassroomRepository->remove($video,true);
}
$qcms=$qcmcalssroomRepository->findBy(['virtualclass'=>$virtualClassroom]);
foreach ($qcms as $qcm) {
$qcmcalssroomRepository->remove($qcm,true);
}
if (!empty($tabinscrits)) {
try {
$email = (new TemplatedEmail())
->from(new Address($this->fromAddress, 'Sip Academy')) // Utilisation de Address pour inclure l'email et le nom
// ->to('sameh.trabelsi@sesame.com.tn')
->subject('Virtual Classroom ' . $virtualClassroom->getTitre())
->htmlTemplate(
'virtual_classroom/emailDelete.html.twig')
->context([
'virtual' => $virtualClassroom, 'setting' => $settingRepository->find(1),
'supports' => $supports, 'qcms' => $qcms,
'videos' => $videos
]);
// $attachmentPath = $this->getParameter('news_directory') . '/' . $newLogoname;
// $email->attachFromPath($attachmentPath);
foreach ($tabinscrits as $recipientEmail) {
$email->addBcc($recipientEmail);
}
$mailer->send($email);
} catch (\Exception $e) {
$this->addFlash('error', "Une erreur s'est produite lors de l'envoi de l'e-mail..");
$virtualClassroomRepository->remove($virtualClassroom, true);
// Redirect to the specified route
return $this->redirectToRoute('app_virtual_classroom_index_formateur', ['id'=>$virtualClassroom->getSession()->getId()], Response::HTTP_SEE_OTHER);
}}
$virtualClassroomRepository->remove($virtualClassroom, true);
return $this->redirectToRoute('app_virtual_classroom_index_formateur', ['id'=>$virtualClassroom->getSession()->getId()], Response::HTTP_SEE_OTHER);
}
#[Route('/deleteVideo/{id}', name: 'app_virtual_classroom_deleteVideo')]
#[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
public function deleteVideo(VideoclassroomRepository $videoclassroomRepository,QcmcalssroomRepository $qcmcalssroomRepository,SupportRepository $supportRepository,Request $request, Videoclassroom $videoclassroom, VirtualClassroomRepository $virtualClassroomRepository): Response
{
$videoclassroomRepository->remove($videoclassroom, true);
return $this->redirectToRoute('app_virtual_classroom_edit', ['id'=>$videoclassroom->getVirtualclass()->getId()], Response::HTTP_SEE_OTHER);
}
}