src/Service/UserService.php line 711

Open in your IDE?
  1. <?php
  2. namespace App\Service;
  3. /**
  4.  * Created by PhpStorm.
  5.  * User: Appsfact-02
  6.  * Date: 14/11/2019
  7.  * Time: 13:13
  8.  */
  9. use App\Entity\Produit;
  10. use App\Entity\Ref;
  11. use App\Service\EmailsCmdService;
  12. use App\Entity\User;
  13. use App\Entity\ParentSejour;
  14. use App\Entity\Etablisment;
  15. use App\Entity\Attachment;
  16. use App\Entity\Adress;
  17. use App\Entity\Comptebancaire;
  18. use App\Entity\Sejour;
  19. use App\Entity\Jourdescripdate;
  20. use App\Entity\Documentpartenaire;
  21. use Swift_Image;
  22. use App\Entity\Emailing;
  23. use App\Entity\SejourAttachment;
  24. use Doctrine\Persistence\ManagerRegistry;
  25. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  26. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  27. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  28. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  29. use Twig\Environment;
  30. use Symfony\Component\Mailer\MailerInterface;
  31. use Symfony\Component\Mime\Email;
  32. use Symfony\Component\Mime\Address;
  33. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  34. use setasign\Fpdi\Fpdi;
  35. use setasign\Fpdi\PdfReader;
  36. class UserService
  37. {
  38.     private $em;
  39.     private $mailer;
  40.     private $router;
  41.     private $second_mailer;
  42.     private $passwordEncoder;
  43.     private $templating;
  44.     private $session;
  45.     private $params;
  46.     private $emailsCmdService;
  47.     private MailerInterface $mailerInterface;
  48.     private $kernel;
  49.     public function __construct(ManagerRegistry $em\Swift_Mailer $mailer\Swift_Mailer $second_mailerUrlGeneratorInterface $routerUserPasswordHasherInterface $passwordEncoderEnvironment $templatingSessionInterface $sessionParameterBagInterface $paramsEmailsCmdService $emailsCmdServiceMailerInterface $mailerInterface$kernel)
  50.     {
  51.         $this->em $em;
  52.         $this->mailer $mailer;
  53.         $this->second_mailer $second_mailer;
  54.         $this->router $router;
  55.         $this->passwordEncoder $passwordEncoder;
  56.         $this->templating $templating;
  57.         $this->session $session;
  58.         $this->params $params;
  59.         $this->emailsCmdService $emailsCmdService;
  60.         $this->mailerInterface $mailerInterface;
  61.         $this->kernel $kernel;
  62.         
  63.     }
  64.     /**
  65.      * Méthode privée pour envoyer les emails directement avec Symfony Mailer
  66.      * Sans passer par la queue Messenger
  67.      */
  68.     private function sendEmailDirect(
  69.         string $to,
  70.         string $subject,
  71.         string $template,
  72.         array $context = [],
  73.         string $from 'infotp@5sur5sejour.com',
  74.         array $attachments = []
  75.     ): bool {
  76.         try {
  77.             $email = (new TemplatedEmail())
  78.                 ->from(new Address($from'5sur5 Séjour'))
  79.                 ->to($to)
  80.                 ->subject($subject)
  81.                 ->htmlTemplate($template)
  82.                 ->context($context);
  83.             // Ajouter les pièces jointes si présentes
  84.             foreach ($attachments as $path => $name) {
  85.                 if (file_exists($path)) {
  86.                     $email->attachFromPath($path$name);
  87.                 }
  88.             }
  89.             // Envoyer directement sans passer par la queue
  90.             $this->mailerInterface->send($email);
  91.             error_log("Email envoyé directement à: " $to " - Sujet: " $subject);
  92.             return true;
  93.         } catch (\Exception $e) {
  94.             error_log("Erreur envoi email direct: " $e->getMessage());
  95.             return false;
  96.         }
  97.     }
  98.     /**
  99.      * Méthode publique pour envoyer un email directement sans queue
  100.      * Utilisée pour forcer l'envoi immédiat
  101.      */
  102.     public function sendEmailDirectly(
  103.         string $to,
  104.         string $subject,
  105.         string $template,
  106.         array $context = [],
  107.         string $from 'info@5sur5sejour.com',
  108.         array $attachments = []
  109.     ): bool {
  110.         return $this->sendEmailDirect($to$subject$template$context$from$attachments);
  111.     }
  112.     function creationNewUser($nom$prenom$etablisment$fonction$adressetablisment$phone$email$password$role)
  113.     {
  114.         $user = new User();
  115.         $user->setNom($nom);
  116.         $user->setPrenom($prenom);
  117.         $user->setNummobile($phone);
  118.         $user->setFonction($fonction);
  119.         $user->setAdresse($adressetablisment);
  120.         $user->setNometablisment($etablisment);
  121.         $user->setEmail(trim($email));
  122.         $user->setPassword(
  123.             $this->passwordEncoder->hashPassword(
  124.                 $user,
  125.                 $password
  126.             )
  127.         );
  128.         $user->setPasswordNonCripted($password);
  129.         $user->setDateCreation(new \DateTime());
  130.         $user->addRole($role);
  131.         $this->em->getManager()->persist($user);
  132.         $this->em->getManager()->flush();
  133.         return $user;
  134.     }
  135.     function creationNewAcommpa($nom$prenom$etablisment$fonction$adressetablisment$phoneacc$mail$role$password$reponseemail)
  136.     {
  137.         $user = new User();
  138.         $user->setNom($nom);
  139.         $user->setPrenom($prenom);
  140.         $user->setUsername($mail);
  141.         $user->setReponseemail(trim($reponseemail));
  142.         // $user->setUsername($identifiant);
  143.         $user->setFonction($fonction);
  144.         $user->setNummobile($phoneacc);
  145.         $user->setEmail(trim($mail));
  146.         $user->setAdresse($adressetablisment);
  147.         $user->setNometablisment($etablisment);
  148.         //$user->setnometablisment();
  149.         $user->setDateCreation(new \DateTime());
  150.         $user->addRole($role);
  151.         $user->setPasswordNonCripted($password);
  152.         $user->setPassword(
  153.             $this->passwordEncoder->hashPassword(
  154.                 $user,
  155.                 $password
  156.             )
  157.         );
  158.         $this->em->getManager()->persist($user);
  159.         $this->em->getManager()->persist($user);
  160.         $this->em->getManager()->flush();
  161.         return $user;
  162.     }
  163.     function creationNewEtablisment($par$nom$prenom$etablisment$fonction$adressetablisment$phoneacc$mail$role$password$prixcnxparent$prixcnxpartenaire$reversecnxpart$reverseventepart)
  164.     {
  165.         $type "ECOLES/AUTRES";
  166.         $EtabL = new Etablisment();
  167.         $EtabL->setNometab($etablisment);
  168.         $EtabL->setTypeetablisment($type);
  169.         // $user->setUsername($identifiant);
  170.         $EtabL->setFonctioncontact($fonction);
  171.         $EtabL->setNumerotelp($phoneacc);
  172.         $EtabL->setEmail(trim($mail));
  173.         $EtabL->setAdresseetab($adressetablisment);
  174.         $EtabL->setUser($par); //$user->setnometablisment();
  175.         $EtabL->setPrixcnxparent($prixcnxparent);
  176.         $EtabL->setPrixcnxpartenaire($prixcnxpartenaire);
  177.         $EtabL->setReversecnxpart($reversecnxpart);
  178.         $EtabL->setReverseventepart($reverseventepart);
  179.         $this->em->getManager()->persist($EtabL);
  180.         $this->em->getManager()->flush();
  181.         return $EtabL;
  182.     }
  183.     public function updatUSER($id$nom$prenom$adresse$phone$password$statut null)
  184.     {
  185.         $user $this->em->getRepository(User::class)->find($id);
  186.         $refstatut $this->em->getRepository(Ref::class)->find($statut);
  187.         $user->setNom($nom);
  188.         $user->setPrenom($prenom);
  189.         $user->setAdresse($adresse);
  190.         $user->setNummobile($phone);
  191.         $user->setStatut($refstatut);
  192.         $user->setPasswordNonCripted($password);
  193.         $user->setPassword(
  194.             $this->passwordEncoder->hashPassword(
  195.                 $user,
  196.                 $password
  197.             )
  198.         );
  199.         $this->em->getManager()->persist($user);
  200.         $this->em->getManager()->flush();
  201.         return $user;
  202.     }
  203.     public function updatPassw($id$password)
  204.     {
  205.         $user $this->em->getRepository(User::class)->find($id);
  206.         $user->setPassword(
  207.             $this->passwordEncoder->hashPassword(
  208.                 $user,
  209.                 $password
  210.             )
  211.         );
  212.         $user->setPasswordNonCripted($password);
  213.         $this->em->getManager()->persist($user);
  214.         $this->em->getManager()->flush();
  215.         return $user;
  216.     }
  217.     function GenerateTokken($user)
  218.     {
  219.         $userHash hash("sha256"$user->getUsername() . $user->getId());
  220.         return $userHash;
  221.     }
  222.     function generateUrlNewPassword($user)
  223.     {
  224.         $directUrl $this->router->generate('directloginOM_token', array('token' => $user->getUsername(), 'userHash' => $this->GenerateTokken($user)), UrlGeneratorInterface::ABSOLUTE_URL);
  225.         return $directUrl;
  226.     }
  227.     function sendPasswordMail($email$url)
  228.     {
  229.     
  230.         $emailMessage = (new TemplatedEmail())
  231.             ->from(new Address('info@5sur5sejour.com''5sur5 Séjour'))
  232.             ->to($email)
  233.             ->subject('Mot de passe oublié 5sur5sejour')
  234.             ->htmlTemplate('emails/newPass.html.twig')
  235.             ->context([
  236.                 'Url' => $url,
  237.             ]);
  238.         try {
  239.             $this->mailerInterface->send($emailMessage);
  240.             return true;
  241.         } catch (\Exception $e) {
  242.             return false;
  243.         }
  244.     }
  245.     function getUserAcc($id)
  246.     {
  247.         $user $this->em->getRepository(User::class)->find($id);
  248.         return $user;
  249.     }
  250.     function getUserAccALL()
  251.     {
  252.         $user $this->em->getRepository(User::class)->findByRole('ROLE_ACC');
  253.         return $user;
  254.     }
  255.     function getUserbyRole($role)
  256.     {
  257.         $user $this->em->getRepository(User::class)->findByRole($role);
  258.         return $user;
  259.     }
  260.     function affectationRole($userId$role)
  261.     {
  262.         $roles "[$role]";
  263.         $user $this->em->getRepository(User::class)->find($userId);
  264.         $user->setRoles($roles);
  265.         $this->em->getManager()->persist($user);
  266.         $this->em->getManager()->flush();
  267.         return $user;
  268.     }
  269.     function affectationStatut($userId$statutref)
  270.     {
  271.         $user $this->em->getRepository(User::class)->find($userId);
  272.         $statut $this->em->getRepository(Ref::class)->find($statutref);
  273.         $user->setStatut($statut);
  274.         $this->em->getManager()->persist($user);
  275.         $this->em->getManager()->flush();
  276.         return $user;
  277.     }
  278.     function EnvoyerEmailNewUser($user)
  279.     {
  280.         $RefEmail $this->em->getRepository(Ref::class)->find(20);
  281.         $Email $this->em->getRepository(Emailing::class)->findOneBy(array('typeemail' => $RefEmail));
  282.         $sendTo $user->getEmail();
  283.         
  284.         // Préparer les images pour le template
  285.         $pathImage2 $Email->getIdImage2()->getPath();
  286.         $pathImage1 $Email->getIdImage1()->getPath();
  287.         // Utiliser l'envoi direct sans queue
  288.         $this->sendEmailDirect(
  289.             $sendTo,
  290.             'Bienvenue à 5sur5 séjour',
  291.                 'emails/DemandeCreationUser.html.twig',
  292.                 [
  293.                     "Nomdestinataire" => $user->getNom(),
  294.                     "Predestinataire" => $user->getPrenom(),
  295.                 "image1" => "https://res.cloudinary.com/apss-factory/image/upload/a_exif/v1582274063/qw7csxayektmq1leqjpp.png",
  296.                 "image2" => "https://res.cloudinary.com/apss-factory/image/upload/a_exif/v1582274055/ackjwfswxqtv4kuhethg.png",
  297.                 "iconfooter" => "https://res.cloudinary.com/apss-factory/image/upload/v1582719651/Picto5sur5_rapbfy.png",
  298.                 "iconphoto" => "https://res.cloudinary.com/apss-factory/image/upload/v1582719650/Groupe_419_pqx0dx.png",
  299.                 "iconloca" => "https://res.cloudinary.com/apss-factory/image/upload/v1582719650/Groupe_420_uynuqz.png",
  300.                 "iconmsg" => "https://res.cloudinary.com/apss-factory/image/upload/v1582719651/Groupe_418_wbyysk.png",
  301.                     "identifiant" => $sendTo,
  302.                 "senduser" => $user,
  303.                     "roles" => $user->getRoles()
  304.                 ]
  305.         );
  306.     }
  307.     function EnvoyerEmailAlbumUser($user)
  308.     {
  309.         $RefEmail $this->em->getRepository(Ref::class)->find(20);
  310.         $Email $this->em->getRepository(Emailing::class)->findOneBy(array('typeemail' => $RefEmail));
  311.         $sendTo $user->getEmail();
  312.         $senduser $user;
  313.         $message = (new \Swift_Message(" Immortalisez les souvenirs inoubliables du séjour de votre enfant !"))
  314.             ->setFrom('info@5sur5sejour.com')
  315.             ->setTo($sendTo);
  316.         //->setBcc(["contact@5sur5sejour.com"]);
  317.         $pathImage2 $Email->getIdImage2()->getPath();
  318.         $pathImage1 $Email->getIdImage1()->getPath();
  319.         $image1 $message->embed(Swift_Image::fromPath("$pathImage1"));
  320.         $image2 $message->embed(Swift_Image::fromPath("$pathImage2"));
  321.         $iconphoto $message->embed(Swift_Image::fromPath("https://res.cloudinary.com/apss-factory/image/upload/v1582719650/Groupe_419_pqx0dx.png"));
  322.         $iconloca $message->embed(Swift_Image::fromPath("https://res.cloudinary.com/apss-factory/image/upload/v1582719650/Groupe_420_uynuqz.png"));
  323.         $iconmsg $message->embed(Swift_Image::fromPath("https://res.cloudinary.com/apss-factory/image/upload/v1582719651/Groupe_418_wbyysk.png"));
  324.         $iconfooter $message->embed(Swift_Image::fromPath("https://res.cloudinary.com/apss-factory/image/upload/v1582719651/Picto5sur5_rapbfy.png"));
  325.         $message->setBody(
  326.             $this->templating->render(
  327.                 'emails/Album_Sej_Notif.html.twig',
  328.                 [
  329.                     "nom" => $user->getNom(),
  330.                     "prenom" => $user->getPrenom(),
  331.                     "image1" => $image1,
  332.                     "image2" => $image2,
  333.                     "iconfooter" => $iconfooter,
  334.                     "iconphoto" => $iconphoto,
  335.                     "iconloca" => $iconloca,
  336.                     "iconmsg" => $iconmsg,
  337.                     'imggarcon' => $iconmsg,
  338.                     "identifiant" => $sendTo,
  339.                     "senduser" => $senduser,
  340.                     "roles" => $user->getRoles()
  341.                 ]
  342.             ),
  343.             'text/html'
  344.         );
  345.         $signMail $this->params->get('signMail');
  346.         if ($signMail == 'yes') {
  347.             $domainName $this->params->get('domaine');
  348.             $selector $this->params->get('selector');
  349.             $PrivateKey =  file_get_contents($this->params->get('pathDKIM'));
  350.             $signer = new \Swift_Signers_DKIMSigner($PrivateKey$domainName$selector);
  351.             $message->attachSigner($signer);
  352.         }
  353.         try {
  354.             $this->mailer->send($message);
  355.         } catch (\Swift_SwiftException $ex) {
  356.             $ex->getMessage();
  357.         }
  358.     }
  359.     function setadresslivraison($num$rue$ville$pays$codepostal$iduser$prenom$nom$organism$prenomfacturation$nomfacturation$organismfacturation$numfacturation$ruefacturation$villefacturation$paysfacturation$codepostalfacturation$usernomAcommpa$userprenomAcommpa$userfonctionAcommpa$useretablismentAcommpa$useremailcommpa$sejourthem$adresssejour$id)
  360.     {
  361.         $user $this->em->getRepository(User::class)->find($iduser);
  362.         $sejour $this->em->getRepository(Sejour::class)->find($id);
  363.         $Adress = new Adress;
  364.         $Adress->setNumadress($num);
  365.         $Adress->setRuevoi($rue);
  366.         $Adress->setCodepostal($codepostal);
  367.         $Adress->setVille($ville);
  368.         $Adress->setPays($pays);
  369.         $Adress->setOrganism($organism);
  370.         $Adress->setNomadrres($nom);
  371.         $Adress->setPrenomadress($prenom);
  372.         $Adress->settype('livraison');
  373.         $this->em->getManager()->persist($Adress);
  374.         $this->em->getManager()->flush();
  375.         $user->setadresslivraison($Adress);
  376.         $AdressFacturation = new Adress;
  377.         $AdressFacturation->setNumadress($numfacturation);
  378.         $AdressFacturation->setRuevoi($ruefacturation);
  379.         $AdressFacturation->setCodepostal($codepostalfacturation);
  380.         $AdressFacturation->setVille($villefacturation);
  381.         $AdressFacturation->setPays($paysfacturation);
  382.         $AdressFacturation->setOrganism($organismfacturation);
  383.         $AdressFacturation->setNomadrres($nomfacturation);
  384.         $AdressFacturation->setPrenomadress($prenomfacturation);
  385.         $AdressFacturation->settype('Facturation');
  386.         $this->em->getManager()->persist($AdressFacturation);
  387.         $this->em->getManager()->flush();
  388.         $user->setAdressfactoration($AdressFacturation);
  389.         $user->setNom($usernomAcommpa);
  390.         $user->setPrenom($userprenomAcommpa);
  391.         $user->setEmail(trim($useremailcommpa));
  392.         $user->setFonction($userfonctionAcommpa);
  393.         $user->setEtablisment($useretablismentAcommpa);
  394.         $this->em->getManager()->persist($user);
  395.         $this->em->getManager()->flush();
  396.         $sejour->setThemSejour($sejourthem);
  397.         $sejour->setAdresseSejour($adresssejour);
  398.         $this->em->getManager()->persist($sejour);
  399.         $this->em->getManager()->flush();
  400.         return $user;
  401.     }
  402.     function setadressfacturation($nom$rue$ville$pays$codepostal$iduser)
  403.     {
  404.         $user $this->em->getRepository(User::class)->find($iduser);
  405.         $Adress = new Adress;
  406.         $Adress->setNumadress($nom);
  407.         $Adress->setRuevoi($rue);
  408.         $Adress->setCodepostal($codepostal);
  409.         $Adress->setVille($ville);
  410.         $Adress->setPays($pays);
  411.         $Adress->settype('facturation');
  412.         $this->em->getManager()->persist($Adress);
  413.         $this->em->getManager()->flush();
  414.         $user->setadresslivraison($Adress);
  415.         return $user;
  416.     }
  417.     function setDescriptionAttch($id$decription)
  418.     {
  419.         $attachment $this->em->getRepository(Attachment::class)->find($id);
  420.         $attachment->setDescreption($decription);
  421.         $this->em->getManager()->persist($attachment);
  422.         $this->em->getManager()->flush();
  423.         return $attachment;
  424.     }
  425.     function DelDescriptionAttch($id)
  426.     {
  427.         $attachment $this->em->getRepository(Attachment::class)->find($id);
  428.         $attachment->setDescreption(null);
  429.         $this->em->getManager()->persist($attachment);
  430.         $this->em->getManager()->flush();
  431.         return $attachment;
  432.     }
  433.     function supprimaudio($id)
  434.     {
  435.         $attachment $this->em->getRepository(Attachment::class)->find($id);
  436.         $sejattachment $this->em->getRepository(SejourAttachment::class)->findBy(array('idAttchment' => $attachment));
  437.         foreach ($sejattachment as $sejar) {
  438.             $this->em->getManager()->remove($sejar);
  439.             $this->em->getManager()->flush();
  440.         }
  441.         $this->em->getManager()->remove($attachment);
  442.         $this->em->getManager()->flush();
  443.         return ("done");
  444.     }
  445.     public function ajouterdatesejourdescription($id$description$datedescription)
  446.     {
  447.         $sejour $this->em->getRepository(Sejour::class)->find($id);
  448.         $Jourdescripdate = new Jourdescripdate();
  449.         // $datedescription is now a string like "02/05/2025"
  450.         $dat date_create_from_format('m/d/Y'$datedescription);
  451.         $Jourdescripdate->setDatejourphoto($dat);
  452.         $Jourdescripdate->setDescription($description);
  453.         $Jourdescripdate->setIdIdsejour($sejour);
  454.         $this->em->getManager()->persist($Jourdescripdate);
  455.         $this->em->getManager()->flush();
  456.         return $Jourdescripdate;
  457.     }
  458.     function supprimdescription($iddescription)
  459.     {
  460.         $Jourdescripdate $this->em->getRepository(Jourdescripdate::class)->find($iddescription);
  461.         $this->em->getManager()->remove($Jourdescripdate);
  462.         $this->em->getManager()->flush();
  463.         return $Jourdescripdate;
  464.     }
  465.     function activationmail($idparent)
  466.     {
  467.         $user $this->em->getRepository(User::class)->find($idparent);
  468.         $user->setActivatemail(1);
  469.         $this->em->getManager()->persist($user);
  470.         $this->em->getManager()->flush();
  471.         return $user;
  472.     }
  473.     function modificationdescription($iddescription$description)
  474.     {
  475.         $Jourdescripdate $this->em->getRepository(Jourdescripdate::class)->find($iddescription);
  476.         //dd($iddescription);
  477.         $Jourdescripdate->setDescription($description);
  478.         $this->em->getManager()->persist($Jourdescripdate);
  479.         $this->em->getManager()->flush();
  480.         return $Jourdescripdate;
  481.     }
  482.     function creationNewParent($nom$prenom$mailparent$numtel$role$passwordparent$notifsms$notifmail)
  483.     {
  484.         ini_set("max_execution_time", -1);
  485.         ini_set('memory_limit''-1');
  486.         $user = new User();
  487.         $user->setNom($nom);
  488.         $user->setPrenom($prenom);
  489.         $user->setUsername($mailparent);
  490.         $user->setSmsnotif($notifsms);
  491.         $user->setMailnotif($notifmail);
  492.         $user->setShowpubprod(true);
  493.         // $user->setUsername($identifiant);
  494.         $user->setNummobile($numtel);
  495.         $user->setEmail(trim($mailparent));
  496.         $user->setDateCreation(new \DateTime());
  497.         $user->addRole($role);
  498.         $user->setPassword(
  499.             $this->passwordEncoder->hashPassword(
  500.                 $user,
  501.                 $passwordparent
  502.             )
  503.         );
  504.         $this->em->getManager()->persist($user);
  505.         $this->em->getManager()->flush();
  506.         //$ParentSejour = new ParentSejour();
  507.         //$ParentSejour->setIdParent($user);
  508.         //$ParentSejour->setDateCreation(new \DateTime());
  509.         // $this->em->getManager()->persist($ParentSejour);
  510.         //$this->em->getManager()->flush();
  511.       //  $this->EnvoyerEmailNewParent($user);
  512.         $this->EnvoyerEmailNewParentActivation($user);
  513.         return $user;
  514.     }
  515.     function EnvoyerEmailNewParentActivation($user)
  516.     {
  517.       // Générer le lien de connexion
  518.       $loginUrl "5sur5sejour.com";
  519.       if ($user != null) {
  520.           $loginUrl $this->emailsCmdService->requestLoginLink($user);
  521.       }
  522.         // Create email with Symfony Mailer
  523.         $email = (new Email())
  524.             ->from('info@5sur5sejour.com')
  525.             ->to(trim($user->getEmail()))
  526.             ->subject('🤗 Bienvenue sur 5sur5séjour – Activez votre espace parent')
  527.             ->html(
  528.                 $this->templating->render(
  529.                     'emails/Activatiocompte.html.twig',
  530.                     [
  531.                         "parent" => $user,
  532.                         "loginLink" => $loginUrl,
  533.                         "image1" => "https://res.cloudinary.com/apss-factory/image/upload/a_exif/v1582274063/qw7csxayektmq1leqjpp.png",
  534.                         "image2" => "https://res.cloudinary.com/apss-factory/image/upload/a_exif/v1582274055/ackjwfswxqtv4kuhethg.png",
  535.                         "iconfooter" => "https://res.cloudinary.com/apss-factory/image/upload/v1582719651/Picto5sur5_rapbfy.png",
  536.                     ]
  537.                 )
  538.             );
  539.         // Add DKIM signature if configured
  540.         $signMail $this->params->get('signMail');
  541.         if ($signMail == 'yes') {
  542.             $domainName $this->params->get('domaine');
  543.             $selector $this->params->get('selector');
  544.             $privateKeyPath $this->params->get('pathDKIM');
  545.             
  546.             // For DKIM with Symfony Mailer, you need to configure it in the DSN or use a custom transport
  547.             // This would typically be done in your .env file or through a transport factory
  548.         }
  549.         
  550.         // Send email
  551.         try {
  552.             $this->mailerInterface->send($email);
  553.             return 1;
  554.         } catch (\Exception $e) {
  555.             // Log error
  556.             return 0;
  557.         }
  558.     }
  559.     /**
  560.      * Envoie l'email de bienvenue au partenaire après création de compte
  561.      * 
  562.      * @param User $partenaire Le compte partenaire créé
  563.      * @param string $packType Le type de pack (pack_decouverte, pack_serenite, pack_pro_reseaux)
  564.      * @return bool
  565.      */
  566.     function EnvoyerEmailBienvenuePartenaire($partenaire,  $produitType)
  567.     {
  568.         $sendTo =" yousra.tlich@gmail.com"// $partenaire->getEmail();
  569.         
  570.         // Vérifications critiques avec messages détaillés
  571.         if (empty($sendTo)) { 
  572.             throw new \Exception("Email partenaire vide");
  573.         }
  574.         if (empty($partenaire->getPasswordNonCripted())) { 
  575.             throw new \Exception("Mot de passe partenaire non disponible");
  576.         }
  577.         if (empty($produitType)) {
  578.             throw new \Exception("Type de produit non fourni");
  579.         }
  580.         
  581.         // Récupérer les infos du pack depuis getPackInfo()
  582.         $packSlug strtolower(str_replace(['Pack '' '], ['''_'], $produitType->getLabeletype()));
  583.         
  584.         // Déterminer la clé du pack
  585.         if ($packSlug === 'découverte') {
  586.             $packKey 'pack_decouverte';
  587.         } elseif ($packSlug === 'sérénité') {
  588.             $packKey 'pack_serenite';
  589.         } elseif ($packSlug === 'pro_réseaux') {
  590.             $packKey 'pack_pro_reseaux';
  591.         } else {
  592.             $packKey 'pack_serenite'// Par défaut
  593.         }
  594.         
  595.         // Récupérer les informations complètes du pack
  596.         $packInfo $this->getPackInfo($packKey);
  597.         
  598.         // Générer un token d'auto-login (hash basé sur l'email et l'ID)
  599.         $loginToken hash('sha256'$partenaire->getEmail() . $partenaire->getId() . $partenaire->getPassword());
  600.         
  601.         // Stocker le token dans le user pour validation ultérieure
  602.         $partenaire->setJeton($loginToken);
  603.         $this->em->getManager()->persist($partenaire);
  604.         $this->em->getManager()->flush();
  605.         
  606.         // Générer l'URL d'activation avec auto-login
  607.         $activationUrl "https://futur.5sur5sejour.fr/Partenaire/Activation?pack=" $packInfo['slug'] . "&token=" $loginToken "&email=" urlencode($partenaire->getEmail());
  608.         
  609.         // Créer l'email
  610.         $email = (new TemplatedEmail())
  611.             ->from(new Address('info@5sur5sejour.com''5sur5 Séjour'))
  612.             ->to($sendTo)
  613.             ->subject('🚀 Bienvenue chez 5sur5Séjour – Votre ' $packInfo['name'] . ' est activé')
  614.             ->htmlTemplate('emails/BienvenuePartenaire.html.twig')
  615.             ->context([
  616.                 'nom' => $partenaire->getNom(),
  617.                 'prenom' => $partenaire->getPrenom(),
  618.                 'emailPartenaire' => $partenaire->getReponseemail(),
  619.                 'password' => $partenaire->getPasswordNonCripted(),
  620.                 'packName' => $packInfo['name'],
  621.                 'packSlug' => $packInfo['slug'],
  622.                 'features' => $packInfo['features'], // Array des features du pack
  623.                 'activationUrl' => $activationUrl,
  624.                 'etablissement' => $partenaire->getNometablisment(),
  625.                 'adresse' => $partenaire->getAdresse(),
  626.                 'codePostal' => null,
  627.                 'ville' => null,
  628.             ]);
  629.         // Envoyer l'email
  630.         $this->mailerInterface->send($email);
  631.         return true;
  632.     }
  633.     /**
  634.      * Retourne les informations d'un pack partenaire
  635.      */
  636.     private function getPackInfo($packType)
  637.     {
  638.         $packs = [
  639.             'pack_decouverte' => [
  640.                 'name' => 'Pack Découverte',
  641.                 'slug' => 'decouverte',
  642.                 'activationUrl' => 'https://futur.5sur5sejour.fr/Partenaire/Activation?pack=decouverte',
  643.                 'features' => [
  644.                     'Création de séjours illimitée (jusqu\'à 10/an)',
  645.                     'Galerie photos & vidéos sécurisée',
  646.                     'Consentements RGPD - données hébergées en France',
  647.                     'Boîte vocale en option (+5€/séjour)',
  648.                     'Support standard'
  649.                 ]
  650.             ],
  651.             'pack_serenite' => [
  652.                 'name' => 'Pack Sérénité',
  653.                 'slug' => 'serenite',
  654.                 'activationUrl' => 'https://futur.5sur5sejour.fr/Partenaire/Activation?pack=serenite',
  655.                 'features' => [
  656.                     'Création de séjours illimitée',
  657.                     'Galerie photos & vidéos sécurisée',
  658.                     'Consentements RGPD - données hébergées en France',
  659.                     'Boîte vocale téléphonique illimitée incluse',
  660.                     'Statistiques d\'écoute et journal d\'émission',
  661.                     'Onboarding live 1h',
  662.                     'Support prioritaire & archivage automatique',
  663.                     'Partage des bénéfices sur albums et tirages familles'
  664.                 ]
  665.             ],
  666.             'pack_pro_reseaux' => [
  667.                 'name' => 'Pack Pro Réseaux',
  668.                 'slug' => 'pro_reseaux',
  669.                 'activationUrl' => 'https://futur.5sur5sejour.fr/Partenaire/Activation?pack=pro_reseaux',
  670.                 'features' => [
  671.                     'Tout le pack Sérénité inclus',
  672.                     'Appels illimités toute l\'année',
  673.                     'Création et configuration des séjours par notre équipe',
  674.                     'Pilotage réseau : multi-sites, rôles avancés',
  675.                     'Rapports mensuels détaillés',
  676.                     'Assistance prioritaire (SLA)',
  677.                     'Contrat cadre 12 mois, facturation mensuelle'
  678.                 ]
  679.             ]
  680.         ];
  681.         return $packs[$packType] ?? $packs['pack_serenite'];
  682.     }
  683.     function EnvoyerEmailAcommpatActivationNewMail($sejour$accomp)
  684.     {
  685.         $sendTo $accomp->getReponseemail();
  686.         $codeSej $sejour->getCodesejour();
  687.         
  688.         // ⚠️ VÉRIFICATION DES DONNÉES CRITIQUES
  689.         if (empty($sendTo)) { return false; }
  690.         if (empty($codeSej)) { return false; }
  691.         if (empty($accomp->getPasswordNonCripted())) { return false; }
  692.         
  693.         // Générer le lien de connexion
  694.         $loginUrl "5sur5sejour.com";
  695.         if ($accomp != null) {
  696.             $loginUrl $this->emailsCmdService->requestLoginLink($accomp);
  697.         }
  698.        // /var/www/5sur5sejour/public/pdf/Mode_emploi_Parent_5sur5sejour_v5_.pdf
  699.         // Générer les PDFs
  700.         $publicDirectory $this->params->get('kernel.project_dir') . '/public/pdf/';
  701.         $pdfFilepath1 $publicDirectory "Mode d'emploi 5sur5sejour" $sejour->getId() . ".pdf";
  702.         $pdfFilepath2 $publicDirectory "Mode d'emploi parent G 5sur5séjour " $sejour->getId() . ".pdf";
  703.         // Créer l'email avec Symfony Mailer
  704.         $email = (new TemplatedEmail())
  705.             ->from(new Address('info@5sur5sejour.com''5sur5 Séjour'))
  706.             ->to($sendTo)
  707.             ->subject('🚀  Votre espace accompagnateur 5sur5séjour est prêt')
  708.             ->htmlTemplate('emails/Activatiocompteaccompa.html.twig')
  709.             ->context([
  710.                 "identifiant" => $sendTo,
  711.                 "code" => $codeSej,
  712.                 "password" => $accomp->getPasswordNonCripted(),
  713.                 "senduser" => $accomp,
  714.                 "nom" => $accomp->getNom(),
  715.                 "prenom" => $accomp->getPrenom(),
  716.                 "loginLink" => $loginUrl,
  717.                 "idSejour" => $sejour->getId(),
  718.                 "sejour" => $sejour,
  719.                 'idSejour' => $sejour->getId(),
  720.                 "password" => $accomp->getPasswordNonCripted(),
  721.             ]);
  722.         // Ajouter les PDFs en pièces jointes
  723.         if (file_exists($pdfFilepath1)) {
  724.             $email->attachFromPath($pdfFilepath1"Mode d'emploi 5sur5sejour.pdf");
  725.         }
  726.         if (file_exists($pdfFilepath2)) {
  727.             $email->attachFromPath($pdfFilepath2"Mode d'emploi parent 5sur5sejour.pdf");
  728.         }
  729.       //  dump($_ENV['MAILER_DSN']);
  730. //dd(getenv('MAILER_DSN'));
  731.         try {
  732.             // Utiliser le mailer Symfony standard (lit MAILER_DSN via configuration)
  733.             $this->mailerInterface->send($email);
  734.             return true;
  735.         } catch (\Exception $e) {
  736.             return false;
  737.         }
  738.     }
  739.     function EnvoyerEmailNewParent($user)
  740.     {
  741.         $sendTo $user->getEmail();
  742.         // Utiliser l'envoi direct sans queue
  743.         $this->sendEmailDirect(
  744.             $sendTo,
  745.             '🤗 Création de votre compte parent 5sur5séjour',
  746.                 'emails/Inscriptionparent.html.twig',
  747.                 [
  748.                     "Nomdestinataire" => $user->getNom(),
  749.                     "Predestinataire" => $user->getPrenom(),
  750.                 "image1" => "https://res.cloudinary.com/apss-factory/image/upload/a_exif/v1582274063/qw7csxayektmq1leqjpp.png",
  751.                 "image2" => "https://res.cloudinary.com/apss-factory/image/upload/a_exif/v1582274055/ackjwfswxqtv4kuhethg.png",
  752.                 "iconfooter" => "https://res.cloudinary.com/apss-factory/image/upload/v1582719651/Picto5sur5_rapbfy.png",
  753.                 "iconphoto" => "https://res.cloudinary.com/apss-factory/image/upload/v1582719650/Groupe_419_pqx0dx.png",
  754.                 "iconloca" => "https://res.cloudinary.com/apss-factory/image/upload/v1582719650/Groupe_420_uynuqz.png",
  755.                 "iconmsg" => "https://res.cloudinary.com/apss-factory/image/upload/v1582719651/Groupe_418_wbyysk.png",
  756.                 "imggarcon" => "https://res.cloudinary.com/apss-factory/image/upload/v1582558737/shutterstock_13123054_ghafyg.png",
  757.                     "identifiant" => $sendTo,
  758.                     'accompagnateur' => $user
  759.                 ]
  760.         );
  761.     }
  762.     function verifmailold($mail)
  763.     {
  764.         $user $this->em->getRepository(User::class)->findOneBy(array('email' => $mail));
  765.         return $user;
  766.     }
  767.     function notifparentsejour($mail$sms$idSejour$iduser$refaverti)
  768.     {
  769.         // $user = $this->em->getRepository(User::class)->find($iduser);
  770.         // $sejour = $this->em->getRepository(Sejour::class)->find($idSejour);
  771.         $user $this->em->getRepository(User::class)->findOneBy(['id' => $iduser]);
  772.         $user->setSmsnotif($sms);
  773.         $user->setMailnotif($mail);
  774.         $this->em->getManager()->persist($user);
  775.         $parentsejour $this->em->getRepository(ParentSejour::class)->findBy(['idParent' => $user]);
  776.         foreach ($parentsejour as $sejr) {
  777.             $sejr->setSmsnotif($sms);
  778.             if (strpos($sejr->getIdSejour()->getCodeSejour(), "EF") !== false) {
  779.                 $sejr->setSmsnotif(0);
  780.             }
  781.             $sejr->setMailnotif($mail);
  782.             $this->em->getManager()->persist($sejr);
  783.         }
  784.         $this->em->getManager()->flush();
  785.         return $user;
  786.     }
  787.     function sendmailuserforfirstattach($sejId)
  788.     {
  789.         $liste = [];
  790.         $parentsejour $this->em->getRepository(ParentSejour::class)->findBy(array('idSejour' => $sejId'mailnotif' => 1));
  791.         $RefEmail $this->em->getRepository(Ref::class)->find(27);
  792.         $Email $this->em->getRepository(Emailing::class)->findOneBy(array('typeemail' => $RefEmail'statut' => 9));
  793.         foreach ($parentsejour as $parent) {
  794.             // $liste = $e->getName();
  795.             //$user = $this->em->getRepository(User::class)->find($parent->getIdParent());
  796.             array_push($liste$parent->getIdParent()->getEmail());
  797.             $sendTo $parent->getIdParent()->getEmail();
  798.             $message = (new \Swift_Message('Nouveau dépôt'))
  799.                 ->setFrom('info@5sur5sejour.com')
  800.                 ->setTo($sendTo);
  801.             //->setBcc(["contact@5sur5sejour.com"]);
  802.             $pathImage2 $Email->getIdImage2()->getPath();
  803.             $pathImage1 $Email->getIdImage1()->getPath();
  804.             $image1 $message->embed(Swift_Image::fromPath("$pathImage1"));
  805.             $image2 $message->embed(Swift_Image::fromPath("$pathImage2"));
  806.             $iconphoto $message->embed(Swift_Image::fromPath("https://res.cloudinary.com/apss-factory/image/upload/v1582719650/Groupe_419_pqx0dx.png"));
  807.             $iconloca $message->embed(Swift_Image::fromPath("https://res.cloudinary.com/apss-factory/image/upload/v1582719650/Groupe_420_uynuqz.png"));
  808.             $iconmsg $message->embed(Swift_Image::fromPath("https://res.cloudinary.com/apss-factory/image/upload/v1582719651/Groupe_418_wbyysk.png"));
  809.             $iconfooter $message->embed(Swift_Image::fromPath("https://res.cloudinary.com/apss-factory/image/upload/v1582719651/Picto5sur5_rapbfy.png"));
  810.             $message->setBody(
  811.                 $this->templating->render(
  812.                     'emails/MailAChaqueDepot.html.twig',
  813.                     [
  814.                         "image1" => $image1,
  815.                         "image2" => $image2,
  816.                         "iconfooter" => $iconfooter,
  817.                         "iconphoto" => $iconphoto,
  818.                         "iconloca" => $iconloca,
  819.                         "iconmsg" => $iconmsg,
  820.                     ]
  821.                 ),
  822.                 'text/html'
  823.             );
  824.             $signMail $this->params->get('signMail');
  825.             if ($signMail == 'yes') {
  826.                 $domainName $this->params->get('domaine');
  827.                 $selector $this->params->get('selector');
  828.                 $PrivateKey =  file_get_contents($this->params->get('pathDKIM'));
  829.                 $signer = new \Swift_Signers_DKIMSigner($PrivateKey$domainName$selector);
  830.                 $message->attachSigner($signer);
  831.             }
  832.             try {
  833.                 $this->mailer->send($message);
  834.             } catch (\Swift_SwiftException $ex) {
  835.                 $ex->getMessage();
  836.             }
  837.         }
  838.         return $liste;
  839.     }
  840.     function listeEtablissement()
  841.     {
  842.         $liste $this->em->getRepository(Etablisment::class)->findByRole('ROLE_PARTENAIRE');
  843.         return $liste;
  844.     }
  845.     function listePartenaire()
  846.     {
  847.         $liste $this->em->getRepository(User::class)->findByRole('ROLE_PARTENAIRE');
  848.         return $liste;
  849.     }
  850.     function addtoPanier($id)
  851.     {
  852.         $panier $this->session->get('Panier');
  853.         if ($panier == null) {
  854.             $panier = [];
  855.         }
  856.         $panier[] = $id;
  857.         $this->session->set('Panier'$panier);
  858.         return $panier;
  859.     }
  860.     function GetListePanier($id)
  861.     {
  862.         $panier $this->session->get('Panier');
  863.         $MonPanier $this->em->getRepository(Produit::class)->findBy(array('id' => $panier), array('id' => 'DESC'));
  864.         return $MonPanier;
  865.     }
  866.     function condition($id)
  867.     {
  868.         $sejour $this->em->getRepository(Sejour::class)->find($id);
  869.         $sejour->setCd(1);
  870.         $this->em->getManager()->persist($sejour);
  871.         $this->em->getManager()->flush();
  872.         return $sejour;
  873.     }
  874.     function getidlistePartenaire($id)
  875.     {
  876.         $user $this->em->getRepository(User::class)->find($id);
  877.         return $user;
  878.     }
  879.     function creationCompteP($nomP$prenomP$identifiantP$phoneP$emailP$roleP$infoComplementaireP$CompteBancaire$userS$password)
  880.     {
  881.         $user = new User();
  882.         $user->setNom($nomP);
  883.         $user->setPrenom($prenomP);
  884.         $user->setUsername($identifiantP);
  885.         $user->setNummobile($phoneP);
  886.         $user->setEmail(trim($emailP));
  887.         $user->setRoles($roleP);
  888.         $user->setInfocomple($infoComplementaireP);
  889.         $user->setComptebanque($CompteBancaire);
  890.         $user->setUsersecondaire($userS);
  891.         $password $this->genererPassword(10);
  892.         $user->setPasswordNonCripted($password);
  893.         $user->setPassword(
  894.             $this->passwordEncoder->hashPassword(
  895.                 $user,
  896.                 $password
  897.             )
  898.         );
  899.         $this->em->getManager()->persist($user);
  900.         $this->em->getManager()->flush();
  901.         return $user;
  902.     }
  903.     function creationComptePrincipale($nomP$prenomP$identifiantP$phoneP$emailP$roleP$infoComplementaireP$CompteBancaire$password)
  904.     {
  905.         // Compte Principale
  906.         $user = new User();
  907.         $user->setNom($nomP);
  908.         $user->setPrenom($prenomP);
  909.         $user->setUsername($identifiantP);
  910.         $user->setNummobile($phoneP);
  911.         $user->setEmail(trim($emailP));
  912.         $user->setRoles($roleP);
  913.         $user->setInfocomple($infoComplementaireP);
  914.         $user->setComptebanque($CompteBancaire);
  915.         $password $this->genererPassword(10);
  916.         $user->setPasswordNonCripted($password);
  917.         $user->setPassword(
  918.             $this->passwordEncoder->hashPassword(
  919.                 $user,
  920.                 $password
  921.             )
  922.         );
  923.         $this->em->getManager()->persist($user);
  924.         $this->em->getManager()->flush();
  925.         return $user;
  926.     }
  927.     function creationComptePrinc($nomP$prenomP$identifiantP$phoneP$emailP$roleP$infoComplementaireP$password)
  928.     {
  929.         // Compte Principale
  930.         $user = new User();
  931.         $user->setNom($nomP);
  932.         $user->setPrenom($prenomP);
  933.         $user->setUsername($identifiantP);
  934.         $user->setNummobile($phoneP);
  935.         $user->setEmail(trim($emailP));
  936.         $user->setRoles($roleP);
  937.         $user->setInfocomple($infoComplementaireP);
  938.         $password $this->genererPassword(10);
  939.         $user->setPasswordNonCripted($password);
  940.         $user->setPassword(
  941.             $this->passwordEncoder->hashPassword(
  942.                 $user,
  943.                 $password
  944.             )
  945.         );
  946.         $this->em->getManager()->persist($user);
  947.         $this->em->getManager()->flush();
  948.         return $user;
  949.     }
  950.     function creationCompteUSERP($nomP$prenomP$identifiantP$phoneP$emailP$roleP$userS$infoComplementaireP$password)
  951.     {
  952.         // Compte Principale
  953.         $user = new User();
  954.         $user->setNom($nomP);
  955.         $user->setPrenom($prenomP);
  956.         $user->setUsername($identifiantP);
  957.         $user->setNummobile($phoneP);
  958.         $user->setEmail(trim($emailP));
  959.         $user->setRoles($roleP);
  960.         $user->setUsersecondaire($userS);
  961.         $user->setInfocomple($infoComplementaireP);
  962.         $password $this->genererPassword(10);
  963.         $user->setPasswordNonCripted($password);
  964.         $user->setPassword(
  965.             $this->passwordEncoder->hashPassword(
  966.                 $user,
  967.                 $password
  968.             )
  969.         );
  970.         $this->em->getManager()->persist($user);
  971.         $this->em->getManager()->flush();
  972.         return $user;
  973.     }
  974.     function USERP($id$userS)
  975.     {
  976.         // Compte Principale
  977.         $user $this->em->getRepository(User::class)->find($id);
  978.         $user->setUsersecondaire($userS);
  979.         $this->em->getManager()->persist($user);
  980.         $this->em->getManager()->flush();
  981.         return $user;
  982.     }
  983.     function creationCompteS($nomS$prenomS$identifiantS$phoneS$emailS$infoComplementaireS$roleS$password)
  984.     {
  985.         $user = new User();
  986.         $user->setNom($nomS);
  987.         $user->setPrenom($prenomS);
  988.         $user->setUsername($identifiantS);
  989.         $user->setNummobile($phoneS);
  990.         $user->setEmail(trim($emailS));
  991.         $user->setInfocomple($infoComplementaireS);
  992.         $user->setRoles($roleS);
  993.         $user->setPassword(
  994.             $this->passwordEncoder->hashPassword(
  995.                 $user,
  996.                 $password
  997.             )
  998.         );
  999.         $this->em->getManager()->persist($user);
  1000.         $this->em->getManager()->flush();
  1001.         return $user;
  1002.     }
  1003.     function creationCompteBancaire($codebnaque$codeguichet$numcompt$clerib$iban$codebic$nom$domicilation)
  1004.     {
  1005.         // Compte Bancaire
  1006.         $comptebancaire = new Comptebancaire();
  1007.         $comptebancaire->setCodebnaque($codebnaque);
  1008.         $comptebancaire->setCodeguichet($codeguichet);
  1009.         $comptebancaire->setNumcompt($numcompt);
  1010.         $comptebancaire->setClerib($clerib);
  1011.         $comptebancaire->setIban($iban);
  1012.         $comptebancaire->setCodebic($codebic);
  1013.         $comptebancaire->setNom($nom);
  1014.         $comptebancaire->setDomicilation($domicilation);
  1015.         $this->em->getManager()->persist($comptebancaire);
  1016.         $this->em->getManager()->flush();
  1017.         return $comptebancaire;
  1018.     }
  1019.     function USERPP($id$comptebancaire)
  1020.     {
  1021.         // Compte Principale
  1022.         $user $this->em->getRepository(User::class)->find($id);
  1023.         $user->setComptebanque($comptebancaire);
  1024.         $this->em->getManager()->persist($user);
  1025.         $this->em->getManager()->flush();
  1026.         return $user;
  1027.     }
  1028.     public function ModifcompteBancaire($id$codebnaque$codeguichet$numcompt$clerib$iban$codebic$nom$domicilation)
  1029.     {
  1030.         $comptebancaire $this->em->getRepository(Comptebancaire::class)->find($id);
  1031.         if ($comptebancaire == null) {
  1032.             $comptebancaire = new Comptebancaire();
  1033.         }
  1034.         $comptebancaire->setCodebnaque($codebnaque);
  1035.         $comptebancaire->setCodeguichet($codeguichet);
  1036.         $comptebancaire->setNumcompt($numcompt);
  1037.         $comptebancaire->setClerib($clerib);
  1038.         $comptebancaire->setIban($iban);
  1039.         $comptebancaire->setCodebic($codebic);
  1040.         $comptebancaire->setNom($nom);
  1041.         $comptebancaire->setDomicilation($domicilation);
  1042.         $this->em->getManager()->persist($comptebancaire);
  1043.         $this->em->getManager()->flush();
  1044.         return $comptebancaire;
  1045.     }
  1046.     public function updatepartenaireP($id$nomP$prenomP$identifiantP$phoneP$emailP$infoComplementaireP$roleP$usersecon)
  1047.     {
  1048.         $user $this->em->getRepository(User::class)->find($id);
  1049.         $envoiMailEmailModifier true;
  1050.         if ($emailP != $user->getEmail()) {
  1051.             $envoiMailEmailModifier true;
  1052.         }
  1053.         $user->setNom($nomP);
  1054.         $user->setPrenom($prenomP);
  1055.         $user->setUsername($identifiantP);
  1056.         $user->setNummobile($phoneP);
  1057.         $user->setEmail(trim($emailP));
  1058.         $user->setInfocomple($infoComplementaireP);
  1059.         $user->setRoles($roleP);
  1060.         if ($usersecon) {
  1061.             $user->setUsersecondaire($usersecon);
  1062.         }
  1063.         $this->em->getManager()->persist($user);
  1064.         $this->em->getManager()->flush();
  1065.         if ($envoiMailEmailModifier) {
  1066.             $this->EnvoyerEmailComptePartenaireModifier($user);
  1067.         }
  1068.         return $user;
  1069.     }
  1070.     function EnvoyerEmailComptePartenaireModifier($user)
  1071.     {
  1072.         $logo '';
  1073.         $nom '';
  1074.         if ($user->hasRole('ROLE_PARTENAIRE')) {
  1075.             $logo $user->getLogourl();
  1076.             $nom $user->getNometablisment();
  1077.         }
  1078.         $RefEmail $this->em->getRepository(Ref::class)->find(21);
  1079.         $Email $this->em->getRepository(Emailing::class)->findOneBy(array('typeemail' => $RefEmail'statut' => 9));
  1080.         $message = (new \Swift_Message('Bienvenue à 5sur5 séjour '))
  1081.             ->setFrom('info@5sur5sejour.com')
  1082.             ->setTo($user->getEmail());
  1083.         //->setBcc(["contact@5sur5sejour.com"]);
  1084.         $pathImage2 $Email->getIdImage2()->getPath();
  1085.         $pathImage1 $Email->getIdImage1()->getPath();
  1086.         $image1 $message->embed(Swift_Image::fromPath("$pathImage1"));
  1087.         $image2 $message->embed(Swift_Image::fromPath("$pathImage2"));
  1088.         $iconmsg $message->embed(Swift_Image::fromPath("https://res.cloudinary.com/apss-factory/image/upload/v1582719651/Groupe_418_wbyysk.png"));
  1089.         $iconfooter $message->embed(Swift_Image::fromPath("https://res.cloudinary.com/apss-factory/image/upload/v1582719651/Picto5sur5_rapbfy.png"));
  1090.         $icon2 $message->embed(Swift_Image::fromPath("https://res.cloudinary.com/apss-factory/image/upload/v1582719650/Groupe_420_uynuqz.png"));
  1091.         $icon3 $message->embed(Swift_Image::fromPath("https://res.cloudinary.com/apss-factory/image/upload/v1582719650/Groupe_419_pqx0dx.png"));
  1092.         $message->setBody(
  1093.             $this->templating->render(
  1094.                 'emails/ComptePartenaireModifier.html.twig',
  1095.                 [
  1096.                     "user" => $user,
  1097.                     "image1" => $image1,
  1098.                     "image2" => $image2,
  1099.                     "icon2" => $icon2,
  1100.                     "icon3" => $icon3,
  1101.                     "iconfooter" => $iconfooter,
  1102.                     "iconmsg" => $iconmsg,
  1103.                     'logo' => $logo,
  1104.                     'nom' => $nom,
  1105.                 ]
  1106.             ),
  1107.             'text/html'
  1108.         );
  1109.         $signMail $this->params->get('signMail');
  1110.         if ($signMail == 'yes') {
  1111.             $domainName $this->params->get('domaine');
  1112.             $selector $this->params->get('selector');
  1113.             $PrivateKey =  file_get_contents($this->params->get('pathDKIM'));
  1114.             $signer = new \Swift_Signers_DKIMSigner($PrivateKey$domainName$selector);
  1115.             $message->attachSigner($signer);
  1116.         }
  1117.         try {
  1118.             $this->mailer->send($message);
  1119.         } catch (\Swift_SwiftException $ex) {
  1120.             $ex->getMessage();
  1121.         }
  1122.     }
  1123.     public function updatepartenairePrinc($id$nomP$prenomP$identifiantP$phoneP$emailP$infoComplementaireP$roleP)
  1124.     {
  1125.         $user $this->em->getRepository(User::class)->find($id);
  1126.         $envoiMailEmailModifier true;
  1127.         if ($emailP != $user->getEmail()) {
  1128.             $envoiMailEmailModifier true;
  1129.         }
  1130.         $user->setNom($nomP);
  1131.         $user->setPrenom($prenomP);
  1132.         $user->setUsername($identifiantP);
  1133.         $user->setNummobile($phoneP);
  1134.         $user->setEmail(trim($emailP));
  1135.         $user->setInfocomple($infoComplementaireP);
  1136.         $user->setRoles($roleP);
  1137.         $this->em->getManager()->persist($user);
  1138.         $this->em->getManager()->flush();
  1139.         if ($envoiMailEmailModifier) {
  1140.             $this->EnvoyerEmailComptePartenaireModifier($user);
  1141.         }
  1142.         return $user;
  1143.     }
  1144.     public function updatepartenaireS($user$nomS$prenomS$identifiantS$phoneS$emailS$infoComplementaireS$roleS)
  1145.     {
  1146.         if ($user) {
  1147.             //$user = $this->em->getRepository(User::class)->find($id);
  1148.             //$idusersecondaire= $user->getUsersecondaire();
  1149.             //$user = $this->em->getRepository(User::class)->find($idusersecondaire);
  1150.             $user->setNom($nomS);
  1151.             $user->setPrenom($prenomS);
  1152.             $user->setUsername($identifiantS);
  1153.             $user->setNummobile($phoneS);
  1154.             $user->setEmail(trim($emailS));
  1155.             $user->setInfocomple($infoComplementaireS);
  1156.             $user->setRoles($roleS);
  1157.             $this->em->getManager()->persist($user);
  1158.             $this->em->getManager()->flush();
  1159.         } else {
  1160.             if (($nomS != null) || ($prenomS != null) || ($identifiantS != null) || ($phoneS != null) || ($emailS != null) || ($infoComplementaireS != null) || ($roleS != null)) {
  1161.                 $user $this->creationCompteS($nomS$prenomS$identifiantS$phoneS$emailS$infoComplementaireS"ROLE_PARTENAIRE"'azerty123');
  1162.             }
  1163.         }
  1164.         return $user;
  1165.     }
  1166.     public function listesejourPartenaireconnecter($user)
  1167.     {
  1168.         $sejours $this->em->getRepository(Sejour::class)->NombreofsejourParten($user->getId());
  1169.         return $sejours;
  1170.     }
  1171.     function creationNewAcommpaviaenmasse($nom$prenom$etablisment$fonction$adressetablisment$phoneacc$mail$role$password$AccompaLogo$email)
  1172.     {
  1173.         $user = new User();
  1174.         $user->setNom($nom);
  1175.         $user->setPrenom($prenom);
  1176.         $user->setUsername($mail);
  1177.         $user->setReponseemail(trim($email));
  1178.         // $user->setUsername($identifiant);
  1179.         $user->setFonction($fonction);
  1180.         $user->setNummobile($phoneacc);
  1181.         $user->setEmail(trim($mail));
  1182.         $user->setAdresse($adressetablisment);
  1183.         $user->setNometablisment($etablisment);
  1184.         // Firas : ajouter logo
  1185.         $user->setLogourl($AccompaLogo);
  1186.         //$user->setnometablisment();
  1187.         $user->setDateCreation(new \DateTime());
  1188.         $user->addRole($role);
  1189.         $user->setPasswordNonCripted($password);
  1190.         $user->setPassword(
  1191.             $this->passwordEncoder->hashPassword(
  1192.                 $user,
  1193.                 $password
  1194.             )
  1195.         );
  1196.         $this->em->getManager()->persist($user);
  1197.         $this->em->getManager()->flush();
  1198.         return $user;
  1199.     }
  1200.     function   modifieradress_comande($rue$ville$pays$codepostal$iduser$prenom$nom$organism$prenomfacturation$nomfacturation$organismfacturation$ruefacturation$villefacturation$paysfacturation$codepostalfacturation)
  1201.     {
  1202.         $user $this->em->getRepository(User::class)->find($iduser);
  1203.         $Adress $user->getadresslivraison();
  1204.         if ($Adress == null) {
  1205.             $Adress = new Adress;
  1206.         }
  1207.         $Adress->setRuevoi($rue);
  1208.         $Adress->setCodepostal($codepostal);
  1209.         $Adress->setVille($ville);
  1210.         $Adress->setPays($pays);
  1211.         $Adress->setOrganism($organism);
  1212.         if (!is_null($nom) && trim($nom) != "") {
  1213.             $Adress->setNomadrres($nom);
  1214.         } else {
  1215.             $Adress->setNomadrres($user->getNom());
  1216.         }
  1217.         if (!is_null($prenom) && trim($prenom) != "") {
  1218.             $Adress->setPrenomadress($prenom);
  1219.         } else {
  1220.             $Adress->setPrenomadress($user->getPrenom());
  1221.         }
  1222.         $Adress->settype('livraison');
  1223.         $this->em->getManager()->persist($Adress);
  1224.         $this->em->getManager()->flush();
  1225.         $user->setadresslivraison($Adress);
  1226.         $AdressFacturation =   $user->getAdressfactoration();
  1227.         if ($AdressFacturation == null) {
  1228.             $AdressFacturation = new Adress;
  1229.         }
  1230.         $AdressFacturation->setRuevoi($ruefacturation);
  1231.         $AdressFacturation->setCodepostal($codepostalfacturation);
  1232.         $AdressFacturation->setVille($villefacturation);
  1233.         $AdressFacturation->setPays($paysfacturation);
  1234.         $AdressFacturation->setOrganism($organismfacturation);
  1235.         if (!is_null($nomfacturation) && trim($nomfacturation) != "") {
  1236.             $AdressFacturation->setNomadrres($nomfacturation);
  1237.         } else {
  1238.             $AdressFacturation->setNomadrres($user->getNom());
  1239.         }
  1240.         if (!is_null($prenomfacturation) && trim($prenomfacturation) != "") {
  1241.             $AdressFacturation->setPrenomadress($prenomfacturation);
  1242.         } else {
  1243.             $AdressFacturation->setPrenomadress($user->getPrenom());
  1244.         }
  1245.         $AdressFacturation->settype('Facturation');
  1246.         $this->em->getManager()->persist($AdressFacturation);
  1247.         $this->em->getManager()->flush();
  1248.         $user->setAdressfactoration($AdressFacturation);
  1249.         $this->em->getManager()->persist($user);
  1250.         $this->em->getManager()->flush();
  1251.         return $Adress;
  1252.     }
  1253.     function codesecuriter($code$id)
  1254.     {
  1255.         $user $this->em->getRepository(User::class)->find($id);
  1256.         $comptebancaire =  new Comptebancaire;
  1257.         $comptebancaire->setNumcompt($code);
  1258.         $this->em->getManager()->persist($comptebancaire);
  1259.         $this->em->getManager()->flush();
  1260.         $user->setComptebanque($comptebancaire);
  1261.         $this->em->getManager()->persist($user);
  1262.         $this->em->getManager()->flush();
  1263.     }
  1264.     function genererPassword($longueur)
  1265.     {
  1266.         $caracteres '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  1267.         $longueurMax strlen($caracteres);
  1268.         $chaineAleatoire '';
  1269.         for ($i 0$i $longueur$i++) {
  1270.             $chaineAleatoire .= $caracteres[rand(0$longueurMax 1)];
  1271.         }
  1272.         return $chaineAleatoire;
  1273.     }
  1274.     function modifierDetailsAcco($idAcco$nom$prenom$email$tel)
  1275.     {
  1276.         $Acco $this->em->getRepository(User::class)->find($idAcco);
  1277.         $Acco->setPrenom($prenom);
  1278.         $Acco->setNom($nom);
  1279.         $Acco->setNummobile($tel);
  1280.         $Acco->setReponseemail(trim($email));
  1281.         $this->em->getManager()->persist($Acco);
  1282.         $this->em->getManager()->flush();
  1283.     }
  1284.     function AjouterDocument_partenaitre($cloudImagescouleur$nomdocument$Etablisment_Find)
  1285.     {
  1286.         $Documentpartenaire = new Documentpartenaire();
  1287.         $Documentpartenaire->setIdetablisment($Etablisment_Find);
  1288.         $Documentpartenaire->setNomdocument($nomdocument);
  1289.         $Documentpartenaire->setPath($cloudImagescouleur[0]["path"]);
  1290.         $this->em->getManager()->persist($Documentpartenaire);
  1291.         $this->em->getManager()->flush();
  1292.     }
  1293.     function conditioncnx($id)
  1294.     {
  1295.         $user $this->em->getRepository(User::class)->find($id);
  1296.         $user->setCnxpartenaire(1);
  1297.         $this->em->getManager()->persist($user);
  1298.         $this->em->getManager()->flush();
  1299.         return $user;
  1300.     }
  1301.     function conditioncnxparent($id)
  1302.     {
  1303.         $user $this->em->getRepository(User::class)->find($id);
  1304.         $user->setCnxparent(1);
  1305.         $this->em->getManager()->persist($user);
  1306.         $this->em->getManager()->flush();
  1307.         return $user;
  1308.     }
  1309.     function findsejParent($id_parent)
  1310.     {
  1311.         $ParentSejour $this->em->getRepository(ParentSejour::class)->find($id_parent);
  1312.         return $ParentSejour;
  1313.     }
  1314.     function EnvoyerEmailNewUserediteuroradmin($user$password)
  1315.     {
  1316.         $RefEmail $this->em->getRepository(Ref::class)->find(20);
  1317.         $Email $this->em->getRepository(Emailing::class)->findOneBy(array('typeemail' => $RefEmail));
  1318.         $sendTo $user->getEmail();
  1319.         $senduser $user;
  1320.         $message = (new \Swift_Message('Nouveau admin ou editeur'))
  1321.             ->setFrom('info@5sur5sejour.com')
  1322.             ->setTo($sendTo);
  1323.         //->setBcc(["contact@5sur5sejour.com"]);
  1324.         $pathImage2 $Email->getIdImage2()->getPath();
  1325.         $pathImage1 $Email->getIdImage1()->getPath();
  1326.         $image1 $message->embed(Swift_Image::fromPath("$pathImage1"));
  1327.         $image2 $message->embed(Swift_Image::fromPath("$pathImage2"));
  1328.         $iconphoto $message->embed(Swift_Image::fromPath("https://res.cloudinary.com/apss-factory/image/upload/v1582719650/Groupe_419_pqx0dx.png"));
  1329.         $iconloca $message->embed(Swift_Image::fromPath("https://res.cloudinary.com/apss-factory/image/upload/v1582719650/Groupe_420_uynuqz.png"));
  1330.         $iconmsg $message->embed(Swift_Image::fromPath("https://res.cloudinary.com/apss-factory/image/upload/v1582719651/Groupe_418_wbyysk.png"));
  1331.         $iconfooter $message->embed(Swift_Image::fromPath("https://res.cloudinary.com/apss-factory/image/upload/v1582719651/Picto5sur5_rapbfy.png"));
  1332.         $message->setBody(
  1333.             $this->templating->render(
  1334.                 'emails/DesmandecreationAdminorEditeur.html.twig',
  1335.                 [
  1336.                     "Nomdestinataire" => $user->getNom(),
  1337.                     "Predestinataire" => $user->getPrenom(),
  1338.                     "image1" => $image1,
  1339.                     "image2" => $image2,
  1340.                     "iconfooter" => $iconfooter,
  1341.                     "iconphoto" => $iconphoto,
  1342.                     "iconloca" => $iconloca,
  1343.                     "iconmsg" => $iconmsg,
  1344.                     "identifiant" => $sendTo,
  1345.                     "senduser" => $senduser,
  1346.                     "roles" => $user->getRoles(),
  1347.                     "pass" => $password
  1348.                 ]
  1349.             ),
  1350.             'text/html'
  1351.         );
  1352.         try {
  1353.             $this->mailer->send($message);
  1354.         } catch (\Swift_SwiftException $ex) {
  1355.             $ex->getMessage();
  1356.         }
  1357.     }
  1358.     function ModifierPwdParent($idParent$passwordparent)
  1359.     {
  1360.         $user =  $this->em->getRepository(User::class)->find($idParent);
  1361.         $user->setPassword(
  1362.             $this->passwordEncoder->hashPassword(
  1363.                 $user,
  1364.                 $passwordparent
  1365.             )
  1366.         );
  1367.         $this->em->getManager()->persist($user);
  1368.         $this->em->getManager()->flush();
  1369.         $this->EnvoyerEmailPWDModifer($user);
  1370.         return $user;
  1371.     }
  1372.     function ModifierPwdPartenaire($idPatenaire$passwordpartenaire)
  1373.     {
  1374.         $user =  $this->em->getRepository(User::class)->find($idPatenaire);
  1375.         $user->setPassword(
  1376.             $this->passwordEncoder->hashPassword(
  1377.                 $user,
  1378.                 $passwordpartenaire
  1379.             )
  1380.         );
  1381.         $this->em->getManager()->persist($user);
  1382.         $this->em->getManager()->flush();
  1383.         $this->EnvoyerEmailPWDModifer($user);
  1384.         return $user;
  1385.     }
  1386.     function EnvoyerEmailPWDModifer($user)
  1387.     {
  1388.         $RefEmail $this->em->getRepository(Ref::class)->find(20);
  1389.         $Email $this->em->getRepository(Emailing::class)->findOneBy(array('typeemail' => $RefEmail));
  1390.         $sendTo $user->getEmail();
  1391.         $senduser $user;
  1392.         $message = (new \Swift_Message('Modification de votre mot de passe 5sur5sejour'))
  1393.             ->setFrom('info@5sur5sejour.com')
  1394.             ->setTo($sendTo);
  1395.         //->setBcc(["contact@5sur5sejour.com"]);
  1396.         $pathImage2 $Email->getIdImage2()->getPath();
  1397.         $pathImage1 $Email->getIdImage1()->getPath();
  1398.         $image1 $message->embed(Swift_Image::fromPath("$pathImage1"));
  1399.         $image2 $message->embed(Swift_Image::fromPath("$pathImage2"));
  1400.         $iconphoto $message->embed(Swift_Image::fromPath("https://res.cloudinary.com/apss-factory/image/upload/v1582719650/Groupe_419_pqx0dx.png"));
  1401.         $iconloca $message->embed(Swift_Image::fromPath("https://res.cloudinary.com/apss-factory/image/upload/v1582719650/Groupe_420_uynuqz.png"));
  1402.         $iconmsg $message->embed(Swift_Image::fromPath("https://res.cloudinary.com/apss-factory/image/upload/v1582719651/Groupe_418_wbyysk.png"));
  1403.         $iconfooter $message->embed(Swift_Image::fromPath("https://res.cloudinary.com/apss-factory/image/upload/v1582719651/Picto5sur5_rapbfy.png"));
  1404.         $message->setBody(
  1405.             $this->templating->render(
  1406.                 'emails/PwdModifer.html.twig',
  1407.                 [
  1408.                     "Nomdestinataire" => $user->getNom(),
  1409.                     "Predestinataire" => $user->getPrenom(),
  1410.                     "image1" => $image1,
  1411.                     "image2" => $image2,
  1412.                     "iconfooter" => $iconfooter,
  1413.                     "iconphoto" => $iconphoto,
  1414.                     "iconloca" => $iconloca,
  1415.                     "iconmsg" => $iconmsg,
  1416.                     "identifiant" => $sendTo,
  1417.                     "senduser" => $senduser,
  1418.                     "roles" => $user->getRoles(),
  1419.                 ]
  1420.             ),
  1421.             'text/html'
  1422.         );
  1423.         try {
  1424.             $this->mailer->send($message);
  1425.         } catch (\Swift_SwiftException $ex) {
  1426.             $ex->getMessage();
  1427.         }
  1428.     }
  1429.     function creationAccompagnateurPlus($nom$prenom$fonction$nomEtab$addressEtab$numTel$mail$password$role)
  1430.     {
  1431.         $user = new User();
  1432.         $user->setNom($nom);
  1433.         $user->setPrenom($prenom);
  1434.         $user->setNummobile($numTel);
  1435.         $user->setFonction($fonction);
  1436.         $user->setAdresse($addressEtab);
  1437.         $user->setNometablisment($nomEtab);
  1438.         $user->setEmail(trim($mail));
  1439.         $user->setReponseemail(trim($mail));
  1440.         $user->setUsername(trim($mail));
  1441.         $user->setPassword(
  1442.             $this->passwordEncoder->hashPassword(
  1443.                 $user,
  1444.                 $password
  1445.             )
  1446.         );
  1447.         $user->setAccompaplus("oui");
  1448.         $user->setPasswordNonCripted($password);
  1449.         $user->setDateCreation(new \DateTime());
  1450.         $user->addRole($role);
  1451.         $this->em->getManager()->persist($user);
  1452.         $this->em->getManager()->flush();
  1453.         return $user;
  1454.     }
  1455.     function EnvoyerEmailAccoPlusDevenirPartenaire($user)
  1456.     {
  1457.         $logo '';
  1458.         $nom '';
  1459.         if ($user->hasRole('ROLE_PARTENAIRE')) {
  1460.             $logo $user->getLogourl();
  1461.             $nom $user->getNometablisment();
  1462.         }
  1463.         $RefEmail $this->em->getRepository(Ref::class)->find(17);
  1464.         $Email $this->em->getRepository(Emailing::class)->findOneBy(array('typeemail' => $RefEmail));
  1465.         $sendTo $user->getEmail();
  1466.         $message = (new \Swift_Message('Déjà 5 séjours ensemble, devenons partenaire ?'))
  1467.             ->setFrom('info@5sur5sejour.com')
  1468.             ->setTo($sendTo);
  1469.         //->setBcc(["contact@5sur5sejour.com"]);
  1470.         $pathImage2 $Email->getIdImage2()->getPath();
  1471.         $pathImage1 $Email->getIdImage1()->getPath();
  1472.         $image1 $message->embed(Swift_Image::fromPath("$pathImage1"));
  1473.         $image2 $message->embed(Swift_Image::fromPath("$pathImage2"));
  1474.         $iconmsg $message->embed(Swift_Image::fromPath("https://res.cloudinary.com/apss-factory/image/upload/v1582719651/Groupe_418_wbyysk.png"));
  1475.         $iconfooter $message->embed(Swift_Image::fromPath("https://res.cloudinary.com/apss-factory/image/upload/v1582719651/Picto5sur5_rapbfy.png"));
  1476.         $icon2 $message->embed(Swift_Image::fromPath("https://res.cloudinary.com/apss-factory/image/upload/v1582719650/Groupe_420_uynuqz.png"));
  1477.         $icon3 $message->embed(Swift_Image::fromPath("https://res.cloudinary.com/apss-factory/image/upload/v1582719650/Groupe_419_pqx0dx.png"));
  1478.         $message->setBody(
  1479.             $this->templating->render(
  1480.                 'emails/AccompagnateurPlusDevenirPartenaire.html.twig',
  1481.                 [
  1482.                     "image1" => $image1,
  1483.                     "image2" => $image2,
  1484.                     "icon2" => $icon2,
  1485.                     "icon3" => $icon3,
  1486.                     "iconfooter" => $iconfooter,
  1487.                     "iconmsg" => $iconmsg,
  1488.                     "identifiant" => $sendTo,
  1489.                     'logo' => $logo,
  1490.                     'nom' => $nom,
  1491.                 ]
  1492.             ),
  1493.             'text/html'
  1494.         );
  1495.         $signMail $this->params->get('signMail');
  1496.         if ($signMail == 'yes') {
  1497.             $domainName $this->params->get('domaine');
  1498.             $selector $this->params->get('selector');
  1499.             $PrivateKey file_get_contents($this->params->get('pathDKIM'));
  1500.             $signer = new \Swift_Signers_DKIMSigner($PrivateKey$domainName$selector);
  1501.             $message->attachSigner($signer);
  1502.         }
  1503.         try {
  1504.             $this->mailer->send($message);
  1505.         } catch (\Swift_SwiftException $ex) {
  1506.             $ex->getMessage();
  1507.         }
  1508.     }
  1509.     public function sendCommandeGroupeeEmail($sejour$nbAlbums$email_accompagnateur$phone$address,$addressComplement,$postalCode$city ,$region,$country,$accompagnateur,$hasAlbum)
  1510.     { 
  1511.         $email = (new TemplatedEmail())
  1512.             ->from('info@5sur5sejour.com')
  1513.             // Confirmation envoyée à l'accompagnateur + copies aux adresses demandées
  1514.             ->to($email_accompagnateur)
  1515.             ->cc('contact@5sur5sejour.com''ramzi.benlarbi@gmail.com''yousra.tlich@gmail.com')
  1516.             ->subject('Nouvelle commande groupée d\'albums - Séjour ' $sejour->getCodeSejour())
  1517.             ->htmlTemplate('emails/NotificationDemandeCommandeGroupee.html.twig')
  1518.             ->context([
  1519.                 'sejour' => $sejour,
  1520.                 'nbAlbums' => $nbAlbums,
  1521.                 'emailAccompagnateur' => $email_accompagnateur,
  1522.                 'phone' => $phone,
  1523.                 'address' => $address,
  1524.                 'accompagnateur' => $accompagnateur,
  1525.                 'city' => $city,
  1526.                 'region' => $region,
  1527.                 'country' => $country,
  1528.                 'addressComplement' => $addressComplement,
  1529.                 'postalCode' => $postalCode,
  1530.                 'hasAlbum' => $hasAlbum,
  1531.                 'date_commande' => new \DateTime()
  1532.             ]);
  1533.         $this->mailerInterface->send($email);
  1534.     }
  1535. }