<?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 Doctrine\ORM\EntityManager;
use App\Form\ProduitFormType;
use App\Form\InscriptionFormType;
use App\Form\NewInscriptionFormType;
use App\Service\GeoIpService;
use App\Entity\Certificats;
use App\Form\CertificatFormType;
use App\Form\EditCertificatFormType;
use App\Repository\CertificatsRepository;
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 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;
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');
$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'
)
->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')
->setMaxResults(3);
$query = $queryBuilder->getQuery()->getResult();
$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' => $query,
'actualite' => $actualite
]);
}
#[Route('/certificats-internationaux', name: 'front.inter.certificat', 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();
$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')
->orderBy('cert.createdat', 'DESC')
->groupBy('cert.theme');
$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('/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('/seminaires-internationaux', name: 'front.seminaire.internationaux', methods:['GET'])]
public function sem_inter(
Request $request,
PaginatorInterface $paginator,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
$annee = date('Y');
// dd($annee);
/*$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'
)
->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');*/
$subQuery = $entityManager->createQueryBuilder()
->select('MAX(f2.id)')
->from(Formations::class, 'f2')
->groupBy('f2.theme');
$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')
->from(Formations::class, 'for')
->innerJoin('for.theme', 'th')
->innerJoin('for.ville', 'vil')
->innerJoin('th.thematique', 'thm')
->where($queryBuilder->expr()->in('for.id', $subQuery->getDQL()))
->orderBy('for.created_at', 'DESC');
$pagination = $paginator->paginate(
$queryBuilder,
$request->query->getInt('page', 1),
12
);
//dd($pagination);
$mentions = $mentionRepository->findAll();
return $this->render('front/seminaire_inter.html.twig',[
'annee' => $annee,
'mentions' => $mentions,
'pagination' => $pagination
]);
}
#[Route('/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;
}
$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'
)
->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,
'pagination' => $pagination
]);
}
// #[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/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
{
//dd($seminaires);
$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()->getResult();
//dd($certificat);
$inscription = new Inscriptions();
$inscriptionForm = $this->createForm(InscriptionFormType::class, $inscription);
$inscriptionForm->handleRequest($request);
if ($inscriptionForm->isSubmitted() && $inscriptionForm->isValid()) {
dd($inscriptionForm);
$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->getTheme();
$nomville = $certificat->getVille();
$session = $formation->getSession();
$prix = $certificat->getPrix();
$devise = $certificat->getDevise();
//$villes = $villeRepository->find($idville);
//$nomtheme = $theme->getNom();
//$nomville = $villes->getNom();
}
if(!$commentaire){
$commentaire = " ";
}else{
$commentaire = $inscriptionForm->get('commentaire')->getData();
}
$destinataire = 'inscription@cimef-international.com';
$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>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>';
$email = (new Email())
->from('CIMEF International <inscription@cimef-international.com>')
->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',[
'query' => $query,
'certificat' => $certificat,
'annee' => $annee,
'type' => $seminaires,
'mentions' => $mentions,
'inscriptionForm' => $inscriptionForm->createView(),
]);
}else{
return $this->render('front/inscriptions/inscription-certificat.html.twig',[
'slug' => $slug,
'query' => $query,
'certificat' => $certificat,
'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.com';
$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.com>')
->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();
$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']),
];
}
}
/*
$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',
],
];*/
return $this->render('front/detail/detail-seminaire-inter.html.twig',[
'locations' => $locations,
'annee' => $annee,
'type' => $type,
'mentions' => $mentions,
'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,
MentionsRepository $mentionRepository,
EntityManagerInterface $entityManager
): Response
{
$type = "Séminaires nationaux";
$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();
$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',[
'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
);
// dd($pagination);
$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.img_gal', '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'])]
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,
$annee,
MentionsRepository $mentionRepository
): Response
{
$annee = date('Y');
$demandeformation = new Demandeformations();
$NewInscriptionFormType = $this->createForm(NewInscriptionFormType::class);
$NewInscriptionFormType->handleRequest($request);
$mentions = $mentionRepository->findAll();
return $this->render('front/inscriptions/inscription-index.html.twig',[
'annee' => $annee,
'mentions' => $mentions,
'demandeformationsForm' => $NewInscriptionFormType->createView(),
]);
}
#[Route('/contact', name: 'front.contact', methods:['GET'])]
public function contact(): Response
{
return $this->render('front/contact.html.twig');
}
}