src/Controller/AdminController.php line 716

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Emailsadmin;
  4. use App\Entity\Evenement;
  5. use App\Repository\ActualiteRepository;
  6. use App\Repository\CommandeRepository;
  7. use App\Repository\DemandeprofilRepository;
  8. use App\Repository\DemmandeformationRepository;
  9. use App\Repository\EmailsadminRepository;
  10. use App\Repository\EvaluationElearningRepository;
  11. use App\Repository\EvaluationRepository;
  12. use App\Repository\FormationRepository;
  13. use App\Repository\InscritSessionRepository;
  14. use App\Repository\MessageinscritRepository;
  15. use App\Repository\OffresinscritRepository;
  16. use App\Repository\OffresRepository;
  17. use App\Repository\ReclamationRepository;
  18. use App\Entity\Certificat;
  19. use App\Entity\Diplome;
  20. use App\Form\AdminType;
  21. use App\Form\UserType;
  22. use App\Repository\CertificatRepository;
  23. use App\Repository\DiplomeRepository;
  24. use App\Repository\EvenementRepository;
  25. use App\Repository\ExperienceRepository;
  26. use App\Repository\TemoignageRepository;
  27. use App\Repository\VirtualClassroomRepository;
  28. use DateTimeZone;
  29. use App\Repository\SettingRepository;
  30. use App\Repository\UserRepository;
  31. use Doctrine\ORM\EntityManagerInterface;
  32. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  33. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  34. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  35. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  36. use Symfony\Component\HttpFoundation\JsonResponse;
  37. use Symfony\Component\HttpFoundation\Request;
  38. use Symfony\Component\HttpFoundation\Response;
  39. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  40. use Symfony\Component\Routing\Annotation\Route;
  41. use DateTime;
  42. use Doctrine\Common\Collections\Criteria;
  43. class AdminController extends AbstractController
  44. {
  45.     #[Route('/verifemail'name'verif_email'methods: ['GET'])]
  46.     public function verifEmail(Request $request,UserRepository $userRepository,InscritSessionRepository  $inscritSessionRepository,SettingRepository $settingRepository,MessageinscritRepository $messageinscritRepository,ReclamationRepository $reclamationRepository): Response
  47.     {
  48.         $email=$request->get('email');
  49.         $user=$userRepository->findOneBy(['email'=>$email]);
  50.         $test=false;
  51. if($user){
  52.     $test=true;
  53. }
  54.         $output[]=array($user->getNom(),$user->getPrenom(),$user->getAdresse(),$user->getPhone(),$test);
  55.         return  new JsonResponse($output);
  56.     }
  57.     #[Route('/notifsSession'name'notifsSessons')]
  58.     public function notifs(InscritSessionRepository $inscritSessionRepository)
  59.     {
  60.         $reponses=  $inscritSessionRepository->findBy(['vue' => false], ['id' => 'DESC']);
  61.         $response = array();
  62.         foreach ($reponses as $r) {
  63.             $response[] = array(
  64.                 'id' => $r->getId(),
  65.                 'nom' => $r-> getNom(),
  66.                 'session' => $r->getSession()->getTitre(),
  67.                 'prenom' => $r->getPrenom(),
  68.                 'datee'=> $r->getDate()->format('d-m-Y H:i')
  69.                 // other fields
  70.             );
  71.         }
  72.         return new JsonResponse($response);
  73.     }
  74.     #[Route('/notifsoffre'name'notifsoffre')]
  75.     public function notifsoff(OffresinscritRepository $offresinscritRepository)
  76.     {
  77.         $reponses=  $offresinscritRepository->findBy(['vu' => "0"], ['id' => 'DESC']);
  78.         $response = array();
  79.         foreach ($reponses as $r) {
  80.             $response[] = array(
  81.                 'id' => $r->getId(),
  82.                 'nom' => $r-> getNom(),
  83.                 'type' => $r->getType(),
  84.                 'prenom' => $r->getPrenom(),
  85.                 'datee'=> $r->getDate()->format('d-m-Y H:i')
  86.                 // other fields
  87.             );
  88.         }
  89.         return new JsonResponse($response);
  90.     }
  91.     #[Route('/notifcompte'name'notifcompte')]
  92.     public function notifcompte(UserRepository $userRepository)
  93.     {
  94.         $reponses=  $userRepository->findBy(['vu' => "0"], ['id' => 'DESC']);
  95.         $response = array();
  96.         foreach ($reponses as $r) {
  97.             $response[] = array(
  98.                 'id' => $r->getId(),
  99.                 'nom' => $r-> getNom(),
  100.                 'email'=>$r->getEmail(),
  101.                 'roles' => $r->getRoles(),
  102.                 'prenom' => $r->getPrenom(),
  103.                 'datee'=> $r->getDate()->format('d-m-Y H:i')
  104.                 // other fields
  105.             );
  106.         }
  107.         return new JsonResponse($response);
  108.     }
  109.     #[Route('/notifsAvis'name'notifsAvis')]
  110.     public function notifsAvis(EvaluationElearningRepository $evaluationElearningRepositoryCommandeRepository $commandeRepositoryInscritSessionRepository $inscritSessionRepository)
  111.     {
  112.         // Récupérer les évaluations non lues
  113.         $reponses $evaluationElearningRepository->findBy(['isVu' => false], ['id' => 'DESC']);
  114.         $response = array();
  115.         foreach ($reponses as $r) {
  116.             $response[] = array(
  117.                 'id' => $r->getId(),
  118.                 'prenom' => $r->getUser()->getPrenom(),
  119.                 'nom' => $r->getUser()->getNom(),
  120.                 'note' => $r->getNote(),  // Note à afficher sous forme d'étoiles
  121.                 'avis' => $r->getDescription(),
  122.                 'formation' => $r->getFormation()->getTitre(),  // Ajout du titre de la formation
  123.                 'datee' => $r->getDate()->format('d-m-Y H:i')
  124.             );
  125.         }
  126.         // Retourner la réponse sous forme de JSON
  127.         return new JsonResponse($response);
  128.     }
  129.     #[Route('/notifsCommandes'name'notifsCommandes')]
  130.     public function notifsCommandes(CommandeRepository $commandeRepository,InscritSessionRepository $inscritSessionRepository)
  131.     {
  132.         $reponses=  $commandeRepository->findBy(['isVu' => false], ['id' => 'DESC']);
  133.         $response = array();
  134.         foreach ($reponses as $r) {
  135.             $response[] = array(
  136.                 'id' => $r->getId(),
  137.                 'nom' => $r-> getUser()->getNom(),
  138.                 'total' => $r->getTotal(),
  139.                 'prenom' => $r-> getUser()->getPrenom(),
  140.                 'facture' => $r-> getFacture(),
  141.                 'datee'=> $r->getDate()->format('d-m-Y H:i')
  142.                 // other fields
  143.             );
  144.         }
  145.         return new JsonResponse($response);
  146.     }
  147.     #[Route('/totalCommandes'name'app_commande_total'methods: ['GET'])]
  148.     public function totalCommandes(EvaluationElearningRepository $evaluationElearningRepository,CommandeRepository $commandeRepository,InscritSessionRepository  $inscritSessionRepository,UserRepository $userRepository,OffresinscritRepository $offresinscritRepository,SettingRepository $settingRepository,MessageinscritRepository $messageinscritRepository,ReclamationRepository $reclamationRepository): Response
  149.     {
  150.         $totalinscrit=$commandeRepository->findBy(['isVu'=>false]);
  151.         $evaluations=$evaluationElearningRepository->findBy(['isVu'=>false]);
  152.         $output[]=array(count($totalinscrit));
  153.         $output[]=array(count($evaluations));
  154.         $output[]=array(count($evaluations) + count($totalinscrit));
  155.         return  new JsonResponse($output);
  156.     }
  157.     #[Route('/totalinscrit'name'app_inscrit_total'methods: ['GET'])]
  158.     public function totalinscrits(InscritSessionRepository  $inscritSessionRepository,UserRepository $userRepository,OffresinscritRepository $offresinscritRepository,SettingRepository $settingRepository,MessageinscritRepository $messageinscritRepository,ReclamationRepository $reclamationRepository): Response
  159.     {
  160. $totalinscrit=$inscritSessionRepository->findBy(['vue'=>false]);
  161. $vuoffre=$offresinscritRepository->findBy(['vu'=>"0"]);
  162. $vucmpt=$userRepository->findBy(['vu'=>"0"]);
  163.         $output[]=array(count($totalinscrit));
  164.         $output[]=array(count($vuoffre) );
  165.         $output[]=array(count($vucmpt) );
  166.         $output[]=array(count($vuoffre) + count($totalinscrit)+count($vucmpt) );
  167.         return  new JsonResponse($output);
  168.     }
  169.     #[Route('/codev'name'codev'methods: ['GET'])]
  170.     public function codev(InscritSessionRepository  $inscritSessionRepository,Request $request,UserRepository $userRepository,OffresinscritRepository $offresinscritRepository,SettingRepository $settingRepository,MessageinscritRepository $messageinscritRepository,ReclamationRepository $reclamationRepository): Response
  171.     {
  172.        $code$request->getSession()->get('verification_code');
  173.        if ($code)
  174.        {
  175.            $output=1;
  176.        }
  177.        else
  178.        {
  179.            $output=0;
  180.        }
  181.         return  new JsonResponse($output);
  182.     }
  183.     #[Route('/tot'name'app_contact_tot'methods: ['GET'])]
  184.         public function tott(DemmandeformationRepository $demmandeformationRepository,EvaluationRepository $evaluationRepository,SettingRepository $settingRepository,DemandeprofilRepository $demandeprofilRepository,MessageinscritRepository $messageinscritRepository,ReclamationRepository $reclamationRepository): Response
  185.     {
  186.         $totalmessage=$messageinscritRepository->findBy(['lu'=>0,]);
  187.         $totalreclamation=$reclamationRepository->findBy(['lu'=>0,]);
  188.         $totaleval=$evaluationRepository->findBy(['lu'=>0,]);
  189.         $totalstu=$evaluationRepository->findByRolestudenteval();
  190.         $totalfor=$evaluationRepository->findByRolesformateureval();
  191.         $totalparrt=$evaluationRepository->findByRolespartnereval();
  192.         $lustagiere=$reclamationRepository->findBy(['lustagiaire'=>0,'user'=>$this->getUser()]);
  193.         $luusta=$messageinscritRepository->findBy(['lustagiaire'=>0,'user'=>$this->getUser()]);
  194.         $statu=$demandeprofilRepository->findBy(['statut'=>0,]);
  195. //        $statuforma=$demmandeformationRepository->findBy(['statut'=>0,]);
  196.         $totdemandeformation=$demmandeformationRepository->findBy(['vuadmin'=>0]);
  197.         $totdemandeformationPartner=$demmandeformationRepository->findBy(['vupartner'=>0,'user'=>$this->getUser()]);
  198.         $output[]=array(count($totalmessage));
  199.         $output[]=array(count($totalreclamation));
  200.         $output[]=array(count($lustagiere));
  201.         $output[]=array(count($luusta));
  202.         $output[]=array(count($statu));
  203.         $output[]=array(count($totdemandeformation));
  204.         $output[]=array(count($totdemandeformationPartner));
  205.         $output[]=array(count($totaleval));
  206.         $output[]=array(count($totalstu));
  207.         $output[]=array(count($totalfor));
  208.         $output[]=array(count($totalparrt));
  209.         return  new JsonResponse($output);
  210.     }
  211.     #[Route('/agendasession'name'app_agenda_admin'methods: ['GET' 'POST'])]
  212.     #[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') ")]
  213.     public function agendaSessions(EvenementRepository $evenementRepository,DiplomeRepository $diplomeRepository,ExperienceRepository $experienceRepository,CertificatRepository $certificatRepository,SettingRepository $settingRepository,EntityManagerInterface $entityManager,UserPasswordHasherInterface $userPasswordHasher,Request $requestUserRepository $userRepository): Response
  214.     {
  215.         $setting=$settingRepository->find(1);
  216.         $id =  $this->getUser()->getId();
  217.         $user=$userRepository->find($id);
  218.         $eventArray = [];
  219.         foreach ($evenementRepository->findAll() as $event) {
  220.             $eventArray[] = [
  221.                 'id' => $event->getId(),
  222.                 'title' => $event->getTitre(),
  223.                 'start' => $event->getStarttime()->format('Y-m-d H:i:s'),
  224.                 'end' => $event->getEndtime()->format('Y-m-d H:i:s'),
  225.                 'adresse'=>$event->getAdresse()
  226.             ];
  227.         }
  228. $data=json_encode($eventArray);
  229.         return $this->render('evenement/agendaAdmin.html.twig', [
  230.             'user'=>$user,
  231.             'setting'=>$setting,
  232.             'evenements'=>$evenementRepository->findAll(),
  233.             'data'=>$data
  234.         ]);
  235.     }
  236.     #[Route('/deleteEmail/{id}'name'app_delete_email'methods: ['GET' 'POST'])]
  237.     public function deleteEmil(Request $requestEmailsadminRepository $emailsadminRepositoryEmailsadmin  $emailsadmin): Response
  238.     {
  239.         $emailsadminRepository->remove($emailsadmintrue);
  240.         return $this->redirectToRoute('app_user_profile_admin', [], Response::HTTP_SEE_OTHER);
  241.     }
  242.     #[Route('/editprofileadmin'name'app_user_profile_admin'methods: ['GET' 'POST'])]
  243.     #[Security("is_granted('ROLE_ADMIN') or   is_granted('ROLE_ASSISTANT')")]
  244.     public function editProfileAdmin(EmailsadminRepository $emailsadminRepository,DiplomeRepository $diplomeRepository,ExperienceRepository $experienceRepository,CertificatRepository $certificatRepository,SettingRepository $settingRepository,EntityManagerInterface $entityManager,UserPasswordHasherInterface $userPasswordHasher,Request $requestUserRepository $userRepository): Response
  245.     {$nbr=  $request->request->get('nbrc_a');
  246.         $count=  $request->request->get('count');
  247.         $setting=$settingRepository->find(1);
  248.         $certifs = new Certificat();
  249.         $diplomes = new Diplome();
  250.         $id =  $this->getUser()->getId();
  251.         $user=$userRepository->find($id);
  252.         $emailsadmin=$emailsadminRepository->findBy(['user'=>$user]);
  253.         $bbien $user->getLogo();
  254.         $form $this->createForm(AdminType::class, $user);
  255.         $form->handleRequest($request);
  256.         $experience=$experienceRepository->findBy(['user'=>$user]);
  257.         $certif $certificatRepository->findBy(['user'=>$user]);
  258.         $diplome $diplomeRepository->findBy(['user'=>$user]);
  259.         if ($form->isSubmitted() && $form->isValid()) {
  260.             $certifs->setDateobtention(new \DateTime('now', new DateTimeZone('Africa/Tunis')));
  261.             $certifs->setDatevalidite(new \DateTime('now', new DateTimeZone('Africa/Tunis')));
  262.             $diplomes->setDateobtention(new \DateTime('now', new DateTimeZone('Africa/Tunis')));
  263. //            $users = new User();
  264. ////ajuter certificat
  265.             $phone1=  $request->request->get('phone1');
  266.             $user->setPhone($phone1);
  267.             $phone2=  $request->request->get('phone2');
  268.             $user->setPhone1($phone2);
  269.             $Linkedin=  $request->request->get('Linkedin');
  270.             $user->setLinkedin($Linkedin);
  271.             $facebook=  $request->request->get('Facebook');
  272.             $user->setFb($facebook);
  273.             $adresse=  $request->request->get('adresse');
  274.             $user->setAdresse($adresse);
  275.             //upload pdf
  276.             //fin upoad pdf
  277. if( $request->request->get('password') != ""){
  278.             $user->setPassword(
  279.                 $userPasswordHasher->hashPassword(
  280.                     $user,
  281.         $request->request->get('password')
  282.                 )
  283.             );}
  284.             $logo $form->get('logo')->getData();
  285.             if ( $logo) {
  286.                 $originalLogoname pathinfo$logo->getClientOriginalName(), PATHINFO_FILENAME);
  287.                 $newLogoname =   $originalLogoname.'-'.uniqid().'.'.$logo->guessExtension();
  288.                 // Move the file to the directory where brochures are stored
  289.                 try {
  290.                     $logo->move(
  291.                         $this->getParameter('coach_directory'),
  292.                         $newLogoname
  293.                     );
  294.                 } catch (FileException $e) {
  295.                     // ... handle exception if something happens during file upload
  296.                 }
  297.                 $user->setLogo($newLogoname);
  298.             }
  299.             elseif($logo === null)
  300.             {
  301.                 $user->setLogo($bbien);
  302.             }
  303.             $userRepository->save($usertrue);
  304.             if(!$emailsadmin){
  305.             if ($nbr == 0)
  306.             {
  307.                 $pr=new Emailsadmin();
  308.                 $titre=  $request->request->get('email0');
  309.                 $pr->setEmail($titre);
  310.                 $pr->setUser($user);
  311.                 $entityManager->persist($pr);}
  312.             elseif ( $nbr 0){
  313.                 for ($i=$i <= $nbr $i++) {
  314.                     if ($request->request->get('email'.$i) )
  315.                     {
  316.                         $pr=new Emailsadmin();
  317.                         $titre $request->request->get('email'.$i);
  318.                         $pr->setEmail($titre);
  319.                         $pr->setUser($user);
  320.                         $entityManager->persist($pr);
  321.                     }}
  322.             }
  323.             }
  324.             else{
  325.                 $k=0;
  326.                 if ($nbr == 0)
  327.                 {
  328.                     foreach ($emailsadmin as $item) {
  329.                         $titre=  $request->request->get('email'.$k);
  330.                         $item->setEmail($titre);
  331.                         ;
  332.                         $entityManager->persist($item);
  333.                         $k++;
  334.                     }
  335.                 }
  336.                 elseif (  $nbr >= $count){ $k=0;
  337.                     foreach ($emailsadmin as $item) {
  338.                         $titre=  $request->request->get('email'.$k);
  339.                         $item->setEmail($titre);
  340.                         ;
  341.                         $entityManager->persist($item);
  342.                         $k++;
  343.                     }
  344.                     for ($i=$count+$i <= ($nbr+$count) ; $i++) {
  345.                         if ($request->request->get('email'.$i) )
  346.                         {
  347.                             $pr=new Emailsadmin();
  348.                             $titre $request->request->get('email'.$i);
  349.                             $pr->setEmail($titre);
  350.                             $pr->setUser($user);
  351.                             $entityManager->persist($pr);
  352.                         }}
  353.                 }
  354.             }
  355.             $entityManager->flush();
  356.             return $this->redirectToRoute('app_user_profile_admin', ['setting'=>$setting], Response::HTTP_SEE_OTHER);
  357.         }
  358.         return $this->renderForm('admin/profileAdmin.html.twig', [
  359.             'user'=>$user,
  360.             'form'=>$form,
  361.             'setting'=>$setting,
  362.             'certificats'=>$certif,
  363.             'diplomes'=>$diplome,
  364.             'experiences'=>$experience,'emailsadmin'=>$emailsadmin
  365. //            'experiences' => $experienceRepository->findAll(),
  366. //            'certificats' => $certificatRepository->findAll(),
  367. //            'diplomes' => $diplomeRepository->findAll(),
  368.         ]);
  369.     }
  370.     #[Route('/dashboard_stagiaire'name'dashboard_stagiaire')]
  371.     public function dashboardStagiaire(
  372.         InscritSessionRepository $inscritSessionRepository,
  373.         VirtualClassroomRepository $virtualClassroomRepository,
  374.         EvenementRepository $evenementRepository// Ajoutez ce repository
  375.         SettingRepository $settingRepository,
  376.         ActualiteRepository $actualiteRepository,
  377.         TemoignageRepository $temoignageRepository,
  378.     ): Response {
  379.         $user $this->getUser();
  380.         $setting $settingRepository->find(1);
  381.         $dateActuelle = new \DateTime('now', new \DateTimeZone('Africa/Tunis'));
  382.         $derniereInscription $inscritSessionRepository->findOneBy(
  383.             ['stagiaire' => $user],
  384.             ['id' => 'DESC'// On prend la dernière ligne insérée en base
  385.         );
  386.         $maDerniereSession $derniereInscription $derniereInscription->getSession() : null;
  387.         // 1. Récupérer les IDs des sessions auxquelles le stagiaire est DÉJÀ inscrit
  388.         $inscriptions $inscritSessionRepository->findBy(['stagiaire' => $user]);
  389.         $sessionIdsInscrit = [];
  390.         foreach ($inscriptions as $inscrit) {
  391.             if ($inscrit->getSession()) {
  392.                 $sessionIdsInscrit[] = $inscrit->getSession()->getId();
  393.             }
  394.         }
  395.         // 2. Récupérer les 3 dernières classes virtuelles (déjà inscrit)
  396.         $dernieresClasses = [];
  397.         // 2. Récupérer les 3 dernières classes virtuelles (déjà inscrit) et filtrer par date
  398.         // 2. Récupérer les 3 dernières classes virtuelles (déjà inscrit) et filtrer par date/heure et dateFin
  399.         $dernieresClasses = [];
  400.         if (!empty($sessionIdsInscrit)) {
  401.             $dernieresClasses $virtualClassroomRepository->createQueryBuilder('v')
  402.                 ->where('v.session IN (:ids)')
  403.                 ->andWhere('v.date >= :now OR v.heureDebut >= :now OR v.heureFin >= :now')  // Filtrer les classes dont la date/heure de fin est >= maintenant
  404.                 ->setParameter('ids'$sessionIdsInscrit)
  405.                 ->setParameter('now'$dateActuelle)
  406.                 ->orderBy('v.date''DESC')
  407.                 ->setMaxResults(3)
  408.                 ->getQuery()
  409.                 ->getResult();
  410.         }
  411.         // 3. Récupérer les 3 prochaines sessions disponibles (toutes ou filtrées)
  412.         // Ici on prend les sessions qui commencent bientôt
  413.         $prochainsEvenements $evenementRepository->createQueryBuilder('e')
  414.             ->where('e.starttime >= :now')
  415.             ->andWhere('e.isArchive = :false')
  416.             ->setParameter('now'$dateActuelle)
  417.             ->setParameter('false'false)
  418.             ->orderBy('e.starttime''ASC')
  419.             ->getQuery()
  420.             ->getResult();
  421.         $actualitesinternes $actualiteRepository->findBy(
  422.             ['type' => ['interne''mixte']],  // <- IN (...)
  423.             ['id' => 'DESC']
  424.         );
  425.         // Récupérer toutes les inscriptions de l'utilisateur
  426.         $inscriptionscertif $inscritSessionRepository->findBy(['stagiaire' => $user]);
  427. // Filtrer uniquement celles avec certif
  428.         $certifications = [];
  429.         foreach ($inscriptionscertif as $inscription) {
  430.             if ($inscription->getCertif() && !empty($inscription->getCertif())) {
  431.                 $certifications[] = $inscription;
  432.             }
  433.         }
  434.         $inscriptionsParSession = [];
  435.         if (!empty($sessionIdsInscrit)) {
  436.             // Parcourir les sessions du formateur et récupérer les inscriptions
  437.             foreach ($sessionIdsInscrit as $sessionId) {
  438.                 // Récupérer les inscriptions pour cette session, avec isAffected = true
  439.                 $inscriptions $inscritSessionRepository->createQueryBuilder('i')
  440.                     ->where('i.session = :sessionId')
  441.                     ->andWhere('i.isAffected = :isAffected')
  442.                     ->setParameter('sessionId'$sessionId)
  443.                     ->setParameter('isAffected'true)
  444.                     ->getQuery()
  445.                     ->getResult();
  446.                 // Ajouter le nombre d'inscriptions dans le tableau
  447.                 $inscriptionsParSession[$sessionId] = count($inscriptions);
  448.             }
  449.         }
  450.         return $this->render('admin/dashboardStagiaire.html.twig', [
  451.             'setting' => $setting,
  452.             'user' => $user,'maDerniereSession' => $maDerniereSession,
  453.             'dateActuelle' => $dateActuelle'temoignages' => $temoignageRepository->findAll(),
  454.             'dernieresClasses' => $dernieresClasses,'actualitesinternes'=>$actualitesinternes,
  455.             'certifications' => $certifications,
  456.             'inscriptionsParSession'=>$inscriptionsParSession,
  457.             'prochainsEvenements' => $prochainsEvenements// Nouvelle variable pour la grille
  458.         ]);
  459.     }
  460.     #[Route('/dashboard_formateur'name'dashboard_formateur')]
  461.     public function dashboardFormateur(
  462.         InscritSessionRepository $inscritSessionRepository,
  463.         VirtualClassroomRepository $virtualClassroomRepository,
  464.         EvenementRepository $evenementRepository// Ajoutez ce repository
  465.         SettingRepository $settingRepository,
  466.         ActualiteRepository $actualiteRepository,
  467.         TemoignageRepository $temoignageRepository,
  468.     ): Response {
  469.         $user $this->getUser();
  470.         $setting $settingRepository->find(1);
  471.         $dateActuelle = new \DateTime('now', new \DateTimeZone('Africa/Tunis'));
  472.         $derniereInscription $inscritSessionRepository->findOneBy(
  473.             ['stagiaire' => $user],
  474.             ['id' => 'DESC'// On prend la dernière ligne insérée en base
  475.         );
  476.         $maDerniereSession $derniereInscription $derniereInscription->getSession() : null;
  477.         // 1. Récupérer les IDs des sessions auxquelles le stagiaire est DÉJÀ inscrit
  478.         $inscriptions $inscritSessionRepository->findBy(['stagiaire' => $user]);
  479.         $sessionIdsInscrit = [];
  480.         foreach ($inscriptions as $inscrit) {
  481.             if ($inscrit->getSession()) {
  482.                 $sessionIdsInscrit[] = $inscrit->getSession()->getId();
  483.             }
  484.         }
  485.         // 2. Récupérer les 3 dernières classes virtuelles (déjà inscrit)
  486.         $dernieresClasses = [];
  487.         // 2. Récupérer les 3 dernières classes virtuelles (déjà inscrit) et filtrer par date
  488.         // 2. Récupérer les 3 dernières classes virtuelles (déjà inscrit) et filtrer par date/heure et dateFin
  489.         $SessionsFormateur $evenementRepository->createQueryBuilder('e')
  490.             ->where('e.isArchive = :false')
  491.             ->andWhere('e.formateur = :formateur')  // Filtrer les événements pour un formateur spécifique
  492.             ->setParameter('false'false)
  493.             ->setParameter('formateur'$user)  // Paramètre pour spécifier le formateur
  494.             ->orderBy('e.starttime''ASC')
  495.             ->getQuery()
  496.             ->getResult();
  497.         // 3. Récupérer les 3 prochaines sessions disponibles (toutes ou filtrées)
  498.         // Ici on prend les sessions qui commencent bientôt
  499. // Récupérer les sessions du formateur
  500.         $prochainesSessions $evenementRepository->createQueryBuilder('e')
  501.             ->where('e.starttime >= :now')
  502.             ->andWhere('e.isArchive = :false')
  503.             ->andWhere('e.formateur = :formateur')  // Filtrer les événements pour un formateur spécifique
  504.             ->setParameter('now'$dateActuelle)
  505.             ->setParameter('false'false)
  506.             ->setParameter('formateur'$user)  // Paramètre pour spécifier le formateur
  507.             ->orderBy('e.starttime''ASC')
  508.             ->getQuery()
  509.             ->getResult();
  510. // Extraire les IDs des sessions
  511.         $sessionIdsFormateur = [];
  512.         foreach ($SessionsFormateur as $session) {
  513.             $sessionIdsFormateur[] = $session->getId();
  514.         }
  515. // Récupérer les classes virtuelles liées aux sessions du formateur
  516.         $dernieresClasses = [];
  517.         if (!empty($sessionIdsFormateur)) {
  518.             $dernieresClasses $virtualClassroomRepository->createQueryBuilder('v')
  519.                 ->where('v.session IN (:ids)')  // Filtrer les classes liées aux sessions du formateur
  520.                 ->andWhere('v.date >= :now OR v.heureDebut >= :now OR v.heureFin >= :now')  // Filtrer par date/heure
  521.                 ->setParameter('ids'$sessionIdsFormateur)
  522.                 ->setParameter('now'$dateActuelle)
  523.                 ->orderBy('v.date''DESC')
  524.                 ->setMaxResults(3)  // Limiter à 3 classes
  525.                 ->getQuery()
  526.                 ->getResult();
  527.         }
  528.         $inscriptionsParSession = [];
  529.         if (!empty($sessionIdsFormateur)) {
  530.             // Parcourir les sessions du formateur et récupérer les inscriptions
  531.             foreach ($sessionIdsFormateur as $sessionId) {
  532.                 // Récupérer les inscriptions pour cette session, avec isAffected = true
  533.                 $inscriptions $inscritSessionRepository->createQueryBuilder('i')
  534.                     ->where('i.session = :sessionId')
  535.                     ->andWhere('i.isAffected = :isAffected')
  536.                     ->setParameter('sessionId'$sessionId)
  537.                     ->setParameter('isAffected'true)
  538.                     ->getQuery()
  539.                     ->getResult();
  540.                 // Ajouter le nombre d'inscriptions dans le tableau
  541.                 $inscriptionsParSession[$sessionId] = count($inscriptions);
  542.             }
  543.         }
  544.         $actualitesinternes $actualiteRepository->findBy(
  545.             ['type' => ['interne''mixte']],  // <- IN (...)
  546.             ['id' => 'DESC']
  547.         );
  548.         // Récupérer toutes les inscriptions de l'utilisateur
  549.         $inscriptionscertif $inscritSessionRepository->findBy(['stagiaire' => $user]);
  550. // Filtrer uniquement celles avec certif
  551.         $certifications = [];
  552.         foreach ($inscriptionscertif as $inscription) {
  553.             if ($inscription->getCertif() && !empty($inscription->getCertif())) {
  554.                 $certifications[] = $inscription;
  555.             }
  556.         }
  557.         return $this->render('admin/dashboardFormateur.html.twig', [
  558.             'setting' => $setting,
  559.             'user' => $user,'maDerniereSession' => $maDerniereSession,
  560.             'dateActuelle' => $dateActuelle'temoignages' => $temoignageRepository->findAll(),
  561.             'dernieresClasses' => $dernieresClasses,'actualitesinternes'=>$actualitesinternes,
  562.             'certifications' => $certifications,
  563.             'inscriptionsParSession' => $inscriptionsParSession,
  564.             'prochainsEvenements' => $prochainesSessions// Nouvelle variable pour la grille
  565.         ]);
  566.     }
  567.     #[Route('/dashboard'name'app_admin')]
  568.     #[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_COACH') or is_granted('ROLE_STUDENT') or is_granted('ROLE_PARTNER') or   is_granted('ROLE_ASSISTANT') ")]
  569.     public function index(ActualiteRepository $actualiteRepository,ExperienceRepository $experienceRepository,InscritSessionRepository $inscritSessionRepository,OffresRepository $offresRepository,EntityManagerInterface $entityManager,EvenementRepository $evenementRepository,FormationRepository $formationRepository,UserRepository $userRepository,SettingRepository $settingRepository): Response
  570.     {
  571.         $countphp=$experienceRepository->countProfilPHP();
  572.             $countjava=$experienceRepository->countProfilJava();
  573.             $countspring=$experienceRepository->countProfilSpring();
  574.             $countspringAng=$experienceRepository->countProfilSpringAngular();
  575.             $countdevops=$experienceRepository->countProfilDevops();
  576. //        dd($count[0]['total']);
  577.         $nbinscritparsession $inscritSessionRepository->findRegistrationsByCurrentYear();
  578. //        dd($nbinscritparsession);
  579.         $offre $offresRepository->findAll();
  580.         $now = new DateTime('now', new DateTimeZone('Africa/Tunis'));
  581.         $criteria Criteria::create()
  582.             ->where(Criteria::expr()->gte('starttime'$now))
  583.             ->andWhere(Criteria::expr()->eq('isArchive'false))
  584.             ->orderBy(['starttime' => 'ASC']);
  585.         $sessions $evenementRepository->matching($criteria)->toArray();
  586. //        dd($sessions);
  587.         $categorie="Certifiante";
  588.         $foramtion $formationRepository->findBy(['categorie'=>$categorie]);
  589.         $categories="BootCamp";
  590.         $foramtions $formationRepository->findBy(['categorie'=>$categories]);
  591.         $cat="Pratique";
  592.         $foramtionsprat $formationRepository->findBy(['categorie'=>$cat]);
  593.         $cate="Cursus";
  594.         $foramtioncursus $formationRepository->findBy(['categorie'=>$cate]);
  595. //        dd($foramtioncursus);
  596.         $date= new \DateTime('now', new DateTimeZone('Africa/Tunis'));
  597.         $id =  $this->getUser()->getId();
  598.         $user=$userRepository->find($id);
  599.         $setting=$settingRepository->find(1);
  600.         $reqActualite="SELECT DATE_FORMAT(date, '%d') as day,slug as slug,titre as titre,id as id, image as image,date as date FROM actualite ORDER by date desc LIMIT 1;";
  601.         $actualites=$entityManager->getConnection()->prepare$reqActualite)->execute()->fetchAll();
  602.         $actualitesinternes $actualiteRepository->findBy(
  603.             ['type' => ['interne''mixte']],  // <- IN (...)
  604.             ['id' => 'DESC']
  605.         );
  606.         return $this->render('admin/dashboard.html.twig', [
  607.             'controller_name' => 'AdminController',
  608.             'setting'=>$setting,
  609.             'user'=>$user,
  610.             'date'=>$date,
  611.             'nbcertifiante'=>count($foramtion),
  612.             'nbrbootcamp'=>count($foramtions),
  613.             'nbrforamtionsprat'=>count($foramtionsprat),
  614.             'nbrforamtioncursus'=>count($foramtioncursus),
  615.             'sessions'=>$sessions,
  616.             'actualites'=>$actualites,
  617.             'offre'=>$offre,
  618.             'nbinscritparsession'=>$nbinscritparsession,
  619.             'countphp'=>$countphp[0]['total'],
  620.             'countjava'=>$countjava[0]['total'],
  621.             'countspring'=>$countspring[0]['total'],
  622.             'countspringAng'=>$countspringAng[0]['total'],
  623.             'countdevops'=>$countdevops[0]['total'],'actualitesinternes'=>$actualitesinternes
  624. //            'user'=>$userRepository->findOneBy(['id'=>$user])
  625.         ]);
  626.     }
  627. }