<?php
// src/Controller/AccueilController
/*
*
* Date de modification:16/05/2025
* Description:Controller LayoutAccueil 5sur5 Séjour
*
*/
namespace App\Controller;
use App\Entity\Fonctions;
use App\Entity\User;
use App\Service\AttachementService;
use App\Service\BlogService;
use App\Service\SejourService;
use App\Service\SiteService;
use App\Service\TypeProduiteService;
use App\Service\UserService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\Mime\Address;
use Psr\Log\LoggerInterface;
class AccueilController extends AbstractController
{
private $typeProduiteService;
private $siteService;
private $blogService;
private $UserService;
private $sejourService;
private $attachementService;
private $mailer;
private $logger;
public function __construct(TypeProduiteService $typeProduiteService, SiteService $siteService, BlogService $blogService, UserService $UserService, SejourService $sejourService, AttachementService $attachementService, MailerInterface $mailer, LoggerInterface $logger)
{
$this->typeProduiteService = $typeProduiteService;
$this->siteService = $siteService;
$this->blogService = $blogService;
$this->UserService = $UserService;
$this->sejourService = $sejourService;
$this->attachementService = $attachementService;
$this->mailer = $mailer;
$this->logger = $logger;
}
/**
* @Route("/Accueil5sur5", name="layoutAccueil")
* */
public function layoutAccueil()
{
return $this->render('Accueil/layoutAccueil.html.twig');
}
/**
* @Route("/Accueil5sur5/header_layoutAccueil", name="header_layoutAccueil")
*/
public function header(Request $request): Response
{
$produit = $this->typeProduiteService;
$liste = $produit->produitlistType();
// dd($liste);
$session = $request->getSession();
$Products = $session->get("Panier");
if ($Products == Null) {
$Products = [];
}
return $this->render('Accueil/header.html.twig', [
'produit' => $liste,
'Products' => $Products,
]);
}
/**
* @Route("/Accueil5sur5/header_Parent", name="header_Parent")
*/
public function header_Parent(Request $request): Response
{
$produit = $this->typeProduiteService;
$liste = $produit->produitlistType();
// dd($liste);
$session = $request->getSession();
$Products = $session->get("Panier");
if ($Products == Null) {
$Products = [];
}
return $this->render('Accueil/headerParents.html.twig', [
'produit' => $liste,
'Products' => $Products,
]);
}
/**
* @Route("/Accueil5sur5/headerLogin", name="headerLogin")
*/
public function headerLogin(Request $request): Response
{
$produit = $this->typeProduiteService;
$liste = $produit->produitlistType();
// dd($liste);
$session = $request->getSession();
$Products = $session->get("Panier");
if ($Products == Null) {
$Products = [];
}
return $this->render('Accueil/headerLogin.html.twig', [
'produit' => $liste,
'Products' => $Products,
]);
}
/**
* @Route("/", name="page_Accueil")
*/
public function PageAccueil()
{
$produit = $this->typeProduiteService;
$liste = $produit->produitlistType();
$siteservice = $this->siteService;
$site = $siteservice->getActiveSite();
$list = $this->blogService->allblog();
//dd($list);
return $this->render('Accueil/PageAccueil.html.twig', ["site" => $site, 'list' => $list, 'produit' => $liste]);
}
/**
* @Route("/Parent/", name="Parent")
*/
public function Acceuil(Request $request)
{
$produit = $this->typeProduiteService;
$liste = $produit->produitlistType();
$siteservice = $this->siteService;
$site = $siteservice->getActiveSite();
$list = $this->blogService->allblog();
$session = $request->getSession();
$Products = $session->get("Panier");
if ($Products == Null) {
$Products = [];
}
return $this->render('Accueil/PageAccueil.html.twig', ["site" => $site, 'list' => $list, 'produit' => $liste, 'Products' => $Products]);
}
/**
* @Route("/Accueil5sur5/footer_layoutAccueil", name="footer_layoutAccueil")
*/
public function footer()
{
return $this->render('Accueil/footer.html.twig');
}
/**
* @Route("/Accompagnateur/register", name="accomp_register",methods={"POST","GET"})
*/
public function register(Request $request)
{
ini_set("max_execution_time", -1);
ini_set('memory_limit', '-1');
$em = $this->getDoctrine()->getManager();
$UserService = $this->UserService;
$SejourService = $this->sejourService;
$AttachementService = $this->attachementService;
$nom = $request->get("nom_acc");
$prenom = $request->get('prenom_acc');
$etablisment = $request->get("etablisment");
$fonction = $request->get("fonction");
$EntityFonction = $em->getRepository(Fonctions::class)->find($fonction);
if ($EntityFonction) {
$nameFonction = $EntityFonction->getName();
} else {
$nameFonction = "";
}
$adressetablisment = $request->get("adressetablisment");
// prix et reverse
$prixcnxparent = 2.90;
$prixcnxpartenaire = 0;
$reversecnxpart = 0;
$reverseventepart = 0;
$phoneacc = $request->get("phone_acc");
$mail = $request->get("email");
$password = $request->get("password");
$role = "ROLE_ACC";
$themSejour = $request->get('theme_sejour');
$adressSejour = $request->get("adress_sejour");
$codePostal = $request->get("codePostal");
$dateDebut = $request->get("date_debut_sejour");
$FinSejour = $request->get("date_fin_sejour");
$AgeDugroupe = $request->get("age_dugroupe_sejour");
$NbEnfant = $request->get("NbEnfant");
$connpay = $request->get("connpay");
if ($prixcnxparent != 0) {
$connpay == 1;
} else {
$connpay == 0;
}
$pays = $request->get("pays");
$ville = $request->get("ville");
$CODEpOSTALetablisment = $request->get("CODEpOSTALetablisment");
$villeetablisment = $request->get("villeetablisment");
$type = "ECOLES/AUTRES";
$bytes = random_bytes(5);
$passAcommpa = bin2hex($bytes);
if ($NbEnfant) {
$NbEnfant = $NbEnfant;
} else {
$NbEnfant = 0;
}
$dateSJoue = new \Datetime();
$Milliseconde = $dateSJoue->format('u');
$annes = $dateSJoue->format('y');
$joours = $dateSJoue->format('d');
$joours = $dateSJoue->format('t');
$emailaccf = "Acompa" . $annes . $joours . $Milliseconde . "@fictif.com";
//CREATION ACCOMPAGNATEUR
$accomp = $UserService->creationNewAcommpa($nom, $prenom, $etablisment, $nameFonction, $adressetablisment, $phoneacc, $emailaccf, $role, $passAcommpa, $mail);
$accomp->setIdFonction($EntityFonction);
$em->persist($accomp);
$em->flush();
//CREATION PARTENAIRE
$part = $em->getRepository(User::class)->VerifierAddresseEmailPartenaire($mail, 'ROLE_PARTENAIRE');
if (is_null($part)) {
$part = $UserService->creationNewUser($nom, $prenom, $etablisment, $nameFonction, $adressetablisment, $phoneacc, $mail, $passAcommpa, "ROLE_PARTENAIRE");
$part->setIdFonction($EntityFonction);
$em->persist($part);
$em->flush();
}
//CREATION ETABLISSEMENT + PARTENAIRE
$Etablisment = $UserService->creationNewEtablisment($part, $nom, $prenom, $etablisment, $fonction, $adressetablisment, $phoneacc, $mail, "ROLE_PARTENAIRE", $password, $prixcnxparent, $prixcnxpartenaire, $reversecnxpart, $reverseventepart);
if ($CODEpOSTALetablisment == "") {
$CODEpOSTALetablisment = null;
}
$Etablisment->setCodepostaleatb($CODEpOSTALetablisment);
$Etablisment->setVille($villeetablisment);
$em->persist($Etablisment);
$em->flush();
//CREATION SEJOUR ACCOM + PARTENAIRE + ETABILSSEMENT
if ($EntityFonction) {
if ($EntityFonction->getType() == "vip") {
$connpay = 0;
}
}
$sejour = $SejourService->CreationNouveauSejourParAccompagnateur($themSejour, $adressSejour, $dateDebut, $FinSejour, $AgeDugroupe, $type, $NbEnfant, $connpay, $pays, $ville, $prixcnxparent, $prixcnxpartenaire, $reversecnxpart, $reverseventepart);
$sejour->setCodePostal(intval($codePostal));
$SejourService->affecterAccompaniateur($sejour, $accomp);
$SejourService->affecterPartenaire($sejour, $part);
$SejourService->affecteretablisment($sejour, $Etablisment);
$em->persist($sejour);
$em->flush();
//AFFECTAION LOGO TO USER PARTENAIRE ADN ACCOMPAGNATEUR
if ($request->request->has('path')) {
$ty = "logo séjour";
$AttachementService->creationLogoSejour($accomp, $request->get('path'), $ty);
$AttachementService->creationLogoSejour($part, $request->get('path'), $ty);
}
$TypeSejour = 8;
$UserService->EnvoyerEmailAcommpatActivationNewMail($sejour, $accomp);
$session = $request->getSession();
$session->set('Sejour', $sejour->getId());
//$this->redirectToRoute('app_back_Acommpa');
return new JsonResponse(["idSejour" => $sejour->getId()]);
}
//inscription du parent
/**
* @Route("/Parent/register", name="parent_register",methods={"POST","GET"})
*/
public function registerparent(Request $request)
{
$UserService = $this->UserService;
//
$nom = $request->get("nomparent");
$prenom = $request->get('prenomparent');
$mailparent = $request->get("mailprent");
$numtel = $request->get("numtel");
$passwordparent = $request->get("passwordparent");
$confirmpassword = $request->get("confirmpassword");
$notifsms = $request->get("sms");
$notifmail = $request->get('mailnotif');
if ($confirmpassword != $passwordparent) {
return new JsonResponse('erorpasswordconfirm');
}
$role = "ROLE_PARENT";
$verification = $UserService->verifmailold($mailparent);
//var_dump($verification);
if ($verification == NULL) {
$accomp = $UserService->creationNewParent($nom, $prenom, $mailparent, $numtel, $role, $passwordparent, $notifsms, $notifmail);
return new JsonResponse('done');
} else {
return new JsonResponse('eror');
}
}
/**
* @Route("/Accueil5sur5/5sur5", name="sur5")
*/
public function sur5()
{
$produit = $this->typeProduiteService;
$liste = $produit->produitlistType();
//dd($liste);
return $this->render('Accueil/5sur5.html.twig', [
'produit' => $liste,
]);
}
/**
* @Route("/Parent/Accueil5sur5/5sur5", name="5sur5Parent")
*/
public function sur5Parent()
{
$produit = $this->typeProduiteService;
$liste = $produit->produitlistType();
//dd($liste);
return $this->render('Accueil/5sur5.html.twig', [
'produit' => $liste,
]);
}
/**
* @Route("/Accueil5sur5/album/{id}", name="album")
*/
public function produitlist($id)
{
$produit = $this->typeProduiteService;
$liste = $produit->produitlistType();
$produit = $id;
//dd($liste);
return $this->render('Accueil/album.html.twig', [
'produit' => $liste,
'showArt' => $produit,
]);
}
/**
* @Route("/Parent/Accueil5sur5/album/{id}", name="albumParent")
*/
public function produitlistParent($id)
{
$produit = $this->typeProduiteService;
$liste = $produit->produitlistType();
// dd($liste);
$produit = $id;
return $this->render('Accueil/album.html.twig', [
'produit' => $liste,
'showArt' => $produit,
]);
}
/**
* @Route("/Accueil5sur5/AlaUne", name="AlaUne")
*/
public function AlaUne()
{
$blogsbolt = $this->blogService;
$list = $blogsbolt->allblog();
//dd($list);
return $this->render('Accueil/AlaUne.html.twig', ['list' => $list]);
}
/**
* @Route("/Parent/Accueil5sur5/AlaUne", name="AlaUneParent")
*/
public function AlaUneParent()
{
$blogsbolt = $this->blogService;
$list = $blogsbolt->allblog();
//dd($list);
return $this->render('Accueil/AlaUneParent.html.twig', ['list' => $list]);
}
/**
* @Route("/Accueil5sur5/DetailsAlaUne/{id}", name="DetailsAlaUne")
*/
public function DetailsAlaUne($id)
{
$blo = $this->blogService;
$blog = $blo->myblog($id);
return $this->render('Accueil/DetailsAlaUne.html.twig', ['blog' => $blog]);
}
/**
* @Route("/ServiceClient", name="ServiceClient")
* */
public function ServiceClient()
{
$produit = $this->typeProduiteService;
$liste = $produit->produitlistType();
// dd($liste);
return $this->render('Accueil/ServiceClient.html.twig', [
'produit' => $liste,
]);
}
/**
* @Route("/Besoindaide", name="Besoindaide")
*/
public function Besoindaide(): Response
{
$produit = $this->typeProduiteService;
$liste = $produit->produitlistType();
// dd($liste);
return $this->render('Accueil/Besoindaide.html.twig', [
'produit' => $liste,
]);
}
/**
* @Route("/Mentionlegale", name="Mentionlegale")
*/
public function Mentionlegale()
{
return $this->render('Accueil/mentionlegal.html.twig', []);
}
/**
* @Route("/Mentions_legales", name="Mentions_legales")
*/
public function Mentions_legales()
{
return $this->render('Accueil/mentionlegal.html.twig', []);
}
/**
* @Route("/Conditons_generales", name="Conditons_generales")
*/
public function Conditons_generales()
{
return $this->render('Accueil/Condition.html.twig', []);
}
/**
* @Route("/Conditongeneral", name="Conditongeneral")
*/
public function Conditongeneral()
{
return $this->render('Accueil/Condition.html.twig', []);
}
/**
* @Route("/Politique", name="Politique")
*/
public function Politique()
{
return $this->render('Accueil/politique.html.twig', []);
}
/**
* @Route("/unsubscribe-user", name="unsubscribe_user")
*/
public function unsubscribeUser(Request $request, EntityManagerInterface $em): Response
{
$email = $request->query->get('email');
if (!$email) {
return $this->render('unsubscribe/error.html.twig', [
'message' => 'Email manquant'
]);
}
$user = $em->getRepository(User::class)->findOneBy(['email' => $email]);
if (!$user) {
return $this->render('unsubscribe/error.html.twig', [
'message' => 'Utilisateur non trouvé'
]);
}
$user->setShowpubprod('unsuscribe');
$em->flush();
return $this->render('unsubscribe/success.html.twig', [
'email' => $email
]);
}
/**
* @Route("/contact", name="app_contact", methods={"POST"})
*/
public function processContactForm(Request $request): Response
{
try {
// Récupérer les données du formulaire
$name = $request->request->get('name');
$email = $request->request->get('email');
$subject = $request->request->get('subject');
$message = $request->request->get('message');
// Validation des données
if (empty($name) || empty($email) || empty($message)) {
return new JsonResponse([
'success' => false,
'message' => 'Tous les champs obligatoires doivent être remplis.'
], 400);
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
return new JsonResponse([
'success' => false,
'message' => 'L\'adresse email n\'est pas valide.'
], 400);
}
// Préparer le sujet par défaut si vide
if (empty($subject)) {
$subject = 'Nouveau message de contact - 5sur5séjour';
}
// Créer l'email
$emailContent = (new TemplatedEmail())
->from(new Address('info@5sur5sejour.com', '5sur5 Séjour'))
->to(new Address('contact@5sur5sejour.com', 'Contact 5sur5séjour'))
->addCc(new Address('ramzi.benlarbi@gmail.com', 'Ramzi Benlarbi'))
->subject($subject)
->htmlTemplate('emails/contact_form.html.twig')
->context([
'name' => $name,
'email' => $email,
'subject' => $subject,
'message' => $message,
'date' => new \DateTime()
]);
// Envoyer l'email
$this->mailer->send($emailContent);
// Logger le succès
$this->logger->info('Email de contact envoyé avec succès', [
'from' => $email,
'name' => $name,
'subject' => $subject
]);
return new JsonResponse([
'success' => true,
'message' => 'Votre message a été envoyé avec succès ! Nous vous répondrons dans les plus brefs délais.'
]);
} catch (\Exception $e) {
// Logger l'erreur
$this->logger->error('Erreur lors de l\'envoi de l\'email de contact', [
'error' => $e->getMessage(),
'trace' => $e->getTraceAsString()
]);
return new JsonResponse([
'success' => false,
'message' => 'Une erreur est survenue lors de l\'envoi du message. Veuillez réessayer plus tard.'
], 500);
}
}
}