src/Controller/FrontController.php line 2557

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Faqs;
  4. use App\Entity\Avis;
  5. use App\Entity\Themes;
  6. use App\Entity\Galeries;
  7. use App\Entity\Villes;
  8. use App\Entity\Thematiques;
  9. use App\Entity\Actualites;
  10. use App\Entity\Formations;
  11. use App\Entity\References;
  12. use App\Entity\Mentions;
  13. use App\Entity\Managements;
  14. use App\Entity\Bannieres;
  15. use App\Entity\Inscriptions;
  16. use App\Entity\Demandeformations;
  17. use App\Entity\Expertises;
  18. use App\Entity\Videos;
  19. use App\Entity\Albums;
  20. use App\Form\RechercheFormType;
  21. use App\Form\RechercheNatFormType;
  22. use Doctrine\ORM\EntityManager;
  23. use App\Form\ProduitFormType;
  24. use App\Form\InscriptionFormType;
  25. use App\Form\NewInscriptionFormType;
  26. use App\Service\GeoIpService;
  27. use App\Repository\DemandeformationsRepository;
  28. use App\Repository\InscriptionsRepository;
  29. use App\Repository\AvisRepository;
  30. use App\Repository\ManagementsRepository;
  31. use App\Repository\MentionsRepository;
  32. use App\Repository\VillesRepository;
  33. use App\Repository\GaleriesRepository;
  34. use App\Repository\ThemesRepository;
  35. use App\Repository\FormationsRepository;
  36. use App\Repository\AboutsRepository;
  37. use App\Repository\ThematiquesRepository;
  38. use App\Repository\ValeursRepository;
  39. use App\Repository\BannieresRepository;
  40. use App\Repository\ActualitesRepository;
  41. use App\Repository\PartenairesRepository;
  42. use App\Repository\ReferenceclientsRepository;
  43. use App\Repository\InformationsRepository;
  44. use App\Repository\AlbumsRepository;
  45. use App\Repository\VideosRepository;
  46. use App\Repository\ExpertisesRepository;
  47. use App\Entity\Certificats;
  48. use App\Form\CertificatFormType;
  49. use App\Form\EditCertificatFormType;
  50. use App\Repository\CertificatsRepository;
  51. //use Symfony\Component\Mime\Email;
  52. use Symfony\Component\HttpFoundation\Request;
  53. use Symfony\Component\HttpFoundation\Response;
  54. use Symfony\Component\Routing\Annotation\Route;
  55. use Symfony\Component\String\Slugger\SluggerInterface;
  56. use App\Form\ContactFormType;
  57. use App\Form\DevisFormType;
  58. use App\Form\CombinedFormType;
  59. use App\Form\DemandeformationFormType;
  60. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  61. use Symfony\Component\Mime\Email;
  62. use Symfony\Component\Mailer\MailerInterface;
  63. use Symfony\Component\HttpFoundation\JsonResponse;
  64. use Knp\Component\Pager\PaginatorInterface;
  65. use Doctrine\ORM\EntityManagerInterface;
  66. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  67. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  68. use App\Entity\Certyous;
  69. use App\Form\CertyouFormType;
  70. use App\Entity\Inscriptionpersos;
  71. use App\Form\EditCertyouFormType;
  72. use App\Repository\CertyousRepository;
  73. use App\Form\InscriptionCertyouFormType;
  74. use App\Repository\InscriptionpersosRepository;
  75. use App\Entity\Sessions;
  76. use App\Form\SessionFormType;
  77. use App\Form\EditSessionFormType;
  78. use App\Repository\SessionsRepository;
  79. class FrontController extends AbstractController
  80. {
  81.     #[Route('/'name'front.inter.index'methods:['GET'])]
  82.     public function index(
  83.         Request $request
  84.         MentionsRepository $mentionRepository,
  85.         BannieresRepository $banniereRepository,
  86.         ReferenceclientsRepository $referenceRepository
  87.         EntityManagerInterface $entityManager
  88.     ): Response
  89.     {
  90.         $annee date('Y');
  91.        // 1️⃣ Requête Doctrine (sans tri sur dates_session)
  92.         $queryBuilder $entityManager->createQueryBuilder();
  93.         $queryBuilder
  94.             ->select(
  95.                 'for.id',
  96.                 'for.image',
  97.                 'for.dates_session',
  98.                 'for.prix',
  99.                 'for.devise',
  100.                 'th.nom',
  101.                 'th.slug',
  102.                 'thm.nom AS thmnom',
  103.                 'vil.nom AS vilnom',
  104.                 'vil.pays'
  105.             )
  106.             ->from(Formations::class, 'for')
  107.             ->innerJoin(Themes::class, 'th''WITH''for.theme = th.id')
  108.             ->innerJoin(Villes::class, 'vil''WITH''for.ville = vil.id')
  109.             ->innerJoin(Thematiques::class, 'thm''WITH''th.thematique = thm.id');
  110.         $formations $queryBuilder->getQuery()->getResult();
  111.         // 2️⃣ Fonction : extraction DATE DE DÉBUT
  112.         $extractDateDebut = function (?string $datesSession): ?\DateTime {
  113.             if (!$datesSession) {
  114.                 return null;
  115.             }
  116.             $moisFr = [
  117.                 'janv'=>1,'janvier'=>1,
  118.                 'févr'=>2,'fevr'=>2,'février'=>2,
  119.                 'mars'=>3,
  120.                 'avr'=>4,'avril'=>4,
  121.                 'mai'=>5,
  122.                 'juin'=>6,
  123.                 'juil'=>7,'juillet'=>7,
  124.                 'août'=>8,'aout'=>8,
  125.                 'sept'=>9,'septembre'=>9,
  126.                 'oct'=>10,'octobre'=>10,
  127.                 'nov'=>11,'novembre'=>11,
  128.                 'déc'=>12,'dec'=>12,'décembre'=>12
  129.             ];
  130.             // Nettoyage
  131.             $text strtolower(trim($datesSession));
  132.             $text str_replace(['.'','], ''$text);
  133.             /**
  134.              * Exemples acceptés :
  135.              * 23 nov au 04 dec
  136.              * 29 juin au 10 juil
  137.              * 07 au 18 sept
  138.              */
  139.             if (preg_match('/(\d{1,2})\s*(janv|févr|fevr|mars|avr|mai|juin|juil|août|aout|sept|oct|nov|déc)?\s*au\s*\d{1,2}\s*(janv|févr|fevr|mars|avr|mai|juin|juil|août|aout|sept|oct|nov|déc)/i'$text$m)) {
  140.                 $jourDebut = (int) $m[1];
  141.                 $moisDebutTxt $m[2] ?: $m[3]; // parfois avant, parfois après "au"
  142.                 $moisDebut $moisFr[$moisDebutTxt] ?? null;
  143.                 if (!$moisDebut) {
  144.                     return null;
  145.                 }
  146.                 $today = new \DateTime('today');
  147.                 $year = (int) $today->format('Y');
  148.                 $date = new \DateTime(sprintf('%04d-%02d-%02d'$year$moisDebut$jourDebut));
  149.                 // Si la date est déjà passée → année suivante
  150.                 if ($date $today) {
  151.                     $date->modify('+1 year');
  152.                 }
  153.                 return $date;
  154.             }
  155.             return null;
  156.         };
  157.         $today = new \DateTime('today');
  158.         // 3️⃣ Filtrer UNIQUEMENT les formations à venir
  159.         $formations array_filter($formations, function ($f) use ($extractDateDebut) {
  160.             return $extractDateDebut($f['dates_session']) !== null;
  161.         });
  162.         // 4️⃣ Trier : plus proche → plus éloignée
  163.         usort($formations, function ($a$b) use ($extractDateDebut) {
  164.             return $extractDateDebut($a['dates_session'])
  165.                 <=> $extractDateDebut($b['dates_session']);
  166.         });  
  167.         // 5️⃣ Limiter à 3 formations (optionnel)
  168.         $formations array_slice($formations03);
  169.         //dd($formations);
  170.         
  171.         
  172.         
  173.         $queryBuilder $entityManager->createQueryBuilder();
  174.         $queryBuilder
  175.         ->select('actu')
  176.         ->from(Actualites::class, 'actu')
  177.         ->orderBy('actu.createdat''DESC')
  178.         ->setMaxResults(2);
  179.         $actualite $queryBuilder->getQuery()->getResult();
  180.         $reference $referenceRepository->findAll();
  181.         $mentions $mentionRepository->findAll();
  182.         
  183.         $bannieres $banniereRepository->findAll();
  184.         // dd($mentions);
  185.         
  186.         return $this->render('front/index.html.twig',[
  187.             'annee' => $annee,
  188.             'banniere' => $bannieres,
  189.             'mentions' => $mentions,
  190.             'reference' => $reference,
  191.             'formations' => $formations,
  192.             'actualite' => $actualite
  193.         ]);
  194.     }
  195.     
  196.     
  197.     #[Route('/mediatheque/albums'name'front.inter.album'methods:['GET'])]
  198.     public function album(
  199.         Request $request
  200.         PaginatorInterface $paginator,
  201.         AlbumsRepository $albumRepository,
  202.         VideosRepository $videoRepository,
  203.         MentionsRepository $mentionRepository,
  204.         EntityManagerInterface $entityManager
  205.     ): Response
  206.     {
  207.         $queryBuilder $entityManager->createQueryBuilder();
  208.         $queryBuilder
  209.             ->select('al','al.nom','al.slug','MIN(g.imgal) AS image')
  210.             ->from(Albums::class, 'al')
  211.             ->innerJoin(Galeries::class, 'g''WITH''al.slug = g.nom')
  212.             ->where('al.statut = :statut')
  213.             ->setParameter('statut''Publié')
  214.             ->orderBy('al.createdat''DESC')
  215.             ->groupBy('al.id');
  216.             //->orderBy('al.createdat', 'DESC');
  217.         $albums $queryBuilder->getQuery()->getResult();
  218.         //dd($albums);
  219.         $pagination $paginator->paginate(
  220.             $queryBuilder,
  221.             $request->query->getInt('page'1),
  222.             12
  223.         );  
  224.         /*$albums = $albumRepository->findAll();
  225.         $videos = $videoRepository->findAll();*/
  226.         $mentions $mentionRepository->findAll();
  227.         return $this->render('front/multimedia/album.html.twig',[
  228.             'pagination' => $pagination,
  229.             'mentions' => $mentions
  230.         ]);
  231.     }
  232.     
  233.     #[Route('/notre-expertise'name'front.inter.expertise'methods:['GET'])]
  234.     public function expertise(
  235.         Request $request
  236.         ReferenceclientsRepository $referenceRepository,
  237.         ExpertisesRepository $expertiseRepository,
  238.         MentionsRepository $mentionRepository,
  239.         EntityManagerInterface $entityManager
  240.     ): Response
  241.     {
  242.         $expertise $expertiseRepository->findBy(['statut' => 'Publié']);
  243.         //dd($expertise);
  244.         $mentions $mentionRepository->findAll();
  245.         $reference $referenceRepository->findAll();
  246.         //dd($reference);
  247.         return $this->render('front/expertise.html.twig',[
  248.             'reference' => $reference,
  249.             'expertise' => $expertise,
  250.             'mentions' => $mentions
  251.         ]);
  252.     }
  253.     
  254.     #[Route('/mediatheque/album/{slug}'name'front.inter.image'methods:['GET'])]
  255.     public function galerie(
  256.         $slug,
  257.         Request $request
  258.         AlbumsRepository $albumRepository,
  259.         GaleriesRepository $galerieRepository,
  260.         MentionsRepository $mentionRepository,
  261.         EntityManagerInterface $entityManager
  262.     ): Response
  263.     {
  264.         $galerie $galerieRepository->findBy(['nom' => $slug]);
  265.         $mentions $mentionRepository->findAll();
  266.         return $this->render('front/multimedia/galerie.html.twig',[
  267.             'slug' => $slug,
  268.             'galeries' => $galerie,
  269.             'mentions' => $mentions
  270.         ]);
  271.     }
  272.     #[Route('/mediatheque/video'name'front.inter.video'methods:['GET'])]
  273.     public function video(
  274.         Request $request
  275.         VideosRepository $videoRepository,
  276.         MentionsRepository $mentionRepository,
  277.         EntityManagerInterface $entityManager
  278.     ): Response
  279.     {
  280.         $videos $videoRepository->findBy(
  281.             ['statut' => 'Publié'],
  282.             ['createdat' => 'DESC']
  283.         );
  284.         //dd($videos);
  285.         $mentions $mentionRepository->findAll();
  286.         return $this->render('front/multimedia/video.html.twig',[
  287.             'videos' => $videos,
  288.             'mentions' => $mentions
  289.         ]);
  290.     }
  291.     
  292.     //-----------------------------------------------------------------------------------------------------
  293.     
  294.     #[Route('/formations/certificats/personnalises'name'front.inter.certificat.certyou'methods:['GET'])]
  295.     public function certificat_certyou(
  296.         Request $request
  297.         PaginatorInterface $paginator,
  298.         CertyousRepository $certyouRepository,
  299.         ManagementsRepository $managementRepository,
  300.         MentionsRepository $mentionRepository,
  301.         EntityManagerInterface $entityManager
  302.     ): Response
  303.     {
  304.         $certyou $certyouRepository->findAll();
  305.         $manageLimit $managementRepository->findBy([], ['id' => 'DESC'], );
  306.         
  307.         $queryBuilder $entityManager->createQueryBuilder();
  308.         $queryBuilder
  309.         ->select(
  310.             'cert.id','cert.prixpresentiel','cert.prixvirtuelle',
  311.             'cert.devise','cert.theme','cert.duree','cert.slug',
  312.             'cert.type','cert.createdat'
  313.         )
  314.         ->from(Certyous::class, 'cert');
  315.         $certyous $queryBuilder->getQuery()->getResult();
  316.         
  317.         $pagination $paginator->paginate(
  318.             $queryBuilder,
  319.             $request->query->getInt('page'1),
  320.             12
  321.         );  
  322.         
  323.         $mentions $mentionRepository->findAll();
  324.         return $this->render('front/certyou.html.twig',[
  325.             'manageLimit' => $manageLimit,
  326.             'pagination' => $pagination,
  327.             'mentions' => $mentions,
  328.         ]);
  329.     }
  330.     
  331.     ///---------------------------------------------------------------------------------------------------
  332.     
  333.     #[Route('/formations/certificats/personnalises/{slug}{id}'name'front.inter.certificat.certyou.inscription'methods:['GET','POST'])]
  334.     public function certificat_certyou_inscription(
  335.         $id,
  336.         $slug,
  337.         Request $request
  338.         MailerInterface $mailer,
  339.         PaginatorInterface $paginator,
  340.         CertyousRepository $certyouRepository,
  341.         SessionsRepository $sessionRepository,
  342.         ManagementsRepository $managementRepository,
  343.         MentionsRepository $mentionRepository,
  344.         EntityManagerInterface $entityManager
  345.     ): Response
  346.     {
  347.         //$certyou = $certyouRepository->findAll();
  348.         $manageLimit $managementRepository->findBy([], ['id' => 'DESC'], );
  349.         
  350.         $queryBuilder $entityManager->createQueryBuilder();
  351.         $queryBuilder
  352.             ->select('cert')
  353.             ->from(Certyous::class, 'cert')
  354.             ->where('cert.slug = :slug')
  355.             ->setParameter('slug'$slug);
  356.         $certyou $queryBuilder->getQuery()->getOneOrNullResult();
  357.         $sessions $sessionRepository->find($id);  
  358.         if (!$sessions) {
  359.             $this->addFlash(
  360.             'danger','Certificat introuvable');
  361.         }
  362.         
  363.         $Inscriptionpersos = new Inscriptionpersos();
  364.         $InscriptionCertyouForm $this->createForm(InscriptionCertyouFormType::class,null, [
  365.             'certyou' => $certyou
  366.         ]);
  367.         $InscriptionCertyouForm->handleRequest($request);
  368.         
  369.         if($InscriptionCertyouForm->isSubmitted()){
  370.             $theme str_replace('-'' '$slug);
  371.             $choix htmlspecialchars($InscriptionCertyouForm->get('choix')->getData());
  372.             $type htmlspecialchars($InscriptionCertyouForm->get('type')->getData());
  373.             $lieux htmlspecialchars($InscriptionCertyouForm->get('lieu')->getData());
  374.             $sessionEntity $InscriptionCertyouForm->get('session')->getData();
  375.             $session $sessionEntity $sessionEntity->getSession() : '';
  376.             //$choix = $certyou->getType();
  377.             $duree $certyou->getDuree();
  378.             $devise $certyou->getDevise();
  379.             
  380.             //$duree = htmlspecialchars($InscriptionCertyouForm->get('duree')->getData());
  381.             //$prixvirtuelle = htmlspecialchars($InscriptionCertyouForm->get('prixvirtuelle')->getData());
  382.             //$prixpresentiel = htmlspecialchars($InscriptionCertyouForm->get('prixpresentiel')->getData());
  383.             //$prixVirtuelle   = $certificat->getPrixvirtuelle();
  384.             //$prixPresentiel  = $certificat->getPrixpresentiel();
  385.             $civilite $InscriptionCertyouForm->get('civilite')->getData();
  386.             $nom $InscriptionCertyouForm->get('nom')->getData();
  387.             $prenoms $InscriptionCertyouForm->get('prenoms')->getData();
  388.             $fonction $InscriptionCertyouForm->get('fonction')->getData();
  389.             $adresse $InscriptionCertyouForm->get('adresse')->getData();
  390.             $mail $InscriptionCertyouForm->get('mail')->getData();
  391.             $entreprise $InscriptionCertyouForm->get('entreprise')->getData();
  392.             
  393.             $siteweb $InscriptionCertyouForm->get('siteweb')->getData();
  394.             $nbparticipant $InscriptionCertyouForm->get('nbparticipant')->getData();
  395.             $pays $InscriptionCertyouForm->get('pays')->getData();
  396.             $ville $InscriptionCertyouForm->get('ville')->getData();
  397.             $boitepostale $InscriptionCertyouForm->get('boitepostale')->getData();
  398.             $whatsapp $InscriptionCertyouForm->get('whatsapp')->getData();            
  399.             
  400.             $telephone $InscriptionCertyouForm->get('telephone')->getData();
  401.             $commentaire $InscriptionCertyouForm->get('commentaire')->getData(); 
  402.             
  403.             if ($type === 'presentiel') {
  404.                 //$prix = 'presentiel ' . $InscriptionCertyouForm->get('prixpresentiel')->getData();
  405.                 $prix $certyou->getPrixpresentiel();
  406.             } else {
  407.                 //$prix = 'virtuelle ' . $InscriptionCertyouForm->get('prixvirtuelle')->getData();
  408.                 $prix $certyou->getPrixvirtuelle();
  409.             }
  410.             
  411.             if ($lieux === '') {
  412.                 $lieu 'classe uniquement virtuelle';
  413.             } else {
  414.                 $lieu $lieux;
  415.             }
  416.             
  417.             if(!$commentaire){
  418.                 $commentaire " ";
  419.             }else{
  420.                 $commentaire $InscriptionCertyouForm->get('commentaire')->getData();
  421.             }
  422.             
  423.             /*dd($nom ,$prenoms ,$fonction ,$adresse ,$mail ,$entreprise ,$siteweb ,$nbparticipant ,$pays ,$ville ,$boitepostale ,
  424.             $whatsapp, $telephone, $theme, $type, $duree, $lieu, $prix, $session, $commentaire);*/
  425.             
  426.             $destinataire 'inscription@cimef-international.org';
  427.             $expediteur   $mail;
  428.             $reponse      $expediteur;
  429.             $suj "INSCRIPTION FORMATION 2026";
  430.             
  431.             $codehtml '<html><body>'.
  432.             '<table width="100%" cellpadding="0" cellspacing="0" style="background-color:#f4f6f8; padding:20px;">
  433.             <tr>
  434.             <td align="center">
  435.             <table width="600" cellpadding="0" cellspacing="0" style="background-color:#ffffff; border-radius:6px; overflow:hidden; box-shadow:0 2px 6px rgba(0,0,0,0.08);">
  436.             <tr>
  437.             <td style="background-color:#051a53; padding:20px; color:#ffffff; text-align:center;">
  438.             <h2 style="margin:0;">Confirmation d\'inscription</h2>
  439.             </td>
  440.             </tr>
  441.             <tr>
  442.             <td style="padding:25px; color:#333333; font-size:14px; line-height:1.6;">
  443.             <p>Inscription de '.$civilite.' '.$prenoms.' '.$nom.' à la formation <strong>'.$theme.'</strong> organisée par <strong>CIMEF International</strong>.</p>
  444.             <p>Veuillez trouver ci-dessous le récapitulatif :</p>
  445.             <hr style="border:none; border-top:1px solid #e0e0e0; margin:20px 0;">
  446.             <h4 style="margin-bottom:8px; color:#0d6efd;">Informations personnelles</h4>
  447.             <p>
  448.             <strong>Nom & Prénoms :</strong> '.$prenoms.' '.$nom.'<br>
  449.             <strong>Fonction :</strong> '.$fonction.'<br>
  450.             <strong>Entreprise :</strong> '.$entreprise.'<br>
  451.             <strong>Adresse :</strong> '.$adresse.'<br>
  452.             <strong>Pays / Ville :</strong> '.$pays.' / '.$ville.'<br>
  453.             <strong>Boîte postale :</strong> '.$boitepostale.'
  454.             </p>
  455.             <h4 style="margin-bottom:8px; color:#0d6efd;">Coordonnées</h4>
  456.             <p>
  457.             <strong>Email :</strong> '.$mail.'<br>
  458.             <strong>Téléphone :</strong> '.$telephone.'<br>
  459.             <strong>WhatsApp :</strong> '.$whatsapp.'<br>
  460.             <strong>Site web :</strong> '.$siteweb.'
  461.             </p>
  462.             <h4 style="margin-bottom:8px; color:#0d6efd;">Détails de participation</h4>
  463.             <p>
  464.             <strong>Nombre de participants :</strong> '.$nbparticipant.'<br>
  465.             <strong>Commentaire :</strong> '.$commentaire.'
  466.             </p>
  467.             <h4 style="margin-bottom:8px; color:#0d6efd;">Détail de la formation</h4>
  468.             <p>
  469.             <strong>Thème :</strong> '.$theme.'<br>
  470.             <strong>Type :</strong> '.$type.'<br>
  471.             <strong>Durée :</strong> '.$duree.'<br>
  472.             <strong>Lieu :</strong> '.$lieu.'<br>
  473.             <strong>Prix :</strong> '.$prix.' '.$devise.'<br>
  474.             <strong>Session :</strong> '.$session.'
  475.             </p>
  476.             </td>
  477.             </tr>
  478.             <tr>
  479.             <td style="background-color:#f1f1f1; padding:15px; text-align:center; font-size:12px; color:#777777;">
  480.             © '.date("Y").' CIMEF International — Tous droits réservés
  481.             </td>
  482.             </tr>
  483.             </table>
  484.             </td>
  485.             </tr>
  486.             </table>
  487.             </body></html>';
  488.             
  489.             $email = (new Email())
  490.             ->from('CIMEF International <inscription@cimef-international.org>')
  491.             ->to($destinataire)                 // destinataire principal
  492.             ->cc('medias@cimef-international.com'// COPIE
  493.             ->replyTo($expediteur)              // Reply-To:
  494.             ->subject($suj)     
  495.             ->text(strip_tags($codehtml))
  496.             ->html($codehtml);// Subject:
  497.             //->html($codehtml, 'text/html');   // Content-Type + charset utf-8
  498.             $mailer->send($email);
  499.             
  500.             $Inscriptionpersos->setNom($nom);
  501.             $Inscriptionpersos->setPrenoms($prenoms);
  502.             $Inscriptionpersos->setFonction($fonction);
  503.             $Inscriptionpersos->setAdresse($adresse);
  504.             $Inscriptionpersos->setMail($mail);
  505.             $Inscriptionpersos->setEntreprise($entreprise);
  506.             $Inscriptionpersos->setSiteweb($siteweb);
  507.             $Inscriptionpersos->setNbparticipant($nbparticipant);
  508.             $Inscriptionpersos->setPays($pays);
  509.             $Inscriptionpersos->setVille($ville);
  510.             $Inscriptionpersos->setBoitepostale($boitepostale);
  511.             $Inscriptionpersos->setWhatsapp($whatsapp);
  512.             $Inscriptionpersos->setTelephone($telephone);
  513.             $Inscriptionpersos->setCommentaire($commentaire);
  514.             $Inscriptionpersos->setTheme($theme);
  515.             $Inscriptionpersos->setType($type);
  516.             $Inscriptionpersos->setDuree($duree);
  517.             $Inscriptionpersos->setLieu($lieu);
  518.             $Inscriptionpersos->setPrix($prix);
  519.             $Inscriptionpersos->setSession($session);
  520.             
  521.             $entityManager->persist($Inscriptionpersos);
  522.             $entityManager->flush();
  523.             $this->addFlash(
  524.             'success',
  525.             'Votre inscription à été bien enregistrée');
  526.             return $this->redirectToRoute('front.inter.certificat.certyou',['slug' => $slug,'id' => $id]);
  527.         }
  528.    
  529.         $mentions $mentionRepository->findAll();
  530.         return $this->render('front/inscriptions/inscription-certyou.html.twig',[
  531.             'id' => $id,
  532.             'slug' => $slug,
  533.             'certyou' => $certyou,
  534.             'mentions' => $mentions,
  535.             'sessions' => $sessions,
  536.             'manageLimit' => $manageLimit,
  537.             'inscriptionCertyouForm' => $InscriptionCertyouForm->createView(),
  538.         ]);
  539.     }
  540.     
  541.     //-----------------------------------------------------------------------------------------------------
  542.     
  543.     #[Route('/formations/certificats/internationaux'name'front.inter.certificat.inter'methods:['GET'])]
  544.     public function certificat(
  545.         Request $request
  546.         PaginatorInterface $paginator,
  547.         CertificatsRepository $certificatRepository,
  548.         ManagementsRepository $managementRepository,
  549.         MentionsRepository $mentionRepository,
  550.         EntityManagerInterface $entityManager
  551.     ): Response
  552.     {
  553.         $certificat $certificatRepository->findAll();
  554.         $manageLimit $managementRepository->findBy([], ['id' => 'DESC'], );
  555.         
  556.         $queryBuilder $entityManager->createQueryBuilder();
  557.         $sub $entityManager->createQueryBuilder()
  558.             ->select('MAX(c2.createdat)')
  559.             ->from(Certificats::class, 'c2')
  560.             ->where('c2.theme = cert.theme');
  561.         $queryBuilder
  562.             ->select('cert.id','cert.session','cert.prix','cert.slug','cert.devise',
  563.                 'vil.nom AS vilnom','vil.pays','cert.createdat','cert.type','cert.theme')
  564.             ->from(Certificats::class, 'cert')
  565.             ->innerJoin(Villes::class, 'vil''WITH''cert.ville = vil.id')
  566.             ->where($queryBuilder->expr()->eq('cert.createdat''(' $sub->getDQL() . ')'))
  567.             ->orderBy('cert.createdat''DESC');
  568.         $certificat $queryBuilder->getQuery()->getResult();
  569.         $pagination $paginator->paginate(
  570.             $queryBuilder,
  571.             $request->query->getInt('page'1),
  572.             12
  573.         );  
  574.             
  575.         $mentions $mentionRepository->findAll();
  576.         return $this->render('front/certificat.html.twig',[
  577.             'manageLimit' => $manageLimit,
  578.             'pagination' => $pagination,
  579.             'mentions' => $mentions,
  580.         ]);
  581.     }
  582.     #[Route('/formtaions/certificats/internationaux/{slug}'name'front.inter.detail.certificat'methods:['GET'])]
  583.     public function detail_certificat(
  584.         $slug,
  585.         Request $request
  586.         PaginatorInterface $paginator,
  587.         CertificatsRepository $certificatRepository,
  588.         ManagementsRepository $managementRepository,
  589.         MentionsRepository $mentionRepository,
  590.         EntityManagerInterface $entityManager
  591.     ): Response
  592.     {
  593.         $certificat $certificatRepository->findAll();
  594.         $manageLimit $managementRepository->findBy([], ['id' => 'DESC'], );
  595.         
  596.         $queryBuilder $entityManager->createQueryBuilder();
  597.         $queryBuilder
  598.             ->select(
  599.                 'cert.id','cert.session','cert.prix','cert.slug',
  600.                 'cert.devise','cert.theme','vil.nom AS vilnom',
  601.                 'vil.pays','cert.createdat','cert.type'
  602.             )
  603.             ->from(Certificats::class, 'cert')
  604.             ->innerJoin(Villes::class, 'vil''WITH''cert.ville = vil.id')
  605.             ->where('cert.slug = :slug')
  606.             ->setParameter('slug'$slug);
  607.         $certificat $queryBuilder->getQuery()->getResult();
  608.         $pagination $paginator->paginate(
  609.             $queryBuilder,
  610.             $request->query->getInt('page'1),
  611.             12
  612.         ); 
  613.             
  614.         $mentions $mentionRepository->findAll();
  615.         return $this->render('front/liste-certificat.html.twig',[
  616.             'manageLimit' => $manageLimit,
  617.             'pagination' => $pagination,
  618.             'mentions' => $mentions,
  619.             'slug' => $slug
  620.         ]);
  621.     }
  622.     
  623.     #[Route('/presentation'name'front.inter.presentation'methods:['GET'])]
  624.     public function presentation(
  625.         Request $request
  626.         PartenairesRepository $partenaireRepository,
  627.         FormationsRepository $formationRepository,
  628.         AboutsRepository $aboutRepository
  629.         ValeursRepository $valeurRepository,
  630.         AvisRepository $avisRepository,
  631.         MentionsRepository $mentionRepository,
  632.         EntityManagerInterface $entityManager
  633.     ): Response
  634.     {
  635.         $avis $avisRepository->findAll();
  636.         $All_partenaire $partenaireRepository->findAll();
  637.         $All_about $aboutRepository->findAll();
  638.         $All_valeur $valeurRepository->findAll();
  639.         $mentions $mentionRepository->findAll();
  640.         return $this->render('front/qui-sommes-nous.html.twig',[
  641.             'partenaires' => $All_partenaire,
  642.             'valeur' => $All_valeur,
  643.             'mentions' => $mentions,
  644.             'about' => $All_about,
  645.             'avis' => $avis,
  646.         ]);
  647.     }
  648.     #[Route('/formations/rencontre-top-management'name'front.top.management'methods:['GET'])]
  649.     public function management(
  650.         Request $request
  651.         PaginatorInterface $paginator,
  652.         MentionsRepository $mentionRepository,
  653.         ManagementsRepository $managementRepository,
  654.         EntityManagerInterface $entityManager
  655.     ): Response
  656.     {
  657.         $manageLimit $managementRepository->findBy([], ['id' => 'DESC'], );
  658.         // dd($manageLimit);
  659.         $queryBuilder $entityManager->createQueryBuilder();
  660.         $queryBuilder
  661.         ->select('man')
  662.         ->from(Managements::class, 'man')
  663.         ->orderBy('man.createdat''DESC');
  664.         
  665.         $pagination $paginator->paginate(
  666.             $queryBuilder,
  667.             $request->query->getInt('page'1),
  668.             10
  669.         );  
  670.         $mentions $mentionRepository->findAll();
  671.         return $this->render('front/rencontre-management.html.twig',[
  672.             'mentions' => $mentions,
  673.             'pagination' => $pagination,
  674.             'manageLimit' => $manageLimit
  675.         ]);
  676.     }
  677.     
  678.     #[Route('/formations/rencontre-top-management/{slug}'name'front.seminaire.management.detail'methods:['GET'])]
  679.     public function detail_management(
  680.         $slug,
  681.         Request $request
  682.         ManagementsRepository $managementRepository,
  683.         MentionsRepository $mentionRepository,
  684.         EntityManagerInterface $entityManager
  685.     ): Response
  686.     {
  687.         $query $managementRepository->findOneBy(array('slug' => $slug));
  688.         $mentions $mentionRepository->findAll();
  689.         // dd($query);
  690.         return $this->render('front/detail/detail-rencontre.html.twig',[
  691.             'mentions' => $mentions,
  692.             'query' => $query
  693.         ]);
  694.     }
  695.     /*#[Route('/formation/seminaires/internationaux', name: 'front.seminaire.internationaux', methods:['GET'])]
  696.     public function sem_inter(
  697.         Request $request, 
  698.         PaginatorInterface $paginator,
  699.         MentionsRepository $mentionRepository,
  700.         EntityManagerInterface $entityManager
  701.     ): Response
  702.     {
  703.         $recherche = $this->createForm(RechercheFormType::class);
  704.         $recherche->handleRequest($request);
  705.         if ($recherche->isSubmitted()) {
  706.             $mot = $recherche->get('mot')->getData() ?? '';
  707.             $ville = $recherche->get('ville')->getData() ?? null;
  708.             $nomVille = $ville ? $ville->getNom() : null;
  709.             $motLike = '%'.$mot.'%';
  710.             // 2️⃣ Construire la requête
  711.             $queryBuilder = $entityManager->createQueryBuilder();
  712.             $queryBuilder
  713.                 ->select('for.id', 'for.dates_session','for.image', 'for.prix', 'for.devise', 'th.nom', 
  714.                 'thm.nom AS thmnom','vil.nom AS vilnom','vil.pays','for.created_at', 'th.slug')
  715.                 ->from(Formations::class, 'for')
  716.                 ->innerJoin(Themes::class, 'th', 'WITH', 'for.theme = th.id')
  717.                 ->innerJoin(Thematiques::class, 'thm', 'WITH', 'th.thematique = thm.id')
  718.                  ->innerJoin(Villes::class,  'vil', 'WITH', 'for.ville = vil.id')
  719.                 ->where('th.nom LIKE :mot')
  720.                 ->orwhere('thm.nom LIKE :mot')
  721.                 ->setParameter('mot', $motLike);
  722.                 if ($ville) {
  723.                     $queryBuilder->andWhere('vil.nom = :ville')
  724.                     ->setParameter('ville', $nomVille);
  725.                     $query = $queryBuilder->getQuery()->getResult();
  726.                 }
  727.             $queryBuilder->orderBy('for.created_at', 'DESC');
  728.             // 3️⃣ Pagination
  729.             $pagination = $paginator->paginate(
  730.                 $queryBuilder,
  731.                 $request->query->getInt('page', 1),
  732.                 12
  733.             );
  734.             $annee = date('Y');
  735.             $mentions = $mentionRepository->findAll();
  736.             // 4️⃣ Affichage
  737.             return $this->render('front/seminaire_recherche.html.twig', [
  738.                 'recherche' => $recherche->createView(),
  739.                 'pagination' => $pagination,
  740.                 'mot' => $mot,
  741.                 'mentions' => $mentions,
  742.                 'ville' => $ville,
  743.                 'annee' => $annee,
  744.             ]);
  745.          }
  746.  
  747.         $annee = date('Y');
  748.         $queryBuilder = $entityManager->createQueryBuilder();
  749.         $queryBuilder
  750.         ->select('for.id', 'for.dates_session','for.image', 'for.prix', 'for.devise', 'th.nom', 
  751.             'thm.nom AS thmnom','vil.nom AS vilnom','vil.pays','for.created_at', 'th.slug'
  752.         )
  753.         ->from(Formations::class, 'for')
  754.         ->innerJoin(Themes::class, 'th', 'WITH', 'for.theme = th.id')
  755.         ->innerJoin(Villes::class,  'vil', 'WITH', 'for.ville = vil.id')
  756.         ->innerJoin(Thematiques::class, 'thm', 'WITH', 'th.thematique = thm.id')
  757.         ->orderBy('for.created_at', 'DESC');
  758.         
  759.         $pagination = $paginator->paginate(
  760.             $queryBuilder,
  761.             $request->query->getInt('page', 1),
  762.             12
  763.         );  
  764.         $mentions = $mentionRepository->findAll();
  765.         
  766.         return $this->render('front/seminaire_inter.html.twig',[
  767.             'annee' => $annee,
  768.             'mentions' => $mentions,
  769.             'pagination' => $pagination,
  770.             'recherche' => $recherche->createView()
  771.         ]);
  772.     }*/
  773.     
  774.     #[Route('/formation/seminaires/internationaux'name'front.seminaire.internationaux'methods:['GET'])]
  775.     public function sem_inter(
  776.         Request $request
  777.         PaginatorInterface $paginator,
  778.         MentionsRepository $mentionRepository,
  779.         EntityManagerInterface $entityManager
  780.     ): Response
  781.     {
  782.         $recherche $this->createForm(RechercheFormType::class);
  783.         $recherche->handleRequest($request);
  784.         $annee date('Y');
  785.         $mentions $mentionRepository->findAll();
  786.         //Sous-requête : obtenir la dernière formation par thème
  787.         $subQuery $entityManager->createQueryBuilder()
  788.             ->select('MAX(f2.id)')
  789.             ->from(Formations::class, 'f2')
  790.             ->innerJoin('f2.theme''t2')
  791.             ->groupBy('t2.id');
  792.     
  793.         //Requête principale
  794.         $queryBuilder $entityManager->createQueryBuilder();
  795.         $queryBuilder
  796.             ->select('for.id','for.dates_session','for.image','for.prix',
  797.                 'for.devise','for.created_at','th.nom','th.slug',
  798.                 'thm.nom AS thmnom','vil.nom AS vilnom','vil.pays'
  799.             )
  800.             ->from(Formations::class, 'for')
  801.             ->innerJoin('for.theme''th')
  802.             ->innerJoin('th.thematique''thm')
  803.             ->innerJoin('for.ville''vil')
  804.             ->where($queryBuilder->expr()->in('for.id'$subQuery->getDQL()));
  805.         //Recherche
  806.         if ($recherche->isSubmitted()) {
  807.             $mot $recherche->get('mot')->getData() ?? '';
  808.             $ville $recherche->get('ville')->getData() ?? null;
  809.             $nomVille $ville $ville->getNom() : null;
  810.             if ($mot) {
  811.                 $motLike '%' $mot '%';
  812.                 $queryBuilder->andWhere(
  813.                     $queryBuilder->expr()->orX(
  814.                         'th.nom LIKE :mot',
  815.                         'thm.nom LIKE :mot'
  816.                     )
  817.                 )
  818.                 ->setParameter('mot'$motLike);
  819.             }
  820.             if ($ville) {
  821.                 $queryBuilder
  822.                     ->andWhere('vil.nom = :ville')
  823.                     ->setParameter('ville'$nomVille);
  824.             }
  825.         }
  826.         $queryBuilder->orderBy('for.created_at''DESC');
  827.     
  828.         //Pagination
  829.         $pagination $paginator->paginate(
  830.             $queryBuilder,
  831.             $request->query->getInt('page'1),
  832.             12
  833.         );
  834.     
  835.         return $this->render('front/seminaire_inter.html.twig', [
  836.             'annee' => $annee,
  837.             'mentions' => $mentions,
  838.             'pagination' => $pagination,
  839.             'recherche' => $recherche->createView(),
  840.         ]);
  841.     }
  842.     
  843.     
  844.     #[Route('/formations/seminaires/nationaux'name'front.seminaire.nationaux'methods:['GET'])]
  845.     public function sem_nat(
  846.         Request $request
  847.         GeoIpService $geo,
  848.         PaginatorInterface $paginator,
  849.         MentionsRepository $mentionRepository,
  850.         EntityManagerInterface $entityManager
  851.     ): Response
  852.     {
  853.         $ip $request->getClientIp(); // récupère IP utilisateur
  854.         $geoData $geo->getGeoData($ip);
  855.         // dd($geoData);
  856.         // Exemple : utilisation dans le contrôleur
  857.         $pays        $geoData['country'];
  858.         $codePays    $geoData['country_code'];
  859.         $ville       $geoData['city'];
  860.         $ipTrouvee   $geoData['ip'];
  861.         $annee date('Y');
  862.         if($pays === 'Local' || $pays === 'Ivory Coast') {
  863.             $getpays "Côte d'ivoire";
  864.         }else{
  865.             $getpays $pays;
  866.         }
  867.         
  868.         
  869.         
  870.         $recherche $this->createForm(RechercheFormType::class);
  871.         $rechercheNat $this->createForm(RechercheNatFormType::class);
  872.         $rechercheNat->handleRequest($request);
  873.         if ($rechercheNat->isSubmitted()) {
  874.             $mot $rechercheNat->get('mot')->getData() ?? '';
  875.             //$mot = $recherche->get('mot')->getData() ?? '';
  876.             $motLike '%'.$mot.'%';
  877.             // 2️⃣ Construire la requête
  878.             $queryBuilder $entityManager->createQueryBuilder();
  879.             $queryBuilder
  880.                 ->select('for.id''for.dates_session','for.image''for.prix''for.devise''th.nom'
  881.                 'thm.nom AS thmnom','vil.nom AS vilnom','vil.pays','for.created_at''th.slug')
  882.                 ->from(Formations::class, 'for')
  883.                 ->innerJoin(Themes::class, 'th''WITH''for.theme = th.id')
  884.                 ->innerJoin(Thematiques::class, 'thm''WITH''th.thematique = thm.id')
  885.                  ->innerJoin(Villes::class,  'vil''WITH''for.ville = vil.id')
  886.                 ->where('th.nom LIKE :mot')
  887.                 ->orwhere('thm.nom LIKE :mot')
  888.                 ->setParameter('mot'$motLike);
  889.                 // Filtrer par ville si sélectionnée/ $queryBu
  890.             $query $queryBuilder->getQuery()->getResult();
  891.             $queryBuilder->orderBy('for.created_at''DESC');
  892.             // 3️⃣ Pagination
  893.             $pagination $paginator->paginate(
  894.                 $queryBuilder,
  895.                 $request->query->getInt('page'1),
  896.                 12
  897.             );
  898.             $annee date('Y');
  899.             $mentions $mentionRepository->findAll();
  900.             // 4️⃣ Affichage
  901.             return $this->render('front/seminaire_recherche.html.twig', [
  902.                 'recherche' => $recherche->createView(),
  903.                 'pagination' => $pagination,
  904.                 'mot' => $mot,
  905.                 'mentions' => $mentions,
  906.                 'ville' => $ville,
  907.                 'annee' => $annee,
  908.             ]);
  909.          }
  910.         
  911.         $queryBuilder $entityManager->createQueryBuilder();
  912.         $queryBuilder
  913.         ->select('for.id''for.dates_session','for.image''for.prix''for.devise''th.nom'
  914.             'thm.nom AS thmnom','vil.nom AS vilnom','vil.pays','for.created_at''th.slug' 
  915.         )
  916.         ->from(Formations::class, 'for')
  917.         ->innerJoin(Themes::class, 'th''WITH''for.theme = th.id')
  918.         ->innerJoin(Villes::class,  'vil''WITH''for.ville = vil.id')
  919.         ->innerJoin(Thematiques::class, 'thm''WITH''th.thematique = thm.id')
  920.         ->where('vil.pays = :pays')
  921.         ->setParameter('pays'$getpays)
  922.         ->orderBy('for.created_at''DESC');
  923.         $query $queryBuilder->getQuery()->getResult();
  924.         
  925.         $pagination $paginator->paginate(
  926.             $queryBuilder,
  927.             $request->query->getInt('page'1),
  928.             12
  929.         );  
  930.         $mentions $mentionRepository->findAll();
  931.         return $this->render('front/seminaire_nat.html.twig',[
  932.             'annee' => $annee,
  933.             'mentions' => $mentions,
  934.             'recherche' => $rechercheNat->createView(),
  935.             'pagination' => $pagination
  936.         ]);
  937.     }
  938.     // #[Route('/generate-slugs', name: 'generate_slugs')]
  939.     // public function generateSlugs(
  940.     //     SluggerInterface $slugger, 
  941.     //     VillesRepository $repo,
  942.     //     EntityManagerInterface $em)
  943.     // {
  944.     //     $categories = $repo->findAll();
  945.     //     foreach ($categories as $cat) {
  946.             
  947.     //         $slug = $slugger->slug( $cat->getNom());
  948.     //         $cat->setSlug($slug);
  949.     //     }
  950.     //     $em->flush();
  951.     //     return new Response("Slugs générés !");
  952.     // }
  953.     
  954.     /*
  955.     #[Route('/formations/{seminaires}/{slug}/{id}code/inscriptions', name: 'front.inscription', methods:['GET','POST'])]
  956.     public function inscription_sem(
  957.         $slug,
  958.         $seminaires,
  959.         $id,
  960.         Request $request,
  961.         MailerInterface $mailer,
  962.         InscriptionsRepository $inscriptionRepository,
  963.         VillesRepository $villeRepository,
  964.         ThemesRepository $themeRepository,
  965.         FormationsRepository $formationRepository,
  966.         MentionsRepository $mentionRepository,
  967.         EntityManagerInterface $entityManager
  968.     ): Response
  969.     {
  970.         
  971.         $annee = date('Y');
  972.         $queryBuilder = $entityManager->createQueryBuilder();
  973.         $queryBuilder
  974.         ->select('for.id', 'for.dates_session', 'for.prix', 'for.devise', 'th.nom', 
  975.             'thm.nom AS thmnom','vil.nom AS vilnom','vil.pays','for.created_at',
  976.             'th.slug','th.description','for.devise','vil.longitude','vil.latitude'
  977.         )
  978.         ->from(Formations::class, 'for')
  979.         ->innerJoin(Themes::class, 'th', 'WITH', 'for.theme = th.id')
  980.         ->innerJoin(Villes::class,  'vil', 'WITH', 'for.ville = vil.id')
  981.         ->innerJoin(Thematiques::class, 'thm', 'WITH', 'th.thematique = thm.id')
  982.         ->where('th.slug = :theme')
  983.         ->andwhere('for.id = :forid')
  984.         ->setParameter('theme', $slug)
  985.         ->setParameter('forid', $id);
  986.         $query = $queryBuilder->getQuery()->getResult(); 
  987.         $mentions = $mentionRepository->findAll();
  988.         $inscription = new Inscriptions();
  989.         $inscriptionForm = $this->createForm(InscriptionFormType::class, $inscription);
  990.         $inscriptionForm->handleRequest($request);
  991.         
  992.         if ($inscriptionForm->isSubmitted()) {
  993.             $nom = $inscriptionForm->get('nom')->getData();
  994.             $prenoms = $inscriptionForm->get('prenoms')->getData();
  995.             $fonction = $inscriptionForm->get('fonction')->getData();
  996.             $adresse = $inscriptionForm->get('adresse')->getData();
  997.             $mail = $inscriptionForm->get('mail')->getData();
  998.             $entreprise = $inscriptionForm->get('entreprise')->getData();
  999.             
  1000.             $siteweb = $inscriptionForm->get('siteweb')->getData();
  1001.             $nbparticipant = $inscriptionForm->get('nbparticipant')->getData();
  1002.             $pays = $inscriptionForm->get('pays')->getData();
  1003.             $ville = $inscriptionForm->get('ville')->getData();
  1004.             $boitepostale = $inscriptionForm->get('boitepostale')->getData();
  1005.             $whatsapp = $inscriptionForm->get('whatsapp')->getData();            
  1006.             
  1007.             $telephone = $inscriptionForm->get('telephone')->getData();
  1008.             $commentaire = $inscriptionForm->get('commentaire')->getData(); 
  1009.             $formation = $formationRepository->find($id);
  1010.             //dd($formation->getId());
  1011.             
  1012.             $theme = $formation->getTheme();
  1013.             $idville = $formation->getVille();
  1014.             $session = $formation->getDatesSession();
  1015.             $prix = $formation->getPrix();
  1016.             $devise = $formation->getDevise();
  1017.             
  1018.             $villes = $villeRepository->find($idville);
  1019.             $nomtheme = $theme->getNom();
  1020.             $nomville = $villes->getNom();
  1021.             
  1022.             if(!$commentaire){
  1023.                 $commentaire = "...";
  1024.             }else{
  1025.                 $commentaire = $inscriptionForm->get('commentaire')->getData();
  1026.             }
  1027.             
  1028.             $codehtml = '<html><body>'.
  1029.             '<table width="100%" cellpadding="0" cellspacing="0" style="background-color:#f4f6f8; padding:20px;">
  1030.             <tr>
  1031.             <td align="center">
  1032.             <table width="600" cellpadding="0" cellspacing="0" style="background-color:#ffffff; border-radius:6px; overflow:hidden; box-shadow:0 2px 6px rgba(0,0,0,0.08);">
  1033.             <tr>
  1034.             <td style="background-color:#051a53; padding:20px; color:#ffffff; text-align:center;">
  1035.             <h2 style="margin:0;">Confirmation d\'inscription</h2>
  1036.             </td>
  1037.             </tr>
  1038.             <tr>
  1039.             <td style="padding:25px; color:#333333; font-size:14px; line-height:1.6;">
  1040.             <p>Inscription de M/Mme <strong>'.$prenoms.' '.$nom.'</strong> à la formation <strong>'.$nomtheme.'</strong> organisée par <strong>CIMEF International</strong>.</p>
  1041.             <p>Veuillez trouver ci-dessous le récapitulatif :</p>
  1042.             <hr style="border:none; border-top:1px solid #e0e0e0; margin:20px 0;">
  1043.             <h4 style="margin-bottom:8px; color:#0d6efd;">Informations personnelles</h4>
  1044.             <p>
  1045.             <strong>Nom & Prénoms :</strong> '.$prenoms.' '.$nom.'<br>
  1046.             <strong>Fonction :</strong> '.$fonction.'<br>
  1047.             <strong>Entreprise :</strong> '.$entreprise.'<br>
  1048.             <strong>Adresse :</strong> '.$adresse.'<br>
  1049.             <strong>Pays / Ville :</strong> '.$pays.' / '.$ville.'<br>
  1050.             <strong>Boîte postale :</strong> '.$boitepostale.'
  1051.             </p>
  1052.             <h4 style="margin-bottom:8px; color:#0d6efd;">Coordonnées</h4>
  1053.             <p>
  1054.             <strong>Email :</strong> '.$mail.'<br>
  1055.             <strong>Téléphone :</strong> '.$telephone.'<br>
  1056.             <strong>WhatsApp :</strong> '.$whatsapp.'<br>
  1057.             <strong>Site web :</strong> '.$siteweb.'
  1058.             </p>
  1059.             <h4 style="margin-bottom:8px; color:#0d6efd;">Détails de participation</h4>
  1060.             <p>
  1061.             <strong>Nombre de participants :</strong> '.$nbparticipant.'<br>
  1062.             <strong>Commentaire :</strong> '.$commentaire.'
  1063.             </p>
  1064.             <h4 style="margin-bottom:8px; color:#0d6efd;">Détail de la formation</h4>
  1065.             <p>
  1066.             <strong>Thème :</strong> '.$nomtheme.'<br>
  1067.             <strong>Ville :</strong> '.$nomville.'<br>
  1068.             <strong>Prix :</strong> '.$prix.''.$devise.'<br>
  1069.             <strong>Session :</strong> '.$session.'
  1070.             </p>
  1071.             </td>
  1072.             </tr>
  1073.             <tr>
  1074.             <td style="background-color:#f1f1f1; padding:15px; text-align:center; font-size:12px; color:#777777;">
  1075.             © '.date("Y").' CIMEF International — Tous droits réservés
  1076.             </td>
  1077.             </tr>
  1078.             </table>
  1079.             </td>
  1080.             </tr>
  1081.             </table>
  1082.             </body></html>';
  1083.             
  1084.             
  1085.             $secretKey = '6LfPYkosAAAAAJQFLCC-9U5bF6KdFTPrgmbxg5Ux';
  1086.             $value = $request->get('g-recaptcha-response');
  1087.             $userIP = $_SERVER['REMOTE_ADDR'];
  1088.             $url = "https://www.google.com/recaptcha/api/siteverify?secret=$secretKey&response=$value&remoteid=$userIP";
  1089.             $response = \file_get_contents($url);
  1090.             $response = json_decode((string)$response);
  1091.             //dd($response);
  1092.             if(!$response->success){
  1093.                 $this->addFlash(
  1094.                     'warning',
  1095.                     'Cocher le champs recaptcha svp!');
  1096.             }else{
  1097.                 $destinataire = 'inscription@cimef-international.org';
  1098.                 $expediteur   = $mail;
  1099.                 $reponse      = $expediteur;
  1100.                 $suj = "INSCRIPTION FORMATION 2026";
  1101.             
  1102.             
  1103.                 $email = (new Email())
  1104.                 ->from('CIMEF International <inscription@cimef-international.org>')
  1105.                 ->to($destinataire)                 // destinataire principal
  1106.                 ->cc('medias@cimef-international.com') // COPIE
  1107.                 ->replyTo($expediteur)              // Reply-To:
  1108.                 ->subject($suj)     
  1109.                 ->text(strip_tags($codehtml))
  1110.                 ->html($codehtml);// Subject:
  1111.                 //->html($codehtml, 'text/html');   // Content-Type + charset utf-8
  1112.                 $mailer->send($email);
  1113.                 $inscription->setNom($nom);
  1114.                 $inscription->setPrenoms($prenoms);
  1115.                 $inscription->setFonction($fonction);
  1116.                 $inscription->setAdresse($adresse);
  1117.                 $inscription->setMail($mail);
  1118.                 $inscription->setEntreprise($entreprise);
  1119.                 $inscription->setSiteweb($siteweb);
  1120.                 $inscription->setNbparticipant($nbparticipant);
  1121.                 $inscription->setPays($pays);
  1122.                 $inscription->setVille( $ville);
  1123.                 $inscription->setBoitepostale($boitepostale);
  1124.                 $inscription->setWhatsapp($whatsapp);
  1125.                 $inscription->setTelephone($telephone);
  1126.                 $inscription->setCommentaire($commentaire);
  1127.                 $inscription->setFormation($formation);
  1128.                 $entityManager->persist($inscription);
  1129.                 $entityManager->flush();
  1130.             
  1131.                 $this->addFlash(
  1132.                 'success',
  1133.                 'Votre inscription à été bien enregistrée');
  1134.                 return $this->redirectToRoute('front.seminaire.nationaux',['seminaires' => $seminaires,'slug' => $slug]);
  1135.                 
  1136.             }
  1137.         }
  1138.         
  1139.         return $this->render('front/inscriptions/inscription-seminaire.html.twig',[
  1140.             'query' => $query,
  1141.             'annee' => $annee,
  1142.             'type' => $seminaires,
  1143.             'mentions' => $mentions,
  1144.             'inscriptionForm' => $inscriptionForm->createView(),
  1145.         ]);
  1146.     }
  1147.     */
  1148.     #[Route('/formations/{seminaires}/{slug}/{id}code/inscription'name'front.inscription'methods:['GET','POST'])]
  1149.     public function inscription_sem(
  1150.         $slug,
  1151.         $seminaires,
  1152.         $id,
  1153.         Request $request,
  1154.         MailerInterface $mailer,
  1155.         InscriptionsRepository $inscriptionRepository,
  1156.         VillesRepository $villeRepository,
  1157.         ThemesRepository $themeRepository,
  1158.         FormationsRepository $formationRepository,
  1159.         MentionsRepository $mentionRepository,
  1160.         EntityManagerInterface $entityManager
  1161.     ): Response
  1162.     {
  1163.         $annee date('Y');
  1164.         $queryBuilder $entityManager->createQueryBuilder();
  1165.         $queryBuilder
  1166.         ->select('for.id''for.dates_session''for.prix''for.devise''th.nom'
  1167.             'thm.nom AS thmnom','vil.nom AS vilnom','vil.pays','for.created_at',
  1168.             'th.slug','th.description','for.devise','vil.longitude','vil.latitude'
  1169.         )
  1170.         ->from(Formations::class, 'for')
  1171.         ->innerJoin(Themes::class, 'th''WITH''for.theme = th.id')
  1172.         ->innerJoin(Villes::class,  'vil''WITH''for.ville = vil.id')
  1173.         ->innerJoin(Thematiques::class, 'thm''WITH''th.thematique= thm.id')
  1174.         ->where('th.slug = :theme')
  1175.         ->andwhere('for.id = :forid')
  1176.         ->setParameter('theme'$slug)
  1177.         ->setParameter('forid'$id);
  1178.         $query $queryBuilder->getQuery()->getResult();
  1179.         $mentions $mentionRepository->findAll();
  1180.         
  1181.         $queryBuilder1 $entityManager->createQueryBuilder();
  1182.         $queryBuilder1
  1183.             ->select(
  1184.                 'cert.id','cert.session','cert.prix','cert.slug',
  1185.                 'cert.devise','cert.theme','vil.nom AS vilnom',
  1186.                 'vil.pays','cert.createdat','cert.type'
  1187.             )
  1188.             ->from(Certificats::class, 'cert')
  1189.             ->innerJoin(Villes::class, 'vil''WITH''cert.ville = vil.id')
  1190.             ->where('cert.slug = :slug')
  1191.             ->andwhere('cert.id = :id')
  1192.             ->setParameter('slug'$slug)
  1193.             ->setParameter('id'$id);
  1194.         $certificat $queryBuilder1->getQuery()->getOneOrNullResult();
  1195.         
  1196.         $inscription = new Inscriptions();
  1197.         $inscriptionForm $this->createForm(InscriptionFormType::class, $inscription);
  1198.         $inscriptionForm->handleRequest($request);
  1199.         if ($inscriptionForm->isSubmitted()) {
  1200.             $civilite $inscriptionForm->get('civilite')->getData();
  1201.             $nom $inscriptionForm->get('nom')->getData();
  1202.             $prenoms $inscriptionForm->get('prenoms')->getData();
  1203.             $fonction $inscriptionForm->get('fonction')->getData();
  1204.             $adresse $inscriptionForm->get('adresse')->getData();
  1205.             $mail $inscriptionForm->get('mail')->getData();
  1206.             $entreprise $inscriptionForm->get('entreprise')->getData();
  1207.             
  1208.             $siteweb $inscriptionForm->get('siteweb')->getData();
  1209.             $nbparticipant $inscriptionForm->get('nbparticipant')->getData();
  1210.             $pays $inscriptionForm->get('pays')->getData();
  1211.             $ville $inscriptionForm->get('ville')->getData();
  1212.             $boitepostale $inscriptionForm->get('boitepostale')->getData();
  1213.             $whatsapp $inscriptionForm->get('whatsapp')->getData();            
  1214.             
  1215.             $telephone $inscriptionForm->get('telephone')->getData();
  1216.             $commentaire $inscriptionForm->get('commentaire')->getData(); 
  1217.             $formation $formationRepository->find($id);
  1218.             //dd($formation->getId());
  1219.             if($query){
  1220.                 $theme $formation->getTheme();
  1221.                 $idville $formation->getVille();
  1222.                 $session $formation->getDatesSession();
  1223.                 $prix $formation->getPrix();
  1224.                 $devise $formation->getDevise();
  1225.                 
  1226.                 $villes $villeRepository->find($idville);
  1227.                 $nomtheme $theme->getNom();
  1228.                 $nomville $villes->getNom();
  1229.             }
  1230.             
  1231.             if($certificat){
  1232.                 $nomtheme $certificat['theme'];
  1233.                 $nomville $certificat['vilnom'];
  1234.                 $nompays $certificat['pays'];
  1235.                 $session $certificat['session'];
  1236.                 $prix $certificat['prix'];
  1237.                 $devise $certificat['devise'];
  1238.             }
  1239.             //dd($certificat);
  1240.             if(!$commentaire){
  1241.                 $commentaire " ";
  1242.             }else{
  1243.                 $commentaire $inscriptionForm->get('commentaire')->getData();
  1244.             }
  1245.             
  1246.             $destinataire 'inscription@cimef-international.org';
  1247.             $expediteur   $mail;
  1248.             $reponse      $expediteur;
  1249.             $suj "INSCRIPTION FORMATION 2026";
  1250.             
  1251.             $codehtml '<html><body>'.
  1252.             '<table width="100%" cellpadding="0" cellspacing="0" style="background-color:#f4f6f8; padding:20px;">
  1253.             <tr>
  1254.             <td align="center">
  1255.             <table width="600" cellpadding="0" cellspacing="0" style="background-color:#ffffff; border-radius:6px; overflow:hidden; box-shadow:0 2px 6px rgba(0,0,0,0.08);">
  1256.             <tr>
  1257.             <td style="background-color:#051a53; padding:20px; color:#ffffff; text-align:center;">
  1258.             <h2 style="margin:0;">Confirmation d\'inscription</h2>
  1259.             </td>
  1260.             </tr>
  1261.             <tr>
  1262.             <td style="padding:25px; color:#333333; font-size:14px; line-height:1.6;">
  1263.             <p>Inscription de '.$civilite.' '.$prenoms.' '.$nom.' à la formation <strong>'.$nomtheme.'</strong> organisée par <strong>CIMEF International</strong>.</p>
  1264.             <p>Veuillez trouver ci-dessous le récapitulatif :</p>
  1265.             <hr style="border:none; border-top:1px solid #e0e0e0; margin:20px 0;">
  1266.             <h4 style="margin-bottom:8px; color:#0d6efd;">Informations personnelles</h4>
  1267.             <p>
  1268.             <strong>Nom & Prénoms :</strong> '.$prenoms.' '.$nom.'<br>
  1269.             <strong>Fonction :</strong> '.$fonction.'<br>
  1270.             <strong>Entreprise :</strong> '.$entreprise.'<br>
  1271.             <strong>Adresse :</strong> '.$adresse.'<br>
  1272.             <strong>Pays / Ville :</strong> '.$pays.' / '.$ville.'<br>
  1273.             <strong>Boîte postale :</strong> '.$boitepostale.'
  1274.             </p>
  1275.             <h4 style="margin-bottom:8px; color:#0d6efd;">Coordonnées</h4>
  1276.             <p>
  1277.             <strong>Email :</strong> '.$mail.'<br>
  1278.             <strong>Téléphone :</strong> '.$telephone.'<br>
  1279.             <strong>WhatsApp :</strong> '.$whatsapp.'<br>
  1280.             <strong>Site web :</strong> '.$siteweb.'
  1281.             </p>
  1282.             <h4 style="margin-bottom:8px; color:#0d6efd;">Détails de participation</h4>
  1283.             <p>
  1284.             <strong>Nombre de participants :</strong> '.$nbparticipant.'<br>
  1285.             <strong>Commentaire :</strong> '.$commentaire.'
  1286.             </p>
  1287.             <h4 style="margin-bottom:8px; color:#0d6efd;">Détail de la formation</h4>
  1288.             <p>
  1289.             <strong>Thème :</strong> '.$nomtheme.'<br>
  1290.             <strong>Ville :</strong> '.$nomville.'<br>
  1291.             <strong>Prix :</strong> '.$prix.''.$devise.'<br>
  1292.             <strong>Session :</strong> '.$session.'
  1293.             </p>
  1294.             </td>
  1295.             </tr>
  1296.             <tr>
  1297.             <td style="background-color:#f1f1f1; padding:15px; text-align:center; font-size:12px; color:#777777;">
  1298.             © '.date("Y").' CIMEF International — Tous droits réservés
  1299.             </td>
  1300.             </tr>
  1301.             </table>
  1302.             </td>
  1303.             </tr>
  1304.             </table>
  1305.             </body></html>';
  1306.             
  1307.             $email = (new Email())
  1308.             ->from('CIMEF International <inscription@cimef-international.org>')
  1309.             ->to($destinataire)                 // destinataire principal
  1310.             ->cc('medias@cimef-international.com'// COPIE
  1311.             ->replyTo($expediteur)              // Reply-To:
  1312.             ->subject($suj)     
  1313.             ->text(strip_tags($codehtml))
  1314.             ->html($codehtml);// Subject:
  1315.             //->html($codehtml, 'text/html');   // Content-Type + charset utf-8
  1316.             $mailer->send($email);
  1317.             $inscription->setNom($nom);
  1318.             $inscription->setPrenoms($prenoms);
  1319.             $inscription->setFonction($fonction);
  1320.             $inscription->setAdresse($adresse);
  1321.             $inscription->setMail($mail);
  1322.             $inscription->setEntreprise($entreprise);
  1323.             $inscription->setSiteweb($siteweb);
  1324.             $inscription->setNbparticipant($nbparticipant);
  1325.             $inscription->setPays($pays);
  1326.             $inscription->setVille$ville);
  1327.             $inscription->setBoitepostale($boitepostale);
  1328.             $inscription->setWhatsapp($whatsapp);
  1329.             $inscription->setTelephone($telephone);
  1330.             $inscription->setCommentaire($commentaire);
  1331.             $inscription->setFormation($formation);
  1332.             $entityManager->persist($inscription);
  1333.             $entityManager->flush();
  1334.             $this->addFlash(
  1335.             'success',
  1336.             'Votre inscription à été bien enregistrée');
  1337.             return $this->redirectToRoute('front.seminaire.nationaux',['seminaires' => $seminaires,'slug' => $slug]);
  1338.         }
  1339.         if($query){
  1340.             return $this->render('front/inscriptions/inscription-seminaire.html.twig',[
  1341.                 'slug' => $slug,
  1342.                 'query' => $query,
  1343.                 'annee' => $annee,
  1344.                 'type' => $seminaires,
  1345.                 'mentions' => $mentions,
  1346.                 'inscriptionForm' => $inscriptionForm->createView(),
  1347.             ]);
  1348.         }else{
  1349.             $nomtheme $certificat['theme'];
  1350.             $nomville $certificat['vilnom'];
  1351.             $nompays $certificat['pays'];
  1352.             $session $certificat['session'];
  1353.             $prix $certificat['prix'];
  1354.             $devise $certificat['devise'];
  1355.             
  1356.             return $this->render('front/inscriptions/inscription-certificat.html.twig',[
  1357.                 'slug' => $slug,
  1358.                 'prix' => $prix,
  1359.                 'annee' => $annee,
  1360.                 'pays' => $nompays,
  1361.                 'devise' => $devise,
  1362.                 'ville' => $nomville,
  1363.                 'theme' => $nomtheme,
  1364.                 'type' => $seminaires,
  1365.                 'session' => $session,
  1366.                 'mentions' => $mentions,
  1367.                 'certificat' => $certificat,
  1368.                 'inscriptionForm' => $inscriptionForm->createView(),
  1369.             ]);
  1370.         }
  1371.     }
  1372.         
  1373.     #[Route('/formations/rencontre-des-top-management/{slug}/{id}code/inscription'name'front.inscription.management'methods:['GET','POST'])]
  1374.     public function inscription_man(
  1375.         $slug,
  1376.         $id,
  1377.         Request $request,
  1378.         MailerInterface $mailer,
  1379.         InscriptionsRepository $inscriptionRepository,
  1380.         ManagementsRepository $managementRepository,
  1381.         MentionsRepository $mentionRepository,
  1382.         EntityManagerInterface $entityManager
  1383.     ): Response
  1384.     {
  1385.         
  1386.         $annee date('Y');
  1387.         $queryBuilder_1 $entityManager->createQueryBuilder();
  1388.         $queryBuilder_1
  1389.         ->select('man')
  1390.         ->from(Managements::class, 'man')
  1391.         ->where('man.slug = :theme')
  1392.         ->andwhere('man.id = :forid')
  1393.         ->setParameter('theme'$slug)
  1394.         ->setParameter('forid'$id);
  1395.         $query_1 $queryBuilder_1->getQuery()->getResult();
  1396.         $mentions $mentionRepository->findAll();
  1397.         $inscription = new Inscriptions();
  1398.         $inscriptionForm $this->createForm(InscriptionFormType::class, $inscription);
  1399.         $inscriptionForm->handleRequest($request);
  1400.         
  1401.         if ($inscriptionForm->isSubmitted()) {
  1402.             $nom $inscriptionForm->get('nom')->getData();
  1403.             $prenoms $inscriptionForm->get('prenoms')->getData();
  1404.             $fonction $inscriptionForm->get('fonction')->getData();
  1405.             $adresse $inscriptionForm->get('adresse')->getData();
  1406.             $mail $inscriptionForm->get('mail')->getData();
  1407.             $entreprise $inscriptionForm->get('entreprise')->getData();
  1408.             
  1409.             $siteweb $inscriptionForm->get('siteweb')->getData();
  1410.             $nbparticipant $inscriptionForm->get('nbparticipant')->getData();
  1411.             $pays $inscriptionForm->get('pays')->getData();
  1412.             $ville $inscriptionForm->get('ville')->getData();
  1413.             $boitepostale $inscriptionForm->get('boitepostale')->getData();
  1414.             $whatsapp $inscriptionForm->get('whatsapp')->getData();            
  1415.             
  1416.             $telephone $inscriptionForm->get('telephone')->getData();
  1417.             $commentaire $inscriptionForm->get('commentaire')->getData(); 
  1418.             $management $managementRepository->find($id);
  1419.             //dd($formation->getId());
  1420.             
  1421.             $theme $management->getTheme();
  1422.             $ville $management->getVille();
  1423.             $datedebut $management->getDateDebut();
  1424.             $datefin $management->getDateFin();
  1425.             $prix $management->getPrix();
  1426.             $devise $management->getDevise();
  1427.             
  1428.             if(!$commentaire){
  1429.                 $commentaire "...";
  1430.             }else{
  1431.                 $commentaire $inscriptionForm->get('commentaire')->getData();
  1432.             }
  1433.             
  1434.             //$codehtml = "test";
  1435.             
  1436.             $codehtml '<html><body>'.
  1437.             '<table width="100%" cellpadding="0" cellspacing="0" style="background-color:#f4f6f8; padding:20px;">
  1438.             <tr>
  1439.             <td align="center">
  1440.             <table width="600" cellpadding="0" cellspacing="0" style="background-color:#ffffff; border-radius:6px; overflow:hidden; box-shadow:0 2px 6px rgba(0,0,0,0.08);">
  1441.             <tr>
  1442.             <td style="background-color:#051a53; padding:20px; color:#ffffff; text-align:center;">
  1443.             <h2 style="margin:0;">Confirmation d\'inscription</h2>
  1444.             </td>
  1445.             </tr>
  1446.             <tr>
  1447.             <td style="padding:25px; color:#333333; font-size:14px; line-height:1.6;">
  1448.             <p>Inscription de M/Mme <strong>'.$prenoms.' '.$nom.'</strong> à la formation <strong>'.$nomtheme.'</strong> organisée par <strong>CIMEF International</strong>.</p>
  1449.             <p>Veuillez trouver ci-dessous le récapitulatif :</p>
  1450.             <hr style="border:none; border-top:1px solid #e0e0e0; margin:20px 0;">
  1451.             <h4 style="margin-bottom:8px; color:#0d6efd;">Informations personnelles</h4>
  1452.             <p>
  1453.             <strong>Nom & Prénoms :</strong> '.$prenoms.' '.$nom.'<br>
  1454.             <strong>Fonction :</strong> '.$fonction.'<br>
  1455.             <strong>Entreprise :</strong> '.$entreprise.'<br>
  1456.             <strong>Adresse :</strong> '.$adresse.'<br>
  1457.             <strong>Pays / Ville :</strong> '.$pays.' / '.$ville.'<br>
  1458.             <strong>Boîte postale :</strong> '.$boitepostale.'
  1459.             </p>
  1460.             <h4 style="margin-bottom:8px; color:#0d6efd;">Coordonnées</h4>
  1461.             <p>
  1462.             <strong>Email :</strong> '.$mail.'<br>
  1463.             <strong>Téléphone :</strong> '.$telephone.'<br>
  1464.             <strong>WhatsApp :</strong> '.$whatsapp.'<br>
  1465.             <strong>Site web :</strong> '.$siteweb.'
  1466.             </p>
  1467.             <h4 style="margin-bottom:8px; color:#0d6efd;">Détails de participation</h4>
  1468.             <p>
  1469.             <strong>Nombre de participants :</strong> '.$nbparticipant.'<br>
  1470.             <strong>Commentaire :</strong> '.$commentaire.'
  1471.             </p>
  1472.             <h4 style="margin-bottom:8px; color:#0d6efd;">Détail de la formation</h4>
  1473.             <p>
  1474.             <strong>Thème :</strong> '.$theme.'<br>
  1475.             <strong>Ville :</strong> '.$ville.'<br>
  1476.             <strong>Prix :</strong> '.$prix.''.$devise.'<br>
  1477.             <strong>Date de la rencontre :</strong> Du'.$datedebut.' au '.$datefin.'<br>
  1478.             </p>
  1479.             </td>
  1480.             </tr>
  1481.             <tr>
  1482.             <td style="background-color:#f1f1f1; padding:15px; text-align:center; font-size:12px; color:#777777;">
  1483.             © '.date("Y").' CIMEF International — Tous droits réservés
  1484.             </td>
  1485.             </tr>
  1486.             </table>
  1487.             </td>
  1488.             </tr>
  1489.             </table>
  1490.             </body></html>';
  1491.             
  1492.             
  1493.             $secretKey '6LfPYkosAAAAAJQFLCC-9U5bF6KdFTPrgmbxg5Ux';
  1494.             $value $request->get('g-recaptcha-response');
  1495.             $userIP $_SERVER['REMOTE_ADDR'];
  1496.             $url "https://www.google.com/recaptcha/api/siteverify?secret=$secretKey&response=$value&remoteid=$userIP";
  1497.             $response \file_get_contents($url);
  1498.             $response json_decode((string)$response);
  1499.             //dd($response);
  1500.             if(!$response->success){
  1501.                 $this->addFlash(
  1502.                     'warning',
  1503.                     'Cocher le champs recaptcha svp!');
  1504.             }else{
  1505.                 $destinataire 'inscription@cimef-international.org';
  1506.                 $expediteur   $mail;
  1507.                 $reponse      $expediteur;
  1508.                 $suj "INSCRIPTION FORMATION 2026";
  1509.             
  1510.             
  1511.                 $email = (new Email())
  1512.                 ->from('CIMEF International <inscription@cimef-international.org>')
  1513.                 ->to($destinataire)                 // destinataire principal
  1514.                 ->cc('medias@cimef-international.com'// COPIE
  1515.                 ->replyTo($expediteur)              // Reply-To:
  1516.                 ->subject($suj)     
  1517.                 ->text(strip_tags($codehtml))
  1518.                 ->html($codehtml);// Subject:
  1519.                 //->html($codehtml, 'text/html');   // Content-Type + charset utf-8
  1520.                 $mailer->send($email);
  1521.                 $inscription->setNom($nom);
  1522.                 $inscription->setPrenoms($prenoms);
  1523.                 $inscription->setFonction($fonction);
  1524.                 $inscription->setAdresse($adresse);
  1525.                 $inscription->setMail($mail);
  1526.                 $inscription->setEntreprise($entreprise);
  1527.                 $inscription->setSiteweb($siteweb);
  1528.                 $inscription->setNbparticipant($nbparticipant);
  1529.                 $inscription->setPays($pays);
  1530.                 $inscription->setVille$ville);
  1531.                 $inscription->setBoitepostale($boitepostale);
  1532.                 $inscription->setWhatsapp($whatsapp);
  1533.                 $inscription->setTelephone($telephone);
  1534.                 $inscription->setCommentaire($commentaire);
  1535.                 $inscription->setFormation($management);
  1536.                 $entityManager->persist($inscription);
  1537.                 $entityManager->flush();
  1538.             
  1539.                 $this->addFlash(
  1540.                 'success',
  1541.                 'Votre inscription à été bien enregistrée');
  1542.                 return $this->redirectToRoute('front.top.management');
  1543.                 
  1544.             }
  1545.         }
  1546.           
  1547.           
  1548.         return $this->render('front/inscriptions/inscription-top-management.html.twig',[
  1549.             'query_1' => $query_1,
  1550.             'annee' => $annee,
  1551.             'mentions' => $mentions,
  1552.             'inscriptionForm' => $inscriptionForm->createView(),
  1553.         ]);    
  1554.         
  1555.         /*
  1556.         if ($inscriptionForm->isSubmitted()) {
  1557.             $nom = $inscriptionForm->get('nom')->getData();
  1558.             $prenoms = $inscriptionForm->get('prenoms')->getData();
  1559.             $fonction = $inscriptionForm->get('fonction')->getData();
  1560.             $adresse = $inscriptionForm->get('adresse')->getData();
  1561.             $mail = $inscriptionForm->get('mail')->getData();
  1562.             $entreprise = $inscriptionForm->get('entreprise')->getData();
  1563.             
  1564.             $siteweb = $inscriptionForm->get('siteweb')->getData();
  1565.             $nbparticipant = $inscriptionForm->get('nbparticipant')->getData();
  1566.             $pays = $inscriptionForm->get('pays')->getData();
  1567.             $ville = $inscriptionForm->get('ville')->getData();
  1568.             $boitepostale = $inscriptionForm->get('boitepostale')->getData();
  1569.             $whatsapp = $inscriptionForm->get('whatsapp')->getData();            
  1570.             
  1571.             $telephone = $inscriptionForm->get('telephone')->getData();
  1572.             $commentaire = $inscriptionForm->get('commentaire')->getData(); 
  1573.             $formation = $formationRepository->find($id);
  1574.             //dd($formation->getId());
  1575.             
  1576.             $theme = $formation->getTheme();
  1577.             $idville = $formation->getVille();
  1578.             $session = $formation->getDatesSession();
  1579.             $prix = $formation->getPrix();
  1580.             $devise = $formation->getDevise();
  1581.             
  1582.             $villes = $villeRepository->find($idville);
  1583.             $nomtheme = $theme->getNom();
  1584.             $nomville = $villes->getNom();
  1585.             
  1586.             if(!$commentaire){
  1587.                 $commentaire = "...";
  1588.             }else{
  1589.                 $commentaire = $inscriptionForm->get('commentaire')->getData();
  1590.             }
  1591.             
  1592.             //$codehtml = "test";
  1593.             
  1594.             $codehtml = '<html><body>'.
  1595.             '<table width="100%" cellpadding="0" cellspacing="0" style="background-color:#f4f6f8; padding:20px;">
  1596.             <tr>
  1597.             <td align="center">
  1598.             <table width="600" cellpadding="0" cellspacing="0" style="background-color:#ffffff; border-radius:6px; overflow:hidden; box-shadow:0 2px 6px rgba(0,0,0,0.08);">
  1599.             <tr>
  1600.             <td style="background-color:#051a53; padding:20px; color:#ffffff; text-align:center;">
  1601.             <h2 style="margin:0;">Confirmation d\'inscription</h2>
  1602.             </td>
  1603.             </tr>
  1604.             <tr>
  1605.             <td style="padding:25px; color:#333333; font-size:14px; line-height:1.6;">
  1606.             <p>Inscription de M/Mme <strong>'.$prenoms.' '.$nom.'</strong> à la formation <strong>'.$nomtheme.'</strong> organisée par <strong>CIMEF International</strong>.</p>
  1607.             <p>Veuillez trouver ci-dessous le récapitulatif :</p>
  1608.             <hr style="border:none; border-top:1px solid #e0e0e0; margin:20px 0;">
  1609.             <h4 style="margin-bottom:8px; color:#0d6efd;">Informations personnelles</h4>
  1610.             <p>
  1611.             <strong>Nom & Prénoms :</strong> '.$prenoms.' '.$nom.'<br>
  1612.             <strong>Fonction :</strong> '.$fonction.'<br>
  1613.             <strong>Entreprise :</strong> '.$entreprise.'<br>
  1614.             <strong>Adresse :</strong> '.$adresse.'<br>
  1615.             <strong>Pays / Ville :</strong> '.$pays.' / '.$ville.'<br>
  1616.             <strong>Boîte postale :</strong> '.$boitepostale.'
  1617.             </p>
  1618.             <h4 style="margin-bottom:8px; color:#0d6efd;">Coordonnées</h4>
  1619.             <p>
  1620.             <strong>Email :</strong> '.$mail.'<br>
  1621.             <strong>Téléphone :</strong> '.$telephone.'<br>
  1622.             <strong>WhatsApp :</strong> '.$whatsapp.'<br>
  1623.             <strong>Site web :</strong> '.$siteweb.'
  1624.             </p>
  1625.             <h4 style="margin-bottom:8px; color:#0d6efd;">Détails de participation</h4>
  1626.             <p>
  1627.             <strong>Nombre de participants :</strong> '.$nbparticipant.'<br>
  1628.             <strong>Commentaire :</strong> '.$commentaire.'
  1629.             </p>
  1630.             <h4 style="margin-bottom:8px; color:#0d6efd;">Détail de la formation</h4>
  1631.             <p>
  1632.             <strong>Thème :</strong> '.$nomtheme.'<br>
  1633.             <strong>Ville :</strong> '.$nomville.'<br>
  1634.             <strong>Prix :</strong> '.$prix.'<br>
  1635.             <strong>Devise :</strong> '.$devise.'<br>
  1636.             <strong>Session :</strong> '.$session.'
  1637.             </p>
  1638.             </td>
  1639.             </tr>
  1640.             <tr>
  1641.             <td style="background-color:#f1f1f1; padding:15px; text-align:center; font-size:12px; color:#777777;">
  1642.             © '.date("Y").' CIMEF International — Tous droits réservés
  1643.             </td>
  1644.             </tr>
  1645.             </table>
  1646.             </td>
  1647.             </tr>
  1648.             </table>
  1649.             </body></html>';
  1650.             
  1651.             
  1652.             $secretKey = '6LfPYkosAAAAAJQFLCC-9U5bF6KdFTPrgmbxg5Ux';
  1653.             $value = $request->get('g-recaptcha-response');
  1654.             $userIP = $_SERVER['REMOTE_ADDR'];
  1655.             $url = "https://www.google.com/recaptcha/api/siteverify?secret=$secretKey&response=$value&remoteid=$userIP";
  1656.             $response = \file_get_contents($url);
  1657.             $response = json_decode((string)$response);
  1658.             //dd($response);
  1659.             if(!$response->success){
  1660.                 $this->addFlash(
  1661.                     'warning',
  1662.                     'Cocher le champs recaptcha svp!');
  1663.             }else{
  1664.                 $destinataire = 'inscription@cimef-international.org';
  1665.                 $expediteur   = $mail;
  1666.                 $reponse      = $expediteur;
  1667.                 $suj = "INSCRIPTION FORMATION 2026";
  1668.             
  1669.             
  1670.                 $email = (new Email())
  1671.                 ->from('CIMEF International <inscription@cimef-international.org>')
  1672.                 ->to($destinataire)                 // destinataire principal
  1673.                 ->cc('medias@cimef-international.com') // COPIE
  1674.                 ->replyTo($expediteur)              // Reply-To:
  1675.                 ->subject($suj)     
  1676.                 ->text(strip_tags($codehtml))
  1677.                 ->html($codehtml);// Subject:
  1678.                 //->html($codehtml, 'text/html');   // Content-Type + charset utf-8
  1679.                 $mailer->send($email);
  1680.                 $inscription->setNom($nom);
  1681.                 $inscription->setPrenoms($prenoms);
  1682.                 $inscription->setFonction($fonction);
  1683.                 $inscription->setAdresse($adresse);
  1684.                 $inscription->setMail($mail);
  1685.                 $inscription->setEntreprise($entreprise);
  1686.                 $inscription->setSiteweb($siteweb);
  1687.                 $inscription->setNbparticipant($nbparticipant);
  1688.                 $inscription->setPays($pays);
  1689.                 $inscription->setVille( $ville);
  1690.                 $inscription->setBoitepostale($boitepostale);
  1691.                 $inscription->setWhatsapp($whatsapp);
  1692.                 $inscription->setTelephone($telephone);
  1693.                 $inscription->setCommentaire($commentaire);
  1694.                 $inscription->setFormation($formation);
  1695.                 $entityManager->persist($inscription);
  1696.                 $entityManager->flush();
  1697.             
  1698.                 $this->addFlash(
  1699.                 'success',
  1700.                 'Votre inscription à été bien enregistrée');
  1701.                 return $this->redirectToRoute('front.seminaire.nationaux',['seminaires' => $seminaires,'slug' => $slug]);
  1702.                 
  1703.             }
  1704.         }
  1705.         
  1706.         return $this->render('front/inscriptions/inscription-seminaire.html.twig',[
  1707.             'query' => $query,
  1708.             'annee' => $annee,
  1709.             'type' => $seminaires,
  1710.             'mentions' => $mentions,
  1711.             'inscriptionForm' => $inscriptionForm->createView(),
  1712.         ]);
  1713.         */
  1714.     }
  1715.     
  1716.  
  1717.     #[Route('/formations/seminaire-sur-mesure'name'front.seminaire-sur-mesure'methods:['GET','POST'])]
  1718.     public function inscription_seminaire_sur_mesure(
  1719.         Request $request,
  1720.         MailerInterface $mailer,
  1721.         InscriptionsRepository $inscriptionRepository,
  1722.         MentionsRepository $mentionRepository,
  1723.         EntityManagerInterface $entityManager
  1724.     ): Response
  1725.     {
  1726.         //dd($seminaires);
  1727.         $annee date('Y');
  1728.         $mentions $mentionRepository->findAll();
  1729.         $demandeformation = new Demandeformations();
  1730.         $demandeformationsForm $this->createForm(DemandeformationFormType::class, $demandeformation);
  1731.         $demandeformationsForm->handleRequest($request);
  1732.         if ($demandeformationsForm->isSubmitted()) {
  1733.             $nom $demandeformationsForm->get('nom')->getData();
  1734.             $prenoms $demandeformationsForm->get('prenoms')->getData();
  1735.             $fonction $demandeformationsForm->get('fonction')->getData();
  1736.             $adresse $demandeformationsForm->get('adresse')->getData();
  1737.             $mail $demandeformationsForm->get('mail')->getData();
  1738.             $entreprise $demandeformationsForm->get('entreprise')->getData();
  1739.             
  1740.             $siteweb $demandeformationsForm->get('siteweb')->getData();
  1741.             $nombrepart $demandeformationsForm->get('nombrepart')->getData();
  1742.             $lieu $demandeformationsForm->get('lieu')->getData();
  1743.             $theme $demandeformationsForm->get('theme')->getData();
  1744.             $duree $demandeformationsForm->get('duree')->getData();
  1745.             
  1746.             $telephone $demandeformationsForm->get('telephone')->getData();
  1747.             $commentaire $demandeformationsForm->get('commentaire')->getData(); 
  1748.             //dd($formation->getId());
  1749.            
  1750.             if(!$commentaire){
  1751.                 $commentaire "...";
  1752.             }else{
  1753.                 $commentaire $demandeformationsForm->get('commentaire')->getData();
  1754.             }
  1755.             
  1756.             $destinataire 'inscription@cimef-international.org';
  1757.             $expediteur   $mail;
  1758.             $reponse      $expediteur;
  1759.             $suj "INSCRIPTION FORMATION 2026";
  1760.             //$codehtml = "test";
  1761.             
  1762.             $codehtml '<html><body>'.
  1763.             '<table width="100%" cellpadding="0" cellspacing="0" style="background-color:#f4f6f8; padding:20px;">
  1764.             <tr>
  1765.             <td align="center">
  1766.             <table width="600" cellpadding="0" cellspacing="0" style="background-color:#ffffff; border-radius:6px; overflow:hidden; box-shadow:0 2px 6px rgba(0,0,0,0.08);">
  1767.             <tr>
  1768.             <td style="background-color:#051a53; padding:20px; color:#ffffff; text-align:center;">
  1769.             <h2 style="margin:0;">Confirmation d\'inscription</h2>
  1770.             </td>
  1771.             </tr>
  1772.             <tr>
  1773.             <td style="padding:25px; color:#333333; font-size:14px; line-height:1.6;">
  1774.             <p>Demande de dévis de M/Mme <strong>'.$prenoms.' '.$nom.'</strong> pour une formation sur mesure avec pour thème :<strong>'.$nomtheme.'</strong>.</p>
  1775.             <p>Veuillez trouver ci-dessous le récapitulatif :</p>
  1776.             <hr style="border:none; border-top:1px solid #e0e0e0; margin:20px 0;">
  1777.             <h4 style="margin-bottom:8px; color:#0d6efd;">Informations personnelles</h4>
  1778.             <p>
  1779.             <strong>Nom & Prénoms :</strong> '.$prenoms.' '.$nom.'<br>
  1780.             <strong>Fonction :</strong> '.$fonction.'<br>
  1781.             <strong>Entreprise :</strong> '.$entreprise.'<br>
  1782.             <strong>Adresse :</strong> '.$adresse.'<br>
  1783.             </p>
  1784.             <h4 style="margin-bottom:8px; color:#0d6efd;">Coordonnées</h4>
  1785.             <p>
  1786.             <strong>Email :</strong> '.$mail.'<br>
  1787.             <strong>Téléphone :</strong> '.$telephone.'<br>
  1788.             <strong>Site web :</strong> '.$siteweb.'
  1789.             </p>
  1790.             <h4 style="margin-bottom:8px; color:#0d6efd;">Détails de participation</h4>
  1791.             <p>
  1792.             <strong>Nombre de participants :</strong> '.$nombrepart.'<br>
  1793.             <strong>Commentaire :</strong> '.$commentaire.'
  1794.             </p>
  1795.             <h4 style="margin-bottom:8px; color:#0d6efd;">Détail de la formation</h4>
  1796.             <p>
  1797.             <strong>Thème :</strong> '.$theme.'<br>
  1798.             <strong>Lieu :</strong> '.$lieu.'<br>
  1799.             <strong>Date :</strong> '.$duree.'
  1800.             </p>
  1801.             </td>
  1802.             </tr>
  1803.             <tr>
  1804.             <td style="background-color:#f1f1f1; padding:15px; text-align:center; font-size:12px; color:#777777;">
  1805.             © '.date("Y").' CIMEF International — Tous droits réservés
  1806.             </td>
  1807.             </tr>
  1808.             </table>
  1809.             </td>
  1810.             </tr>
  1811.             </table>
  1812.             </body></html>';
  1813.             
  1814.             $email = (new Email())
  1815.             ->from('CIMEF International <inscription@cimef-international.org>')
  1816.             ->to($destinataire)                 // destinataire principal
  1817.             ->cc('medias@cimef-international.com'// COPIE
  1818.             ->replyTo($expediteur)              // Reply-To:
  1819.             ->subject($suj)     
  1820.             ->text(strip_tags($codehtml))
  1821.             ->html($codehtml);// Subject:
  1822.             //->html($codehtml, 'text/html');   // Content-Type + charset utf-8
  1823.             $mailer->send($email);
  1824.             $demandeformation->setNom($nom);
  1825.             $demandeformation->setPrenoms($prenoms);
  1826.             $demandeformation->setFonction($fonction);
  1827.             $demandeformation->setAdresse($adresse);
  1828.             $demandeformation->setMail($mail);
  1829.             $demandeformation->setEntreprise($entreprise);
  1830.             $demandeformation->setSiteweb($siteweb);
  1831.             $demandeformation->setNombrepart($nombrepart);
  1832.             $demandeformation->setLieu($lieu);
  1833.             $demandeformation->setTheme($theme);
  1834.             $demandeformation->setDuree($duree);
  1835.             $demandeformation->setTelephone($telephone);
  1836.             $demandeformation->setCommentaire($commentaire);
  1837.             $entityManager->persist($demandeformation);
  1838.             $entityManager->flush();
  1839.             $this->addFlash(
  1840.             'success',
  1841.             'Votre inscription à été bien enregistrée');
  1842.             return $this->redirectToRoute('front.inter.index');
  1843.         }
  1844.         
  1845.         return $this->render('front/inscriptions/formation-sur-mesure.html.twig',[
  1846.             'annee' => $annee,
  1847.             'mentions' => $mentions,
  1848.             'demandeformationsForm' => $demandeformationsForm->createView(),
  1849.         ]);
  1850.     }
  1851.     
  1852.     
  1853.     #[Route('/formations/seminaires-internationaux/{slug}/{id}code'name'front.seminaire.inter.detail'methods:['GET'])]
  1854.     public function detail_sem_int(
  1855.         $slug,
  1856.         $id,
  1857.         Request $request
  1858.         MentionsRepository $mentionRepository,
  1859.         EntityManagerInterface $entityManager
  1860.     ): Response
  1861.     {
  1862.         $type "Séminaires internationaux";
  1863.         $annee date('Y');
  1864.         $queryBuilder $entityManager->createQueryBuilder();
  1865.         $queryBuilder
  1866.         ->select('for.id''for.dates_session''for.prix''for.devise''th.nom'
  1867.             'thm.nom AS thmnom','vil.nom AS vilnom','vil.pays','for.created_at',
  1868.             'th.slug','th.description','for.devise','vil.longitude','vil.latitude'
  1869.         )
  1870.         ->from(Formations::class, 'for')
  1871.         ->innerJoin(Themes::class, 'th''WITH''for.theme = th.id')
  1872.         ->innerJoin(Villes::class,  'vil''WITH''for.ville = vil.id')
  1873.         ->innerJoin(Thematiques::class, 'thm''WITH''th.thematique = thm.id')
  1874.         ->where('th.slug = :theme')
  1875.         ->andwhere('for.id = :forid')
  1876.         ->setParameter('theme'$slug)
  1877.         ->setParameter('forid'$id);
  1878.         $query $queryBuilder->getQuery()->getResult();
  1879.         $mentions $mentionRepository->findAll();
  1880.         
  1881.         $locations = [];
  1882.         foreach ($query as $row) {
  1883.             if (!empty($row['latitude']) && !empty($row['longitude'])) {
  1884.                 $locations[] = [
  1885.                     'lat'   => (float) $row['latitude'],
  1886.                     'lng'   => (float) $row['longitude'],
  1887.                     'ville' => strtoupper($row['vilnom']),
  1888.                     'pays'  => strtoupper($row['pays']),
  1889.                 ];
  1890.             }
  1891.         }
  1892.         
  1893.         /*
  1894.         $locations = [
  1895.             [
  1896.                 'lat' => 5.399573993486265, 
  1897.                 'lng' => -3.9608326481739446, 
  1898.                 'ville' => 'ABIDJAN',
  1899.                 'Pays' => 'CÔTE D\'IVOIRE',
  1900.             ],
  1901.             [
  1902.                 'lat' => 48.82503553852063, 
  1903.                 'lng' => 2.3943687952459913, 
  1904.                 'ville' => 'PARIS',
  1905.                 'pays' => 'FRANCE',
  1906.             ],
  1907.             [
  1908.                 'lat' => 33.61983014582587, 
  1909.                 'lng' => -7.591902517162099, 
  1910.                 'ville' => 'CASABLANCA',
  1911.                 'pays' => 'MAROC',
  1912.             ],
  1913.             [
  1914.                 'lat' => 14.671959307245515, 
  1915.                 'lng' => -17.428349942742518, 
  1916.                 'ville' => 'DAKAR',
  1917.                 'pays' => 'SENEGAL',
  1918.             ],
  1919.             [
  1920.                 'lat' => 25.222641788192867, 
  1921.                 'lng' =>  55.4419721341237, 
  1922.                 'ville' => 'DUBAI',
  1923.                 'pays' => 'EMIRATS ARABES UNIS',
  1924.             ],
  1925.             [
  1926.                 'lat' => 41.008441347309684, 
  1927.                 'lng' => 28.969801288596543, 
  1928.                 'ville' => 'ISTANBUL',
  1929.                 'pays' => 'TURQUIE',
  1930.             ],
  1931.         ];*/
  1932.         return $this->render('front/detail/detail-seminaire-inter.html.twig',[
  1933.             'locations' => $locations,
  1934.             'annee' => $annee,
  1935.             'type' => $type,
  1936.             'mentions' => $mentions,
  1937.             'query' => $query
  1938.         ]);
  1939.     }
  1940.     
  1941.     #[Route('/formations/seminaires-nationaux/{slug}/{id}code'name'front.seminaire.nation.detail'methods:['GET'])]
  1942.     public function detail_sem_nat(
  1943.         $slug,
  1944.         $id,
  1945.         Request $request
  1946.         MentionsRepository $mentionRepository,
  1947.         EntityManagerInterface $entityManager
  1948.     ): Response
  1949.     {
  1950.         $type "Séminaires nationaux";
  1951.         $annee date('Y');
  1952.         $queryBuilder $entityManager->createQueryBuilder();
  1953.         $queryBuilder
  1954.         ->select('for.id''for.dates_session''for.prix''for.devise''th.nom'
  1955.             'thm.nom AS thmnom','vil.nom AS vilnom','vil.pays','for.created_at',
  1956.             'th.slug','th.description','for.devise','vil.longitude','vil.latitude'
  1957.         )
  1958.         ->from(Formations::class, 'for')
  1959.         ->innerJoin(Themes::class, 'th''WITH''for.theme = th.id')
  1960.         ->innerJoin(Villes::class,  'vil''WITH''for.ville = vil.id')
  1961.         ->innerJoin(Thematiques::class, 'thm''WITH''th.thematique = thm.id')
  1962.         ->where('th.slug = :theme')
  1963.         ->andwhere('for.id = :forid')
  1964.         ->setParameter('theme'$slug)
  1965.         ->setParameter('forid'$id);
  1966.         $query $queryBuilder->getQuery()->getResult();
  1967.         $mentions $mentionRepository->findAll();
  1968.         
  1969.         $locations = [];
  1970.         foreach ($query as $row) {
  1971.             if (!empty($row['latitude']) && !empty($row['longitude'])) {
  1972.                 $locations[] = [
  1973.                     'lat'   => (float) $row['latitude'],
  1974.                     'lng'   => (float) $row['longitude'],
  1975.                     'ville' => strtoupper($row['vilnom']),
  1976.                     'pays'  => strtoupper($row['pays']),
  1977.                 ];
  1978.             }
  1979.         }
  1980.         
  1981.         return $this->render('front/detail/detail-seminaire-inter.html.twig',[
  1982.             'locations' => $locations,
  1983.             'annee' => $annee,
  1984.             'type' => $type,
  1985.             'mentions' => $mentions,
  1986.             'query' => $query
  1987.         ]);
  1988.     }
  1989.     
  1990.     
  1991.     #[Route('/actualites'name'front.actualite'methods:['GET'])]
  1992.     public function actualite(
  1993.         Request $request
  1994.         MentionsRepository $mentionRepository,
  1995.         ManagementsRepository $managementRepository,
  1996.         PaginatorInterface $paginator,
  1997.         ActualitesRepository $actualiteRepository
  1998.         EntityManagerInterface $entityManager
  1999.         ): Response
  2000.     {
  2001.         $All_actu $actualiteRepository->findBy(['statut' => 'Publié'], ['createdat' => 'DESC']);
  2002.         $manageLimit $managementRepository->findBy([], ['id' => 'DESC'], );
  2003.         $queryBuilder $entityManager->createQueryBuilder();
  2004.         $queryBuilder
  2005.         ->select('actu')
  2006.         ->from(Actualites::class, 'actu')
  2007.         ->where('actu.statut = :statut')
  2008.         ->setParameter('statut''Publié')
  2009.         ->orderBy('actu.createdat''DESC');
  2010.         
  2011.         $pagination $paginator->paginate(
  2012.             $queryBuilder,
  2013.             $request->query->getInt('page'1),
  2014.             12
  2015.         ); 
  2016.         
  2017.         $last_actu $actualiteRepository->findBy(['statut' => 'Publié'], ['createdat' => 'DESC'],limit4);
  2018.         $mentions $mentionRepository->findAll();
  2019.         return $this->render('front/actualite.html.twig',[
  2020.             'mentions' => $mentions,
  2021.             'last_actu' => $last_actu,
  2022.             'pagination' => $pagination,
  2023.             'manageLimit' => $manageLimit
  2024.         ]);
  2025.     }
  2026.     
  2027.     #[Route('/actualite/{slug}'name'front.detail.actu'methods:['GET','POST'])]
  2028.     public function detailactu(
  2029.         $slug,
  2030.         Request $request
  2031.         ActualitesRepository $actuRepository,
  2032.         MentionsRepository $mentionRepository,
  2033.         ManagementsRepository $managementRepository,
  2034.         EntityManagerInterface $entityManager
  2035.     ): Response
  2036.     {
  2037.         $Allactu $actuRepository->findAll();
  2038.         $detactu $actuRepository->findOneBy(array('slug' => $slug));
  2039.         $last_actu $actuRepository->findBy([], ['createdat' => 'ASC']);
  2040.         $manageLimit $managementRepository->findBy([], ['id' => 'DESC'], );
  2041.         $mentions $mentionRepository->findAll();
  2042.         return $this->render('front/detail/detail-actualite.html.twig',[
  2043.             'detactu' => $detactu,
  2044.             'actualite' => $Allactu,
  2045.             'mentions' => $mentions,
  2046.             'last_actu' => $last_actu,
  2047.             'manageLimit' => $manageLimit
  2048.         ]);
  2049.     }
  2050.     
  2051.     #[Route('/mentions/{slug}'name'front.mention.detail'methods:['GET','POST'])]
  2052.     public function detailmention(
  2053.         $slug,
  2054.         Request $request
  2055.         MentionsRepository $mentionRepository,
  2056.         EntityManagerInterface $entityManager
  2057.     ): Response
  2058.     {
  2059.         $detmention $mentionRepository->findOneBy(array('slug' => $slug));
  2060.         $mentions $mentionRepository->findAll();
  2061.         return $this->render('front/detail/detail-mention.html.twig',[
  2062.             'detmention' => $detmention,
  2063.             'mentions' => $mentions,
  2064.         ]);
  2065.     }
  2066.     
  2067.     
  2068.     #[Route('/presentation/nos-centres'name'front.centres'methods:['GET'])]
  2069.     public function centres(
  2070.         Request $request
  2071.         VillesRepository $villeRepository,
  2072.         MentionsRepository $mentionRepository,
  2073.         EntityManagerInterface $entityManager
  2074.         ): Response
  2075.     {
  2076.         $Ville $villeRepository->findAll();
  2077.         $locations = [
  2078.             [
  2079.                 'lat' => 5.399573993486265
  2080.                 'lng' => -3.9608326481739446
  2081.                 'ville' => 'ABIDJAN',
  2082.                 'Pays' => 'CÔTE D\'IVOIRE',
  2083.             ],
  2084.             [
  2085.                 'lat' => 48.82503553852063
  2086.                 'lng' => 2.3943687952459913
  2087.                 'ville' => 'PARIS',
  2088.                 'pays' => 'FRANCE',
  2089.             ],
  2090.             [
  2091.                 'lat' => 33.61983014582587
  2092.                 'lng' => -7.591902517162099
  2093.                 'ville' => 'CASABLANCA',
  2094.                 'pays' => 'MAROC',
  2095.             ],
  2096.             [
  2097.                 'lat' => 14.671959307245515
  2098.                 'lng' => -17.428349942742518
  2099.                 'ville' => 'DAKAR',
  2100.                 'pays' => 'SENEGAL',
  2101.             ],
  2102.             [
  2103.                 'lat' => 25.222641788192867
  2104.                 'lng' =>  55.4419721341237
  2105.                 'ville' => 'DUBAI',
  2106.                 'pays' => 'EMIRATS ARABES UNIS',
  2107.             ],
  2108.             [
  2109.                 'lat' => 41.008441347309684
  2110.                 'lng' => 28.969801288596543
  2111.                 'ville' => 'ISTANBUL',
  2112.                 'pays' => 'TURQUIE',
  2113.             ],
  2114.         ];
  2115.         $mentions $mentionRepository->findAll();
  2116.         return $this->render('front/centres.html.twig',[
  2117.             'locations' => $locations,
  2118.             'mentions' => $mentions,
  2119.             'ville' => $Ville    
  2120.         ]);
  2121.     }
  2122.     
  2123.     #[Route('/presentation/nos-partenaires'name'front.nos-partenaires'methods:['GET'])]
  2124.     public function partenaires(
  2125.         Request $request
  2126.         PartenairesRepository $partenaireRepository,
  2127.         MentionsRepository $mentionRepository,
  2128.         EntityManagerInterface $entityManager
  2129.         ): Response
  2130.     {
  2131.         $partenaires $partenaireRepository->findAll();
  2132.         $groupes = [];
  2133.         foreach ($partenaires as $p) {
  2134.             $groupes[$p->getPaysPart()][] = $p;
  2135.         }
  2136.         $mentions $mentionRepository->findAll();
  2137.         return $this->render('front/partenaire.html.twig',[
  2138.             'mentions' => $mentions,
  2139.             'groupes' => $groupes   
  2140.         ]);
  2141.     }
  2142.     
  2143.     #[Route('/presentation/nos-centres/{slug}'name'front.detail.centre'methods:['GET'])]
  2144.     public function detail_centre(
  2145.         $slug,
  2146.         Request $request,
  2147.         GaleriesRepository $galRepository,
  2148.         VillesRepository $villeRepository,
  2149.         MentionsRepository $mentionRepository,
  2150.         EntityManagerInterface $entityManager
  2151.         ): Response
  2152.     {
  2153.         $queryBuilder $entityManager->createQueryBuilder();
  2154.         $queryBuilder
  2155.         ->select('gal.imgal''gal.nom')
  2156.         ->from(Galeries::class, 'gal')
  2157.         ->where('gal.nom = :nom')
  2158.         ->setParameter('nom'$slug);
  2159.         $detgal $queryBuilder->getQuery()->getResult();
  2160.         
  2161.         //$detgal = $galRepository->findOneBy(array('nom' => $slug));
  2162.         //$detgal = $galRepository->findAll();
  2163.         $detcentres $villeRepository->findOneBy(array('slug' => $slug));
  2164.         $mentions $mentionRepository->findAll();
  2165.         return $this->render('front/detail/detail-centre.html.twig',[
  2166.             'slug' => $slug,
  2167.             'detcentre' => $detcentres,
  2168.             'mentions' => $mentions,
  2169.             'detgal' => $detgal
  2170.         ]);
  2171.     }
  2172.     
  2173.     
  2174.     #[Route('/financement-des-etudes'name'front.financement.etude'methods:['GET','POST'])]
  2175.     public function financement(): Response
  2176.     {
  2177.         return $this->render('front/admissions/financement.html.twig');
  2178.     }
  2179.     #[Route('/inscription-{annee}'name'front.inscriptions'methods: ['GET''POST'])]
  2180.     public function inscription(
  2181.         Request $request,
  2182.         MailerInterface $mailer,
  2183.         ThemesRepository $themesRepository,
  2184.         VillesRepository $villesRepository
  2185.         EntityManagerInterface $entityManager,
  2186.         MentionsRepository $mentionRepository,
  2187.         FormationsRepository $formationsRepository
  2188.     ): Response {
  2189.         
  2190.         $annee date('Y');
  2191.         /* =========================
  2192.            AJAX
  2193.         ========================= */
  2194.         if ($request->isXmlHttpRequest()) {
  2195.             /* THÉMATIQUE → THÈMES */
  2196.             if ($request->request->get('action') === 'themes') {
  2197.     
  2198.                 $thematiqueVal $request->request->get('thematiqueVal');
  2199.     
  2200.                 $themes $themesRepository->findBy(
  2201.                     ['thematique' => $thematiqueVal],
  2202.                     ['nom' => 'ASC']
  2203.                 );
  2204.     
  2205.                 $data = [];
  2206.                 foreach ($themes as $theme) {
  2207.                     $data[] = [
  2208.                         'id'  => $theme->getId(),
  2209.                         'nom' => $theme->getNom(),
  2210.                     ];
  2211.                 }
  2212.     
  2213.                 return new JsonResponse($data);
  2214.             }
  2215.             /* THÈME → LIEUX */
  2216.             if ($request->request->get('action') === 'lieux') {
  2217.                 $themeId $request->request->get('themeVal');
  2218.     
  2219.                 $queryBuilder $entityManager->createQueryBuilder();
  2220.                 $queryBuilder
  2221.                 ->select(
  2222.                     'for.id''for.dates_session AS session''for.prix''for.devise''th.nom'
  2223.                     'vil.nom AS vilnom','vil.pays','for.created_at','th.slug',
  2224.                     'th.description','for.devise'
  2225.                     )
  2226.                 ->from(Formations::class, 'for')
  2227.                 ->innerJoin(Themes::class,'th''WITH''for.theme = th.id')
  2228.                 ->innerJoin(Villes::class, 'vil''WITH''for.ville = vil.id')
  2229.                 ->where('th.id = :idtheme')
  2230.                 ->setParameter('idtheme'$themeId);
  2231.                 $formations $queryBuilder->getQuery()->getResult();
  2232.                 //dump($themeId,$formations);
  2233.     
  2234.                 $data = [];
  2235.                 foreach ($formations as $formation) {
  2236.                     $data[] = [
  2237.                         'id'   => $formation['id'],
  2238.                         'prix' => $formation['prix'],
  2239.                         'lieu' => $formation['vilnom'],
  2240.                         'devise' => $formation['devise'],
  2241.                         'session' => $formation['session'],
  2242.                     ];
  2243.                 }
  2244.                 return new JsonResponse($data);
  2245.             }
  2246.             /* LIEU → SESSION + PRIX */
  2247.             if ($request->request->get('action') === 'lieu_details') {
  2248.             
  2249.                 $formationId $request->request->get('formationId');
  2250.                 $queryBuilder $entityManager->createQueryBuilder();
  2251.                 $queryBuilder
  2252.                     ->select(
  2253.                         'for.dates_session AS session',
  2254.                         'for.prix',
  2255.                         'for.devise'
  2256.                     )
  2257.                     ->from(Formations::class, 'for')
  2258.                     ->where('for.id = :id')
  2259.                     ->setParameter('id'$formationId);
  2260.                 $formation $queryBuilder->getQuery()->getOneOrNullResult();
  2261.                 if (!$formation) {
  2262.                     return new JsonResponse(['error' => 'Formation introuvable'], 404);
  2263.                 }
  2264.                 return new JsonResponse([
  2265.                     'session' => $formation['session'],
  2266.                     'prix'    => $formation['prix'],
  2267.                     'devise'  => $formation['devise'],
  2268.                 ]);
  2269.             }
  2270.         }
  2271.         /* =========================
  2272.            AFFICHAGE NORMAL
  2273.         ========================= */
  2274.         $inscription = new Inscriptions();
  2275.  
  2276.         $form $this->createForm(NewInscriptionFormType::class);
  2277.         $form->handleRequest($request);
  2278.         if ($form->isSubmitted()) {
  2279.             
  2280.             $civilite $form->get('civilite')->getData();
  2281.             $nom $form->get('nom')->getData();
  2282.             $prenoms $form->get('prenoms')->getData();
  2283.             $fonction $form->get('fonction')->getData();
  2284.             $telephone $form->get('telephone')->getData();
  2285.             
  2286.             $adresse $form->get('adresse')->getData();
  2287.             $mail $form->get('mail')->getData();
  2288.             $entreprise $form->get('entreprise')->getData();
  2289.             
  2290.             $siteweb $form->get('siteweb')->getData();
  2291.             $nombrepart $form->get('nbparticipant')->getData();
  2292.             
  2293.             $pays $form->get('pays')->getData();
  2294.             $ville $form->get('ville')->getData();
  2295.             
  2296.             $boitepostale $form->get('boitepostale')->getData();
  2297.             $whatsapp $form->get('whatsapp')->getData();          
  2298.             
  2299.             $theme $form->get('theme')->getData();
  2300.             //$lieu = $form->get('lieu')->getData();
  2301.             $periode $form->get('periode')->getData();
  2302.             
  2303.             $telephone $form->get('telephone')->getData();
  2304.             $commentaire $form->get('commentaire')->getData(); 
  2305.            
  2306.             if(!$commentaire){
  2307.                 $commentaire "...";
  2308.             }else{
  2309.                 $commentaire $form->get('commentaire')->getData();
  2310.             }
  2311.             
  2312.             if(!$siteweb){
  2313.                 $siteweb "pas renseigné";
  2314.             }else{
  2315.                 $siteweb $form->get('siteweb')->getData();
  2316.             }
  2317.             
  2318.             if(!$adresse){
  2319.                 $adresse "pas renseigné";
  2320.             }else{
  2321.                 $adresse $form->get('adresse')->getData();
  2322.             }
  2323.             
  2324.             if(!$boitepostale){
  2325.                 $boitepostale "pas renseigné";
  2326.             }else{
  2327.                 $boitepostale $form->get('boitepostale')->getData();
  2328.             }
  2329.             
  2330.             $themeId $theme->getId();
  2331.             $nomtheme $theme->getNom();
  2332.             
  2333.             $Seminaires $formationsRepository->findOneBy(array('theme' => $themeId'dates_session' => $periode));
  2334.             /*$formationId = $formations->getId();*/
  2335.             
  2336.             $queryBuilder $entityManager->createQueryBuilder();
  2337.             $queryBuilder
  2338.             ->select(
  2339.                 'for.id''for.dates_session AS session''for.prix''for.devise''th.nom'
  2340.                 'vil.nom AS vilnom','vil.pays','for.created_at','th.slug''th.id AS themeId'
  2341.                 'th.description','for.devise'
  2342.                 )
  2343.             ->from(Formations::class, 'for')
  2344.             ->innerJoin(Themes::class,'th''WITH''for.theme = th.id')
  2345.             ->innerJoin(Villes::class, 'vil''WITH''for.ville = vil.id')
  2346.             ->where('th.id = :idtheme')
  2347.             ->andwhere('for.dates_session = :sessions')
  2348.             ->setParameter('idtheme'$themeId)
  2349.             ->setParameter('sessions'$periode);
  2350.             $formations $queryBuilder->getQuery()->getResult();
  2351.             $villeForm $formations[0]['vilnom'];
  2352.             $destinataire 'inscription@cimef-international.org';
  2353.             $expediteur   $mail;
  2354.             $reponse      $expediteur;
  2355.             $suj "INSCRIPTION FORMATION 2026";
  2356.             
  2357.             $codehtml '<html><body>'.
  2358.             '<table width="100%" cellpadding="0" cellspacing="0" style="background-color:#f4f6f8; padding:20px;">
  2359.             <tr>
  2360.             <td align="center">
  2361.             <table width="600" cellpadding="0" cellspacing="0" style="background-color:#ffffff; border-radius:6px; overflow:hidden; box-shadow:0 2px 6px rgba(0,0,0,0.08);">
  2362.             <tr>
  2363.             <td style="background-color:#051a53; padding:20px; color:#ffffff; text-align:center;">
  2364.             <h2 style="margin:0;">Confirmation d\'inscription</h2>
  2365.             </td>
  2366.             </tr>
  2367.             <tr>
  2368.             <td style="padding:25px; color:#333333; font-size:14px; line-height:1.6;">
  2369.             <p>Demande de dévis de '.$civilite.' <strong>'.$prenoms.' '.$nom.'</strong> pour une formation sur mesure avec pour thème :<strong>'.$nomtheme.'</strong>.</p>
  2370.             <p>Veuillez trouver ci-dessous le récapitulatif :</p>
  2371.             <hr style="border:none; border-top:1px solid #e0e0e0; margin:20px 0;">
  2372.             <h4 style="margin-bottom:8px; color:#0d6efd;">Informations personnelles</h4>
  2373.             <p>
  2374.             <strong>Nom & Prénoms :</strong> '.$prenoms.' '.$nom.'<br>
  2375.             <strong>Fonction :</strong> '.$fonction.'<br>
  2376.             <strong>Entreprise :</strong> '.$entreprise.'<br>
  2377.             <strong>Adresse :</strong> '.$adresse.'<br>
  2378.             </p>
  2379.             <h4 style="margin-bottom:8px; color:#0d6efd;">Coordonnées</h4>
  2380.             <p>
  2381.             <strong>Email :</strong> '.$mail.'<br>
  2382.             <strong>Téléphone :</strong> '.$telephone.'<br>
  2383.             <strong>Site web :</strong> '.$siteweb.'
  2384.             </p>
  2385.             <h4 style="margin-bottom:8px; color:#0d6efd;">Détails de participation</h4>
  2386.             <p>
  2387.             <strong>Nombre de participants :</strong> '.$nombrepart.'<br>
  2388.             <strong>Commentaire :</strong> '.$commentaire.'
  2389.             </p>
  2390.             <h4 style="margin-bottom:8px; color:#0d6efd;">Détail de la formation</h4>
  2391.             <p>
  2392.             <strong>Thème :</strong> '.$nomtheme.'<br>
  2393.             <strong>Lieu :</strong> '.$villeForm.'<br>
  2394.             <strong>Période :</strong> '.$periode.'
  2395.             </p>
  2396.             </td>
  2397.             </tr>
  2398.             <tr>
  2399.             <td style="background-color:#f1f1f1; padding:15px; text-align:center; font-size:12px; color:#777777;">
  2400.             © '.date("Y").' CIMEF International — Tous droits réservés
  2401.             </td>
  2402.             </tr>
  2403.             </table>
  2404.             </td>
  2405.             </tr>
  2406.             </table>
  2407.             </body></html>';
  2408.             
  2409.             $email = (new Email())
  2410.             ->from('CIMEF International <inscription@cimef-international.org>')
  2411.             ->to($destinataire)                 // destinataire principal
  2412.             ->cc('medias@cimef-international.com'// COPIE
  2413.             ->replyTo($expediteur)              // Reply-To:
  2414.             ->subject($suj)     
  2415.             ->text(strip_tags($codehtml))
  2416.             ->html($codehtml);// Subject:
  2417.             //->html($codehtml, 'text/html');   // Content-Type + charset utf-8
  2418.             $mailer->send($email);
  2419.             $inscription->setNom($nom);
  2420.             $inscription->setPrenoms($prenoms);
  2421.             $inscription->setFonction($fonction);
  2422.             $inscription->setAdresse($adresse);
  2423.             $inscription->setMail($mail);
  2424.             $inscription->setEntreprise($entreprise);
  2425.             $inscription->setSiteweb($siteweb);
  2426.             $inscription->setNbparticipant($nombrepart);
  2427.             $inscription->setPays($pays);
  2428.             $inscription->setVille$ville);
  2429.             $inscription->setBoitepostale($boitepostale);
  2430.             $inscription->setWhatsapp($whatsapp);
  2431.             $inscription->setTelephone($telephone);
  2432.             $inscription->setCommentaire($commentaire);
  2433.             $inscription->setFormation($Seminaires);
  2434.             $entityManager->persist($inscription);
  2435.             $entityManager->flush();
  2436.             $this->addFlash(
  2437.             'success',
  2438.             'Votre inscription à été bien enregistrée');
  2439.             return $this->redirectToRoute('front.inscriptions',['annee' => $annee]);
  2440.         }
  2441.     
  2442.         $mentions $mentionRepository->findAll();
  2443.         return $this->render('front/inscriptions/inscription-index.html.twig', [
  2444.             'annee' => date('Y'),
  2445.             'mentions' => $mentions,
  2446.             'demandeformationsForm' => $form->createView(),
  2447.         ]);
  2448.     }
  2449.     #[Route('/contact'name'front.contact'methods:['GET','POST'])]
  2450.     public function contact(
  2451.         Request $request,
  2452.         MailerInterface $mailer,
  2453.         MentionsRepository $mentionRepository,
  2454.         EntityManagerInterface $entityManager
  2455.     ): Response
  2456.     {
  2457.         $mentions $mentionRepository->findAll();
  2458.         $contactForm $this->createForm(ContactFormType::class);
  2459.         $contactForm->handleRequest($request);
  2460.         
  2461.         if($contactForm->isSubmitted()){
  2462.             $nom htmlspecialchars($contactForm->get('nom')->getData());
  2463.             $mail htmlspecialchars($contactForm->get('email')->getData());
  2464.             $sujet htmlspecialchars($contactForm->get('sujet')->getData());
  2465.             $message htmlspecialchars($contactForm->get('message')->getData());
  2466.             $secretKey '6LfPYkosAAAAAJQFLCC-9U5bF6KdFTPrgmbxg5Ux';
  2467.             $value $request->get('g-recaptcha-response');
  2468.             $userIP $_SERVER['REMOTE_ADDR'];
  2469.             $url "https://www.google.com/recaptcha/api/siteverify?secret=$secretKey&response=$value&remoteid=$userIP";
  2470.             $response \file_get_contents($url);
  2471.             $response json_decode((string)$response);
  2472.             //dd($response);
  2473.             if(!$response->success){
  2474.                 $this->addFlash(
  2475.                     'warning',
  2476.                     'Cocher le champs recaptcha svp!');
  2477.             }else{
  2478.             $destinataire 'inscription@cimef-international.org';
  2479.             $expediteur   $mail;
  2480.             $reponse      $expediteur;
  2481.             $suj $sujet;
  2482.             $email = (new Email())
  2483.             ->from('CIMEF International <inscription@cimef-international.org>')
  2484.             ->to($destinataire)                 // destinataire principal
  2485.             ->cc('medias@cimef-international.com'// COPIE
  2486.             ->replyTo($expediteur
  2487.             ->subject($suj)
  2488.             ->html('<html><body>'.
  2489.             '<p>Bonjour vous avez un nouveau message de M/Mme <b>'.$nom.' </b><br>'.
  2490.             ''.$message.'<br>'.
  2491.             'Vous pouvez m\'écrire à l\'adresse suivante <b>'.$mail.'<br>'.
  2492.             '</p>'.
  2493.             '</body></html>');
  2494.             $mailer->send($email);
  2495.             $this->addFlash
  2496.             'success',
  2497.             'Votre message a été envoyé');
  2498.             return $this->redirectToRoute('front.contact');
  2499.             }
  2500.         }
  2501.         
  2502.         return $this->render('front/contact.html.twig',[
  2503.             'contactForm' => $contactForm->createView(),
  2504.             'mentions' => $mentions
  2505.         ]);
  2506.     }
  2507. }