src/Controller/AccueilController.php line 124

Open in your IDE?
  1. <?php
  2. // src/Controller/AccueilController
  3. /*
  4.  * 
  5.  * Date de modification:16/05/2025
  6.  * Description:Controller LayoutAccueil 5sur5 Séjour
  7.  *
  8.  */
  9. namespace App\Controller;
  10. use App\Entity\Fonctions;
  11. use App\Entity\User;
  12. use App\Service\AttachementService;
  13. use App\Service\BlogService;
  14. use App\Service\SejourService;
  15. use App\Service\SiteService;
  16. use App\Service\TypeProduiteService;
  17. use App\Service\UserService;
  18. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  19. use Symfony\Component\Routing\Annotation\Route;
  20. use Symfony\Component\HttpFoundation\Response;
  21. use Symfony\Component\HttpFoundation\Request;
  22. use Symfony\Component\HttpFoundation\JsonResponse;
  23. use Doctrine\ORM\EntityManagerInterface;
  24. use Symfony\Component\Mailer\MailerInterface;
  25. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  26. use Symfony\Component\Mime\Address;
  27. use Psr\Log\LoggerInterface;
  28. class AccueilController extends AbstractController
  29. {
  30.     private $typeProduiteService;
  31.     private $siteService;
  32.     private $blogService;
  33.     private $UserService;
  34.     private $sejourService;
  35.     private $attachementService;
  36.     private $mailer;
  37.     private $logger;
  38.     public function __construct(TypeProduiteService $typeProduiteServiceSiteService $siteServiceBlogService $blogServiceUserService $UserServiceSejourService $sejourServiceAttachementService $attachementServiceMailerInterface $mailerLoggerInterface $logger)
  39.     {
  40.         $this->typeProduiteService $typeProduiteService;
  41.         $this->siteService $siteService;
  42.         $this->blogService $blogService;
  43.         $this->UserService $UserService;
  44.         $this->sejourService $sejourService;
  45.         $this->attachementService $attachementService;
  46.         $this->mailer $mailer;
  47.         $this->logger $logger;
  48.     }
  49.     /**
  50.      * @Route("/Accueil5sur5", name="layoutAccueil")
  51.      * */
  52.     public function layoutAccueil()
  53.     {
  54.         return $this->render('Accueil/layoutAccueil.html.twig');
  55.     }
  56.     /**
  57.      * @Route("/Accueil5sur5/header_layoutAccueil", name="header_layoutAccueil")
  58.      */
  59.     public function header(Request $request): Response
  60.     {
  61.         $produit $this->typeProduiteService;
  62.         $liste $produit->produitlistType();
  63.         // dd($liste);
  64.         $session $request->getSession();
  65.         $Products $session->get("Panier");
  66.         if ($Products == Null) {
  67.             $Products = [];
  68.         }
  69.         return $this->render('Accueil/header.html.twig', [
  70.             'produit' => $liste,
  71.             'Products' => $Products,
  72.         ]);
  73.     }
  74.     /**
  75.      * @Route("/Accueil5sur5/header_Parent", name="header_Parent")
  76.      */
  77.     public function header_Parent(Request $request): Response
  78.     {
  79.         $produit $this->typeProduiteService;
  80.         $liste $produit->produitlistType();
  81.         // dd($liste);
  82.         $session $request->getSession();
  83.         $Products $session->get("Panier");
  84.         if ($Products == Null) {
  85.             $Products = [];
  86.         }
  87.         return $this->render('Accueil/headerParents.html.twig', [
  88.             'produit' => $liste,
  89.             'Products' => $Products,
  90.         ]);
  91.     }
  92.     /**
  93.      * @Route("/Accueil5sur5/headerLogin", name="headerLogin")
  94.      */
  95.     public function headerLogin(Request $request): Response
  96.     {
  97.         $produit $this->typeProduiteService;
  98.         $liste $produit->produitlistType();
  99.         // dd($liste);
  100.         $session $request->getSession();
  101.         $Products $session->get("Panier");
  102.         if ($Products == Null) {
  103.             $Products = [];
  104.         }
  105.         return $this->render('Accueil/headerLogin.html.twig', [
  106.             'produit' => $liste,
  107.             'Products' => $Products,
  108.         ]);
  109.     }
  110.     /**
  111.      * @Route("/", name="page_Accueil")
  112.      */
  113.     public function PageAccueil()
  114.     {
  115.         $produit $this->typeProduiteService;
  116.         $liste $produit->produitlistType();
  117.         $siteservice $this->siteService;
  118.         $site $siteservice->getActiveSite();
  119.         $list $this->blogService->allblog();
  120.         //dd($list);
  121.         return $this->render('Accueil/PageAccueil.html.twig', ["site" => $site'list' => $list'produit' => $liste]);
  122.     }
  123.     /**
  124.      * @Route("/Parent/", name="Parent")
  125.      */
  126.     public function Acceuil(Request $request)
  127.     {
  128.         $produit $this->typeProduiteService;
  129.         $liste $produit->produitlistType();
  130.         $siteservice $this->siteService;
  131.         $site $siteservice->getActiveSite();
  132.         $list $this->blogService->allblog();
  133.         $session $request->getSession();
  134.         $Products $session->get("Panier");
  135.         if ($Products == Null) {
  136.             $Products = [];
  137.         }
  138.         return $this->render('Accueil/PageAccueil.html.twig', ["site" => $site'list' => $list'produit' => $liste'Products' => $Products]);
  139.     }
  140.     /**
  141.      * @Route("/Accueil5sur5/footer_layoutAccueil", name="footer_layoutAccueil")
  142.      */
  143.     public function footer()
  144.     {
  145.         return $this->render('Accueil/footer.html.twig');
  146.     }
  147.     /**
  148.      * @Route("/Accompagnateur/register", name="accomp_register",methods={"POST","GET"})
  149.      */
  150.     public function register(Request $request)
  151.     {
  152.         ini_set("max_execution_time", -1);
  153.         ini_set('memory_limit''-1');
  154.         $em $this->getDoctrine()->getManager();
  155.         $UserService $this->UserService;
  156.         $SejourService $this->sejourService;
  157.         $AttachementService $this->attachementService;
  158.         $nom $request->get("nom_acc");
  159.         $prenom $request->get('prenom_acc');
  160.         $etablisment $request->get("etablisment");
  161.         $fonction $request->get("fonction");
  162.         $EntityFonction $em->getRepository(Fonctions::class)->find($fonction);
  163.         if ($EntityFonction) {
  164.             $nameFonction $EntityFonction->getName();
  165.         } else {
  166.             $nameFonction "";
  167.         }
  168.         $adressetablisment $request->get("adressetablisment");
  169.         // prix et reverse
  170.         $prixcnxparent 2.90;
  171.         $prixcnxpartenaire 0;
  172.         $reversecnxpart 0;
  173.         $reverseventepart 0;
  174.         $phoneacc $request->get("phone_acc");
  175.         $mail $request->get("email");
  176.         $password $request->get("password");
  177.         $role "ROLE_ACC";
  178.         $themSejour $request->get('theme_sejour');
  179.         $adressSejour $request->get("adress_sejour");
  180.         $codePostal $request->get("codePostal");
  181.         $dateDebut $request->get("date_debut_sejour");
  182.         $FinSejour $request->get("date_fin_sejour");
  183.         $AgeDugroupe $request->get("age_dugroupe_sejour");
  184.         $NbEnfant $request->get("NbEnfant");
  185.         $connpay $request->get("connpay");
  186.         if ($prixcnxparent != 0) {
  187.             $connpay == 1;
  188.         } else {
  189.             $connpay == 0;
  190.         }
  191.         $pays $request->get("pays");
  192.         $ville $request->get("ville");
  193.         $CODEpOSTALetablisment $request->get("CODEpOSTALetablisment");
  194.         $villeetablisment $request->get("villeetablisment");
  195.         $type "ECOLES/AUTRES";
  196.         $bytes random_bytes(5);
  197.         $passAcommpa bin2hex($bytes);
  198.         if ($NbEnfant) {
  199.             $NbEnfant $NbEnfant;
  200.         } else {
  201.             $NbEnfant 0;
  202.         }
  203.         $dateSJoue = new \Datetime();
  204.         $Milliseconde $dateSJoue->format('u');
  205.         $annes $dateSJoue->format('y');
  206.         $joours $dateSJoue->format('d');
  207.         $joours $dateSJoue->format('t');
  208.         $emailaccf "Acompa" $annes $joours $Milliseconde "@fictif.com";
  209.         //CREATION ACCOMPAGNATEUR
  210.         $accomp $UserService->creationNewAcommpa($nom$prenom$etablisment$nameFonction$adressetablisment$phoneacc$emailaccf$role$passAcommpa$mail);
  211.         $accomp->setIdFonction($EntityFonction);
  212.         $em->persist($accomp);
  213.         $em->flush();
  214.         //CREATION PARTENAIRE
  215.         $part $em->getRepository(User::class)->VerifierAddresseEmailPartenaire($mail'ROLE_PARTENAIRE');
  216.         if (is_null($part)) {
  217.             $part $UserService->creationNewUser($nom$prenom$etablisment$nameFonction$adressetablisment$phoneacc$mail$passAcommpa"ROLE_PARTENAIRE");
  218.             $part->setIdFonction($EntityFonction);
  219.             $em->persist($part);
  220.             $em->flush();
  221.         }
  222.         //CREATION ETABLISSEMENT + PARTENAIRE
  223.         $Etablisment $UserService->creationNewEtablisment($part$nom$prenom$etablisment$fonction$adressetablisment$phoneacc$mail"ROLE_PARTENAIRE"$password$prixcnxparent$prixcnxpartenaire$reversecnxpart$reverseventepart);
  224.         if ($CODEpOSTALetablisment == "") {
  225.             $CODEpOSTALetablisment null;
  226.         }
  227.         $Etablisment->setCodepostaleatb($CODEpOSTALetablisment);
  228.         $Etablisment->setVille($villeetablisment);
  229.         $em->persist($Etablisment);
  230.         $em->flush();
  231.         //CREATION SEJOUR ACCOM + PARTENAIRE + ETABILSSEMENT
  232.         if ($EntityFonction) {
  233.             if ($EntityFonction->getType() == "vip") {
  234.                 $connpay 0;
  235.             }
  236.         }
  237.         $sejour $SejourService->CreationNouveauSejourParAccompagnateur($themSejour$adressSejour$dateDebut$FinSejour$AgeDugroupe$type$NbEnfant$connpay$pays$ville$prixcnxparent$prixcnxpartenaire$reversecnxpart$reverseventepart);
  238.         $sejour->setCodePostal(intval($codePostal));
  239.         $SejourService->affecterAccompaniateur($sejour$accomp);
  240.         $SejourService->affecterPartenaire($sejour$part);
  241.         $SejourService->affecteretablisment($sejour$Etablisment);
  242.         $em->persist($sejour);
  243.         $em->flush();
  244.         //AFFECTAION LOGO TO USER PARTENAIRE ADN ACCOMPAGNATEUR
  245.         if ($request->request->has('path')) {
  246.             $ty "logo séjour";
  247.             $AttachementService->creationLogoSejour($accomp$request->get('path'), $ty);
  248.             $AttachementService->creationLogoSejour($part$request->get('path'), $ty);
  249.         }
  250.         $TypeSejour 8;
  251.         $UserService->EnvoyerEmailAcommpatActivationNewMail($sejour$accomp);
  252.     
  253.        
  254.         $session $request->getSession();
  255.         $session->set('Sejour'$sejour->getId());
  256.         //$this->redirectToRoute('app_back_Acommpa');
  257.         return new JsonResponse(["idSejour" => $sejour->getId()]);
  258.     }
  259.     //inscription du parent 
  260.     /**
  261.      * @Route("/Parent/register", name="parent_register",methods={"POST","GET"})
  262.      */
  263.     public function registerparent(Request $request)
  264.     {
  265.         $UserService $this->UserService;
  266.         //
  267.         $nom $request->get("nomparent");
  268.         $prenom $request->get('prenomparent');
  269.         $mailparent $request->get("mailprent");
  270.         $numtel $request->get("numtel");
  271.         $passwordparent $request->get("passwordparent");
  272.         $confirmpassword $request->get("confirmpassword");
  273.         $notifsms $request->get("sms");
  274.         $notifmail $request->get('mailnotif');
  275.         if ($confirmpassword != $passwordparent) {
  276.             return new JsonResponse('erorpasswordconfirm');
  277.         }
  278.         $role "ROLE_PARENT";
  279.         $verification $UserService->verifmailold($mailparent);
  280.         //var_dump($verification);
  281.         if ($verification == NULL) {
  282.             $accomp $UserService->creationNewParent($nom$prenom$mailparent$numtel$role$passwordparent$notifsms$notifmail);
  283.             return new JsonResponse('done');
  284.         } else {
  285.             return new JsonResponse('eror');
  286.         }
  287.     }
  288.     /**
  289.      * @Route("/Accueil5sur5/5sur5", name="sur5")
  290.      */
  291.     public function sur5()
  292.     {
  293.         $produit $this->typeProduiteService;
  294.         $liste $produit->produitlistType();
  295.         //dd($liste);
  296.         return $this->render('Accueil/5sur5.html.twig', [
  297.             'produit' => $liste,
  298.         ]);
  299.     }
  300.     /**
  301.      * @Route("/Parent/Accueil5sur5/5sur5", name="5sur5Parent")
  302.      */
  303.     public function sur5Parent()
  304.     {
  305.         $produit $this->typeProduiteService;
  306.         $liste $produit->produitlistType();
  307.         //dd($liste);
  308.         return $this->render('Accueil/5sur5.html.twig', [
  309.             'produit' => $liste,
  310.         ]);
  311.     }
  312.     /**
  313.      * @Route("/Accueil5sur5/album/{id}", name="album")
  314.      */
  315.     public function produitlist($id)
  316.     {
  317.         $produit $this->typeProduiteService;
  318.         $liste $produit->produitlistType();
  319.         $produit $id;
  320.         //dd($liste);
  321.         return $this->render('Accueil/album.html.twig', [
  322.             'produit' => $liste,
  323.             'showArt' => $produit,
  324.         ]);
  325.     }
  326.     /**
  327.      * @Route("/Parent/Accueil5sur5/album/{id}", name="albumParent")
  328.      */
  329.     public function produitlistParent($id)
  330.     {
  331.         $produit $this->typeProduiteService;
  332.         $liste $produit->produitlistType();
  333.         // dd($liste);
  334.         $produit $id;
  335.         return $this->render('Accueil/album.html.twig', [
  336.             'produit' => $liste,
  337.             'showArt' => $produit,
  338.         ]);
  339.     }
  340.     /**
  341.      * @Route("/Accueil5sur5/AlaUne", name="AlaUne")
  342.      */
  343.     public function AlaUne()
  344.     {
  345.         $blogsbolt $this->blogService;
  346.         $list $blogsbolt->allblog();
  347.         //dd($list);
  348.         return $this->render('Accueil/AlaUne.html.twig', ['list' => $list]);
  349.     }
  350.     /**
  351.      * @Route("/Parent/Accueil5sur5/AlaUne", name="AlaUneParent")
  352.      */
  353.     public function AlaUneParent()
  354.     {
  355.         $blogsbolt $this->blogService;
  356.         $list $blogsbolt->allblog();
  357.         //dd($list);
  358.         return $this->render('Accueil/AlaUneParent.html.twig', ['list' => $list]);
  359.     }
  360.     /**
  361.      * @Route("/Accueil5sur5/DetailsAlaUne/{id}", name="DetailsAlaUne")
  362.      */
  363.     public function DetailsAlaUne($id)
  364.     {
  365.         $blo $this->blogService;
  366.         $blog $blo->myblog($id);
  367.         return $this->render('Accueil/DetailsAlaUne.html.twig', ['blog' => $blog]);
  368.     }
  369.     /**
  370.      * @Route("/ServiceClient", name="ServiceClient")
  371.      * */
  372.     public function ServiceClient()
  373.     {
  374.         $produit $this->typeProduiteService;
  375.         $liste $produit->produitlistType();
  376.         // dd($liste);
  377.         return $this->render('Accueil/ServiceClient.html.twig', [
  378.             'produit' => $liste,
  379.         ]);
  380.     }
  381.     /**
  382.      * @Route("/Besoindaide", name="Besoindaide")
  383.      */
  384.     public function Besoindaide(): Response
  385.     {
  386.         $produit $this->typeProduiteService;
  387.         $liste $produit->produitlistType();
  388.         // dd($liste);
  389.         return $this->render('Accueil/Besoindaide.html.twig', [
  390.             'produit' => $liste,
  391.         ]);
  392.     }
  393.     /**
  394.      * @Route("/Mentionlegale", name="Mentionlegale")
  395.      */
  396.     public function Mentionlegale()
  397.     {
  398.         return $this->render('Accueil/mentionlegal.html.twig', []);
  399.     }
  400.      /**
  401.      * @Route("/Mentions_legales", name="Mentions_legales")
  402.      */
  403.     public function Mentions_legales()
  404.     {
  405.         return $this->render('Accueil/mentionlegal.html.twig', []);
  406.     }
  407.        /**
  408.      * @Route("/Conditons_generales", name="Conditons_generales")
  409.      */
  410.     public function Conditons_generales()
  411.     {
  412.         return $this->render('Accueil/Condition.html.twig', []);
  413.     }
  414.     /**
  415.      * @Route("/Conditongeneral", name="Conditongeneral")
  416.      */
  417.     public function Conditongeneral()
  418.     {
  419.         return $this->render('Accueil/Condition.html.twig', []);
  420.     }
  421.     /**
  422.      * @Route("/Politique", name="Politique")
  423.      */
  424.     public function Politique()
  425.     {
  426.         return $this->render('Accueil/politique.html.twig', []);
  427.     }
  428.     /**
  429.      * @Route("/unsubscribe-user", name="unsubscribe_user")
  430.      */
  431.     public function unsubscribeUser(Request $requestEntityManagerInterface $em): Response
  432.     {
  433.         $email $request->query->get('email');
  434.         
  435.         if (!$email) {
  436.             return $this->render('unsubscribe/error.html.twig', [
  437.                 'message' => 'Email manquant'
  438.             ]);
  439.         }
  440.         $user $em->getRepository(User::class)->findOneBy(['email' => $email]);
  441.         if (!$user) {
  442.             return $this->render('unsubscribe/error.html.twig', [
  443.                 'message' => 'Utilisateur non trouvé'
  444.             ]);
  445.         }
  446.         $user->setShowpubprod('unsuscribe');
  447.         $em->flush();
  448.         return $this->render('unsubscribe/success.html.twig', [
  449.             'email' => $email
  450.         ]);
  451.     }
  452.     /**
  453.      * @Route("/contact", name="app_contact", methods={"POST"})
  454.      */
  455.     public function processContactForm(Request $request): Response
  456.     {
  457.         try {
  458.             // Récupérer les données du formulaire
  459.             $name $request->request->get('name');
  460.             $email $request->request->get('email');
  461.             $subject $request->request->get('subject');
  462.             $message $request->request->get('message');
  463.             // Validation des données
  464.             if (empty($name) || empty($email) || empty($message)) {
  465.                 return new JsonResponse([
  466.                     'success' => false,
  467.                     'message' => 'Tous les champs obligatoires doivent être remplis.'
  468.                 ], 400);
  469.             }
  470.             if (!filter_var($emailFILTER_VALIDATE_EMAIL)) {
  471.                 return new JsonResponse([
  472.                     'success' => false,
  473.                     'message' => 'L\'adresse email n\'est pas valide.'
  474.                 ], 400);
  475.             }
  476.             // Préparer le sujet par défaut si vide
  477.             if (empty($subject)) {
  478.                 $subject 'Nouveau message de contact - 5sur5séjour';
  479.             }
  480.             // Créer l'email
  481.             $emailContent = (new TemplatedEmail())
  482.                 ->from(new Address('info@5sur5sejour.com''5sur5 Séjour'))
  483.                 ->to(new Address('contact@5sur5sejour.com''Contact 5sur5séjour'))
  484.                 ->addCc(new Address('ramzi.benlarbi@gmail.com''Ramzi Benlarbi'))
  485.                 ->subject($subject)
  486.                 ->htmlTemplate('emails/contact_form.html.twig')
  487.                 ->context([
  488.                     'name' => $name,
  489.                     'email' => $email,
  490.                     'subject' => $subject,
  491.                     'message' => $message,
  492.                     'date' => new \DateTime()
  493.                 ]);
  494.             // Envoyer l'email
  495.             $this->mailer->send($emailContent);
  496.             // Logger le succès
  497.             $this->logger->info('Email de contact envoyé avec succès', [
  498.                 'from' => $email,
  499.                 'name' => $name,
  500.                 'subject' => $subject
  501.             ]);
  502.             return new JsonResponse([
  503.                 'success' => true,
  504.                 'message' => 'Votre message a été envoyé avec succès ! Nous vous répondrons dans les plus brefs délais.'
  505.             ]);
  506.         } catch (\Exception $e) {
  507.             // Logger l'erreur
  508.             $this->logger->error('Erreur lors de l\'envoi de l\'email de contact', [
  509.                 'error' => $e->getMessage(),
  510.                 'trace' => $e->getTraceAsString()
  511.             ]);
  512.             return new JsonResponse([
  513.                 'success' => false,
  514.                 'message' => 'Une erreur est survenue lors de l\'envoi du message. Veuillez réessayer plus tard.'
  515.             ], 500);
  516.         }
  517.     }
  518. }