<?php
namespace App\Controller;
use App\Entity\Faqs;
use App\Entity\Avis;
use App\Entity\Themes;
use App\Entity\Galeries;
use App\Entity\Villes;
use App\Entity\Thematiques;
use App\Entity\Actualites;
use App\Entity\Formations;
use App\Entity\References;
use App\Entity\Mentions;
use App\Entity\Managements;
use App\Entity\Bannieres;
use App\Entity\Inscriptions;
use App\Entity\Demandeformations;
use App\Entity\Expertises;
use App\Entity\Videos;
use App\Entity\Albums;
use App\Form\RechercheFormType;
use App\Form\RechercheNatFormType;
use Doctrine\ORM\EntityManager;
use App\Form\ProduitFormType;
use App\Form\InscriptionFormType;
use App\Form\NewInscriptionFormType;
use App\Service\GeoIpService;
use App\Repository\DemandeformationsRepository;
use App\Repository\InscriptionsRepository;
use App\Repository\AvisRepository;
use App\Repository\ManagementsRepository;
use App\Repository\MentionsRepository;
use App\Repository\VillesRepository;
use App\Repository\GaleriesRepository;
use App\Repository\ThemesRepository;
use App\Repository\FormationsRepository;
use App\Repository\AboutsRepository;
use App\Repository\ThematiquesRepository;
use App\Repository\ValeursRepository;
use App\Repository\BannieresRepository;
use App\Repository\ActualitesRepository;
use App\Repository\PartenairesRepository;
use App\Repository\ReferenceclientsRepository;
use App\Repository\InformationsRepository;
use App\Repository\AlbumsRepository;
use App\Repository\VideosRepository;
use App\Repository\ExpertisesRepository;
use App\Entity\Certificats;
use App\Form\CertificatFormType;
use App\Form\EditCertificatFormType;
use App\Repository\CertificatsRepository;
//use Symfony\Component\Mime\Email;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\String\Slugger\SluggerInterface;
use App\Form\ContactFormType;
use App\Form\DevisFormType;
use App\Form\CombinedFormType;
use App\Form\DemandeformationFormType;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\Mime\Email;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Knp\Component\Pager\PaginatorInterface;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use App\Entity\Certyous;
use App\Form\CertyouFormType;
use App\Entity\Inscriptionpersos;
use App\Form\EditCertyouFormType;
use App\Repository\CertyousRepository;
use App\Form\InscriptionCertyouFormType;
use App\Repository\InscriptionpersosRepository;
use App\Entity\Sessions;
use App\Form\SessionFormType;
use App\Form\EditSessionFormType;
use App\Repository\SessionsRepository;
class FrontController extends AbstractController
{
#[Route('/', name: 'front.inter.index', methods:['GET'])]
public function index(
Request $request,
MentionsRepository $mentionRepository,
BannieresRepository $banniereRepository,
ReferenceclientsRepository $referenceRepository,
EntityManagerInterface $entityManager
): Response
{
$annee = date('Y');
// 1️⃣ Requête Doctrine (sans tri sur dates_session)
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select(
'for.id','for.image','for.dates_session','for.prix','for.devise','th.nom',
'th.slug','thm.nom AS thmnom','vil.nom AS vilnom','vil.pays'
)
->from(Formations::class, 'for')
->innerJoin(Themes::class, 'th', 'WITH', 'for.theme = th.id')
->innerJoin(Villes::class, 'vil', 'WITH', 'for.ville = vil.id')
->innerJoin(Thematiques::class, 'thm', 'WITH', 'th.thematique = thm.id');
$formations = $queryBuilder->getQuery()->getResult();
// 2️⃣ Fonction : extraction DATE DE DÉBUT
$extractDateDebut = function (?string $datesSession): ?\DateTime {
if (!$datesSession) {
return null;
}
$moisFr = [
'janv'=>1,'janvier'=>1,
'févr'=>2,'fevr'=>2,'février'=>2,
'mars'=>3,
'avr'=>4,'avril'=>4,
'mai'=>5,
'juin'=>6,
'juil'=>7,'juillet'=>7,
'août'=>8,'aout'=>8,
'sept'=>9,'septembre'=>9,
'oct'=>10,'octobre'=>10,
'nov'=>11,'novembre'=>11,
'déc'=>12,'dec'=>12,'décembre'=>12
];
// Nettoyage
$text = strtolower(trim($datesSession));
$text = str_replace(['.', ','], '', $text);
/**
* Exemples acceptés :
* 23 nov au 04 dec
* 29 juin au 10 juil
* 07 au 18 sept
*/
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)) {
$jourDebut = (int) $m[1];
$moisDebutTxt = $m[2] ?: $m[3]; // parfois avant, parfois après "au"
$moisDebut = $moisFr[$moisDebutTxt] ?? null;
if (!$moisDebut) {
return null;
}
$today = new \DateTime('today');
$year = (int) $today->format('Y');
$date = new \DateTime(sprintf('%04d-%02d-%02d', $year, $moisDebut, $jourDebut));
// Si la date est déjà passée → année suivante
if ($date < $today) {
$date->modify('+1 year');
}
return $date;
}
return null;
};
$today = new \DateTime('today');
// 3️⃣ Filtrer UNIQUEMENT les formations à venir
$formations = array_filter($formations, function ($f) use ($extractDateDebut) {
return $extractDateDebut($f['dates_session']) !== null;
});
// 4️⃣ Trier : plus proche → plus éloignée
usort($formations, function ($a, $b) use ($extractDateDebut) {
return $extractDateDebut($a['dates_session'])
<=> $extractDateDebut($b['dates_session']);
});
// 5️⃣ Limiter à 3 formations (optionnel)
$formations = array_slice($formations, 0, 3);
//dd($formations);
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select('actu')
->from(Actualites::class, 'actu')
->orderBy('actu.createdat', 'DESC')
->setMaxResults(2);
$actualite = $queryBuilder->getQuery()->getResult();
$reference = $referenceRepository->findAll();
$mentions = $mentionRepository->findAll();
$bannieres = $banniereRepository->findAll();
// dd($mentions);
return $this->render('front/index.html.twig',[
'annee' => $annee,
'banniere' => $bannieres,
'mentions' => $mentions,
'reference' => $reference,
'formations' => $formations,
'actualite' => $actualite
]);
}
#[Route('/mediatheque/albums', name: 'front.inter.album', methods:['GET'])]
public function album(
Request $request,
PaginatorInterface $paginator,
AlbumsRepository $albumRepository,
VideosRepository $videoRepository,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select('al','al.nom','al.slug','MIN(g.imgal) AS image')
->from(Albums::class, 'al')
->innerJoin(Galeries::class, 'g', 'WITH', 'al.slug = g.nom')
->where('al.statut = :statut')
->setParameter('statut', 'Publié')
->orderBy('al.createdat', 'DESC')
->groupBy('al.id');
//->orderBy('al.createdat', 'DESC');
$albums = $queryBuilder->getQuery()->getResult();
//dd($albums);
$pagination = $paginator->paginate(
$queryBuilder,
$request->query->getInt('page', 1),
12
);
/*$albums = $albumRepository->findAll();
$videos = $videoRepository->findAll();*/
$mentions = $mentionRepository->findAll();
return $this->render('front/multimedia/album.html.twig',[
'pagination' => $pagination,
'mentions' => $mentions
]);
}
#[Route('/notre-expertise', name: 'front.inter.expertise', methods:['GET'])]
public function expertise(
Request $request,
ReferenceclientsRepository $referenceRepository,
ExpertisesRepository $expertiseRepository,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
$expertise = $expertiseRepository->findBy(['statut' => 'Publié']);
//dd($expertise);
$mentions = $mentionRepository->findAll();
$reference = $referenceRepository->findAll();
//dd($reference);
return $this->render('front/expertise.html.twig',[
'reference' => $reference,
'expertise' => $expertise,
'mentions' => $mentions
]);
}
#[Route('/mediatheque/album/{slug}', name: 'front.inter.image', methods:['GET'])]
public function galerie(
$slug,
Request $request,
AlbumsRepository $albumRepository,
GaleriesRepository $galerieRepository,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
$galerie = $galerieRepository->findBy(['nom' => $slug]);
$mentions = $mentionRepository->findAll();
return $this->render('front/multimedia/galerie.html.twig',[
'slug' => $slug,
'galeries' => $galerie,
'mentions' => $mentions
]);
}
#[Route('/mediatheque/video', name: 'front.inter.video', methods:['GET'])]
public function video(
Request $request,
VideosRepository $videoRepository,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
$videos = $videoRepository->findBy(
['statut' => 'Publié'],
['createdat' => 'DESC']
);
//dd($videos);
$mentions = $mentionRepository->findAll();
return $this->render('front/multimedia/video.html.twig',[
'videos' => $videos,
'mentions' => $mentions
]);
}
//-----------------------------------------------------------------------------------------------------
#[Route('/formations/certificats/personnalises', name: 'front.inter.certificat.certyou', methods:['GET'])]
public function certificat_certyou(
Request $request,
PaginatorInterface $paginator,
CertyousRepository $certyouRepository,
ManagementsRepository $managementRepository,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
$certyou = $certyouRepository->findAll();
$manageLimit = $managementRepository->findBy([], ['id' => 'DESC'], 5 );
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select(
'cert.id','cert.prixpresentiel','cert.prixvirtuelle',
'cert.devise','cert.theme','cert.duree','cert.slug',
'cert.type','cert.createdat'
)
->from(Certyous::class, 'cert');
$certyous = $queryBuilder->getQuery()->getResult();
$pagination = $paginator->paginate(
$queryBuilder,
$request->query->getInt('page', 1),
12
);
$mentions = $mentionRepository->findAll();
return $this->render('front/certyou.html.twig',[
'manageLimit' => $manageLimit,
'pagination' => $pagination,
'mentions' => $mentions,
]);
}
///---------------------------------------------------------------------------------------------------
#[Route('/formations/certificats/personnalises/{slug}{id}', name: 'front.inter.certificat.certyou.inscription', methods:['GET','POST'])]
public function certificat_certyou_inscription(
$id,
$slug,
Request $request,
MailerInterface $mailer,
PaginatorInterface $paginator,
CertyousRepository $certyouRepository,
SessionsRepository $sessionRepository,
ManagementsRepository $managementRepository,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
//$certyou = $certyouRepository->findAll();
$manageLimit = $managementRepository->findBy([], ['id' => 'DESC'], 5 );
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select('cert')
->from(Certyous::class, 'cert')
->where('cert.slug = :slug')
->setParameter('slug', $slug);
$certyou = $queryBuilder->getQuery()->getOneOrNullResult();
$sessions = $sessionRepository->find($id);
if (!$sessions) {
$this->addFlash(
'danger','Certificat introuvable');
}
$Inscriptionpersos = new Inscriptionpersos();
$InscriptionCertyouForm = $this->createForm(InscriptionCertyouFormType::class,null, [
'certyou' => $certyou
]);
$InscriptionCertyouForm->handleRequest($request);
if($InscriptionCertyouForm->isSubmitted()){
$theme = str_replace('-', ' ', $slug);
$choix = htmlspecialchars($InscriptionCertyouForm->get('choix')->getData());
$type = htmlspecialchars($InscriptionCertyouForm->get('type')->getData());
$lieux = htmlspecialchars($InscriptionCertyouForm->get('lieu')->getData());
$sessionEntity = $InscriptionCertyouForm->get('session')->getData();
$session = $sessionEntity ? $sessionEntity->getSession() : '';
//$choix = $certyou->getType();
$duree = $certyou->getDuree();
$devise = $certyou->getDevise();
//$duree = htmlspecialchars($InscriptionCertyouForm->get('duree')->getData());
//$prixvirtuelle = htmlspecialchars($InscriptionCertyouForm->get('prixvirtuelle')->getData());
//$prixpresentiel = htmlspecialchars($InscriptionCertyouForm->get('prixpresentiel')->getData());
//$prixVirtuelle = $certificat->getPrixvirtuelle();
//$prixPresentiel = $certificat->getPrixpresentiel();
$civilite = $InscriptionCertyouForm->get('civilite')->getData();
$nom = $InscriptionCertyouForm->get('nom')->getData();
$prenoms = $InscriptionCertyouForm->get('prenoms')->getData();
$fonction = $InscriptionCertyouForm->get('fonction')->getData();
$adresse = $InscriptionCertyouForm->get('adresse')->getData();
$mail = $InscriptionCertyouForm->get('mail')->getData();
$entreprise = $InscriptionCertyouForm->get('entreprise')->getData();
$siteweb = $InscriptionCertyouForm->get('siteweb')->getData();
$nbparticipant = $InscriptionCertyouForm->get('nbparticipant')->getData();
$pays = $InscriptionCertyouForm->get('pays')->getData();
$ville = $InscriptionCertyouForm->get('ville')->getData();
$boitepostale = $InscriptionCertyouForm->get('boitepostale')->getData();
$whatsapp = $InscriptionCertyouForm->get('whatsapp')->getData();
$telephone = $InscriptionCertyouForm->get('telephone')->getData();
$commentaire = $InscriptionCertyouForm->get('commentaire')->getData();
if ($type === 'presentiel') {
//$prix = 'presentiel ' . $InscriptionCertyouForm->get('prixpresentiel')->getData();
$prix = $certyou->getPrixpresentiel();
} else {
//$prix = 'virtuelle ' . $InscriptionCertyouForm->get('prixvirtuelle')->getData();
$prix = $certyou->getPrixvirtuelle();
}
if ($lieux === '') {
$lieu = 'classe uniquement virtuelle';
} else {
$lieu = $lieux;
}
if(!$commentaire){
$commentaire = " ";
}else{
$commentaire = $InscriptionCertyouForm->get('commentaire')->getData();
}
/*dd($nom ,$prenoms ,$fonction ,$adresse ,$mail ,$entreprise ,$siteweb ,$nbparticipant ,$pays ,$ville ,$boitepostale ,
$whatsapp, $telephone, $theme, $type, $duree, $lieu, $prix, $session, $commentaire);*/
$destinataire = 'inscription@cimef-international.org';
$expediteur = $mail;
$reponse = $expediteur;
$suj = "INSCRIPTION FORMATION 2026";
$codehtml = '<html><body>'.
'<table width="100%" cellpadding="0" cellspacing="0" style="background-color:#f4f6f8; padding:20px;">
<tr>
<td align="center">
<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);">
<tr>
<td style="background-color:#051a53; padding:20px; color:#ffffff; text-align:center;">
<h2 style="margin:0;">Confirmation d\'inscription</h2>
</td>
</tr>
<tr>
<td style="padding:25px; color:#333333; font-size:14px; line-height:1.6;">
<p>Inscription de '.$civilite.' '.$prenoms.' '.$nom.' à la formation <strong>'.$theme.'</strong> organisée par <strong>CIMEF International</strong>.</p>
<p>Veuillez trouver ci-dessous le récapitulatif :</p>
<hr style="border:none; border-top:1px solid #e0e0e0; margin:20px 0;">
<h4 style="margin-bottom:8px; color:#0d6efd;">Informations personnelles</h4>
<p>
<strong>Nom & Prénoms :</strong> '.$prenoms.' '.$nom.'<br>
<strong>Fonction :</strong> '.$fonction.'<br>
<strong>Entreprise :</strong> '.$entreprise.'<br>
<strong>Adresse :</strong> '.$adresse.'<br>
<strong>Pays / Ville :</strong> '.$pays.' / '.$ville.'<br>
<strong>Boîte postale :</strong> '.$boitepostale.'
</p>
<h4 style="margin-bottom:8px; color:#0d6efd;">Coordonnées</h4>
<p>
<strong>Email :</strong> '.$mail.'<br>
<strong>Téléphone :</strong> '.$telephone.'<br>
<strong>WhatsApp :</strong> '.$whatsapp.'<br>
<strong>Site web :</strong> '.$siteweb.'
</p>
<h4 style="margin-bottom:8px; color:#0d6efd;">Détails de participation</h4>
<p>
<strong>Nombre de participants :</strong> '.$nbparticipant.'<br>
<strong>Commentaire :</strong> '.$commentaire.'
</p>
<h4 style="margin-bottom:8px; color:#0d6efd;">Détail de la formation</h4>
<p>
<strong>Thème :</strong> '.$theme.'<br>
<strong>Type :</strong> '.$type.'<br>
<strong>Durée :</strong> '.$duree.'<br>
<strong>Lieu :</strong> '.$lieu.'<br>
<strong>Prix :</strong> '.$prix.' '.$devise.'<br>
<strong>Session :</strong> '.$session.'
</p>
</td>
</tr>
<tr>
<td style="background-color:#f1f1f1; padding:15px; text-align:center; font-size:12px; color:#777777;">
© '.date("Y").' CIMEF International — Tous droits réservés
</td>
</tr>
</table>
</td>
</tr>
</table>
</body></html>';
$email = (new Email())
->from('CIMEF International <inscription@cimef-international.org>')
->to($destinataire) // destinataire principal
->cc('medias@cimef-international.com') // COPIE
->replyTo($expediteur) // Reply-To:
->subject($suj)
->text(strip_tags($codehtml))
->html($codehtml);// Subject:
//->html($codehtml, 'text/html'); // Content-Type + charset utf-8
$mailer->send($email);
$Inscriptionpersos->setNom($nom);
$Inscriptionpersos->setPrenoms($prenoms);
$Inscriptionpersos->setFonction($fonction);
$Inscriptionpersos->setAdresse($adresse);
$Inscriptionpersos->setMail($mail);
$Inscriptionpersos->setEntreprise($entreprise);
$Inscriptionpersos->setSiteweb($siteweb);
$Inscriptionpersos->setNbparticipant($nbparticipant);
$Inscriptionpersos->setPays($pays);
$Inscriptionpersos->setVille($ville);
$Inscriptionpersos->setBoitepostale($boitepostale);
$Inscriptionpersos->setWhatsapp($whatsapp);
$Inscriptionpersos->setTelephone($telephone);
$Inscriptionpersos->setCommentaire($commentaire);
$Inscriptionpersos->setTheme($theme);
$Inscriptionpersos->setType($type);
$Inscriptionpersos->setDuree($duree);
$Inscriptionpersos->setLieu($lieu);
$Inscriptionpersos->setPrix($prix);
$Inscriptionpersos->setSession($session);
$entityManager->persist($Inscriptionpersos);
$entityManager->flush();
$this->addFlash(
'success',
'Votre inscription à été bien enregistrée');
return $this->redirectToRoute('front.inter.certificat.certyou',['slug' => $slug,'id' => $id]);
}
$mentions = $mentionRepository->findAll();
return $this->render('front/inscriptions/inscription-certyou.html.twig',[
'id' => $id,
'slug' => $slug,
'certyou' => $certyou,
'mentions' => $mentions,
'sessions' => $sessions,
'manageLimit' => $manageLimit,
'inscriptionCertyouForm' => $InscriptionCertyouForm->createView(),
]);
}
//-----------------------------------------------------------------------------------------------------
#[Route('/formations/certificats/internationaux', name: 'front.inter.certificat.inter', methods:['GET'])]
public function certificat(
Request $request,
PaginatorInterface $paginator,
CertificatsRepository $certificatRepository,
ManagementsRepository $managementRepository,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
$certificat = $certificatRepository->findAll();
$manageLimit = $managementRepository->findBy([], ['id' => 'DESC'], 5 );
$queryBuilder = $entityManager->createQueryBuilder();
$sub = $entityManager->createQueryBuilder()
->select('MAX(c2.createdat)')
->from(Certificats::class, 'c2')
->where('c2.theme = cert.theme');
$queryBuilder
->select('cert.id','cert.session','cert.prix','cert.slug','cert.devise',
'vil.nom AS vilnom','vil.pays','cert.createdat','cert.type','cert.theme')
->from(Certificats::class, 'cert')
->innerJoin(Villes::class, 'vil', 'WITH', 'cert.ville = vil.id')
->where($queryBuilder->expr()->eq('cert.createdat', '(' . $sub->getDQL() . ')'))
->orderBy('cert.createdat', 'DESC');
$certificat = $queryBuilder->getQuery()->getResult();
$pagination = $paginator->paginate(
$queryBuilder,
$request->query->getInt('page', 1),
12
);
$mentions = $mentionRepository->findAll();
return $this->render('front/certificat.html.twig',[
'manageLimit' => $manageLimit,
'pagination' => $pagination,
'mentions' => $mentions,
]);
}
#[Route('/formtaions/certificats/internationaux/{slug}', name: 'front.inter.detail.certificat', methods:['GET'])]
public function detail_certificat(
$slug,
Request $request,
PaginatorInterface $paginator,
CertificatsRepository $certificatRepository,
ManagementsRepository $managementRepository,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
$certificat = $certificatRepository->findAll();
$manageLimit = $managementRepository->findBy([], ['id' => 'DESC'], 5 );
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select(
'cert.id','cert.session','cert.prix','cert.slug',
'cert.devise','cert.theme','vil.nom AS vilnom',
'vil.pays','cert.createdat','cert.type'
)
->from(Certificats::class, 'cert')
->innerJoin(Villes::class, 'vil', 'WITH', 'cert.ville = vil.id')
->where('cert.slug = :slug')
->setParameter('slug', $slug);
$certificat = $queryBuilder->getQuery()->getResult();
$pagination = $paginator->paginate(
$queryBuilder,
$request->query->getInt('page', 1),
12
);
$mentions = $mentionRepository->findAll();
return $this->render('front/liste-certificat.html.twig',[
'manageLimit' => $manageLimit,
'pagination' => $pagination,
'mentions' => $mentions,
'slug' => $slug
]);
}
#[Route('/presentation', name: 'front.inter.presentation', methods:['GET'])]
public function presentation(
Request $request,
PartenairesRepository $partenaireRepository,
FormationsRepository $formationRepository,
AboutsRepository $aboutRepository,
ValeursRepository $valeurRepository,
AvisRepository $avisRepository,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
$avis = $avisRepository->findAll();
$All_partenaire = $partenaireRepository->findAll();
$All_about = $aboutRepository->findAll();
$All_valeur = $valeurRepository->findAll();
$mentions = $mentionRepository->findAll();
return $this->render('front/qui-sommes-nous.html.twig',[
'partenaires' => $All_partenaire,
'valeur' => $All_valeur,
'mentions' => $mentions,
'about' => $All_about,
'avis' => $avis,
]);
}
#[Route('/formations/rencontre-top-management', name: 'front.top.management', methods:['GET'])]
public function management(
Request $request,
PaginatorInterface $paginator,
MentionsRepository $mentionRepository,
ManagementsRepository $managementRepository,
EntityManagerInterface $entityManager
): Response
{
$manageLimit = $managementRepository->findBy([], ['id' => 'DESC'], 5 );
// dd($manageLimit);
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select('man')
->from(Managements::class, 'man')
->orderBy('man.createdat', 'DESC');
$pagination = $paginator->paginate(
$queryBuilder,
$request->query->getInt('page', 1),
10
);
$mentions = $mentionRepository->findAll();
return $this->render('front/rencontre-management.html.twig',[
'mentions' => $mentions,
'pagination' => $pagination,
'manageLimit' => $manageLimit
]);
}
#[Route('/formations/rencontre-top-management/{slug}', name: 'front.seminaire.management.detail', methods:['GET'])]
public function detail_management(
$slug,
Request $request,
ManagementsRepository $managementRepository,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
$query = $managementRepository->findOneBy(array('slug' => $slug));
$mentions = $mentionRepository->findAll();
// dd($query);
return $this->render('front/detail/detail-rencontre.html.twig',[
'mentions' => $mentions,
'query' => $query
]);
}
/*#[Route('/formation/seminaires/internationaux', name: 'front.seminaire.internationaux', methods:['GET'])]
public function sem_inter(
Request $request,
PaginatorInterface $paginator,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
$recherche = $this->createForm(RechercheFormType::class);
$recherche->handleRequest($request);
if ($recherche->isSubmitted()) {
$mot = $recherche->get('mot')->getData() ?? '';
$ville = $recherche->get('ville')->getData() ?? null;
$nomVille = $ville ? $ville->getNom() : null;
$motLike = '%'.$mot.'%';
// 2️⃣ Construire la requête
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select('for.id', 'for.dates_session','for.image', 'for.prix', 'for.devise', 'th.nom',
'thm.nom AS thmnom','vil.nom AS vilnom','vil.pays','for.created_at', 'th.slug')
->from(Formations::class, 'for')
->innerJoin(Themes::class, 'th', 'WITH', 'for.theme = th.id')
->innerJoin(Thematiques::class, 'thm', 'WITH', 'th.thematique = thm.id')
->innerJoin(Villes::class, 'vil', 'WITH', 'for.ville = vil.id')
->where('th.nom LIKE :mot')
->orwhere('thm.nom LIKE :mot')
->setParameter('mot', $motLike);
if ($ville) {
$queryBuilder->andWhere('vil.nom = :ville')
->setParameter('ville', $nomVille);
$query = $queryBuilder->getQuery()->getResult();
}
$queryBuilder->orderBy('for.created_at', 'DESC');
// 3️⃣ Pagination
$pagination = $paginator->paginate(
$queryBuilder,
$request->query->getInt('page', 1),
12
);
$annee = date('Y');
$mentions = $mentionRepository->findAll();
// 4️⃣ Affichage
return $this->render('front/seminaire_recherche.html.twig', [
'recherche' => $recherche->createView(),
'pagination' => $pagination,
'mot' => $mot,
'mentions' => $mentions,
'ville' => $ville,
'annee' => $annee,
]);
}
$annee = date('Y');
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select('for.id', 'for.dates_session','for.image', 'for.prix', 'for.devise', 'th.nom',
'thm.nom AS thmnom','vil.nom AS vilnom','vil.pays','for.created_at', 'th.slug'
)
->from(Formations::class, 'for')
->innerJoin(Themes::class, 'th', 'WITH', 'for.theme = th.id')
->innerJoin(Villes::class, 'vil', 'WITH', 'for.ville = vil.id')
->innerJoin(Thematiques::class, 'thm', 'WITH', 'th.thematique = thm.id')
->orderBy('for.created_at', 'DESC');
$pagination = $paginator->paginate(
$queryBuilder,
$request->query->getInt('page', 1),
12
);
$mentions = $mentionRepository->findAll();
return $this->render('front/seminaire_inter.html.twig',[
'annee' => $annee,
'mentions' => $mentions,
'pagination' => $pagination,
'recherche' => $recherche->createView()
]);
}*/
/*
#[Route('/formation/seminaires/internationaux', name: 'front.seminaire.internationaux', methods:['GET'])]
public function sem_inter(
Request $request,
PaginatorInterface $paginator,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
$recherche = $this->createForm(RechercheFormType::class);
$recherche->handleRequest($request);
$annee = date('Y');
$mentions = $mentionRepository->findAll();
//Sous-requête : obtenir la dernière formation par thème
$subQuery = $entityManager->createQueryBuilder()
->select('MAX(f2.id)')
->from(Formations::class, 'f2')
->innerJoin('f2.theme', 't2')
->groupBy('t2.id');
//Requête principale
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select('for.id','for.dates_session','for.image','for.prix',
'for.devise','for.created_at','th.nom','th.slug',
'thm.nom AS thmnom','vil.nom AS vilnom','vil.pays'
)
->from(Formations::class, 'for')
->innerJoin('for.theme', 'th')
->innerJoin('th.thematique', 'thm')
->innerJoin('for.ville', 'vil')
->where($queryBuilder->expr()->in('for.id', $subQuery->getDQL()));
//Recherche
if ($recherche->isSubmitted()) {
$mot = $recherche->get('mot')->getData() ?? '';
$ville = $recherche->get('ville')->getData() ?? null;
$nomVille = $ville ? $ville->getNom() : null;
if ($mot) {
$motLike = '%' . $mot . '%';
$queryBuilder->andWhere(
$queryBuilder->expr()->orX(
'th.nom LIKE :mot',
'thm.nom LIKE :mot'
)
)
->setParameter('mot', $motLike);
}
if ($ville) {
$queryBuilder
->andWhere('vil.nom = :ville')
->setParameter('ville', $nomVille);
}
}
$queryBuilder->orderBy('for.created_at', 'DESC');
//Pagination
$pagination = $paginator->paginate(
$queryBuilder,
$request->query->getInt('page', 1),
12
);
return $this->render('front/seminaire_inter.html.twig', [
'annee' => $annee,
'mentions' => $mentions,
'pagination' => $pagination,
'recherche' => $recherche->createView(),
]);
}*/
#[Route('/formation/seminaires/internationaux', name: 'front.seminaire.internationaux', methods:['GET'])]
public function sem_inter(
Request $request,
PaginatorInterface $paginator,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
$recherche = $this->createForm(RechercheFormType::class);
$recherche->handleRequest($request);
$annee = (int) date('Y');
$today = new \DateTime('today');
$mentions = $mentionRepository->findAll();
$qb = $entityManager->createQueryBuilder();
$qb ->select('for','th','thm','vil')
->from(Formations::class, 'for')
->innerJoin('for.theme', 'th')
->innerJoin('th.thematique', 'thm')
->innerJoin('for.ville', 'vil');
if ($recherche->isSubmitted() && $recherche->isValid()) {
$mot = $recherche->get('mot')->getData();
$ville = $recherche->get('ville')->getData();
if ($mot) {
$qb ->andWhere($qb->expr()->orX('th.nom LIKE :mot','thm.nom LIKE :mot'))
->setParameter('mot', '%' . $mot . '%');
}
if ($ville) {
$qb ->andWhere('vil = :ville')
->setParameter('ville', $ville);
}
}
$formations = $qb->getQuery()->getResult();
$extractDateDebut = function (?string $datesSession): ?\DateTime {
if (!$datesSession) return null;
$mois = [
'janv'=>1,'janvier'=>1,
'févr'=>2,'fevr'=>2,'février'=>2,
'mars'=>3,
'avr'=>4,'avril'=>4,
'mai'=>5,
'juin'=>6,
'juil'=>7,'juillet'=>7,
'août'=>8,'aout'=>8,
'sept'=>9,'septembre'=>9,
'oct'=>10,'octobre'=>10,
'nov'=>11,'novembre'=>11,
'déc'=>12,'dec'=>12,'décembre'=>12
];
$text = strtolower(str_replace(['.', ','], '', trim($datesSession)));
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
)) {
return null;
}
$jour = (int) $m[1];
$moisTxt = $m[2] ?: $m[3];
$moisNum = $mois[$moisTxt] ?? null;
if (!$moisNum) return null;
$date = new \DateTime(sprintf('%d-%02d-%02d', date('Y'), $moisNum, $jour));
if ($date < new \DateTime('today')) {
$date->modify('+1 year');
}
return $date;
};
$formationsParTheme = [];
foreach ($formations as $formation) {
$dateDebut = $extractDateDebut($formation->getDatesSession());
if (!$dateDebut || $dateDebut < $today || (int)$dateDebut->format('Y') !== $annee) {
continue;
}
$themeId = $formation->getTheme()->getId();
if (
!isset($formationsParTheme[$themeId]) ||
$dateDebut < $formationsParTheme[$themeId]['date']
) {
$formationsParTheme[$themeId] = [
'formation' => $formation,
'date' => $dateDebut
];
}
}
$formationsFinales = array_map(fn($f) => $f['formation'], $formationsParTheme);
usort($formationsFinales, function ($a, $b) use ($extractDateDebut) {
return $extractDateDebut($a->getDatesSession())
<=> $extractDateDebut($b->getDatesSession());
});
$pagination = $paginator->paginate(
$formationsFinales,
$request->query->getInt('page', 1),
12
);
return $this->render('front/seminaire_inter.html.twig', [
'annee' => $annee,
'mentions' => $mentions,
'pagination' => $pagination,
'recherche' => $recherche->createView(),
]);
}
/*
#[Route('/formations/seminaires/nationaux', name: 'front.seminaire.nationaux', methods:['GET'])]
public function sem_nat(
Request $request,
GeoIpService $geo,
PaginatorInterface $paginator,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
$ip = $request->getClientIp(); // récupère IP utilisateur
$geoData = $geo->getGeoData($ip);
// dd($geoData);
// Exemple : utilisation dans le contrôleur
$pays = $geoData['country'];
$codePays = $geoData['country_code'];
$ville = $geoData['city'];
$ipTrouvee = $geoData['ip'];
$annee = date('Y');
if($pays === 'Local' || $pays === 'Ivory Coast') {
$getpays = "Côte d'ivoire";
}else{
$getpays = $pays;
}
$recherche = $this->createForm(RechercheFormType::class);
$rechercheNat = $this->createForm(RechercheNatFormType::class);
$rechercheNat->handleRequest($request);
if ($rechercheNat->isSubmitted()) {
$mot = $rechercheNat->get('mot')->getData() ?? '';
//$mot = $recherche->get('mot')->getData() ?? '';
$motLike = '%'.$mot.'%';
// 2️⃣ Construire la requête
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select('for.id', 'for.dates_session','for.image', 'for.prix', 'for.devise', 'th.nom',
'thm.nom AS thmnom','vil.nom AS vilnom','vil.pays','for.created_at', 'th.slug')
->from(Formations::class, 'for')
->innerJoin(Themes::class, 'th', 'WITH', 'for.theme = th.id')
->innerJoin(Thematiques::class, 'thm', 'WITH', 'th.thematique = thm.id')
->innerJoin(Villes::class, 'vil', 'WITH', 'for.ville = vil.id')
->where('th.nom LIKE :mot')
->orwhere('thm.nom LIKE :mot')
->setParameter('mot', $motLike);
// Filtrer par ville si sélectionnée/ $queryBu
$query = $queryBuilder->getQuery()->getResult();
$queryBuilder->orderBy('for.created_at', 'DESC');
// 3️⃣ Pagination
$pagination = $paginator->paginate(
$queryBuilder,
$request->query->getInt('page', 1),
12
);
$annee = date('Y');
$mentions = $mentionRepository->findAll();
// 4️⃣ Affichage
return $this->render('front/seminaire_recherche.html.twig', [
'recherche' => $recherche->createView(),
'pagination' => $pagination,
'mot' => $mot,
'mentions' => $mentions,
'ville' => $ville,
'annee' => $annee,
]);
}
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select('for.id', 'for.dates_session','for.image', 'for.prix', 'for.devise', 'th.nom',
'thm.nom AS thmnom','vil.nom AS vilnom','vil.pays','for.created_at', 'th.slug'
)
->from(Formations::class, 'for')
->innerJoin(Themes::class, 'th', 'WITH', 'for.theme = th.id')
->innerJoin(Villes::class, 'vil', 'WITH', 'for.ville = vil.id')
->innerJoin(Thematiques::class, 'thm', 'WITH', 'th.thematique = thm.id')
->where('vil.pays = :pays')
->setParameter('pays', $getpays)
->orderBy('for.created_at', 'DESC');
$query = $queryBuilder->getQuery()->getResult();
$pagination = $paginator->paginate(
$queryBuilder,
$request->query->getInt('page', 1),
12
);
$mentions = $mentionRepository->findAll();
return $this->render('front/seminaire_nat.html.twig',[
'annee' => $annee,
'mentions' => $mentions,
'recherche' => $rechercheNat->createView(),
'pagination' => $pagination
]);
}*/
#[Route('/formations/seminaires/nationaux', name: 'front.seminaire.nationaux', methods:['GET'])]
public function semNat(
Request $request,
GeoIpService $geo,
PaginatorInterface $paginator,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
$annee = date('Y');
$today = new \DateTime();
// 🌍 Géo IP
$geoData = $geo->getGeoData($request->getClientIp());
$pays = $geoData['country'] ?? '';
$ville = $geoData['city'] ?? '';
// Correction du nom du pays
if ($pays === 'Local' || $pays === 'Ivory Coast') {
$getpays = "Côte d'ivoire";
} else {
$getpays = $pays;
}
// 🔍 Formulaire de recherche
$rechercheNat = $this->createForm(RechercheNatFormType::class);
$rechercheNat->handleRequest($request);
// 🔹 Requête pour récupérer les formations nationales
$qb = $entityManager->createQueryBuilder()
->select('f', 'th', 'thm', 'vil')
->from(Formations::class, 'f')
->innerJoin('f.theme', 'th')
->innerJoin('th.thematique', 'thm')
->innerJoin('f.ville', 'vil')
->where('vil.pays = :pays')
->setParameter('pays', $getpays);
// 🔍 Filtrer par recherche si soumise
if ($rechercheNat->isSubmitted() && $rechercheNat->isValid()) {
$mot = $rechercheNat->get('mot')->getData() ?? '';
if ($mot) {
$qb->andWhere(
$qb->expr()->orX(
'th.nom LIKE :mot',
'thm.nom LIKE :mot'
)
)->setParameter('mot', '%' . $mot . '%');
}
}
// 📄 Récupération des formations
$formations = $qb->getQuery()->getResult();
$extractDates = function(?string $datesSession): ?array {
if (!$datesSession) return null;
$moisFr = [
'janv'=>1,'janvier'=>1,'févr'=>2,'fevr'=>2,'février'=>2,
'mars'=>3,'avr'=>4,'avril'=>4,'mai'=>5,'juin'=>6,
'juil'=>7,'juillet'=>7,'août'=>8,'aout'=>8,
'sept'=>9,'septembre'=>9,'oct'=>10,'octobre'=>10,
'nov'=>11,'novembre'=>11,'déc'=>12,'dec'=>12,'décembre'=>12
];
$text = strtolower(trim($datesSession));
$text = str_replace(['.', ','], '', $text);
if (preg_match('/(\d{1,2})\s*(\w+)?\s*au\s*(\d{1,2})\s*(\w+)?/i', $text, $m)) {
$jourDebut = (int)$m[1];
$moisDebut = $moisFr[$m[2] ?? ''] ?? null;
$jourFin = (int)$m[3];
$moisFin = $moisFr[$m[4] ?? ''] ?? $moisDebut;
if (!$moisDebut || !$moisFin) return null;
$annee = (int)date('Y');
$dateDebut = new \DateTime(sprintf('%04d-%02d-%02d', $annee, $moisDebut, $jourDebut));
$dateFin = new \DateTime(sprintf('%04d-%02d-%02d', $annee, $moisFin, $jourFin));
if ($dateFin < $dateDebut) $dateFin->modify('+1 year');
return ['debut' => $dateDebut, 'fin' => $dateFin];
}
return null;
};
// 🔹 Filtrer uniquement les formations à venir
$today = new \DateTime('today');
$formations = array_filter($formations, function($f) use ($extractDates, $today) {
$dates = $extractDates($f->getDatesSession());
if (!$dates) return false;
// garder uniquement les formations dont la date de début est après aujourd'hui
return $dates['debut'] > $today;
});
// 🔹 Trier par date la plus proche
usort($formations, function($a, $b) use ($extractDates) {
return $extractDates($a->getDatesSession())['debut'] <=> $extractDates($b->getDatesSession())['debut'];
});
// 📄 Pagination
$pagination = $paginator->paginate(
$formations,
$request->query->getInt('page', 1),
12
);
$mentions = $mentionRepository->findAll();
// 🔹 Rendu Twig
return $this->render('front/seminaire_nat.html.twig', [
'annee' => $annee,
'mentions' => $mentions,
'recherche' => $rechercheNat->createView(),
'pagination' => $pagination,
'ville' => $ville,
'pays' => $getpays,
]);
}
// #[Route('/generate-slugs', name: 'generate_slugs')]
// public function generateSlugs(
// SluggerInterface $slugger,
// VillesRepository $repo,
// EntityManagerInterface $em)
// {
// $categories = $repo->findAll();
// foreach ($categories as $cat) {
// $slug = $slugger->slug( $cat->getNom());
// $cat->setSlug($slug);
// }
// $em->flush();
// return new Response("Slugs générés !");
// }
/*
#[Route('/formations/{seminaires}/{slug}/{id}code/inscriptions', name: 'front.inscription', methods:['GET','POST'])]
public function inscription_sem(
$slug,
$seminaires,
$id,
Request $request,
MailerInterface $mailer,
InscriptionsRepository $inscriptionRepository,
VillesRepository $villeRepository,
ThemesRepository $themeRepository,
FormationsRepository $formationRepository,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
$annee = date('Y');
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select('for.id', 'for.dates_session', 'for.prix', 'for.devise', 'th.nom',
'thm.nom AS thmnom','vil.nom AS vilnom','vil.pays','for.created_at',
'th.slug','th.description','for.devise','vil.longitude','vil.latitude'
)
->from(Formations::class, 'for')
->innerJoin(Themes::class, 'th', 'WITH', 'for.theme = th.id')
->innerJoin(Villes::class, 'vil', 'WITH', 'for.ville = vil.id')
->innerJoin(Thematiques::class, 'thm', 'WITH', 'th.thematique = thm.id')
->where('th.slug = :theme')
->andwhere('for.id = :forid')
->setParameter('theme', $slug)
->setParameter('forid', $id);
$query = $queryBuilder->getQuery()->getResult();
$mentions = $mentionRepository->findAll();
$inscription = new Inscriptions();
$inscriptionForm = $this->createForm(InscriptionFormType::class, $inscription);
$inscriptionForm->handleRequest($request);
if ($inscriptionForm->isSubmitted()) {
$nom = $inscriptionForm->get('nom')->getData();
$prenoms = $inscriptionForm->get('prenoms')->getData();
$fonction = $inscriptionForm->get('fonction')->getData();
$adresse = $inscriptionForm->get('adresse')->getData();
$mail = $inscriptionForm->get('mail')->getData();
$entreprise = $inscriptionForm->get('entreprise')->getData();
$siteweb = $inscriptionForm->get('siteweb')->getData();
$nbparticipant = $inscriptionForm->get('nbparticipant')->getData();
$pays = $inscriptionForm->get('pays')->getData();
$ville = $inscriptionForm->get('ville')->getData();
$boitepostale = $inscriptionForm->get('boitepostale')->getData();
$whatsapp = $inscriptionForm->get('whatsapp')->getData();
$telephone = $inscriptionForm->get('telephone')->getData();
$commentaire = $inscriptionForm->get('commentaire')->getData();
$formation = $formationRepository->find($id);
//dd($formation->getId());
$theme = $formation->getTheme();
$idville = $formation->getVille();
$session = $formation->getDatesSession();
$prix = $formation->getPrix();
$devise = $formation->getDevise();
$villes = $villeRepository->find($idville);
$nomtheme = $theme->getNom();
$nomville = $villes->getNom();
if(!$commentaire){
$commentaire = "...";
}else{
$commentaire = $inscriptionForm->get('commentaire')->getData();
}
$codehtml = '<html><body>'.
'<table width="100%" cellpadding="0" cellspacing="0" style="background-color:#f4f6f8; padding:20px;">
<tr>
<td align="center">
<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);">
<tr>
<td style="background-color:#051a53; padding:20px; color:#ffffff; text-align:center;">
<h2 style="margin:0;">Confirmation d\'inscription</h2>
</td>
</tr>
<tr>
<td style="padding:25px; color:#333333; font-size:14px; line-height:1.6;">
<p>Inscription de M/Mme <strong>'.$prenoms.' '.$nom.'</strong> à la formation <strong>'.$nomtheme.'</strong> organisée par <strong>CIMEF International</strong>.</p>
<p>Veuillez trouver ci-dessous le récapitulatif :</p>
<hr style="border:none; border-top:1px solid #e0e0e0; margin:20px 0;">
<h4 style="margin-bottom:8px; color:#0d6efd;">Informations personnelles</h4>
<p>
<strong>Nom & Prénoms :</strong> '.$prenoms.' '.$nom.'<br>
<strong>Fonction :</strong> '.$fonction.'<br>
<strong>Entreprise :</strong> '.$entreprise.'<br>
<strong>Adresse :</strong> '.$adresse.'<br>
<strong>Pays / Ville :</strong> '.$pays.' / '.$ville.'<br>
<strong>Boîte postale :</strong> '.$boitepostale.'
</p>
<h4 style="margin-bottom:8px; color:#0d6efd;">Coordonnées</h4>
<p>
<strong>Email :</strong> '.$mail.'<br>
<strong>Téléphone :</strong> '.$telephone.'<br>
<strong>WhatsApp :</strong> '.$whatsapp.'<br>
<strong>Site web :</strong> '.$siteweb.'
</p>
<h4 style="margin-bottom:8px; color:#0d6efd;">Détails de participation</h4>
<p>
<strong>Nombre de participants :</strong> '.$nbparticipant.'<br>
<strong>Commentaire :</strong> '.$commentaire.'
</p>
<h4 style="margin-bottom:8px; color:#0d6efd;">Détail de la formation</h4>
<p>
<strong>Thème :</strong> '.$nomtheme.'<br>
<strong>Ville :</strong> '.$nomville.'<br>
<strong>Prix :</strong> '.$prix.''.$devise.'<br>
<strong>Session :</strong> '.$session.'
</p>
</td>
</tr>
<tr>
<td style="background-color:#f1f1f1; padding:15px; text-align:center; font-size:12px; color:#777777;">
© '.date("Y").' CIMEF International — Tous droits réservés
</td>
</tr>
</table>
</td>
</tr>
</table>
</body></html>';
$secretKey = '6LfPYkosAAAAAJQFLCC-9U5bF6KdFTPrgmbxg5Ux';
$value = $request->get('g-recaptcha-response');
$userIP = $_SERVER['REMOTE_ADDR'];
$url = "https://www.google.com/recaptcha/api/siteverify?secret=$secretKey&response=$value&remoteid=$userIP";
$response = \file_get_contents($url);
$response = json_decode((string)$response);
//dd($response);
if(!$response->success){
$this->addFlash(
'warning',
'Cocher le champs recaptcha svp!');
}else{
$destinataire = 'inscription@cimef-international.org';
$expediteur = $mail;
$reponse = $expediteur;
$suj = "INSCRIPTION FORMATION 2026";
$email = (new Email())
->from('CIMEF International <inscription@cimef-international.org>')
->to($destinataire) // destinataire principal
->cc('medias@cimef-international.com') // COPIE
->replyTo($expediteur) // Reply-To:
->subject($suj)
->text(strip_tags($codehtml))
->html($codehtml);// Subject:
//->html($codehtml, 'text/html'); // Content-Type + charset utf-8
$mailer->send($email);
$inscription->setNom($nom);
$inscription->setPrenoms($prenoms);
$inscription->setFonction($fonction);
$inscription->setAdresse($adresse);
$inscription->setMail($mail);
$inscription->setEntreprise($entreprise);
$inscription->setSiteweb($siteweb);
$inscription->setNbparticipant($nbparticipant);
$inscription->setPays($pays);
$inscription->setVille( $ville);
$inscription->setBoitepostale($boitepostale);
$inscription->setWhatsapp($whatsapp);
$inscription->setTelephone($telephone);
$inscription->setCommentaire($commentaire);
$inscription->setFormation($formation);
$entityManager->persist($inscription);
$entityManager->flush();
$this->addFlash(
'success',
'Votre inscription à été bien enregistrée');
return $this->redirectToRoute('front.seminaire.nationaux',['seminaires' => $seminaires,'slug' => $slug]);
}
}
return $this->render('front/inscriptions/inscription-seminaire.html.twig',[
'query' => $query,
'annee' => $annee,
'type' => $seminaires,
'mentions' => $mentions,
'inscriptionForm' => $inscriptionForm->createView(),
]);
}
*/
#[Route('/formations/{seminaires}/{slug}/{id}code/inscription', name: 'front.inscription', methods:['GET','POST'])]
public function inscription_sem(
$slug,
$seminaires,
$id,
Request $request,
MailerInterface $mailer,
InscriptionsRepository $inscriptionRepository,
VillesRepository $villeRepository,
ThemesRepository $themeRepository,
FormationsRepository $formationRepository,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
$annee = date('Y');
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select('for.id', 'for.dates_session', 'for.prix', 'for.devise', 'th.nom',
'thm.nom AS thmnom','vil.nom AS vilnom','vil.pays','for.created_at',
'th.slug','th.description','for.devise','vil.longitude','vil.latitude'
)
->from(Formations::class, 'for')
->innerJoin(Themes::class, 'th', 'WITH', 'for.theme = th.id')
->innerJoin(Villes::class, 'vil', 'WITH', 'for.ville = vil.id')
->innerJoin(Thematiques::class, 'thm', 'WITH', 'th.thematique= thm.id')
->where('th.slug = :theme')
->andwhere('for.id = :forid')
->setParameter('theme', $slug)
->setParameter('forid', $id);
$query = $queryBuilder->getQuery()->getResult();
$mentions = $mentionRepository->findAll();
$queryBuilder1 = $entityManager->createQueryBuilder();
$queryBuilder1
->select(
'cert.id','cert.session','cert.prix','cert.slug',
'cert.devise','cert.theme','vil.nom AS vilnom',
'vil.pays','cert.createdat','cert.type'
)
->from(Certificats::class, 'cert')
->innerJoin(Villes::class, 'vil', 'WITH', 'cert.ville = vil.id')
->where('cert.slug = :slug')
->andwhere('cert.id = :id')
->setParameter('slug', $slug)
->setParameter('id', $id);
$certificat = $queryBuilder1->getQuery()->getOneOrNullResult();
$inscription = new Inscriptions();
$inscriptionForm = $this->createForm(InscriptionFormType::class, $inscription);
$inscriptionForm->handleRequest($request);
if ($inscriptionForm->isSubmitted()) {
$civilite = $inscriptionForm->get('civilite')->getData();
$nom = $inscriptionForm->get('nom')->getData();
$prenoms = $inscriptionForm->get('prenoms')->getData();
$fonction = $inscriptionForm->get('fonction')->getData();
$adresse = $inscriptionForm->get('adresse')->getData();
$mail = $inscriptionForm->get('mail')->getData();
$entreprise = $inscriptionForm->get('entreprise')->getData();
$siteweb = $inscriptionForm->get('siteweb')->getData();
$nbparticipant = $inscriptionForm->get('nbparticipant')->getData();
$pays = $inscriptionForm->get('pays')->getData();
$ville = $inscriptionForm->get('ville')->getData();
$boitepostale = $inscriptionForm->get('boitepostale')->getData();
$whatsapp = $inscriptionForm->get('whatsapp')->getData();
$telephone = $inscriptionForm->get('telephone')->getData();
$commentaire = $inscriptionForm->get('commentaire')->getData();
$formation = $formationRepository->find($id);
//dd($formation->getId());
if($query){
$theme = $formation->getTheme();
$idville = $formation->getVille();
$session = $formation->getDatesSession();
$prix = $formation->getPrix();
$devise = $formation->getDevise();
$villes = $villeRepository->find($idville);
$nomtheme = $theme->getNom();
$nomville = $villes->getNom();
}
if($certificat){
$nomtheme = $certificat['theme'];
$nomville = $certificat['vilnom'];
$nompays = $certificat['pays'];
$session = $certificat['session'];
$prix = $certificat['prix'];
$devise = $certificat['devise'];
}
//dd($certificat);
if(!$commentaire){
$commentaire = " ";
}else{
$commentaire = $inscriptionForm->get('commentaire')->getData();
}
$destinataire = 'inscription@cimef-international.org';
$expediteur = $mail;
$reponse = $expediteur;
$suj = "INSCRIPTION FORMATION 2026";
$codehtml = '<html><body>'.
'<table width="100%" cellpadding="0" cellspacing="0" style="background-color:#f4f6f8; padding:20px;">
<tr>
<td align="center">
<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);">
<tr>
<td style="background-color:#051a53; padding:20px; color:#ffffff; text-align:center;">
<h2 style="margin:0;">Confirmation d\'inscription</h2>
</td>
</tr>
<tr>
<td style="padding:25px; color:#333333; font-size:14px; line-height:1.6;">
<p>Inscription de '.$civilite.' '.$prenoms.' '.$nom.' à la formation <strong>'.$nomtheme.'</strong> organisée par <strong>CIMEF International</strong>.</p>
<p>Veuillez trouver ci-dessous le récapitulatif :</p>
<hr style="border:none; border-top:1px solid #e0e0e0; margin:20px 0;">
<h4 style="margin-bottom:8px; color:#0d6efd;">Informations personnelles</h4>
<p>
<strong>Nom & Prénoms :</strong> '.$prenoms.' '.$nom.'<br>
<strong>Fonction :</strong> '.$fonction.'<br>
<strong>Entreprise :</strong> '.$entreprise.'<br>
<strong>Adresse :</strong> '.$adresse.'<br>
<strong>Pays / Ville :</strong> '.$pays.' / '.$ville.'<br>
<strong>Boîte postale :</strong> '.$boitepostale.'
</p>
<h4 style="margin-bottom:8px; color:#0d6efd;">Coordonnées</h4>
<p>
<strong>Email :</strong> '.$mail.'<br>
<strong>Téléphone :</strong> '.$telephone.'<br>
<strong>WhatsApp :</strong> '.$whatsapp.'<br>
<strong>Site web :</strong> '.$siteweb.'
</p>
<h4 style="margin-bottom:8px; color:#0d6efd;">Détails de participation</h4>
<p>
<strong>Nombre de participants :</strong> '.$nbparticipant.'<br>
<strong>Commentaire :</strong> '.$commentaire.'
</p>
<h4 style="margin-bottom:8px; color:#0d6efd;">Détail de la formation</h4>
<p>
<strong>Thème :</strong> '.$nomtheme.'<br>
<strong>Ville :</strong> '.$nomville.'<br>
<strong>Prix :</strong> '.$prix.''.$devise.'<br>
<strong>Session :</strong> '.$session.'
</p>
</td>
</tr>
<tr>
<td style="background-color:#f1f1f1; padding:15px; text-align:center; font-size:12px; color:#777777;">
© '.date("Y").' CIMEF International — Tous droits réservés
</td>
</tr>
</table>
</td>
</tr>
</table>
</body></html>';
$email = (new Email())
->from('CIMEF International <inscription@cimef-international.org>')
->to($destinataire) // destinataire principal
->cc('medias@cimef-international.com') // COPIE
->replyTo($expediteur) // Reply-To:
->subject($suj)
->text(strip_tags($codehtml))
->html($codehtml);// Subject:
//->html($codehtml, 'text/html'); // Content-Type + charset utf-8
$mailer->send($email);
$inscription->setNom($nom);
$inscription->setPrenoms($prenoms);
$inscription->setFonction($fonction);
$inscription->setAdresse($adresse);
$inscription->setMail($mail);
$inscription->setEntreprise($entreprise);
$inscription->setSiteweb($siteweb);
$inscription->setNbparticipant($nbparticipant);
$inscription->setPays($pays);
$inscription->setVille( $ville);
$inscription->setBoitepostale($boitepostale);
$inscription->setWhatsapp($whatsapp);
$inscription->setTelephone($telephone);
$inscription->setCommentaire($commentaire);
$inscription->setFormation($formation);
$entityManager->persist($inscription);
$entityManager->flush();
$this->addFlash(
'success',
'Votre inscription à été bien enregistrée');
return $this->redirectToRoute('front.seminaire.nationaux',['seminaires' => $seminaires,'slug' => $slug]);
}
if($query){
return $this->render('front/inscriptions/inscription-seminaire.html.twig',[
'slug' => $slug,
'query' => $query,
'annee' => $annee,
'type' => $seminaires,
'mentions' => $mentions,
'inscriptionForm' => $inscriptionForm->createView(),
]);
}else{
$nomtheme = $certificat['theme'];
$nomville = $certificat['vilnom'];
$nompays = $certificat['pays'];
$session = $certificat['session'];
$prix = $certificat['prix'];
$devise = $certificat['devise'];
return $this->render('front/inscriptions/inscription-certificat.html.twig',[
'slug' => $slug,
'prix' => $prix,
'annee' => $annee,
'pays' => $nompays,
'devise' => $devise,
'ville' => $nomville,
'theme' => $nomtheme,
'type' => $seminaires,
'session' => $session,
'mentions' => $mentions,
'certificat' => $certificat,
'inscriptionForm' => $inscriptionForm->createView(),
]);
}
}
#[Route('/formations/rencontre-des-top-management/{slug}/{id}code/inscription', name: 'front.inscription.management', methods:['GET','POST'])]
public function inscription_man(
$slug,
$id,
Request $request,
MailerInterface $mailer,
InscriptionsRepository $inscriptionRepository,
ManagementsRepository $managementRepository,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
$annee = date('Y');
$queryBuilder_1 = $entityManager->createQueryBuilder();
$queryBuilder_1
->select('man')
->from(Managements::class, 'man')
->where('man.slug = :theme')
->andwhere('man.id = :forid')
->setParameter('theme', $slug)
->setParameter('forid', $id);
$query_1 = $queryBuilder_1->getQuery()->getResult();
$mentions = $mentionRepository->findAll();
$inscription = new Inscriptions();
$inscriptionForm = $this->createForm(InscriptionFormType::class, $inscription);
$inscriptionForm->handleRequest($request);
if ($inscriptionForm->isSubmitted()) {
$nom = $inscriptionForm->get('nom')->getData();
$prenoms = $inscriptionForm->get('prenoms')->getData();
$fonction = $inscriptionForm->get('fonction')->getData();
$adresse = $inscriptionForm->get('adresse')->getData();
$mail = $inscriptionForm->get('mail')->getData();
$entreprise = $inscriptionForm->get('entreprise')->getData();
$siteweb = $inscriptionForm->get('siteweb')->getData();
$nbparticipant = $inscriptionForm->get('nbparticipant')->getData();
$pays = $inscriptionForm->get('pays')->getData();
$ville = $inscriptionForm->get('ville')->getData();
$boitepostale = $inscriptionForm->get('boitepostale')->getData();
$whatsapp = $inscriptionForm->get('whatsapp')->getData();
$telephone = $inscriptionForm->get('telephone')->getData();
$commentaire = $inscriptionForm->get('commentaire')->getData();
$management = $managementRepository->find($id);
//dd($formation->getId());
$theme = $management->getTheme();
$ville = $management->getVille();
$datedebut = $management->getDateDebut();
$datefin = $management->getDateFin();
$prix = $management->getPrix();
$devise = $management->getDevise();
if(!$commentaire){
$commentaire = "...";
}else{
$commentaire = $inscriptionForm->get('commentaire')->getData();
}
//$codehtml = "test";
$codehtml = '<html><body>'.
'<table width="100%" cellpadding="0" cellspacing="0" style="background-color:#f4f6f8; padding:20px;">
<tr>
<td align="center">
<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);">
<tr>
<td style="background-color:#051a53; padding:20px; color:#ffffff; text-align:center;">
<h2 style="margin:0;">Confirmation d\'inscription</h2>
</td>
</tr>
<tr>
<td style="padding:25px; color:#333333; font-size:14px; line-height:1.6;">
<p>Inscription de M/Mme <strong>'.$prenoms.' '.$nom.'</strong> à la formation <strong>'.$nomtheme.'</strong> organisée par <strong>CIMEF International</strong>.</p>
<p>Veuillez trouver ci-dessous le récapitulatif :</p>
<hr style="border:none; border-top:1px solid #e0e0e0; margin:20px 0;">
<h4 style="margin-bottom:8px; color:#0d6efd;">Informations personnelles</h4>
<p>
<strong>Nom & Prénoms :</strong> '.$prenoms.' '.$nom.'<br>
<strong>Fonction :</strong> '.$fonction.'<br>
<strong>Entreprise :</strong> '.$entreprise.'<br>
<strong>Adresse :</strong> '.$adresse.'<br>
<strong>Pays / Ville :</strong> '.$pays.' / '.$ville.'<br>
<strong>Boîte postale :</strong> '.$boitepostale.'
</p>
<h4 style="margin-bottom:8px; color:#0d6efd;">Coordonnées</h4>
<p>
<strong>Email :</strong> '.$mail.'<br>
<strong>Téléphone :</strong> '.$telephone.'<br>
<strong>WhatsApp :</strong> '.$whatsapp.'<br>
<strong>Site web :</strong> '.$siteweb.'
</p>
<h4 style="margin-bottom:8px; color:#0d6efd;">Détails de participation</h4>
<p>
<strong>Nombre de participants :</strong> '.$nbparticipant.'<br>
<strong>Commentaire :</strong> '.$commentaire.'
</p>
<h4 style="margin-bottom:8px; color:#0d6efd;">Détail de la formation</h4>
<p>
<strong>Thème :</strong> '.$theme.'<br>
<strong>Ville :</strong> '.$ville.'<br>
<strong>Prix :</strong> '.$prix.''.$devise.'<br>
<strong>Date de la rencontre :</strong> Du'.$datedebut.' au '.$datefin.'<br>
</p>
</td>
</tr>
<tr>
<td style="background-color:#f1f1f1; padding:15px; text-align:center; font-size:12px; color:#777777;">
© '.date("Y").' CIMEF International — Tous droits réservés
</td>
</tr>
</table>
</td>
</tr>
</table>
</body></html>';
$secretKey = '6LfPYkosAAAAAJQFLCC-9U5bF6KdFTPrgmbxg5Ux';
$value = $request->get('g-recaptcha-response');
$userIP = $_SERVER['REMOTE_ADDR'];
$url = "https://www.google.com/recaptcha/api/siteverify?secret=$secretKey&response=$value&remoteid=$userIP";
$response = \file_get_contents($url);
$response = json_decode((string)$response);
//dd($response);
if(!$response->success){
$this->addFlash(
'warning',
'Cocher le champs recaptcha svp!');
}else{
$destinataire = 'inscription@cimef-international.org';
$expediteur = $mail;
$reponse = $expediteur;
$suj = "INSCRIPTION FORMATION 2026";
$email = (new Email())
->from('CIMEF International <inscription@cimef-international.org>')
->to($destinataire) // destinataire principal
->cc('medias@cimef-international.com') // COPIE
->replyTo($expediteur) // Reply-To:
->subject($suj)
->text(strip_tags($codehtml))
->html($codehtml);// Subject:
//->html($codehtml, 'text/html'); // Content-Type + charset utf-8
$mailer->send($email);
$inscription->setNom($nom);
$inscription->setPrenoms($prenoms);
$inscription->setFonction($fonction);
$inscription->setAdresse($adresse);
$inscription->setMail($mail);
$inscription->setEntreprise($entreprise);
$inscription->setSiteweb($siteweb);
$inscription->setNbparticipant($nbparticipant);
$inscription->setPays($pays);
$inscription->setVille( $ville);
$inscription->setBoitepostale($boitepostale);
$inscription->setWhatsapp($whatsapp);
$inscription->setTelephone($telephone);
$inscription->setCommentaire($commentaire);
$inscription->setFormation($management);
$entityManager->persist($inscription);
$entityManager->flush();
$this->addFlash(
'success',
'Votre inscription à été bien enregistrée');
return $this->redirectToRoute('front.top.management');
}
}
return $this->render('front/inscriptions/inscription-top-management.html.twig',[
'query_1' => $query_1,
'annee' => $annee,
'mentions' => $mentions,
'inscriptionForm' => $inscriptionForm->createView(),
]);
/*
if ($inscriptionForm->isSubmitted()) {
$nom = $inscriptionForm->get('nom')->getData();
$prenoms = $inscriptionForm->get('prenoms')->getData();
$fonction = $inscriptionForm->get('fonction')->getData();
$adresse = $inscriptionForm->get('adresse')->getData();
$mail = $inscriptionForm->get('mail')->getData();
$entreprise = $inscriptionForm->get('entreprise')->getData();
$siteweb = $inscriptionForm->get('siteweb')->getData();
$nbparticipant = $inscriptionForm->get('nbparticipant')->getData();
$pays = $inscriptionForm->get('pays')->getData();
$ville = $inscriptionForm->get('ville')->getData();
$boitepostale = $inscriptionForm->get('boitepostale')->getData();
$whatsapp = $inscriptionForm->get('whatsapp')->getData();
$telephone = $inscriptionForm->get('telephone')->getData();
$commentaire = $inscriptionForm->get('commentaire')->getData();
$formation = $formationRepository->find($id);
//dd($formation->getId());
$theme = $formation->getTheme();
$idville = $formation->getVille();
$session = $formation->getDatesSession();
$prix = $formation->getPrix();
$devise = $formation->getDevise();
$villes = $villeRepository->find($idville);
$nomtheme = $theme->getNom();
$nomville = $villes->getNom();
if(!$commentaire){
$commentaire = "...";
}else{
$commentaire = $inscriptionForm->get('commentaire')->getData();
}
//$codehtml = "test";
$codehtml = '<html><body>'.
'<table width="100%" cellpadding="0" cellspacing="0" style="background-color:#f4f6f8; padding:20px;">
<tr>
<td align="center">
<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);">
<tr>
<td style="background-color:#051a53; padding:20px; color:#ffffff; text-align:center;">
<h2 style="margin:0;">Confirmation d\'inscription</h2>
</td>
</tr>
<tr>
<td style="padding:25px; color:#333333; font-size:14px; line-height:1.6;">
<p>Inscription de M/Mme <strong>'.$prenoms.' '.$nom.'</strong> à la formation <strong>'.$nomtheme.'</strong> organisée par <strong>CIMEF International</strong>.</p>
<p>Veuillez trouver ci-dessous le récapitulatif :</p>
<hr style="border:none; border-top:1px solid #e0e0e0; margin:20px 0;">
<h4 style="margin-bottom:8px; color:#0d6efd;">Informations personnelles</h4>
<p>
<strong>Nom & Prénoms :</strong> '.$prenoms.' '.$nom.'<br>
<strong>Fonction :</strong> '.$fonction.'<br>
<strong>Entreprise :</strong> '.$entreprise.'<br>
<strong>Adresse :</strong> '.$adresse.'<br>
<strong>Pays / Ville :</strong> '.$pays.' / '.$ville.'<br>
<strong>Boîte postale :</strong> '.$boitepostale.'
</p>
<h4 style="margin-bottom:8px; color:#0d6efd;">Coordonnées</h4>
<p>
<strong>Email :</strong> '.$mail.'<br>
<strong>Téléphone :</strong> '.$telephone.'<br>
<strong>WhatsApp :</strong> '.$whatsapp.'<br>
<strong>Site web :</strong> '.$siteweb.'
</p>
<h4 style="margin-bottom:8px; color:#0d6efd;">Détails de participation</h4>
<p>
<strong>Nombre de participants :</strong> '.$nbparticipant.'<br>
<strong>Commentaire :</strong> '.$commentaire.'
</p>
<h4 style="margin-bottom:8px; color:#0d6efd;">Détail de la formation</h4>
<p>
<strong>Thème :</strong> '.$nomtheme.'<br>
<strong>Ville :</strong> '.$nomville.'<br>
<strong>Prix :</strong> '.$prix.'<br>
<strong>Devise :</strong> '.$devise.'<br>
<strong>Session :</strong> '.$session.'
</p>
</td>
</tr>
<tr>
<td style="background-color:#f1f1f1; padding:15px; text-align:center; font-size:12px; color:#777777;">
© '.date("Y").' CIMEF International — Tous droits réservés
</td>
</tr>
</table>
</td>
</tr>
</table>
</body></html>';
$secretKey = '6LfPYkosAAAAAJQFLCC-9U5bF6KdFTPrgmbxg5Ux';
$value = $request->get('g-recaptcha-response');
$userIP = $_SERVER['REMOTE_ADDR'];
$url = "https://www.google.com/recaptcha/api/siteverify?secret=$secretKey&response=$value&remoteid=$userIP";
$response = \file_get_contents($url);
$response = json_decode((string)$response);
//dd($response);
if(!$response->success){
$this->addFlash(
'warning',
'Cocher le champs recaptcha svp!');
}else{
$destinataire = 'inscription@cimef-international.org';
$expediteur = $mail;
$reponse = $expediteur;
$suj = "INSCRIPTION FORMATION 2026";
$email = (new Email())
->from('CIMEF International <inscription@cimef-international.org>')
->to($destinataire) // destinataire principal
->cc('medias@cimef-international.com') // COPIE
->replyTo($expediteur) // Reply-To:
->subject($suj)
->text(strip_tags($codehtml))
->html($codehtml);// Subject:
//->html($codehtml, 'text/html'); // Content-Type + charset utf-8
$mailer->send($email);
$inscription->setNom($nom);
$inscription->setPrenoms($prenoms);
$inscription->setFonction($fonction);
$inscription->setAdresse($adresse);
$inscription->setMail($mail);
$inscription->setEntreprise($entreprise);
$inscription->setSiteweb($siteweb);
$inscription->setNbparticipant($nbparticipant);
$inscription->setPays($pays);
$inscription->setVille( $ville);
$inscription->setBoitepostale($boitepostale);
$inscription->setWhatsapp($whatsapp);
$inscription->setTelephone($telephone);
$inscription->setCommentaire($commentaire);
$inscription->setFormation($formation);
$entityManager->persist($inscription);
$entityManager->flush();
$this->addFlash(
'success',
'Votre inscription à été bien enregistrée');
return $this->redirectToRoute('front.seminaire.nationaux',['seminaires' => $seminaires,'slug' => $slug]);
}
}
return $this->render('front/inscriptions/inscription-seminaire.html.twig',[
'query' => $query,
'annee' => $annee,
'type' => $seminaires,
'mentions' => $mentions,
'inscriptionForm' => $inscriptionForm->createView(),
]);
*/
}
#[Route('/formations/seminaire-sur-mesure', name: 'front.seminaire-sur-mesure', methods:['GET','POST'])]
public function inscription_seminaire_sur_mesure(
Request $request,
MailerInterface $mailer,
InscriptionsRepository $inscriptionRepository,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
//dd($seminaires);
$annee = date('Y');
$mentions = $mentionRepository->findAll();
$demandeformation = new Demandeformations();
$demandeformationsForm = $this->createForm(DemandeformationFormType::class, $demandeformation);
$demandeformationsForm->handleRequest($request);
if ($demandeformationsForm->isSubmitted()) {
$nom = $demandeformationsForm->get('nom')->getData();
$prenoms = $demandeformationsForm->get('prenoms')->getData();
$fonction = $demandeformationsForm->get('fonction')->getData();
$adresse = $demandeformationsForm->get('adresse')->getData();
$mail = $demandeformationsForm->get('mail')->getData();
$entreprise = $demandeformationsForm->get('entreprise')->getData();
$siteweb = $demandeformationsForm->get('siteweb')->getData();
$nombrepart = $demandeformationsForm->get('nombrepart')->getData();
$lieu = $demandeformationsForm->get('lieu')->getData();
$theme = $demandeformationsForm->get('theme')->getData();
$duree = $demandeformationsForm->get('duree')->getData();
$telephone = $demandeformationsForm->get('telephone')->getData();
$commentaire = $demandeformationsForm->get('commentaire')->getData();
//dd($formation->getId());
if(!$commentaire){
$commentaire = "...";
}else{
$commentaire = $demandeformationsForm->get('commentaire')->getData();
}
$destinataire = 'inscription@cimef-international.org';
$expediteur = $mail;
$reponse = $expediteur;
$suj = "INSCRIPTION FORMATION 2026";
//$codehtml = "test";
$codehtml = '<html><body>'.
'<table width="100%" cellpadding="0" cellspacing="0" style="background-color:#f4f6f8; padding:20px;">
<tr>
<td align="center">
<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);">
<tr>
<td style="background-color:#051a53; padding:20px; color:#ffffff; text-align:center;">
<h2 style="margin:0;">Confirmation d\'inscription</h2>
</td>
</tr>
<tr>
<td style="padding:25px; color:#333333; font-size:14px; line-height:1.6;">
<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>
<p>Veuillez trouver ci-dessous le récapitulatif :</p>
<hr style="border:none; border-top:1px solid #e0e0e0; margin:20px 0;">
<h4 style="margin-bottom:8px; color:#0d6efd;">Informations personnelles</h4>
<p>
<strong>Nom & Prénoms :</strong> '.$prenoms.' '.$nom.'<br>
<strong>Fonction :</strong> '.$fonction.'<br>
<strong>Entreprise :</strong> '.$entreprise.'<br>
<strong>Adresse :</strong> '.$adresse.'<br>
</p>
<h4 style="margin-bottom:8px; color:#0d6efd;">Coordonnées</h4>
<p>
<strong>Email :</strong> '.$mail.'<br>
<strong>Téléphone :</strong> '.$telephone.'<br>
<strong>Site web :</strong> '.$siteweb.'
</p>
<h4 style="margin-bottom:8px; color:#0d6efd;">Détails de participation</h4>
<p>
<strong>Nombre de participants :</strong> '.$nombrepart.'<br>
<strong>Commentaire :</strong> '.$commentaire.'
</p>
<h4 style="margin-bottom:8px; color:#0d6efd;">Détail de la formation</h4>
<p>
<strong>Thème :</strong> '.$theme.'<br>
<strong>Lieu :</strong> '.$lieu.'<br>
<strong>Date :</strong> '.$duree.'
</p>
</td>
</tr>
<tr>
<td style="background-color:#f1f1f1; padding:15px; text-align:center; font-size:12px; color:#777777;">
© '.date("Y").' CIMEF International — Tous droits réservés
</td>
</tr>
</table>
</td>
</tr>
</table>
</body></html>';
$email = (new Email())
->from('CIMEF International <inscription@cimef-international.org>')
->to($destinataire) // destinataire principal
->cc('medias@cimef-international.com') // COPIE
->replyTo($expediteur) // Reply-To:
->subject($suj)
->text(strip_tags($codehtml))
->html($codehtml);// Subject:
//->html($codehtml, 'text/html'); // Content-Type + charset utf-8
$mailer->send($email);
$demandeformation->setNom($nom);
$demandeformation->setPrenoms($prenoms);
$demandeformation->setFonction($fonction);
$demandeformation->setAdresse($adresse);
$demandeformation->setMail($mail);
$demandeformation->setEntreprise($entreprise);
$demandeformation->setSiteweb($siteweb);
$demandeformation->setNombrepart($nombrepart);
$demandeformation->setLieu($lieu);
$demandeformation->setTheme($theme);
$demandeformation->setDuree($duree);
$demandeformation->setTelephone($telephone);
$demandeformation->setCommentaire($commentaire);
$entityManager->persist($demandeformation);
$entityManager->flush();
$this->addFlash(
'success',
'Votre inscription à été bien enregistrée');
return $this->redirectToRoute('front.inter.index');
}
return $this->render('front/inscriptions/formation-sur-mesure.html.twig',[
'annee' => $annee,
'mentions' => $mentions,
'demandeformationsForm' => $demandeformationsForm->createView(),
]);
}
#[Route('/formations/seminaires-internationaux/{slug}/{id}code', name: 'front.seminaire.inter.detail', methods:['GET'])]
public function detail_sem_int(
$slug,
$id,
Request $request,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
$type = "Séminaires internationaux";
$annee = date('Y');
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select('for.id', 'for.dates_session', 'for.prix', 'for.devise', 'th.nom',
'thm.nom AS thmnom','vil.nom AS vilnom','vil.pays','for.created_at',
'th.slug','th.description','for.devise','vil.longitude','vil.latitude'
)
->from(Formations::class, 'for')
->innerJoin(Themes::class, 'th', 'WITH', 'for.theme = th.id')
->innerJoin(Villes::class, 'vil', 'WITH', 'for.ville = vil.id')
->innerJoin(Thematiques::class, 'thm', 'WITH', 'th.thematique = thm.id')
->where('th.slug = :theme')
->andwhere('for.id = :forid')
->setParameter('theme', $slug)
->setParameter('forid', $id);
$query = $queryBuilder->getQuery()->getResult();
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select('for.id', 'for.dates_session', 'for.prix', 'for.devise', 'th.nom',
'thm.nom AS thmnom','vil.nom AS vilnom','vil.pays','for.created_at',
'th.slug','th.description','for.devise','vil.longitude','vil.latitude',
'for.image'
)
->from(Formations::class, 'for')
->innerJoin(Themes::class, 'th', 'WITH', 'for.theme = th.id')
->innerJoin(Villes::class, 'vil', 'WITH', 'for.ville = vil.id')
->innerJoin(Thematiques::class, 'thm', 'WITH', 'th.thematique = thm.id')
->where('th.slug = :theme')
->andwhere('for.id != :forid')
->setParameter('theme', $slug)
->setParameter('forid', $id);
$formations = $queryBuilder->getQuery()->getResult();
//dd($formations);
$mentions = $mentionRepository->findAll();
$locations = [];
foreach ($query as $row) {
if (!empty($row['latitude']) && !empty($row['longitude'])) {
$locations[] = [
'lat' => (float) $row['latitude'],
'lng' => (float) $row['longitude'],
'ville' => strtoupper($row['vilnom']),
'pays' => strtoupper($row['pays']),
];
}
}
return $this->render('front/detail/detail-seminaire-inter.html.twig',[
'formations' => $formations,
'locations' => $locations,
'mentions' => $mentions,
'annee' => $annee,
'type' => $type,
'query' => $query
]);
}
#[Route('/formations/seminaires-nationaux/{slug}/{id}code', name: 'front.seminaire.nation.detail', methods:['GET'])]
public function detail_sem_nat(
$slug,
$id,
Request $request,
GeoIpService $geo,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
$type = "Séminaires nationaux";
$annee = date('Y');
// 🌍 Géo IP
$geoData = $geo->getGeoData($request->getClientIp());
$pays = $geoData['country'] ?? '';
$ville = $geoData['city'] ?? '';
// Correction du nom du pays
if ($pays === 'Local' || $pays === 'Ivory Coast') {
$getpays = "Côte d'ivoire";
} else {
$getpays = $pays;
}
//dd($getpays);
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select('for.id', 'for.dates_session', 'for.prix', 'for.devise', 'th.nom',
'thm.nom AS thmnom','vil.nom AS vilnom','vil.pays','for.created_at',
'th.slug','th.description','for.devise','vil.longitude','vil.latitude'
)
->from(Formations::class, 'for')
->innerJoin(Themes::class, 'th', 'WITH', 'for.theme = th.id')
->innerJoin(Villes::class, 'vil', 'WITH', 'for.ville = vil.id')
->innerJoin(Thematiques::class, 'thm', 'WITH', 'th.thematique = thm.id')
->where('th.slug = :theme')
->andwhere('for.id = :forid')
->setParameter('theme', $slug)
->setParameter('forid', $id);
$query = $queryBuilder->getQuery()->getResult();
$mentions = $mentionRepository->findAll();
$locations = [];
foreach ($query as $row) {
if (!empty($row['latitude']) && !empty($row['longitude'])) {
$locations[] = [
'lat' => (float) $row['latitude'],
'lng' => (float) $row['longitude'],
'ville' => strtoupper($row['vilnom']),
'pays' => strtoupper($row['pays']),
];
}
}
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select('for.id', 'for.dates_session', 'for.prix', 'for.devise', 'th.nom',
'thm.nom AS thmnom','vil.nom AS vilnom','vil.pays','for.created_at',
'th.slug','th.description','for.devise','vil.longitude','vil.latitude',
'for.image'
)
->from(Formations::class, 'for')
->innerJoin(Themes::class, 'th', 'WITH', 'for.theme = th.id')
->innerJoin(Villes::class, 'vil', 'WITH', 'for.ville = vil.id')
->innerJoin(Thematiques::class, 'thm', 'WITH', 'th.thematique = thm.id')
->where('th.slug = :theme')
->andwhere('for.id != :forid')
->andwhere('vil.pays = :pays')
->setParameter('theme', $slug)
->setParameter('forid', $id)
->setParameter('pays', $getpays);
$formations = $queryBuilder->getQuery()->getResult();
return $this->render('front/detail/detail-seminaire-inter.html.twig',[
'formations' => $formations,
'locations' => $locations,
'annee' => $annee,
'type' => $type,
'mentions' => $mentions,
'query' => $query
]);
}
#[Route('/actualites', name: 'front.actualite', methods:['GET'])]
public function actualite(
Request $request,
MentionsRepository $mentionRepository,
ManagementsRepository $managementRepository,
PaginatorInterface $paginator,
ActualitesRepository $actualiteRepository,
EntityManagerInterface $entityManager
): Response
{
$All_actu = $actualiteRepository->findBy(['statut' => 'Publié'], ['createdat' => 'DESC']);
$manageLimit = $managementRepository->findBy([], ['id' => 'DESC'], 5 );
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select('actu')
->from(Actualites::class, 'actu')
->where('actu.statut = :statut')
->setParameter('statut', 'Publié')
->orderBy('actu.createdat', 'DESC');
$pagination = $paginator->paginate(
$queryBuilder,
$request->query->getInt('page', 1),
12
);
$last_actu = $actualiteRepository->findBy(['statut' => 'Publié'], ['createdat' => 'DESC'],limit: 4);
$mentions = $mentionRepository->findAll();
return $this->render('front/actualite.html.twig',[
'mentions' => $mentions,
'last_actu' => $last_actu,
'pagination' => $pagination,
'manageLimit' => $manageLimit
]);
}
#[Route('/actualite/{slug}', name: 'front.detail.actu', methods:['GET','POST'])]
public function detailactu(
$slug,
Request $request,
ActualitesRepository $actuRepository,
MentionsRepository $mentionRepository,
ManagementsRepository $managementRepository,
EntityManagerInterface $entityManager
): Response
{
$Allactu = $actuRepository->findAll();
$detactu = $actuRepository->findOneBy(array('slug' => $slug));
$last_actu = $actuRepository->findBy([], ['createdat' => 'ASC']);
$manageLimit = $managementRepository->findBy([], ['id' => 'DESC'], 5 );
$mentions = $mentionRepository->findAll();
return $this->render('front/detail/detail-actualite.html.twig',[
'detactu' => $detactu,
'actualite' => $Allactu,
'mentions' => $mentions,
'last_actu' => $last_actu,
'manageLimit' => $manageLimit
]);
}
#[Route('/mentions/{slug}', name: 'front.mention.detail', methods:['GET','POST'])]
public function detailmention(
$slug,
Request $request,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
$detmention = $mentionRepository->findOneBy(array('slug' => $slug));
$mentions = $mentionRepository->findAll();
return $this->render('front/detail/detail-mention.html.twig',[
'detmention' => $detmention,
'mentions' => $mentions,
]);
}
#[Route('/presentation/nos-centres', name: 'front.centres', methods:['GET'])]
public function centres(
Request $request,
VillesRepository $villeRepository,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
$Ville = $villeRepository->findAll();
$locations = [
[
'lat' => 5.399573993486265,
'lng' => -3.9608326481739446,
'ville' => 'ABIDJAN',
'Pays' => 'CÔTE D\'IVOIRE',
],
[
'lat' => 48.82503553852063,
'lng' => 2.3943687952459913,
'ville' => 'PARIS',
'pays' => 'FRANCE',
],
[
'lat' => 33.61983014582587,
'lng' => -7.591902517162099,
'ville' => 'CASABLANCA',
'pays' => 'MAROC',
],
[
'lat' => 14.671959307245515,
'lng' => -17.428349942742518,
'ville' => 'DAKAR',
'pays' => 'SENEGAL',
],
[
'lat' => 25.222641788192867,
'lng' => 55.4419721341237,
'ville' => 'DUBAI',
'pays' => 'EMIRATS ARABES UNIS',
],
[
'lat' => 41.008441347309684,
'lng' => 28.969801288596543,
'ville' => 'ISTANBUL',
'pays' => 'TURQUIE',
],
];
$mentions = $mentionRepository->findAll();
return $this->render('front/centres.html.twig',[
'locations' => $locations,
'mentions' => $mentions,
'ville' => $Ville
]);
}
#[Route('/presentation/nos-partenaires', name: 'front.nos-partenaires', methods:['GET'])]
public function partenaires(
Request $request,
PartenairesRepository $partenaireRepository,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
$partenaires = $partenaireRepository->findAll();
$groupes = [];
foreach ($partenaires as $p) {
$groupes[$p->getPaysPart()][] = $p;
}
$mentions = $mentionRepository->findAll();
return $this->render('front/partenaire.html.twig',[
'mentions' => $mentions,
'groupes' => $groupes
]);
}
#[Route('/presentation/nos-centres/{slug}', name: 'front.detail.centre', methods:['GET'])]
public function detail_centre(
$slug,
Request $request,
GaleriesRepository $galRepository,
VillesRepository $villeRepository,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select('gal.imgal', 'gal.nom')
->from(Galeries::class, 'gal')
->where('gal.nom = :nom')
->setParameter('nom', $slug);
$detgal = $queryBuilder->getQuery()->getResult();
//$detgal = $galRepository->findOneBy(array('nom' => $slug));
//$detgal = $galRepository->findAll();
$detcentres = $villeRepository->findOneBy(array('slug' => $slug));
$mentions = $mentionRepository->findAll();
return $this->render('front/detail/detail-centre.html.twig',[
'slug' => $slug,
'detcentre' => $detcentres,
'mentions' => $mentions,
'detgal' => $detgal
]);
}
#[Route('/financement-des-etudes', name: 'front.financement.etude', methods:['GET','POST'])]
public function financement(): Response
{
return $this->render('front/admissions/financement.html.twig');
}
#[Route('/inscription-{annee}', name: 'front.inscriptions', methods: ['GET', 'POST'])]
public function inscription(
Request $request,
MailerInterface $mailer,
ThemesRepository $themesRepository,
VillesRepository $villesRepository,
EntityManagerInterface $entityManager,
MentionsRepository $mentionRepository,
FormationsRepository $formationsRepository
): Response {
$annee = date('Y');
/* =========================
AJAX
========================= */
if ($request->isXmlHttpRequest()) {
/* THÉMATIQUE → THÈMES */
if ($request->request->get('action') === 'themes') {
$thematiqueVal = $request->request->get('thematiqueVal');
$themes = $themesRepository->findBy(
['thematique' => $thematiqueVal],
['nom' => 'ASC']
);
$data = [];
foreach ($themes as $theme) {
$data[] = [
'id' => $theme->getId(),
'nom' => $theme->getNom(),
];
}
return new JsonResponse($data);
}
/* THÈME → LIEUX */
if ($request->request->get('action') === 'lieux') {
$themeId = $request->request->get('themeVal');
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select(
'for.id', 'for.dates_session AS session', 'for.prix', 'for.devise', 'th.nom',
'vil.nom AS vilnom','vil.pays','for.created_at','th.slug',
'th.description','for.devise'
)
->from(Formations::class, 'for')
->innerJoin(Themes::class,'th', 'WITH', 'for.theme = th.id')
->innerJoin(Villes::class, 'vil', 'WITH', 'for.ville = vil.id')
->where('th.id = :idtheme')
->setParameter('idtheme', $themeId);
$formations = $queryBuilder->getQuery()->getResult();
//dump($themeId,$formations);
$data = [];
foreach ($formations as $formation) {
$data[] = [
'id' => $formation['id'],
'prix' => $formation['prix'],
'lieu' => $formation['vilnom'],
'devise' => $formation['devise'],
'session' => $formation['session'],
];
}
return new JsonResponse($data);
}
/* LIEU → SESSION + PRIX */
if ($request->request->get('action') === 'lieu_details') {
$formationId = $request->request->get('formationId');
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select(
'for.dates_session AS session',
'for.prix',
'for.devise'
)
->from(Formations::class, 'for')
->where('for.id = :id')
->setParameter('id', $formationId);
$formation = $queryBuilder->getQuery()->getOneOrNullResult();
if (!$formation) {
return new JsonResponse(['error' => 'Formation introuvable'], 404);
}
return new JsonResponse([
'session' => $formation['session'],
'prix' => $formation['prix'],
'devise' => $formation['devise'],
]);
}
}
/* =========================
AFFICHAGE NORMAL
========================= */
$inscription = new Inscriptions();
$form = $this->createForm(NewInscriptionFormType::class);
$form->handleRequest($request);
if ($form->isSubmitted()) {
$civilite = $form->get('civilite')->getData();
$nom = $form->get('nom')->getData();
$prenoms = $form->get('prenoms')->getData();
$fonction = $form->get('fonction')->getData();
$telephone = $form->get('telephone')->getData();
$adresse = $form->get('adresse')->getData();
$mail = $form->get('mail')->getData();
$entreprise = $form->get('entreprise')->getData();
$siteweb = $form->get('siteweb')->getData();
$nombrepart = $form->get('nbparticipant')->getData();
$pays = $form->get('pays')->getData();
$ville = $form->get('ville')->getData();
$boitepostale = $form->get('boitepostale')->getData();
$whatsapp = $form->get('whatsapp')->getData();
$theme = $form->get('theme')->getData();
//$lieu = $form->get('lieu')->getData();
$periode = $form->get('periode')->getData();
$telephone = $form->get('telephone')->getData();
$commentaire = $form->get('commentaire')->getData();
if(!$commentaire){
$commentaire = "...";
}else{
$commentaire = $form->get('commentaire')->getData();
}
if(!$siteweb){
$siteweb = "pas renseigné";
}else{
$siteweb = $form->get('siteweb')->getData();
}
if(!$adresse){
$adresse = "pas renseigné";
}else{
$adresse = $form->get('adresse')->getData();
}
if(!$boitepostale){
$boitepostale = "pas renseigné";
}else{
$boitepostale = $form->get('boitepostale')->getData();
}
$themeId = $theme->getId();
$nomtheme = $theme->getNom();
dd($form);
$Seminaires = $formationsRepository->findOneBy(array('theme' => $themeId, 'dates_session' => $periode));
/*$formationId = $formations->getId();*/
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select(
'for.id', 'for.dates_session AS session', 'for.prix', 'for.devise', 'th.nom',
'vil.nom AS vilnom','vil.pays','for.created_at','th.slug', 'th.id AS themeId',
'th.description','for.devise'
)
->from(Formations::class, 'for')
->innerJoin(Themes::class,'th', 'WITH', 'for.theme = th.id')
->innerJoin(Villes::class, 'vil', 'WITH', 'for.ville = vil.id')
->where('th.id = :idtheme')
->andwhere('for.dates_session = :sessions')
->setParameter('idtheme', $themeId)
->setParameter('sessions', $periode);
$formations = $queryBuilder->getQuery()->getResult();
$villeForm = $formations[0]['vilnom'];
$destinataire = 'inscription@cimef-international.org';
$expediteur = $mail;
$reponse = $expediteur;
$suj = "INSCRIPTION FORMATION 2026";
$codehtml = '<html><body>'.
'<table width="100%" cellpadding="0" cellspacing="0" style="background-color:#f4f6f8; padding:20px;">
<tr>
<td align="center">
<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);">
<tr>
<td style="background-color:#051a53; padding:20px; color:#ffffff; text-align:center;">
<h2 style="margin:0;">Confirmation d\'inscription</h2>
</td>
</tr>
<tr>
<td style="padding:25px; color:#333333; font-size:14px; line-height:1.6;">
<p>Demande de dévis de '.$civilite.' <strong>'.$prenoms.' '.$nom.'</strong> pour une formation sur mesure avec pour thème :<strong>'.$nomtheme.'</strong>.</p>
<p>Veuillez trouver ci-dessous le récapitulatif :</p>
<hr style="border:none; border-top:1px solid #e0e0e0; margin:20px 0;">
<h4 style="margin-bottom:8px; color:#0d6efd;">Informations personnelles</h4>
<p>
<strong>Nom & Prénoms :</strong> '.$prenoms.' '.$nom.'<br>
<strong>Fonction :</strong> '.$fonction.'<br>
<strong>Entreprise :</strong> '.$entreprise.'<br>
<strong>Adresse :</strong> '.$adresse.'<br>
</p>
<h4 style="margin-bottom:8px; color:#0d6efd;">Coordonnées</h4>
<p>
<strong>Email :</strong> '.$mail.'<br>
<strong>Téléphone :</strong> '.$telephone.'<br>
<strong>Site web :</strong> '.$siteweb.'
</p>
<h4 style="margin-bottom:8px; color:#0d6efd;">Détails de participation</h4>
<p>
<strong>Nombre de participants :</strong> '.$nombrepart.'<br>
<strong>Commentaire :</strong> '.$commentaire.'
</p>
<h4 style="margin-bottom:8px; color:#0d6efd;">Détail de la formation</h4>
<p>
<strong>Thème :</strong> '.$nomtheme.'<br>
<strong>Lieu :</strong> '.$villeForm.'<br>
<strong>Période :</strong> '.$periode.'
</p>
</td>
</tr>
<tr>
<td style="background-color:#f1f1f1; padding:15px; text-align:center; font-size:12px; color:#777777;">
© '.date("Y").' CIMEF International — Tous droits réservés
</td>
</tr>
</table>
</td>
</tr>
</table>
</body></html>';
$email = (new Email())
->from('CIMEF International <inscription@cimef-international.org>')
->to($destinataire) // destinataire principal
->cc('medias@cimef-international.com') // COPIE
->replyTo($expediteur) // Reply-To:
->subject($suj)
->text(strip_tags($codehtml))
->html($codehtml);// Subject:
//->html($codehtml, 'text/html'); // Content-Type + charset utf-8
$mailer->send($email);
$inscription->setNom($nom);
$inscription->setPrenoms($prenoms);
$inscription->setFonction($fonction);
$inscription->setAdresse($adresse);
$inscription->setMail($mail);
$inscription->setEntreprise($entreprise);
$inscription->setSiteweb($siteweb);
$inscription->setNbparticipant($nombrepart);
$inscription->setPays($pays);
$inscription->setVille( $ville);
$inscription->setBoitepostale($boitepostale);
$inscription->setWhatsapp($whatsapp);
$inscription->setTelephone($telephone);
$inscription->setCommentaire($commentaire);
$inscription->setFormation($Seminaires);
$entityManager->persist($inscription);
$entityManager->flush();
$this->addFlash(
'success',
'Votre inscription à été bien enregistrée');
return $this->redirectToRoute('front.inscriptions',['annee' => $annee]);
}
$mentions = $mentionRepository->findAll();
return $this->render('front/inscriptions/inscription-index.html.twig', [
'annee' => date('Y'),
'mentions' => $mentions,
'demandeformationsForm' => $form->createView(),
]);
}
#[Route('/contact', name: 'front.contact', methods:['GET','POST'])]
public function contact(
Request $request,
MailerInterface $mailer,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
$mentions = $mentionRepository->findAll();
$contactForm = $this->createForm(ContactFormType::class);
$contactForm->handleRequest($request);
if($contactForm->isSubmitted()){
$nom = htmlspecialchars($contactForm->get('nom')->getData());
$mail = htmlspecialchars($contactForm->get('email')->getData());
$sujet = htmlspecialchars($contactForm->get('sujet')->getData());
$message = htmlspecialchars($contactForm->get('message')->getData());
$secretKey = '6LfPYkosAAAAAJQFLCC-9U5bF6KdFTPrgmbxg5Ux';
$value = $request->get('g-recaptcha-response');
$userIP = $_SERVER['REMOTE_ADDR'];
$url = "https://www.google.com/recaptcha/api/siteverify?secret=$secretKey&response=$value&remoteid=$userIP";
$response = \file_get_contents($url);
$response = json_decode((string)$response);
//dd($response);
if(!$response->success){
$this->addFlash(
'warning',
'Cocher le champs recaptcha svp!');
}else{
$destinataire = 'inscription@cimef-international.org';
$expediteur = $mail;
$reponse = $expediteur;
$suj = $sujet;
$email = (new Email())
->from('CIMEF International <inscription@cimef-international.org>')
->to($destinataire) // destinataire principal
->cc('medias@cimef-international.com') // COPIE
->replyTo($expediteur)
->subject($suj)
->html('<html><body>'.
'<p>Bonjour vous avez un nouveau message de M/Mme <b>'.$nom.' </b><br>'.
''.$message.'<br>'.
'Vous pouvez m\'écrire à l\'adresse suivante <b>'.$mail.'<br>'.
'</p>'.
'</body></html>');
$mailer->send($email);
$this->addFlash(
'success',
'Votre message a été envoyé');
return $this->redirectToRoute('front.contact');
}
}
return $this->render('front/contact.html.twig',[
'contactForm' => $contactForm->createView(),
'mentions' => $mentions
]);
}
}