<?php
namespace App\Controller;
use App\Entity\CategorieElearning;
use App\Entity\Commande;
use App\Entity\Formation;
use App\Entity\Offresinscrit;
use App\Entity\Utilisation;
use App\Form\OffresinscritType;
use App\Repository\CategorieElearningRepository;
use App\Repository\CertifElearningRepository;
use App\Repository\CommandeFormationRepository;
use App\Repository\CommandeRepository;
use App\Repository\ConditionGeneralRepository;
use App\Repository\CouponRepository;
use App\Repository\EmailsadminRepository;
use App\Repository\FormationElearningRepository;
use App\Repository\LotCouponRepository;
use App\Repository\OffresinscritRepository;
use App\Repository\PackRepository;
use App\Repository\SectionElearningRepository;
use App\Repository\SectionRepository;
use App\Repository\TemoignageElearningRepository;
use App\Repository\UtilisationRepository;
use App\Repository\VoucherRepository;
use DateTime;
use Knp\Component\Pager\PaginatorInterface;
use App\Entity\Contact;
use App\Entity\InscritSession;
use App\Entity\Newsletter;
use App\Entity\User;
use App\Form\ContactType;
use App\Form\InscritSessionType;
use App\Form\NewsletterType;
use App\Repository\ActualiteRepository;
use App\Repository\BanniereRepository;
use App\Repository\ContactRepository;
use App\Repository\EvenementRepository;
use App\Repository\FormationRepository;
use App\Repository\GalleryRepository;
use App\Repository\InscritSessionRepository;
use App\Repository\NewsletterRepository;
use App\Repository\OffresRepository;
use App\Repository\PartnersRepository;
use App\Repository\ServiceRepository;
use App\Repository\SettingRepository;
use App\Repository\SponsorsRepository;
use App\Repository\StatistiqueRepository;
use App\Repository\TeamRepository;
use App\Repository\TemoignageRepository;
use App\Repository\UserRepository;
use App\Repository\VideoRepository;
use Doctrine\ORM\EntityManagerInterface;
use PhpOffice\PhpWord\TemplateProcessor;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\File\Exception\FileException;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Address;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use DateTimeZone;
class HomeController extends AbstractController
{
private $fromAddress;
public function __construct(
ParameterBagInterface $parameterBag // Injection du service ParameterBagInterface
) {
$this->fromAddress = $parameterBag->get('mailer_from_address');
}
#[Route('/facture/generer/{id}', name: 'facture_generer')]
public function genererFacture(
Commande $commande,
CommandeFormationRepository $commandeFormationRepository
): Response {
$templatePath = $this->getParameter('kernel.project_dir') . '/public/facture_template.docx';
$templateProcessor = new TemplateProcessor($templatePath);
// Remplacement dynamique simple
$templateProcessor->setValue('client_nom', $commande->getUser()->getNom().' '.$commande->getUser()->getPrenom());
// Récupération des commandes formations associées à cette commande
$commandeFormations = $commandeFormationRepository->findBy(['commande' => $commande]);
// Préparer les données à injecter dans le tableau
$formationsData = [];
foreach ($commandeFormations as $commandeFormation) {
$formationsData[] = [
'quantity' => '01', // ou $commandeFormation->getQuantite() si existant
'description' => $commandeFormation->getFormation()->getTitre(),
'prix_unitaire' => $commandeFormation->getFormation()->getPrix() ,
'total' => $commandeFormation->getFormation()->getPrix() , // ajustez selon quantité si nécessaire
];
}
// Clonage dynamique des lignes du tableau
$templateProcessor->cloneRowAndSetValues('description', $formationsData);
// Calcul du sous-total, TVA et total
$sousTotal = array_sum(array_column($formationsData, 'prix_unitaire'));
$tva = $sousTotal * 0.19;
$total = $sousTotal + $tva;
// Remplacement dynamique des totaux
$templateProcessor->setValue('sous_total', $sousTotal );
$templateProcessor->setValue('tva', $tva );
$templateProcessor->setValue('total_general', $total );
$outputPath = tempnam(sys_get_temp_dir(), 'facture_') . '.docx';
$templateProcessor->saveAs($outputPath);
return new Response(file_get_contents($outputPath), 200, [
'Content-Type' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'Content-Disposition' => 'attachment; filename="facture.docx"',
]);
}
#[Route('/formationElearningDetails/{slug}', name: 'app_formation_detailsfrontElearning', methods: ['GET'])]
public function showformationFrontElearning(CertifElearningRepository $certifElearningRepository,TemoignageElearningRepository $temoignageElearningRepository,SectionElearningRepository $sectionElearningRepository,CategorieElearningRepository $categorieElearningRepository,FormationElearningRepository $formationElearningRepository,EvenementRepository $evenementRepository,ActualiteRepository $actualiteRepository,SectionRepository $sectionRepository,UserRepository $userRepository,$slug,TemoignageRepository $temoignageRepository,VideoRepository $videoRepository,EntityManagerInterface $entityManager,PartnersRepository $partnersRepository,GalleryRepository $galleryRepository,TeamRepository $teamRepository,StatistiqueRepository $statistiqueRepository,FormationRepository $formationRepository,ServiceRepository $serviceRepository,SettingRepository $settingRepository,SponsorsRepository $sponsorsRepository): Response
{
$actualites=$actualiteRepository->last3();
$type="Ordinaire";
$evenements=$evenementRepository->prochainsEvent();
$ancienevents=$evenementRepository->ancienEvent();
$formation=$formationElearningRepository->findOneBy(['slug'=>$slug]);
$reqvid="SELECT * FROM `video` LIMIT 3;";
$resPharma=$entityManager->getConnection()->prepare($reqvid)->execute()->fetchAll();
$sections=$sectionElearningRepository->findBy(['formation'=>$formation]);
$temoignages=$temoignageElearningRepository->findBy(['formation'=>$formation]);
$certifs=$certifElearningRepository->findBy(['formation'=>$formation]);
return $this->render('formation_elearning/detailsFront.html.twig', [
'formation' => $formation,
'video'=>$resPharma,
'temoi'=>$temoignageRepository->findAll(),
'setting'=>$settingRepository->findOneBy(["id"=>1]),
'spon'=>$sponsorsRepository->findAll(),
'service'=>$serviceRepository->findAll(),
'for'=>$formationRepository->findAll(),
'stat'=>$statistiqueRepository->findOneBy(["id"=>1]),
'teams'=>$teamRepository->findAll(),
'gallery'=>$galleryRepository->findOneBy(["id"=>1]),
'par'=>$partnersRepository->findAll(),
'sections'=>$sections,
'actualites'=>$actualites,
'evenements'=>$evenements,
'ancienevents'=>$ancienevents,
'categories'=>$categorieElearningRepository->findAll(),
'temoignages'=>$temoignages,
'certifs'=>$certifs
]);
}
#[Route('/packElearning', name: 'app_pack_elearning_front', methods: ['GET'], defaults: ['slug' => null])]
public function packsElearning(SessionInterface $session,
CategorieElearningRepository $categorieElearningRepository,
SettingRepository $settingRepository,
FormationElearningRepository $formationElearningRepository,
PackRepository $packRepository
): Response {
// Récupérer toutes les catégories pour le menu
// Récupérer toutes les catégories pour le menu
$categories = $categorieElearningRepository->findAll();
// Récupérer les formations en fonction de la catégorie sélectionnée
// 2. Récupérer les infos du panier
$panier = $session->get('panier', []);
// Récupérer uniquement les clés (IDs) en panier
$idsInCart = array_keys($panier);
$packs=$packRepository->findAll();
return $this->render('pack/packFront.html.twig', [
'packs' => $packs,
'setting' => $settingRepository->find(1),
'categories' => $categories,
'idsInCart' => $idsInCart
]);
}
#[Route('/formationElearning/{slug}', name: 'app_formation_elearning_front', methods: ['GET'], defaults: ['slug' => null])]
public function formationElearning(SessionInterface $session,
CategorieElearningRepository $categorieElearningRepository,
SettingRepository $settingRepository,
FormationElearningRepository $formationElearningRepository,
?string $slug
): Response {
// Récupérer toutes les catégories pour le menu
$categories = $categorieElearningRepository->findAll();
// Récupérer les formations en fonction de la catégorie sélectionnée
if ($slug) {
$categorie=$categorieElearningRepository->findOneBy(['slug'=>$slug]);
$formations = $formationElearningRepository->findBy(['categorie' => $categorie]);
} else {
$formations = $formationElearningRepository->findAll();
}
// 2. Récupérer les infos du panier
$panier = $session->get('panier', []);
// Récupérer uniquement les clés (IDs) en panier
$idsInCart = array_keys($panier);
return $this->render('formation_elearning/formationFront.html.twig', [
'formation_elearnings' => $formations,
'setting' => $settingRepository->find(1),
'categories' => $categories,
'slug'=>$slug,
'idsInCart' => $idsInCart
]);
}
#[Route('/sinature', name: 'app_sign', methods: ['GET'])]
public function signature(CategorieElearningRepository $categorieElearningRepository,SettingRepository $settingRepository,ActualiteRepository $actualiteRepository): Response
{
return $this->render('admin/signature.html.twig', [
'actualites' => $actualiteRepository->findAll(),
'setting'=>$settingRepository->find(1),'categories'=>$categorieElearningRepository->findAll(),
]);
}
#[Route('/rechercheFormations', name: 'app_formations_recherche')]
public function rechercheFormations(CategorieElearningRepository $categorieElearningRepository,PaginatorInterface $paginator,OffresRepository $offresRepository,Request $request,FormationRepository $formationRepository,UserRepository $userRepository,ServiceRepository $serviceRepository,EntityManagerInterface $entityManager,VideoRepository $videoRepository,TemoignageRepository $temoignageRepository,GalleryRepository $galleryRepository,PartnersRepository $partnersRepository,SponsorsRepository $sponsorsRepository,SettingRepository $settingRepository,StatistiqueRepository $statistiqueRepository,BanniereRepository $banniereRepository,TeamRepository $teamRepository): Response
{
$titre = $request->request->get('titre');
$cat = $request->request->get('categorie');
$niveau = $request->request->get('niveau');
$formateur = $userRepository->findByRoleCoach();
$reqvid = "SELECT * FROM `video` LIMIT 4;";
$resPharma = $entityManager->getConnection()->prepare($reqvid)->execute()->fetchAll();
$reqfor = "SELECT * FROM `formation` LIMIT 3;";
$resfor = $entityManager->getConnection()->prepare($reqfor)->execute()->fetchAll();
$pagination=$paginator->paginate(
$foramtion = $formationRepository->findBy(['categorie'=>$cat]),
$request->query->get('page',1 ),
6
);
if ($cat == "BootCamp") {
return $this->render('formation/formationsBootcamp.html.twig', [
'controller_name' => 'HomeController',
'service' => $serviceRepository->findAll(),
'video' => $resPharma, 'formateurs' => $formateur,
'ban' => $banniereRepository->findAll(),
'formations' => $formationRepository->findByRecherche($titre, $cat, $niveau),
'teams' => $teamRepository->findAll(),
'temoi' => $temoignageRepository->findAll(),
'gallery' => $galleryRepository->findOneBy(["id" => 1]),
'stat' => $statistiqueRepository->findOneBy(["id" => 1]),
'setting' => $settingRepository->findOneBy(["id" => 1]),
'spon' => $sponsorsRepository->findAll(),
'par' => $partnersRepository->findAll(),
'for'=>$formationRepository->last3(),
'formateur' => $userRepository->findByRoleCoach(),
'off'=>$offresRepository->findAll(),
'formation'=>$pagination,
'paginator' => $pagination,'categories'=>$categorieElearningRepository->findAll(),
]);
}
elseif ($cat == "Certifiante") {
return $this->render('formation/formationsCertif.html.twig', [
'controller_name' => 'HomeController',
'service' => $serviceRepository->findAll(),
'video' => $resPharma, 'formateurs' => $formateur,
'ban' => $banniereRepository->findAll(),
'formations' => $formationRepository->findByRecherche($titre, $cat, $niveau),
'teams' => $teamRepository->findAll(),
'temoi' => $temoignageRepository->findAll(),
'gallery' => $galleryRepository->findOneBy(["id" => 1]),
'stat' => $statistiqueRepository->findOneBy(["id" => 1]),
'setting' => $settingRepository->findOneBy(["id" => 1]),
'spon' => $sponsorsRepository->findAll(),
'par' => $partnersRepository->findAll(),
'for'=>$formationRepository->last3(),
'formateur' => $userRepository->findByRoleCoach(),
'formation'=>$pagination,
'paginator' => $pagination,'categories'=>$categorieElearningRepository->findAll(),
]);
}
elseif ($cat == "Cursus") {
return $this->render('formation/formationsCursus.html.twig', [
'controller_name' => 'HomeController',
'service' => $serviceRepository->findAll(),
'video' => $resPharma, 'formateurs' => $formateur,
'ban' => $banniereRepository->findAll(),
'formations' => $formationRepository->findByRecherche($titre, $cat, $niveau),
'teams' => $teamRepository->findAll(),
'temoi' => $temoignageRepository->findAll(),
'gallery' => $galleryRepository->findOneBy(["id" => 1]),
'stat' => $statistiqueRepository->findOneBy(["id" => 1]),
'setting' => $settingRepository->findOneBy(["id" => 1]),
'spon' => $sponsorsRepository->findAll(),
'par' => $partnersRepository->findAll(),
'for'=>$formationRepository->last3(),
'formateur' => $userRepository->findByRoleCoach(),
'formation'=>$pagination,
'paginator' => $pagination,'categories'=>$categorieElearningRepository->findAll(),
]);
}
elseif ($cat == "Pratique") {
return $this->render('formation/formationsPratique.html.twig', [
'controller_name' => 'HomeController',
'service' => $serviceRepository->findAll(),
'video' => $resPharma, 'formateurs' => $formateur,
'ban' => $banniereRepository->findAll(),
'formations' => $formationRepository->findByRecherche($titre, $cat, $niveau),
'teams' => $teamRepository->findAll(),
'temoi' => $temoignageRepository->findAll(),
'gallery' => $galleryRepository->findOneBy(["id" => 1]),
'stat' => $statistiqueRepository->findOneBy(["id" => 1]),
'setting' => $settingRepository->findOneBy(["id" => 1]),
'spon' => $sponsorsRepository->findAll(),
'par' => $partnersRepository->findAll(),
'for'=>$formationRepository->last3(),
'formateur' => $userRepository->findByRoleCoach(),
'formation'=>$pagination,
'paginator' => $pagination,'categories'=>$categorieElearningRepository->findAll(),
]);
}
else {
$pagination=$paginator->paginate(
$foramtion =$formationRepository->findByRecherche($titre, $cat, $niveau),
$request->query->get('page',1 ),
6
);
return $this->render('formation/formations.html.twig', [
'controller_name' => 'HomeController',
'service' => $serviceRepository->findAll(),
'video' => $resPharma, 'formateurs' => $formateur,
'ban' => $banniereRepository->findAll(),
'formations' => $formationRepository->findByRecherche($titre, $cat, $niveau),
'teams' => $teamRepository->findAll(),
'temoi' => $temoignageRepository->findAll(),
'gallery' => $galleryRepository->findOneBy(["id" => 1]),
'stat' => $statistiqueRepository->findOneBy(["id" => 1]),
'setting' => $settingRepository->findOneBy(["id" => 1]),
'spon' => $sponsorsRepository->findAll(),
'par' => $partnersRepository->findAll(),
'for'=>$formationRepository->last3(),
'formateur' => $userRepository->findByRoleCoach(),
'formation'=>$pagination,
'paginator' => $pagination,'categories'=>$categorieElearningRepository->findAll(),
]);
}
}
#[Route('/formationsCursus', name: 'app_formations_cursus')]
public function indexFormationsCursus(CategorieElearningRepository $categorieElearningRepository,Request $request,PaginatorInterface $paginator,OffresRepository $offresRepository,FormationRepository $formationRepository,UserRepository $userRepository,ServiceRepository $serviceRepository,EntityManagerInterface $entityManager,VideoRepository $videoRepository,TemoignageRepository $temoignageRepository,GalleryRepository $galleryRepository,PartnersRepository $partnersRepository,SponsorsRepository $sponsorsRepository,SettingRepository $settingRepository,StatistiqueRepository $statistiqueRepository,BanniereRepository $banniereRepository,TeamRepository $teamRepository): Response
{
$formateur=$userRepository->findByRoleCoach();
$reqvid="SELECT * FROM `video` LIMIT 4;";
$resPharma=$entityManager->getConnection()->prepare($reqvid)->execute()->fetchAll();
$reqfor="SELECT * FROM `formation` LIMIT 3;";
$resfor=$entityManager->getConnection()->prepare($reqfor)->execute()->fetchAll();
$categorie="Cursus";
$pagination=$paginator->paginate(
$foramtion = $formationRepository->findBy(['categorie'=>$categorie]),
$request->query->get('page',1 ),
6
);
return $this->render('formation/formationsCursus.html.twig', [
'controller_name' => 'HomeController',
'service'=>$serviceRepository->findAll(),
'video'=>$resPharma,'formateurs'=>$formateur,
'ban'=>$banniereRepository->findAll(),
'formations'=>$formationRepository->findBy(['categorie'=>$categorie]),
'teams'=>$teamRepository->findAll(),
'temoi'=>$temoignageRepository->findAll(),
'gallery'=>$galleryRepository->findOneBy(["id"=>1]),
'stat'=>$statistiqueRepository->findOneBy(["id"=>1]),
'setting'=>$settingRepository->findOneBy(["id"=>1]),
'spon'=>$sponsorsRepository->findAll(),
'par'=>$partnersRepository->findAll(),
'for'=>$formationRepository->last3(),
'formateur'=>$userRepository->findByRoleCoach(),
'off'=>$offresRepository->findAll(),
'formation'=>$pagination,
'paginator' => $pagination,'categories'=>$categorieElearningRepository->findAll(),
]);
}
#[Route('/formationsBootcamp', name: 'app_formations_bootcamp')]
public function indexFormationsBootcamp(CategorieElearningRepository $categorieElearningRepository,Request $request,PaginatorInterface $paginator,OffresRepository $offresRepository,FormationRepository $formationRepository,UserRepository $userRepository,ServiceRepository $serviceRepository,EntityManagerInterface $entityManager,VideoRepository $videoRepository,TemoignageRepository $temoignageRepository,GalleryRepository $galleryRepository,PartnersRepository $partnersRepository,SponsorsRepository $sponsorsRepository,SettingRepository $settingRepository,StatistiqueRepository $statistiqueRepository,BanniereRepository $banniereRepository,TeamRepository $teamRepository): Response
{
$formateur=$userRepository->findByRoleCoach();
$reqvid="SELECT * FROM `video` LIMIT 4;";
$resPharma=$entityManager->getConnection()->prepare($reqvid)->execute()->fetchAll();
$reqfor="SELECT * FROM `formation` LIMIT 3;";
$resfor=$entityManager->getConnection()->prepare($reqfor)->execute()->fetchAll();
$categorie="BootCamp";
$pagination=$paginator->paginate(
$foramtion = $formationRepository->findBy(['categorie'=>$categorie]),
$request->query->get('page',1 ),
6
);
return $this->render('formation/formationsBootcamp.html.twig', [
'controller_name' => 'HomeController',
'service'=>$serviceRepository->findAll(),
'video'=>$resPharma,'formateurs'=>$formateur,
'ban'=>$banniereRepository->findAll(),
'formations'=>$formationRepository->findBy(['categorie'=>$categorie]),
'teams'=>$teamRepository->findAll(),
'temoi'=>$temoignageRepository->findAll(),
'gallery'=>$galleryRepository->findOneBy(["id"=>1]),
'stat'=>$statistiqueRepository->findOneBy(["id"=>1]),
'setting'=>$settingRepository->findOneBy(["id"=>1]),
'spon'=>$sponsorsRepository->findAll(),
'par'=>$partnersRepository->findAll(),
'for'=>$formationRepository->last3(),
'formateur'=>$userRepository->findByRoleCoach(),
'off'=>$offresRepository->findAll(),
'formation'=>$pagination,
'paginator' => $pagination,'categories'=>$categorieElearningRepository->findAll(),
]);
}
#[Route('/formationsPratiques', name: 'app_formations_pratique')]
public function indexFormationsPratique(CategorieElearningRepository $categorieElearningRepository,Request $request,PaginatorInterface $paginator,OffresRepository $offresRepository,FormationRepository $formationRepository,UserRepository $userRepository,ServiceRepository $serviceRepository,EntityManagerInterface $entityManager,VideoRepository $videoRepository,TemoignageRepository $temoignageRepository,GalleryRepository $galleryRepository,PartnersRepository $partnersRepository,SponsorsRepository $sponsorsRepository,SettingRepository $settingRepository,StatistiqueRepository $statistiqueRepository,BanniereRepository $banniereRepository,TeamRepository $teamRepository): Response
{
$formateur=$userRepository->findByRoleCoach();
$reqvid="SELECT * FROM `video` LIMIT 4;";
$resPharma=$entityManager->getConnection()->prepare($reqvid)->execute()->fetchAll();
$reqfor="SELECT * FROM `formation` LIMIT 3;";
$resfor=$entityManager->getConnection()->prepare($reqfor)->execute()->fetchAll();
$categorie="Pratique";
$pagination=$paginator->paginate(
$foramtion = $formationRepository->findBy(['categorie'=>$categorie]),
$request->query->get('page',1 ),
6
);
return $this->render('formation/formationsPratique.html.twig', [
'controller_name' => 'HomeController',
'service'=>$serviceRepository->findAll(),
'video'=>$resPharma,'formateurs'=>$formateur,
'ban'=>$banniereRepository->findAll(),
'formations'=>$formationRepository->findBy(['categorie'=>$categorie]),
'teams'=>$teamRepository->findAll(),
'temoi'=>$temoignageRepository->findAll(),
'gallery'=>$galleryRepository->findOneBy(["id"=>1]),
'stat'=>$statistiqueRepository->findOneBy(["id"=>1]),
'setting'=>$settingRepository->findOneBy(["id"=>1]),
'spon'=>$sponsorsRepository->findAll(),
'par'=>$partnersRepository->findAll(),
'for'=>$formationRepository->last3(),
'formateur'=>$userRepository->findByRoleCoach(),
'off'=>$offresRepository->findAll(),
'formation'=>$pagination,
'paginator' => $pagination,'categories'=>$categorieElearningRepository->findAll(),
]);
}
#[Route('/formationsCertifiantes', name: 'app_formations_certifiantes')]
public function indexFormationsCertifiantes(CategorieElearningRepository $categorieElearningRepository,Request $request,PaginatorInterface $paginator,OffresRepository $offresRepository,FormationRepository $formationRepository,UserRepository $userRepository,ServiceRepository $serviceRepository,EntityManagerInterface $entityManager,VideoRepository $videoRepository,TemoignageRepository $temoignageRepository,GalleryRepository $galleryRepository,PartnersRepository $partnersRepository,SponsorsRepository $sponsorsRepository,SettingRepository $settingRepository,StatistiqueRepository $statistiqueRepository,BanniereRepository $banniereRepository,TeamRepository $teamRepository): Response
{
$formateur=$userRepository->findByRoleCoach();
$reqvid="SELECT * FROM `video` LIMIT 4;";
$resPharma=$entityManager->getConnection()->prepare($reqvid)->execute()->fetchAll();
$reqfor="SELECT * FROM `formation` LIMIT 3;";
$resfor=$entityManager->getConnection()->prepare($reqfor)->execute()->fetchAll();
$categorie="Certifiante";
$pagination=$paginator->paginate(
$foramtion = $formationRepository->findBy(['categorie'=>$categorie]),
$request->query->get('page',1 ),
6
);
return $this->render('formation/formationsCertif.html.twig', [
'controller_name' => 'HomeController',
'service'=>$serviceRepository->findAll(),
'video'=>$resPharma,'formateurs'=>$formateur,
'ban'=>$banniereRepository->findAll(),
'formations'=>$formationRepository->findBy(['categorie'=>$categorie]),
'teams'=>$teamRepository->findAll(),
'temoi'=>$temoignageRepository->findAll(),
'gallery'=>$galleryRepository->findOneBy(["id"=>1]),
'stat'=>$statistiqueRepository->findOneBy(["id"=>1]),
'setting'=>$settingRepository->findOneBy(["id"=>1]),
'spon'=>$sponsorsRepository->findAll(),
'par'=>$partnersRepository->findAll(),
'for'=>$resfor,
'formateur'=>$userRepository->findByRoleCoach(),
'off'=>$offresRepository->findAll(),
'formation'=>$pagination,
'paginator' => $pagination,'categories'=>$categorieElearningRepository->findAll(),
]);
}
#[Route('/showformationFront/{slug}', name: 'app_formation_detailsfront', methods: ['GET'])]
public function showformationFront(CategorieElearningRepository $categorieElearningRepository,EvenementRepository $evenementRepository,ActualiteRepository $actualiteRepository,SectionRepository $sectionRepository,Formation $formation,UserRepository $userRepository,$slug,TemoignageRepository $temoignageRepository,VideoRepository $videoRepository,EntityManagerInterface $entityManager,PartnersRepository $partnersRepository,GalleryRepository $galleryRepository,TeamRepository $teamRepository,StatistiqueRepository $statistiqueRepository,FormationRepository $formationRepository,ServiceRepository $serviceRepository,SettingRepository $settingRepository,SponsorsRepository $sponsorsRepository): Response
{
$actualites=$actualiteRepository->last3();
$type="Ordinaire";
$evenements=$evenementRepository->prochainsEvent();
$ancienevents=$evenementRepository->ancienEvent();
$formation=$formationRepository->findOneBy(['slug'=>$slug]);
$reqvid="SELECT * FROM `video` LIMIT 3;";
$resPharma=$entityManager->getConnection()->prepare($reqvid)->execute()->fetchAll();
$sections=$sectionRepository->findBy(['formation'=>$formation]);
return $this->render('formation/detailsFront.html.twig', [
'formation' => $formation,
'video'=>$resPharma,
'temoi'=>$temoignageRepository->findAll(),
'setting'=>$settingRepository->findOneBy(["id"=>1]),
'spon'=>$sponsorsRepository->findAll(),
'service'=>$serviceRepository->findAll(),
'for'=>$formationRepository->findAll(),
'stat'=>$statistiqueRepository->findOneBy(["id"=>1]),
'teams'=>$teamRepository->findAll(),
'gallery'=>$galleryRepository->findOneBy(["id"=>1]),
'par'=>$partnersRepository->findAll(),
'sections'=>$sections,
'actualites'=>$actualites,
'evenements'=>$evenements,
'ancienevents'=>$ancienevents,'categories'=>$categorieElearningRepository->findAll(),
]);
}
#[Route('/allSessions', name: 'app_home_session')]
public function indexAllSessions(
CategorieElearningRepository $categorieElearningRepository,
EvenementRepository $evenementRepository,
Request $request,
PaginatorInterface $paginator,
FormationRepository $formationRepository,
OffresRepository $offresRepository,
UserRepository $userRepository,
ServiceRepository $serviceRepository,
EntityManagerInterface $entityManager,
VideoRepository $videoRepository,
TemoignageRepository $temoignageRepository,
GalleryRepository $galleryRepository,
PartnersRepository $partnersRepository,
SponsorsRepository $sponsorsRepository,
SettingRepository $settingRepository,
StatistiqueRepository $statistiqueRepository,
BanniereRepository $banniereRepository,
TeamRepository $teamRepository
): Response
{
$formateur = $userRepository->findByRoleCoach();
$type = "Ordinaire";
// Récupérer toutes les sessions pour l'affichage (sans pagination)
$evenements = $evenementRepository->prochainsEvent();
// PAGINATION POUR LES SESSIONS PASSÉES
$allAnciennevents = $evenementRepository->ancienEvent(); // Récupère toutes les sessions passées
$ancieneventsPaginated = $paginator->paginate(
$allAnciennevents, // Toutes les sessions passées
$request->query->getInt('page', 1), // Page courante
6 // 6 éléments par page
);
$sessions = $evenementRepository->findBy(['type' => $type, 'isArchive' => false]);
// Requête vidéo
$reqvid = "SELECT * FROM `video` LIMIT 4";
$resPharma = $entityManager->getConnection()->prepare($reqvid)->executeQuery()->fetchAllAssociative();
// Requête formation
$reqfor = "SELECT * FROM `formation` LIMIT 3";
$resfor = $entityManager->getConnection()->prepare($reqfor)->executeQuery()->fetchAllAssociative();
return $this->render('evenement/sessionsFront.html.twig', [
'controller_name' => 'HomeController',
'service' => $serviceRepository->findAll(),
'video' => $resPharma,
'formateurs' => $formateur,
'ban' => $banniereRepository->findAll(),
'formations' => $formationRepository->findAll(),
'formation' => $formationRepository->findAll(),
'teams' => $teamRepository->findAll(),
'temoi' => $temoignageRepository->findAll(),
'gallery' => $galleryRepository->findOneBy(["id" => 1]),
'stat' => $statistiqueRepository->findOneBy(["id" => 1]),
'setting' => $settingRepository->findOneBy(["id" => 1]),
'spon' => $sponsorsRepository->findAll(),
'par' => $partnersRepository->findAll(),
'for' => $resfor,
'off' => $offresRepository->findAll(),
'formateur' => $userRepository->findByRoleCoach(),
'sessions' => $sessions,
'evenements' => $evenements,
'ancienevents' => $ancieneventsPaginated, // Version paginée des sessions passées
'ancienevents_all' => $allAnciennevents, // Version complète (si besoin)
'categories' => $categorieElearningRepository->findAll(),
]);
}
#[Route('/ConditionsGénérales', name: 'app_home_conditiongeneral')]
public function conditionGeneral(CategorieElearningRepository $categorieElearningRepository,ConditionGeneralRepository $conditionGeneralRepository,GalleryRepository $galleryRepository, OffresRepository $offresRepository, FormationRepository $formationRepository, UserRepository $userRepository, ServiceRepository $serviceRepository, EntityManagerInterface $entityManager, VideoRepository $videoRepository, TemoignageRepository $temoignageRepository, PartnersRepository $partnersRepository, SponsorsRepository $sponsorsRepository, SettingRepository $settingRepository, StatistiqueRepository $statistiqueRepository, BanniereRepository $banniereRepository, TeamRepository $teamRepository): Response
{
$galleries = $galleryRepository->findAll();
$formateur = $userRepository->findByRoleCoach();
$reqvid = "SELECT * FROM `video` LIMIT 4;";
$resPharma = $entityManager->getConnection()->prepare($reqvid)->execute()->fetchAll();
$reqfor = "SELECT * FROM `formation` LIMIT 3;";
$resfor = $entityManager->getConnection()->prepare($reqfor)->execute()->fetchAll();
return $this->render('condition_general/conditionFront.html.twig', [
'controller_name' => 'HomeController',
'condition'=>$conditionGeneralRepository->find(1),
'service' => $serviceRepository->findAll(),
'video' => $resPharma, 'formateurs' => $formateur,
'ban' => $banniereRepository->findAll(),
'formations' => $formationRepository->findAll(),
'teams' => $teamRepository->findAll(),
'temoi' => $temoignageRepository->findAll(),
'gallery' => $galleryRepository->findOneBy(["id" => 1]),
'off' => $offresRepository->findAll(),
'stat' => $statistiqueRepository->findOneBy(["id" => 1]),
'setting' => $settingRepository->findOneBy(["id" => 1]),
'spon' => $sponsorsRepository->findAll(),
'par' => $partnersRepository->findAll(),
'for' => $resfor,
'formateur' => $userRepository->findByRoleCoach(),
'partenaires' => $userRepository->findByRolePartenaire(),
'galleries' => $galleries,'categories'=>$categorieElearningRepository->findAll(),
]);
}
#[Route('/galleries', name: 'app_galleries_front')]
public function indexGalleries(CategorieElearningRepository $categorieElearningRepository,GalleryRepository $galleryRepository, OffresRepository $offresRepository, FormationRepository $formationRepository, UserRepository $userRepository, ServiceRepository $serviceRepository, EntityManagerInterface $entityManager, VideoRepository $videoRepository, TemoignageRepository $temoignageRepository, PartnersRepository $partnersRepository, SponsorsRepository $sponsorsRepository, SettingRepository $settingRepository, StatistiqueRepository $statistiqueRepository, BanniereRepository $banniereRepository, TeamRepository $teamRepository): Response
{
$galleries = $galleryRepository->findAll();
$formateur = $userRepository->findByRoleCoach();
$reqvid = "SELECT * FROM `video` LIMIT 4;";
$resPharma = $entityManager->getConnection()->prepare($reqvid)->execute()->fetchAll();
$reqfor = "SELECT * FROM `formation` LIMIT 3;";
$resfor = $entityManager->getConnection()->prepare($reqfor)->execute()->fetchAll();
return $this->render('gallery/gallerieFront.html.twig', [
'controller_name' => 'HomeController',
'service' => $serviceRepository->findAll(),
'video' => $resPharma, 'formateurs' => $formateur,
'ban' => $banniereRepository->findAll(),
'formations' => $formationRepository->findAll(),
'teams' => $teamRepository->findAll(),
'temoi' => $temoignageRepository->findAll(),
'gallery' => $galleryRepository->findOneBy(["id" => 1]),
'off' => $offresRepository->findAll(),
'stat' => $statistiqueRepository->findOneBy(["id" => 1]),
'setting' => $settingRepository->findOneBy(["id" => 1]),
'spon' => $sponsorsRepository->findAll(),
'par' => $partnersRepository->findAll(),
'for' => $resfor,
'formateur' => $userRepository->findByRoleCoach(),
'partenaires' => $userRepository->findByRolePartenaire(),
'galleries' => $galleries,'categories'=>$categorieElearningRepository->findAll(),
]);
}
#[Route('/detailsActualite/{slug}', name: 'app_details_actualite', methods: ['GET', 'POST'])]
public function detailsActualite(CategorieElearningRepository $categorieElearningRepository,ActualiteRepository $actualiteRepository, OffresRepository $offresRepository, SessionInterface $session, Request $request, InscritSessionRepository $inscritSessionRepository, $slug, EvenementRepository $evenementRepository, FormationRepository $formationRepository, UserRepository $userRepository, ServiceRepository $serviceRepository, EntityManagerInterface $entityManager, VideoRepository $videoRepository, TemoignageRepository $temoignageRepository, GalleryRepository $galleryRepository, PartnersRepository $partnersRepository, SponsorsRepository $sponsorsRepository, SettingRepository $settingRepository, StatistiqueRepository $statistiqueRepository, BanniereRepository $banniereRepository, TeamRepository $teamRepository): Response
{
$actualites = $actualiteRepository->last3();
$type = "Ordinaire";
$evenements = $evenementRepository->prochainsEvent();
$ancienEvent = $evenementRepository->ancienEvent();
$actualite = $actualiteRepository->findOneBy(['slug' => $slug]);
$formateur = $userRepository->findByRoleCoach();
$reqvid = "SELECT * FROM `video` LIMIT 4;";
$resPharma = $entityManager->getConnection()->prepare($reqvid)->execute()->fetchAll();
$reqfor = "SELECT * FROM `formation` LIMIT 3;";
$resfor = $entityManager->getConnection()->prepare($reqfor)->execute()->fetchAll();
return $this->renderForm('actualite/detailsFront.html.twig', [
'controller_name' => 'HomeController',
'service' => $serviceRepository->findAll(),
'video' => $resPharma, 'formateurs' => $formateur,
'ban' => $banniereRepository->findAll(),
'formations' => $formationRepository->findAll(),
'teams' => $teamRepository->findAll(),
'temoi' => $temoignageRepository->findAll(),
'gallery' => $galleryRepository->findOneBy(["id" => 1]),
'stat' => $statistiqueRepository->findOneBy(["id" => 1]),
'off' => $offresRepository->findAll(),
'setting' => $settingRepository->findOneBy(["id" => 1]),
'spon' => $sponsorsRepository->findAll(),
'par' => $partnersRepository->findAll(),
'for' => $resfor,
'formateur' => $userRepository->findByRoleCoach(),
'actualite' => $actualite, 'actualites' => $actualites,
'evenements' => $evenements,
'ancienEvent'=>$ancienEvent,'categories'=>$categorieElearningRepository->findAll(),
]);
}
#[Route('/detailsSession/{slug}', name: 'app_details_session', methods: ['GET', 'POST'])]
public function detailsEvenement(
CategorieElearningRepository $categorieElearningRepository,
EmailsadminRepository $emailsadminRepository,
SectionRepository $sectionRepository,
ActualiteRepository $actualiteRepository,
UtilisationRepository $utilisationRepository,
VoucherRepository $voucherRepository,
OffresRepository $offresRepository,
MailerInterface $mailer,
SessionInterface $session,
Request $request,
InscritSessionRepository $inscritSessionRepository,
$slug,
EvenementRepository $evenementRepository,
FormationRepository $formationRepository,
UserRepository $userRepository,
ServiceRepository $serviceRepository,
EntityManagerInterface $entityManager,
TemoignageRepository $temoignageRepository,
GalleryRepository $galleryRepository,
PartnersRepository $partnersRepository,
SponsorsRepository $sponsorsRepository,
SettingRepository $settingRepository,
StatistiqueRepository $statistiqueRepository,
BanniereRepository $banniereRepository,
TeamRepository $teamRepository,
LotCouponRepository $lotCouponRepository,
CouponRepository $couponRepository
): Response {
$actualites = $actualiteRepository->last3();
$type = "Ordinaire";
$evenements = $evenementRepository->prochainsEvent();
$ancienevents = $evenementRepository->ancienEvent();
$date = new \DateTime('now', new DateTimeZone('Africa/Tunis'));
$evenement = $evenementRepository->findOneBy(['slug' => $slug]);
$formateur = $userRepository->findByRoleCoach();
$reqvid = "SELECT * FROM `video` LIMIT 4;";
$resPharma = $entityManager->getConnection()->prepare($reqvid)->execute()->fetchAll();
$reqfor = "SELECT * FROM `formation` LIMIT 3;";
$resfor = $entityManager->getConnection()->prepare($reqfor)->execute()->fetchAll();
$inscritSession = new InscritSession();
$form = $this->createForm(InscritSessionType::class, $inscritSession);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$ustest = $inscritSessionRepository->findOneBy(["email" => $inscritSession->getEmail(), "session" => $evenement]);
if (!$ustest) {
$inscritSession->setIsActive(true);
$inscritSession->setSession($evenement);
$inscritSession->setDate($date);
$inscritSession->setTotalmontant(0);
$user = $userRepository->findOneBy(['email' => $inscritSession->getEmail()]);
if ($user) {
$inscritSession->setStagiaire($user);
}
$inscritSession->setIsValid(false);
$inscritSession->setVue(false);
$inscritSession->setIsActive(true);
$inscritSessionRepository->save($inscritSession, true);
// ========== NOUVEAU CODE POUR LES COUPONS SIPACADEMY ==========
$voucher = $request->get('idvoucher');
// Vérifier si c'est un coupon SIPACADEMY
if ($voucher && strpos($voucher, 'SIPACADEMY-') === 0) {
$coupon = $couponRepository->findOneBy(['code' => $voucher]);
if ($coupon && $coupon->isIsActif()) {
// Vérifier si le coupon est expiré
$lot = $coupon->getLotCoupon();
$isExpired = $lot && $lot->getDateExpiration() && $lot->getDateExpiration() < $date;
if (!$isExpired) {
// Marquer le coupon comme utilisé
$coupon->setStatut('utilise');
$coupon->setIsActif(false);
if ($user) {
$coupon->setUser($user);
}
$coupon->setInscrit($inscritSession);
// Mettre à jour le stock du lot
if ($lot) {
$oldStock = $lot->getStock();
$newStock = $oldStock - 1;
$lot->setStock($newStock);
$entityManager->persist($lot);
$seuilAlerte = $lot->getSeuilAlerte();
if ($seuilAlerte && $newStock <= $seuilAlerte) {
// Envoyer un email aux admins
$this->sendStockAlertEmail(
$lot,
$oldStock,
$newStock,
$seuilAlerte,
$userRepository,
$emailsadminRepository,
$settingRepository,
$mailer
);
}
}
$entityManager->persist($coupon);
$entityManager->flush();
$session->getFlashBag()->add('success', '🎫 Coupon SIPACADEMY appliqué avec succès ! Réduction de ' . ($lot ? $lot->getPourcentage() : '') . '%');
} else {
$session->getFlashBag()->add('error', '❌ Ce coupon est expiré.');
}
} else {
$session->getFlashBag()->add('error', '❌ Coupon invalide ou déjà utilisé.');
}
}
// ========== FIN NOUVEAU CODE ==========
// Code existant pour les anciens vouchers
$vouch = $voucherRepository->findOneBy(['code' => $voucher]);
$currentDate = $date->format('Y-m-d');
$utli = count($utilisationRepository->findBy(['voucher' => $vouch]));
if ($utli == 4) {
$vouch->setEtat(1);
$voucherRepository->save($vouch, true);
}
if ($vouch && $vouch->getDate()->modify('+1 year')->format('Y-m-d') < $currentDate) {
$vouch->setEtat(2);
$voucherRepository->save($vouch, true);
}
if ($vouch && $vouch->getEtat() == 0 && $vouch->getUserinscrit()->getRelationus() == $user && $vouch->getDate()->modify('+1 year')->format('Y-m-d') >= $currentDate) {
$nbr = 0;
foreach ($vouch->getOffres()->getFormation() as $a) {
if ($a->getId() == $evenement->getFormation()->getId()) {
$nbr = $nbr + 1;
break;
}
}
if ($nbr == 1) {
$utilisation = new Utilisation();
$utilisation->setDate($date);
$utilisation->setUtilisationsession($evenement);
$utilisation->setSessioninscrit($inscritSession);
$utilisation->setVoucher($vouch);
$utilisationRepository->save($utilisation, true);
}
$session->getFlashBag()->add('success', 'Inscription avec succès! avec voucher');
} else {
$session->getFlashBag()->add('success', 'Inscription avec succès!');
}
// Envoi des emails...
$tabadmin = array();
$admins = $userRepository->findByRoleAdmin();
foreach ($admins as $a) {
array_push($tabadmin, $a->getEmail());
$emailsadmin = $emailsadminRepository->findBy(['user' => $a]);
foreach ($emailsadmin as $item) {
if ($item->getEmail()) {
array_push($tabadmin, $item->getEmail());
}
}
}
$setting = $settingRepository->findOneBy(["id" => 1]);
$emailInscrit = $inscritSession->getEmail();
$userInscrit = $userRepository->findOneBy(['email' => $emailInscrit]);
if ($userInscrit != null) {
$inscritSession->setStagiaire($userInscrit);
}
$inscritSession->setIsActive(true);
$inscritSessionRepository->save($inscritSession, true);
try {
$email = (new TemplatedEmail())
->from(new Address($this->fromAddress, 'Sip Academy'))
->to(...$tabadmin)
->subject('Nouvelle Inscription ' . $evenement->getTitre())
->htmlTemplate('evenement/mailInscit.html.twig')
->context([
'inscrit' => $inscritSession,
'setting' => $setting,
'session' => $evenement
]);
if ($evenement->getImgprog()) {
$attachmentPath = $this->getParameter('evenement_directory') . '/' . $evenement->getImgprog();
$email->attachFromPath($attachmentPath);
}
$mailer->send($email);
} catch (\Exception $e) {
return $this->redirectToRoute('app_details_session', ['slug' => $evenement->getSlug()], Response::HTTP_SEE_OTHER);
}
try {
$emailpre = (new TemplatedEmail())
->from(new Address($this->fromAddress, 'Sip Academy'))
->to($inscritSession->getEmail())
->subject("Inscription à la formation " . $evenement->getTitre())
->htmlTemplate('inscrit_session/mailPreInscrit.html.twig')
->context([
'inscrit' => $inscritSession,
'setting' => $setting,
'session' => $evenement,
'coupon' => $coupon ?? null
]);
if ($evenement->getImgprog()) {
$attachmentPath = $this->getParameter('evenement_directory') . '/' . $evenement->getImgprog();
$emailpre->attachFromPath($attachmentPath);
}
$mailer->send($emailpre);
} catch (\Exception $e) {
return $this->redirectToRoute('app_details_session', ['slug' => $evenement->getSlug()], Response::HTTP_SEE_OTHER);
}
return $this->redirectToRoute('app_details_session', ['slug' => $evenement->getSlug()], Response::HTTP_SEE_OTHER);
} else {
$session->getFlashBag()->add('success', 'Vous êtes déjà inscrit à cette session');
return $this->redirectToRoute('app_details_session', ['slug' => $evenement->getSlug()], Response::HTTP_SEE_OTHER);
}
}
// Récupérer les lots de coupons actifs pour cet événement
$activeLotCoupons = $lotCouponRepository->createQueryBuilder('l')
->leftJoin('l.coupons', 'c')
->where('l.evenement = :evenement')
->andWhere('l.isActif = true')
->andWhere('l.dateExpiration >= :today OR l.dateExpiration IS NULL')
->andWhere('c.statut = :statut OR c.statut IS NULL')
->setParameter('evenement', $evenement)
->setParameter('today', new \DateTime())
->setParameter('statut', 'valide')
->groupBy('l.id')
->having('COUNT(c.id) > 0')
->getQuery()
->getResult();
$sections = $sectionRepository->findBy(['formation' => $evenement->getFormation()]);
return $this->renderForm('evenement/detailsFront.html.twig', [
'controller_name' => 'HomeController',
'service' => $serviceRepository->findAll(),
'sections' => $sections,
'video' => $resPharma,
'formateurs' => $formateur,
'ban' => $banniereRepository->findAll(),
'formations' => $formationRepository->findAll(),
'teams' => $teamRepository->findAll(),
'temoi' => $temoignageRepository->findAll(),
'gallery' => $galleryRepository->findOneBy(["id" => 1]),
'stat' => $statistiqueRepository->findOneBy(["id" => 1]),
'off' => $offresRepository->findAll(),
'setting' => $settingRepository->findOneBy(["id" => 1]),
'spon' => $sponsorsRepository->findAll(),
'par' => $partnersRepository->findAll(),
'for' => $resfor,
'formateur' => $userRepository->findByRoleCoach(),
'evenement' => $evenement,
'inscrit_session' => $inscritSession,
'form' => $form,
'actualites' => $actualites,
'evenements' => $evenements,
'ancienevents' => $ancienevents,
'categories' => $categorieElearningRepository->findAll(),
'activeLotCoupons' => $activeLotCoupons, // Passer les coupons actifs au template
]);
}
/**
* Envoyer un email d'alerte de stock bas aux admins
*/
private function sendStockAlertEmail(
$lot,
int $oldStock,
int $newStock,
int $seuilAlerte,
UserRepository $userRepository,
EmailsadminRepository $emailsadminRepository,
SettingRepository $settingRepository,
MailerInterface $mailer
): void {
// Récupérer tous les admins
$admins = $userRepository->findByRoleAdmin();
$destinataires = [];
foreach ($admins as $admin) {
$destinataires[] = $admin->getEmail();
$emailsadmin = $emailsadminRepository->findBy(['user' => $admin]);
foreach ($emailsadmin as $item) {
if ($item->getEmail()) {
$destinataires[] = $item->getEmail();
}
}
}
if (empty($destinataires)) {
return;
}
$setting = $settingRepository->findOneBy(["id" => 1]);
$evenement = $lot->getEvenement();
try {
$email = (new TemplatedEmail())
->from(new Address($this->fromAddress, 'Sip Academy'))
->to(...array_unique($destinataires))
->subject('⚠️ ALERTE STOCK BAS - ' . $lot->getLibelle() .' - '.$lot->getEvenement()->getTitre())
->htmlTemplate('lot_coupon/stock_alert.html.twig')
->context([
'lot' => $lot,
'oldStock' => $oldStock,
'newStock' => $newStock,
'seuilAlerte' => $seuilAlerte,
'evenement' => $evenement,
'setting' => $setting,
'date' => new \DateTime()
]);
$mailer->send($email);
} catch (\Exception $e) {
// Log l'erreur sans bloquer le processus
error_log('Erreur lors de l\'envoi de l\'email d\'alerte stock: ' . $e->getMessage());
}
}
function generePassword($size)
{
// Initialisation des caractères utilisables
$characters = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z");
$password = '';
for ($i = 0; $i < $size; $i++) {
$password .= ($i % 2) ? strtoupper($characters[array_rand($characters)]) : $characters[array_rand($characters)];
}
return $password;
}
#[Route('/details-offres/{slug}', name: 'app_details_offres', methods: ['GET', 'POST'])]
public function detailsoffres(CategorieElearningRepository $categorieElearningRepository,EmailsadminRepository $emailsadminRepository,ActualiteRepository $actualiteRepository, UserPasswordHasherInterface $userPasswordHasher, $slug, OffresinscritRepository $offresinscritRepository, OffresRepository $offresRepository, MailerInterface $mailer, SessionInterface $session, Request $request, EvenementRepository $evenementRepository, FormationRepository $formationRepository, UserRepository $userRepository, ServiceRepository $serviceRepository, EntityManagerInterface $entityManager, VideoRepository $videoRepository, TemoignageRepository $temoignageRepository, GalleryRepository $galleryRepository, PartnersRepository $partnersRepository, SponsorsRepository $sponsorsRepository, SettingRepository $settingRepository, StatistiqueRepository $statistiqueRepository, BanniereRepository $banniereRepository, TeamRepository $teamRepository): Response
{
$user = $this->getUser();
// dd($user);
$actualites = $actualiteRepository->last3();
$type = "Ordinaire";
$evenements = $evenementRepository->prochainsEvent();
$ancienEvents = $evenementRepository->ancienEvent();
$date = new \DateTime('now', new DateTimeZone('Africa/Tunis'));
$evenement = $evenementRepository->findOneBy(['slug' => $slug]);
$offres = $offresRepository->findOneBy(['slug' => $slug]);
$formateur = $userRepository->findByRoleCoach();
$reqvid = "SELECT * FROM `video` LIMIT 4;";
$resPharma = $entityManager->getConnection()->prepare($reqvid)->execute()->fetchAll();
$reqfor = "SELECT * FROM `formation` LIMIT 3;";
$resfor = $entityManager->getConnection()->prepare($reqfor)->execute()->fetchAll();
$inscritSession = new Offresinscrit();
// $form = $this->createForm(OffresinscritType::class, $inscritSession);
// $form->handleRequest($request);
return $this->renderForm('offres/detailsfront.html.twig', [
'controller_name' => 'HomeController',
'service' => $serviceRepository->findAll(),
'video' => $resPharma, 'formateurs' => $formateur,
'ban' => $banniereRepository->findAll(),
'formations' => $formationRepository->findAll(),
'teams' => $teamRepository->findAll(),
'temoi' => $temoignageRepository->findAll(),
'gallery' => $galleryRepository->findOneBy(["id" => 1]),
'stat' => $statistiqueRepository->findOneBy(["id" => 1]),
'off' => $offresRepository->findAll(),
'setting' => $settingRepository->findOneBy(["id" => 1]),
'spon' => $sponsorsRepository->findAll(),
'par' => $partnersRepository->findAll(),
'for' => $resfor,
'offf' => $offres,
'formateur' => $userRepository->findByRoleCoach(),
'evenement' => $evenement,
'inscrit_session' => $inscritSession,
// 'form' => $form,
'actualites' => $actualites,
'evenements' => $evenements,
'user' => $user,
'ancienEvents'=>$ancienEvents,'categories'=>$categorieElearningRepository->findAll(),
]);
}
#[Route('/newOffre', name: 'app_offre_newoffre', methods: ['POST', 'GET'])]
public function newOffre(
OffresRepository $offresRepository,
OffresinscritRepository $offresinscritRepository,
Request $request,
SessionInterface $session,
MailerInterface $mailer
): Response {
if ($request->isMethod('POST') && !$request->request->get('verification_code')) {
// Récupération de l'ID de l'offre et de l'email de l'utilisateur
$idOffre = $request->request->get('offre_id');
$offres = $offresRepository->find($idOffre); // Trouver l'offre avec l'ID
// Vérifier si l'utilisateur est déjà inscrit à l'offre
$ustest = $offresinscritRepository->findOneBy(["email" => $request->request->get('email'), "offres" => $offres]);
if ($ustest) {
// Si l'utilisateur est déjà inscrit, rediriger avec un message flash
$session->getFlashBag()->add('success', 'Vous êtes déjà inscrit à cette offre!');
return $this->redirectToRoute('app_details_offres', ['slug' => $offres->getSlug()], Response::HTTP_SEE_OTHER);
} else {
// Préparer les données à enregistrer dans la session
$offreData = [
'nom' => $request->request->get('nom'),
'prenom' => $request->request->get('prenom'),
'email' => $request->request->get('email'),
'offre_id' => $request->request->get('offre_id'),
'tel' => $request->request->get('tel'),
'offre_type' => $request->request->get('offre_type'), // Type d'offre
];
// Données spécifiques à chaque type d'offre
switch ($offreData['offre_type']) {
case 'Etudiant':
$offreData['university'] = $request->request->get('university');
$carte = $request->files->get('carte');
if ($carte) {
// Déplacer le fichier "carte" dans le répertoire spécifique
$originalLogoname = pathinfo($carte->getClientOriginalName(), PATHINFO_FILENAME);
$newLogoname = $originalLogoname . '-' . uniqid() . '.' . $carte->guessExtension();
$carte->move($this->getParameter('carte_directory'), $newLogoname);
$offreData['carte'] = $newLogoname; // Enregistrer le nom du fichier
}
break;
case 'Pro':
$offreData['societeact'] = $request->request->get('societeact');
break;
case 'Entreprise':
$offreData['societeact'] = $request->request->get('societeact');
$offreData['adressesociete'] = $request->request->get('adressesociete');
$patente = $request->files->get('patente');
if ($patente) {
// Déplacer le fichier "patente" dans le répertoire spécifique
$originalLogoname = pathinfo($patente->getClientOriginalName(), PATHINFO_FILENAME);
$newLogoname = $originalLogoname . '-' . uniqid() . '.' . $patente->guessExtension();
$patente->move($this->getParameter('patente_directory'), $newLogoname);
$offreData['patente'] = $newLogoname; // Enregistrer le nom du fichier
}
break;
}
// Sauvegarde des données dans la session
$session->set('offre_data', $offreData);
// Générer un code de vérification aléatoire
$verificationCode = rand(100000, 999999);
$session->set('verification_code', $verificationCode);
// Envoi du code de vérification par email
$verificationEmail = (new TemplatedEmail())
->from(new Address($this->fromAddress, 'Sip Academy')) // Utilisation de Address pour inclure l'email et le nom
->to($offreData['email'])
->subject('Code de vérification')
->htmlTemplate('contact/verification_email.html.twig')
->context(['verification_code' => $verificationCode]);
$mailer->send($verificationEmail);
// Redirection vers la page de saisie du code de vérification
return $this->redirectToRoute('app_offre_verifycode');
}
}
return $this->redirectToRoute('app_details_offres');
}
#[Route('/verifycodeOffre', name: 'app_offre_verifycode', methods: ['GET', 'POST'])]
public function verifyCodeOffre(
CategorieElearningRepository $categorieElearningRepository,
EmailsadminRepository $emailsadminRepository,
UserRepository $userRepository,
MailerInterface $mailer,
Request $request,
SessionInterface $session,
ContactRepository $contactRepository,
SettingRepository $settingRepository,OffresRepository $offresRepository,
OffresInscritRepository $offresinscritRepository,EntityManagerInterface $entityManager,
UserPasswordHasherInterface $userPasswordHasher
): Response {
$setting = $settingRepository->find(1);
// Vérification si la requête est de type POST
if ($request->isMethod('POST')) {
$verificationCode = $request->request->get('verification_code');
// Vérification du code saisi par l'utilisateur
if ($verificationCode == $session->get('verification_code')) {
// Récupération des données de l'offre et de l'utilisateur depuis la session
$offreData = $session->get('offre_data'); // Les données doivent être stockées dans la session
$inscritSession = new Offresinscrit();
// Remplir l'inscription avec les données récupérées
$inscritSession->setNom($offreData['nom']);
$inscritSession->setPrenom($offreData['prenom']);
$inscritSession->setEmail($offreData['email']);
$inscritSession->setZphone($offreData['tel']);
$inscritSession->setType($offreData['offre_type']);
// Ajouter des données spécifiques en fonction du type d'offre
switch ($offreData['offre_type']) {
case 'Etudiant':
$inscritSession->setUniversity($offreData['university']);
$inscritSession->setCarteetd($offreData['carte']);
break;
case 'Pro':
$inscritSession->setSocieteActuelle($offreData['societeact']);
break;
case 'Entreprise':
$inscritSession->setSocieteActuelle($offreData['societeact']);
$inscritSession->setAdresseSociete($offreData['adressesociete']);
$inscritSession->setPatente($offreData['patente']);
break;
}
// Récupérer l'offre à partir des données de la session
$offre = $offresRepository->findOneBy(['id' => $offreData['offre_id']]);
$inscritSession->setType($offre->getTitre());
$inscritSession->setVu(0);
$inscritSession->setOffres($offre);
$inscritSession->setStatut("En cours");
$inscritSession->setDate(new \DateTime('now', new DateTimeZone('Africa/Tunis')));
// Enregistrer l'inscription dans la base de données
$offresinscritRepository->save($inscritSession, true);
$us = $userRepository->findBy(["email" => $inscritSession->getEmail()]);
$password = $this->generePassword(7);
if (!$us) {
$useroffre = new User();
$useroffre->setEmail($inscritSession->getEmail());
$useroffre->setPassword(
$userPasswordHasher->hashPassword($useroffre, $password)
);
$useroffre->setNom($inscritSession->getNom());
$useroffre->setPrenom($inscritSession->getPrenom());
$useroffre->setVu(0);
$useroffre->setDate($date = new \DateTime('now', new DateTimeZone('Africa/Tunis')));
if ($offre->getTitre() == "Etudiant") {
$useroffre->setRoles(["ROLE_STUDENT"]);
} elseif ($offre->getTitre() == "Pro") {
$useroffre->setRoles(["ROLE_COACH"]);
} else {
$useroffre->setRoles(["ROLE_PARTNER"]);
}
$entityManager->persist($useroffre);
$entityManager->flush();
$email9 = (new TemplatedEmail())
->from(new Address($this->fromAddress, 'Sip Academy')) // Utilisation de Address pour inclure l'email et le nom
// ->to("athimni.afrah@gmail.com")
->to($useroffre->getEmail())
->subject('Bienvenue sur Sip Academy')
->htmlTemplate(
'registration/send_email.html.twig'
)
->context([
'emails' => $useroffre->getEmail(),
'password' => $password, 'user' => $useroffre,
'setting' => $settingRepository->findOneBy(["id" => 1]),
]);
$mailer->send($email9);
}
// Envoi des emails de confirmation
$tabadmin = [];
$admins = $userRepository->findByRoleAdmin();
foreach ($admins as $a) {
array_push($tabadmin, $a->getEmail());
}
// Envoyer un email aux administrateurs
$email = (new TemplatedEmail())
->from(new Address($this->fromAddress, 'Sip Academy')) // Utilisation de Address pour inclure l'email et le nom
->to(...$tabadmin)
->subject('Nouvelle Inscription ' . $inscritSession->getOffres()->getTitre())
->htmlTemplate('offres/mailInscit.html.twig')
->context(['inscrit' => $inscritSession, 'setting' => $setting , 'session' => $offre]);
$mailer->send($email);
// Envoyer un email à l'utilisateur inscrit
$emailpre = (new TemplatedEmail())
->from(new Address($this->fromAddress, 'Sip Academy')) // Utilisation de Address pour inclure l'email et le nom
->to($inscritSession->getEmail())
->subject("Inscription à l'offre " . $inscritSession->getOffres()->getTitre())
->htmlTemplate('offres/inscrit.html.twig')
->context(['inscrit' => $inscritSession, 'setting' => $setting, 'session' => $offre]);
$mailer->send($emailpre);
// Flash message et redirection
$this->addFlash('success', 'Votre inscription a été confirmée avec succès!');
$session->remove('verification_code');
$session->remove('offre_data');
return $this->redirectToRoute('app_details_offres', ['slug' => $inscritSession->getOffres()->getSlug()]);
} else {
$this->addFlash('error', 'Code de vérification incorrect. Veuillez réessayer.');
}
}
return $this->render('offres/verifyCode.html.twig', [
'setting' => $settingRepository->findOneBy(["id" => 1]),
'formateur' => $userRepository->findByRoleCoach(),
'partenaires' => $userRepository->findByRolePartenaire(),'categories'=>$categorieElearningRepository->findAll(),
]);
}
#[Route('/partenaires', name: 'app_partenaires')]
public function indexAllPartenaires(CategorieElearningRepository $categorieElearningRepository,FormationRepository $formationRepository, OffresRepository $offresRepository, UserRepository $userRepository, ServiceRepository $serviceRepository, EntityManagerInterface $entityManager, VideoRepository $videoRepository, TemoignageRepository $temoignageRepository, GalleryRepository $galleryRepository, PartnersRepository $partnersRepository, SponsorsRepository $sponsorsRepository, SettingRepository $settingRepository, StatistiqueRepository $statistiqueRepository, BanniereRepository $banniereRepository, TeamRepository $teamRepository): Response
{
$formateur = $userRepository->findByRoleCoach();
$reqvid = "SELECT * FROM `video` LIMIT 4;";
$resPharma = $entityManager->getConnection()->prepare($reqvid)->execute()->fetchAll();
$reqfor = "SELECT * FROM `formation` LIMIT 3;";
$resfor = $entityManager->getConnection()->prepare($reqfor)->execute()->fetchAll();
return $this->render('partenaire/partenairesFront.html.twig', [
'controller_name' => 'HomeController',
'service' => $serviceRepository->findAll(),
'video' => $resPharma, 'formateurs' => $formateur,
'off' => $offresRepository->findAll(),
'ban' => $banniereRepository->findAll(),
'formations' => $formationRepository->findAll(),
'teams' => $teamRepository->findAll(),
'temoi' => $temoignageRepository->findAll(),
'gallery' => $galleryRepository->findOneBy(["id" => 1]),
'stat' => $statistiqueRepository->findOneBy(["id" => 1]),
'setting' => $settingRepository->findOneBy(["id" => 1]),
'spon' => $sponsorsRepository->findAll(),
'par' => $partnersRepository->findAll(),
'for' => $resfor,
'formateur' => $userRepository->findByRoleCoach(),
'partenaires' => $userRepository->findByRolePartenaire(),
'categories'=>$categorieElearningRepository->findAll(),
]);
}
#[Route('/newcontact', name: 'app_contact_newcontact', methods: ['POST', 'GET'])]
public function newcontact(CategorieElearningRepository $categorieElearningRepository,Request $request, SessionInterface $session, MailerInterface $mailer): Response
{
if ($request->isMethod('POST') && !$request->request->get('verification_code')) {
// Récupérer les données du formulaire
$contactData = [
'nom' => $request->request->get('nom'),
'email' => $request->request->get('email'),
'phone' => $request->request->get('phone'),
'message' => $request->request->get('message')
];
// Enregistrer les données du formulaire dans la session
$session->set('contact_data', $contactData);
// Générez un code de vérification aléatoire
$verificationCode = rand(100000, 999999);
$session->set('verification_code', $verificationCode);
// Envoyez le code à l'adresse e-mail de contact
$verificationEmail = (new TemplatedEmail())
->from(new Address($this->fromAddress, 'Sip Academy')) // Utilisation de Address pour inclure l'email et le nom
->to($contactData['email'])
->subject('Code de vérification')
->htmlTemplate('contact/verification_email.html.twig')
->context(['verification_code' => $verificationCode]);
$mailer->send($verificationEmail);
// Rediriger vers une autre interface pour entrer le code
return $this->redirectToRoute('app_contact_verifycode');
}
return $this->render('contact/contactFront.html.twig');
}
#[Route('/verifycode', name: 'app_contact_verifycode', methods: ['GET', 'POST'])]
public function verifyCode(CategorieElearningRepository $categorieElearningRepository,EmailsadminRepository $emailsadminRepository,UserRepository $userRepository,MailerInterface $mailer,Request $request, SessionInterface $session, ContactRepository $contactRepository, SettingRepository $settingRepository): Response
{
$setting=$settingRepository->find(1);
if ($request->isMethod('POST')) {
$verificationCode = $request->request->get('verification_code');
if ($verificationCode == $session->get('verification_code')) {
// Récupérer les données du message depuis la session
$contactData = $session->get('contact_data');
// Créer et enregistrer le message dans la base de données
$contact = new Contact();
$contact->setNom($contactData['nom']);
$contact->setPhone($contactData['phone']);
$contact->setEmail($contactData['email']);
$contact->setMessage($contactData['message']);
$contact->setDatemessage(new \DateTime('now', new DateTimeZone('Africa/Tunis')));
$contactRepository->save($contact, true);
$tabadmin = array();
$admins = $userRepository->findByRoleAdmin();
foreach ($admins as $a) {
array_push($tabadmin, $a->getEmail());
$emailsadmin=$emailsadminRepository->findBy(['user'=>$a]);
foreach ($emailsadmin as $item) {
if ($item->getEmail()) {
array_push($tabadmin, $item->getEmail());
}
}
}
$email = (new TemplatedEmail())
->from(new Address($this->fromAddress, 'Sip Academy')) // Utilisation de Address pour inclure l'email et le nom
->to(...$tabadmin)
->subject('Nouveau Contact')
->htmlTemplate(
'contact/mail.html.twig'
)
->context([
'contact' => $contact, 'setting' => $setting
]);
$mailer->send($email);
$nb = $setting->getNbmessage();
$setting->setNbmessage($nb + 1);
$settingRepository->save($setting, true);
$this->addFlash('success', 'Votre message a été envoyé avec succès!');
// Effacer les données de session
$session->remove('verification_code');
$session->remove('contact_data');
return $this->redirectToRoute('app_contact_contact', [], Response::HTTP_SEE_OTHER);
} else {
$this->addFlash('error', 'Code de vérification incorrect. Veuillez réessayer.');
}
}
return $this->render('contact/verifyCode.html.twig', [
'setting' => $settingRepository->findOneBy(["id" => 1]),
'formateur' => $userRepository->findByRoleCoach(),
'partenaires' => $userRepository->findByRolePartenaire(),'categories'=>$categorieElearningRepository->findAll(),
]);
}
#[Route('/contact', name: 'app_contact_contact', methods: ['GET', 'POST'])]
public function contact(CategorieElearningRepository $categorieElearningRepository,FormationRepository $formationRepository, OffresRepository $offresRepository, UserRepository $userRepository, ServiceRepository $serviceRepository, EntityManagerInterface $entityManager, VideoRepository $videoRepository, TemoignageRepository $temoignageRepository, GalleryRepository $galleryRepository, PartnersRepository $partnersRepository, SponsorsRepository $sponsorsRepository, SettingRepository $settingRepository, StatistiqueRepository $statistiqueRepository, BanniereRepository $banniereRepository, TeamRepository $teamRepository, Request $request, ContactRepository $contactRepository): Response
{
$formateur = $userRepository->findByRoleCoach();
$reqvid = "SELECT * FROM `video` LIMIT 4;";
$resPharma = $entityManager->getConnection()->prepare($reqvid)->execute()->fetchAll();
$reqfor = "SELECT * FROM `formation` LIMIT 3;";
$resfor = $entityManager->getConnection()->prepare($reqfor)->execute()->fetchAll();
$contact = new Contact();
$form = $this->createForm(ContactType::class, $contact);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$contactRepository->save($contact, true);
return $this->redirectToRoute('app_contact_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('contact/contactFront.html.twig', [
'contact' => $contact,
'form' => $form,
'service' => $serviceRepository->findAll(),
'video' => $resPharma, 'formateurs' => $formateur,
'ban' => $banniereRepository->findAll(),
'formations' => $formationRepository->findAll(),
'teams' => $teamRepository->findAll(),
'temoi' => $temoignageRepository->findAll(),
'gallery' => $galleryRepository->findOneBy(["id" => 1]),
'stat' => $statistiqueRepository->findOneBy(["id" => 1]),
'off' => $offresRepository->findAll(),
'setting' => $settingRepository->findOneBy(["id" => 1]),
'spon' => $sponsorsRepository->findAll(),
'par' => $partnersRepository->findAll(), 'formateur' => $userRepository->findByRoleCoach(),
'show_verification' => false,'categories'=>$categorieElearningRepository->findAll(),
]);
}
#[Route('/detailsCoach/{id}', name: 'app_details_coach')]
public function detailsCoach(CategorieElearningRepository $categorieElearningRepository,User $coach, OffresRepository $offresRepository, FormationRepository $formationRepository, UserRepository $userRepository, ServiceRepository $serviceRepository, EntityManagerInterface $entityManager, VideoRepository $videoRepository, TemoignageRepository $temoignageRepository, GalleryRepository $galleryRepository, PartnersRepository $partnersRepository, SponsorsRepository $sponsorsRepository, SettingRepository $settingRepository, StatistiqueRepository $statistiqueRepository, BanniereRepository $banniereRepository, TeamRepository $teamRepository): Response
{
$formateur = $userRepository->findByRoleCoach();
$reqvid = "SELECT * FROM `video` LIMIT 4;";
$resPharma = $entityManager->getConnection()->prepare($reqvid)->execute()->fetchAll();
$reqfor = "SELECT * FROM `formation` LIMIT 3;";
$resfor = $entityManager->getConnection()->prepare($reqfor)->execute()->fetchAll();
return $this->render('formateur/detailsCoach.html.twig', [
'controller_name' => 'HomeController',
'service' => $serviceRepository->findAll(),
'video' => $resPharma, 'formateurs' => $formateur,
'ban' => $banniereRepository->findAll(),
'formations' => $formationRepository->findAll(),
'teams' => $teamRepository->findAll(),
'temoi' => $temoignageRepository->findAll(),
'gallery' => $galleryRepository->findOneBy(["id" => 1]),
'stat' => $statistiqueRepository->findOneBy(["id" => 1]),
'setting' => $settingRepository->findOneBy(["id" => 1]),
'spon' => $sponsorsRepository->findAll(),
'par' => $partnersRepository->findAll(),
'for' => $resfor,
'off' => $offresRepository->findAll(),
'coach' => $coach, 'formateur' => $userRepository->findByRoleCoach(),
'categories'=>$categorieElearningRepository->findAll(),
]);
}
#[Route('/formations', name: 'app_formations')]
public function indexAllFormations(CategorieElearningRepository $categorieElearningRepository,Request $request, PaginatorInterface $paginator, FormationRepository $formationRepository, OffresRepository $offresRepository, UserRepository $userRepository, ServiceRepository $serviceRepository, EntityManagerInterface $entityManager, VideoRepository $videoRepository, TemoignageRepository $temoignageRepository, GalleryRepository $galleryRepository, PartnersRepository $partnersRepository, SponsorsRepository $sponsorsRepository, SettingRepository $settingRepository, StatistiqueRepository $statistiqueRepository, BanniereRepository $banniereRepository, TeamRepository $teamRepository): Response
{
$formateur = $userRepository->findByRoleCoach();
$reqvid = "SELECT * FROM `video` LIMIT 4;";
$resPharma = $entityManager->getConnection()->prepare($reqvid)->execute()->fetchAll();
$reqfor = "SELECT * FROM `formation` LIMIT 3;";
$resfor = $entityManager->getConnection()->prepare($reqfor)->execute()->fetchAll();
$pagination = $paginator->paginate(
$foramtion = $formationRepository->findAll(),
$request->query->get('page', 1),
6
);
return $this->render('formation/formations.html.twig', [
'controller_name' => 'HomeController',
'service' => $serviceRepository->findAll(),
'video' => $resPharma, 'formateurs' => $formateur,
'ban' => $banniereRepository->findAll(),
'formations' => $formationRepository->findAll(),
'formation' => $pagination,
'paginator' => $pagination,
'teams' => $teamRepository->findAll(),
'temoi' => $temoignageRepository->findAll(),
'gallery' => $galleryRepository->findOneBy(["id" => 1]),
'stat' => $statistiqueRepository->findOneBy(["id" => 1]),
'setting' => $settingRepository->findOneBy(["id" => 1]),
'spon' => $sponsorsRepository->findAll(),
'par' => $partnersRepository->findAll(),
'for' => $resfor,
'off' => $offresRepository->findAll(),
'formateur' => $userRepository->findByRoleCoach(),
'categories'=>$categorieElearningRepository->findAll(),
]);
}
#[Route('/offres', name: 'app_offres')]
public function indexAlloffres(CategorieElearningRepository $categorieElearningRepository,Request $request, OffresRepository $offresRepository, PaginatorInterface $paginator, FormationRepository $formationRepository, UserRepository $userRepository, ServiceRepository $serviceRepository, EntityManagerInterface $entityManager, VideoRepository $videoRepository, TemoignageRepository $temoignageRepository, GalleryRepository $galleryRepository, PartnersRepository $partnersRepository, SponsorsRepository $sponsorsRepository, SettingRepository $settingRepository, StatistiqueRepository $statistiqueRepository, BanniereRepository $banniereRepository, TeamRepository $teamRepository): Response
{
return $this->render('offres/offfront.html.twig', [
'controller_name' => 'HomeController',
'service' => $serviceRepository->findAll(),
'ban' => $banniereRepository->findAll(),
'formations' => $formationRepository->findAll(),
'teams' => $teamRepository->findAll(),
'temoi' => $temoignageRepository->findAll(),
'gallery' => $galleryRepository->findOneBy(["id" => 1]),
'stat' => $statistiqueRepository->findOneBy(["id" => 1]),
'setting' => $settingRepository->findOneBy(["id" => 1]),
'spon' => $sponsorsRepository->findAll(),
'par' => $partnersRepository->findAll(),
'off' => $offresRepository->findAll(),'categories'=>$categorieElearningRepository->findAll(),
]);
}
#[Route('/apropos', name: 'app_about')]
public function indexAbout(CategorieElearningRepository $categorieElearningRepository,UserRepository $userRepository, OffresRepository $offresRepository, ServiceRepository $serviceRepository, FormationRepository $formationRepository, EntityManagerInterface $entityManager, VideoRepository $videoRepository, TemoignageRepository $temoignageRepository, GalleryRepository $galleryRepository, PartnersRepository $partnersRepository, SponsorsRepository $sponsorsRepository, SettingRepository $settingRepository, StatistiqueRepository $statistiqueRepository, BanniereRepository $banniereRepository, TeamRepository $teamRepository): Response
{
$formateur = $userRepository->findByRoleCoach();
$reqvid = "SELECT * FROM `video` LIMIT 4;";
$resPharma = $entityManager->getConnection()->prepare($reqvid)->execute()->fetchAll();
$reqfor = "SELECT * FROM `formation` LIMIT 3;";
$resfor = $entityManager->getConnection()->prepare($reqfor)->execute()->fetchAll();
return $this->render('home/about.html.twig', [
'controller_name' => 'HomeController',
'service' => $serviceRepository->findAll(),
'video' => $resPharma, 'formateurs' => $formateur,
'ban' => $banniereRepository->findAll(),
'teams' => $teamRepository->findAll(),
'temoi' => $temoignageRepository->findAll(),
'gallery' => $galleryRepository->findOneBy(["id" => 1]),
'off' => $offresRepository->findAll(),
'stat' => $statistiqueRepository->findOneBy(["id" => 1]),
'setting' => $settingRepository->findOneBy(["id" => 1]),
'spon' => $sponsorsRepository->findAll(),
'par' => $partnersRepository->findAll(),
'for' => $resfor, 'formateur' => $userRepository->findByRoleCoach(),
'categories'=>$categorieElearningRepository->findAll(),
]);
}
#[Route('/', name: 'app_home')]
public function index(CategorieElearningRepository $categorieElearningRepository,ActualiteRepository $actualiteRepository, OffresRepository $offresRepository, EvenementRepository $evenementRepository, UserRepository $userRepository, ServiceRepository $serviceRepository, FormationRepository $formationRepository, EntityManagerInterface $entityManager, VideoRepository $videoRepository, TemoignageRepository $temoignageRepository, GalleryRepository $galleryRepository, PartnersRepository $partnersRepository, SponsorsRepository $sponsorsRepository, SettingRepository $settingRepository, StatistiqueRepository $statistiqueRepository, BanniereRepository $banniereRepository, TeamRepository $teamRepository): Response
{
$actualites = $actualiteRepository->last3();
$evenemets = $evenementRepository->prochainsEvent();
$reqvid = "SELECT * FROM `video` ORDER BY id DESC LIMIT 4";
$videos = $entityManager->getConnection()->prepare($reqvid)->executeQuery()->fetchAllAssociative();
$reqfor = "SELECT * FROM `formation` LIMIT 3;";
$resfor = $entityManager->getConnection()->prepare($reqfor)->execute()->fetchAll();
return $this->render('home/index.html.twig', [
'controller_name' => 'HomeController', 'evenements' => $evenemets,
'service' => $serviceRepository->findAll(),
'video' => $videos, 'actualites' => $actualites,
'ban' => $banniereRepository->findAll(),
'teams' => $teamRepository->findAll(),
'temoi' => $temoignageRepository->findAll(),
'gallery' => $galleryRepository->findOneBy(["id" => 1]),
'stat' => $statistiqueRepository->findOneBy(["id" => 1]),
'setting' => $settingRepository->findOneBy(["id" => 1]),
'spon' => $sponsorsRepository->findAll(),
'par' => $partnersRepository->findAll(),
'for' => $formationRepository->last3(),
'off' => $offresRepository->findAll(),
'formateur' => $userRepository->findByRoleCoach(),
'categories'=>$categorieElearningRepository->findAll()
]);
}
#[Route('/newsletter', name: 'app_newsletter_new_ajax')]
public function newAjax(CategorieElearningRepository $categorieElearningRepository,MailerInterface $mailer, EntityManagerInterface $entityManager, NewsletterRepository $newsletterRepository, Request $request, SettingRepository $settingRepository): Response
{
$newsletter = new Newsletter();
$email = $request->get('email');
$news = $newsletterRepository->findOneBy(["email" => $email]);
if ($news) {
$output = 0;
} else {
if ($request->getMethod() == "POST") {
$email = $request->get('email');
$news = $newsletterRepository->findBy(['email' => $email]);
if (!$news) {
$msj = (new TemplatedEmail())
->from(new Address($this->fromAddress, 'Sip Academy')) // Utilisation de Address pour inclure l'email et le nom
->To($email)
->subject('Merci de vous être inscrit(e) à notre newsletter !')
->htmlTemplate(
'newsletter/email.html.twig'
)
->context([
'setting' => $settingRepository->find(1)
]);
$mailer->send($msj);
$newsletter->setEmail($email);
$newsletter->setDateinscription(new \DateTime('now'));
$newsletterRepository->save($newsletter, true);
}
}
$output = 1;
}
return new JsonResponse($output);
}
#[Route('/back', name: 'app_back')]
public function back(CategorieElearningRepository $categorieElearningRepository,ServiceRepository $serviceRepository, SettingRepository $settingRepository, StatistiqueRepository $statistiqueRepository, BanniereRepository $banniereRepository, TeamRepository $teamRepository): Response
{
return $this->render('baseback.html.twig', [
'controller_name' => 'HomeController',
'service' => $serviceRepository->findAll(),
'ban' => $banniereRepository->findAll(),
'teams' => $teamRepository->findAll(),
'stat' => $statistiqueRepository->findOneBy(["id" => 1]),
'setting' => $settingRepository->findOneBy(["id" => 1]),'categories'=>$categorieElearningRepository->findAll(),
]);
}
}