src/Controller/Backoffice/EvenementController.php line 752

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Backoffice;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use Symfony\Component\HttpFoundation\Session\Session;
  8. use Doctrine\Persistence\ManagerRegistry;
  9. use Symfony\Component\String\Slugger\SluggerInterface;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. use Symfony\Component\Mailer\MailerInterface;
  12. use Symfony\Component\Mime\Crypto\DkimSigner;
  13. use Symfony\Component\Mime\Email;
  14. use Symfony\Component\Mime\Address;
  15. use PhpOffice\PhpSpreadsheet\IOFactory;
  16. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  17. use App\Service\Utils;
  18. use App\Service\EvenementInfo;
  19. use App\Entity\Utilisateur;
  20. use App\Entity\Evenement;
  21. use App\Entity\EvenementIntervenant;
  22. use App\Entity\Reponse;
  23. use App\Entity\Message;
  24. use App\Entity\Envoi;
  25. use App\Entity\Intervenant;
  26. use App\Entity\Programme;
  27. use App\Entity\Inscription;
  28. use App\Entity\Galerie;
  29. use App\Entity\Question;
  30. use App\Entity\Contact;
  31. use App\Entity\ListeContact;
  32. use App\Form\EvenementType;
  33. use App\Form\MessageType;
  34. use DateTime;
  35. use SebastianBergmann\CodeCoverage\Report\Xml\Report;
  36. /**
  37.  * @Route("/admindecarbo/evenement", name="app_")
  38.  */
  39. class EvenementController extends AbstractController
  40. {
  41.     private $doctrine;
  42.     private $slugger;
  43.     private $mailer;
  44.     public function __construct(ManagerRegistry $doctrineMailerInterface $mailerSluggerInterface $slugger)
  45.     {
  46.         $this->doctrine $doctrine;
  47.         $this->slugger $slugger;
  48.         $this->mailer $mailer;
  49.     }
  50.     /**
  51.      * @Route("/", name="evenements")
  52.      */
  53.     public function evenements(): Response
  54.     {
  55.         $evenements $this->doctrine->getRepository(Evenement::class)->findBy(
  56.             ["utilisateur" => $this->getUser()], 
  57.             ["date" => "DESC"]
  58.         );
  59.         foreach ($this->getUser()->getAutorisations() as $auto) {
  60.             if(!in_array($auto$evenements)) {
  61.                 $evenements[] = $auto;
  62.             }
  63.         }
  64.         return $this->render('application/evenements.html.twig', [
  65.             'evenements' => $evenements    
  66.         ]);
  67.     }
  68.     /**
  69.      * @Route("/{idevenement<\d+>}", name="evenement")
  70.      */
  71.     public function evenement(int $idevenementRequest $requestSluggerInterface $sluggerUtils $serviceUtils): Response
  72.     {
  73.         $evenement $this->doctrine->getRepository(Evenement::class)->find($idevenement);
  74.         if(!$evenement) {
  75.             $evenement = new Evenement;
  76.         } else {
  77.             $evenements $this->doctrine->getRepository(Evenement::class)->findBy(
  78.                 ["utilisateur" => $this->getUser()], 
  79.                 ["date" => "DESC"]
  80.             );
  81.     
  82.             foreach ($this->getUser()->getAutorisations() as $auto) {
  83.                 $evenements[] = $auto;
  84.             }
  85.             if(!in_array($evenement$evenements)) {
  86.                 return $this->redirectToRoute('app_evenements');
  87.             }
  88.         }
  89.         $form $this->createForm(EvenementType::class, $evenement, ['current_user' => $this->getUser()]);
  90.         if($request->request->get('entree_id') !== null
  91.             && $request->request->get('entree_titre') != ""
  92.             && $request->request->get('entree_debut') != ""
  93.         ) {
  94.             if($request->request->get('entree_id')) {
  95.                 $programme $this->doctrine->getRepository(Programme::class)->find($request->request->get('entree_id'));
  96.             } else {
  97.                 $programme = new Programme;
  98.             }
  99.             $programme->setEvenement($evenement);
  100.             $programme->setHeureDebut(Datetime::createFromFormat('H:i'$request->request->get('entree_debut')));
  101.             if($request->request->get('entree_fin') == "") {
  102.                 $programme->setHeureFin(null);
  103.             } else {
  104.                 $programme->setHeureFin(Datetime::createFromFormat('H:i'$request->request->get('entree_fin')));
  105.             }
  106.             $programme->setJour(Datetime::createFromFormat('Y-m-d'$request->request->get('entree_jour')));
  107.             $programme->setTitre$request->request->get('entree_titre') );
  108.             $programme->setChapo$request->request->get('entree_chapo') );
  109.             $programme->setTexte$request->request->get('entree_texte') );
  110.             
  111.             $em $this->doctrine->getManager();
  112.             $em->persist($programme);
  113.             $em->flush();
  114.             
  115.             return $this->redirectToRoute('app_evenement', ['idevenement' => $evenement->getId()]);
  116.         }
  117.         
  118.         // Ajoute / Modif du titre de la evenement
  119.         $form->handleRequest($request);
  120.         if ($form->isSubmitted() && $form->isValid()) {
  121.                         
  122.             $evenement $form->getData();
  123.             if($evenement->getUtilisateur() == null) {
  124.                 $evenement->setUtilisateur$this->getUser() );
  125.             }     
  126.             $toUpload = ["infoPratiqueMap""bandeau""bandeauFond""programmeFond""formulaireFond""emailImage""btInscriptionImg"];
  127.             foreach ($toUpload as $file) {
  128.                 // Upload des images
  129.                 $map $form->get($file)->getData();
  130.                 if ($map) {
  131.                     $originalFilename pathinfo($map->getClientOriginalName(), PATHINFO_FILENAME);
  132.                     $safeFilename $slugger->slug($originalFilename);
  133.                     $newFilename $safeFilename.'-'.uniqid().'.'.$map->guessExtension();
  134.                     if(!is_dir($this->getParameter('folder.uploadsite'))) {
  135.                         mkdir($this->getParameter('folder.uploadsite'), 0775);
  136.                     }
  137.                     try {
  138.                         $map->move(
  139.                             $this->getParameter('folder.uploadsite'),
  140.                             $newFilename
  141.                         );
  142.                     } catch (FileException $e) {
  143.                         
  144.                     }
  145.                     $method "set".ucfirst($file);
  146.                     if(method_exists($evenement$method)) {
  147.                         $evenement->{$method}($newFilename);
  148.                     }
  149.                 }
  150.             }
  151.             
  152.             
  153.             // Enregistre l'évènement en base
  154.             $em $this->doctrine->getManager();  
  155.             $em->persist($evenement);
  156.             $em->flush();
  157.             
  158.             
  159.             
  160.                      
  161.                         
  162.             
  163.             // Modif du slug si besoin
  164.             if($evenement->getSlug() == null || $evenement->getSlug() == '') {
  165.                 //$evenement->setSlug($slugger->slug($evenement));
  166.                 $slug strtolower($slugger->slug($evenement->getTitre()));
  167.                 
  168.                 // Recherche si le slug existe déjà 
  169.                 $getThisSlug $this->doctrine->getRepository(Evenement::class)->findOneBySlug($slug);
  170.                 if($getThisSlug && $getThisSlug != $evenement) {
  171.                     $slug+="_".$evenement->getId();
  172.                 }
  173.                 $evenement->setSlug($slug);
  174.                 $em->persist($evenement);
  175.                 $em->flush();
  176.             }
  177.             
  178.             // Message FLash
  179.             $session = new Session();
  180.             $session->getFlashBag()->add(
  181.                 'success',
  182.                 'L\'événement '.$evenement->getTitre().' a bien été ajouté/modifié.'
  183.             );
  184.             //return $this->redirectToRoute('app_evenement', ['idevenement' => $evenement->getId()]);
  185.         }
  186.         // Calcul des stats
  187.         $stats = [];
  188.         foreach($evenement->getMessages() as $message) {
  189.             $stats[$message->getId()] = ["nonenvoyes" => 0"envoyes" => 0"ouverts" => 0];
  190.             foreach($message->getEnvois() as $envoi) {
  191.                 if($envoi->getDateEnvoi() == null) {
  192.                     $stats[$message->getId()]["nonenvoyes"]++;
  193.                 } else {
  194.                     $stats[$message->getId()]["envoyes"]++;
  195.                     if($envoi->getDateOuverture() != null$stats[$message->getId()]["ouverts"]++; 
  196.                 }
  197.             } 
  198.         }
  199.         // Stats mail pour inscrits
  200.         $statInscrits = [
  201.             "total" => count($evenement->getInscriptions()),
  202.             "recap" => 0,
  203.             "satisfaction" => 0,
  204.         ];
  205.         foreach ($evenement->getInscriptions() as $inscription) {
  206.             if($inscription->getEnvoiRecap() !== null) {
  207.                 $statInscrits['recap']++;
  208.             }
  209.             if($inscription->getEnvoiSatisfaction() !== null) {
  210.                 $statInscrits['satisfaction']++;
  211.             }
  212.         }
  213.         // Questionnaires de statisfaction
  214.         $reponses = [];
  215.         if($evenement->getId() !== null) {
  216.             $satisfaction $this->doctrine->getRepository(Reponse::class)->getSatisfactionForEvent($evenement);
  217.             foreach($satisfaction as $reponse) {
  218.                 $keyQuestion $reponse->getQuestion()->getOrdre()."_".$reponse->getQuestion()->getId();
  219.                 $reponses[$keyQuestion]["question"] = $reponse->getQuestion();
  220.                 $reponses[$keyQuestion]["liste"][] = $reponse;
  221.                 if($reponse->getQuestion()->getType() == "note4") {
  222.                     if( !isset($reponses[$keyQuestion]["notes"][$reponse->getContenu()]) ) {
  223.                         $reponses[$keyQuestion]["notes"][$reponse->getContenu()] = 1;
  224.                     } else {
  225.                         $reponses[$keyQuestion]["notes"][$reponse->getContenu()]++;
  226.                     }
  227.                     ksort$reponses[$keyQuestion]["notes"] );
  228.                 }
  229.     
  230.                 if($reponse->getQuestion()->getType() == "radio" || $reponse->getQuestion()->getType() == "checkbox") {
  231.                     // Si c'est une question QCM, on augmente le nombre pour la réponse 1, 2, 3 ou 4
  232.                     for($i=1$i<=4$i++) {
  233.                         if($reponse->getContenu() == $reponse->getQuestion()->{"getReponse".$i}()) {
  234.                             if(!isset($reponses[$keyQuestion]["detail"]["reponse".$i])) $reponses[$keyQuestion]["detail"]["reponse".$i] = 0;
  235.                             $reponses[$keyQuestion]["detail"]["reponse".$i]++;
  236.                         }
  237.                     
  238.                     }
  239.                 }
  240.     
  241.                 // compteur du nombre total de réponse
  242.                 if(!isset($reponses[$keyQuestion]["compteur"])) $reponses[$keyQuestion]["compteur"]=0;
  243.                 $reponses[$keyQuestion]["compteur"]++;
  244.             }
  245.         }
  246.         
  247.         // Ajout dans la galerie 
  248.         if( $request->files->get('galerie') ) {
  249.             // Upload d'image
  250.             $image $request->files->get('galerie')['image'];
  251.             if ($image) {
  252.                 $originalFilename pathinfo($image->getClientOriginalName(), PATHINFO_FILENAME);
  253.                 
  254.                 $safeFilename $slugger->slug($originalFilename);
  255.                 $newFilename $safeFilename.'-'.uniqid().'.'.$image->guessExtension();
  256.                 if(!is_dir($this->getParameter('folder.uploadsite'))) {
  257.                     mkdir($this->getParameter('folder.uploadsite'), 0775);
  258.                 }
  259.                 try {
  260.                     $exif exif_read_data($image);
  261.                     $image->move(
  262.                         $this->getParameter('folder.uploadsite'),
  263.                         $newFilename
  264.                     );
  265.                     
  266.                     $serviceUtils->resizeImage(
  267.                         $this->getParameter('folder.uploadsite').$newFilename
  268.                         $this->getParameter('folder.uploadsite'), 
  269.                         $newFilename
  270.                         ["width"=>1000"height"=>1000]
  271.                     );
  272.                     
  273.                     // Gère l'orientation si pris depuis un telephone
  274.                     if (!empty($exif['Orientation'])) {
  275.                         $edited imagecreatefromjpeg($this->getParameter('folder.uploadsite').$newFilename);
  276.                         
  277.                         switch ($exif['Orientation']) {
  278.                             case 3:
  279.                                 $image imagerotate($edited1800);
  280.                                 break;
  281.                             
  282.                             case 6:
  283.                                 $image imagerotate($edited, -900);
  284.                                 break;
  285.                             
  286.                             case 8:
  287.                                 $image imagerotate($edited900);
  288.                                 break;
  289.                             default:                                
  290.                                 $image imagerotate($edited00);
  291.                                 break;
  292.                         }
  293.                         
  294.                         imagejpeg($image$this->getParameter('folder.uploadsite').$newFilename);
  295.                     }
  296.                     $serviceUtils->resizeImage(
  297.                         $this->getParameter('folder.uploadsite').$newFilename
  298.                         $this->getParameter('folder.uploadsite'), 
  299.                         'mini_'.$newFilename
  300.                         ["width"=>180]
  301.                     );
  302.                 } catch (FileException $e) {
  303.                     
  304.                 }
  305.                 $galerieEvt $this->doctrine->getRepository(Galerie::class)->findBy(
  306.                     ['evenement'=> $evenement], 
  307.                     ['ordre' => 'DESC'], 
  308.                     1
  309.                 );
  310.                 $ordre 1;
  311.                 if($galerieEvt && count($galerieEvt)) {
  312.                     $ordre $galerieEvt[0]->getOrdre() +1;
  313.                 }
  314.                 
  315.                 $galerie = new Galerie;
  316.                 $galerie->setPhoto($newFilename);
  317.                 if($request->request->get('galerie')) {
  318.                     $galerie->setYoutube($request->request->get('galerie')['youtube']);
  319.                 }
  320.                 $galerie->setEvenement($evenement);
  321.                 $galerie->setOrdre($ordre);
  322.                 $em $this->doctrine->getManager();  
  323.                 $em->persist($galerie);
  324.                 $em->flush();
  325.             }
  326.         }
  327.         // Gestion du questionnaire
  328.         if( $request->request->get('questionnaire') ) {
  329.                              
  330.             if($request->request->get('questionnaire')['id_modif'] != "") {
  331.                 // Modif d'une question
  332.                 $question $this->doctrine->getRepository(Question::class)->find($request->request->get('questionnaire')['id_modif']);
  333.                 $ordre $question->getOrdre();
  334.             } else {
  335.                 // AJout d'une question
  336.                 $questionLast $this->doctrine->getRepository(Question::class)->findBy(
  337.                     ['evenement'=> $evenement], 
  338.                     ['ordre' => 'DESC'], 
  339.                     1
  340.                 );
  341.                 $ordre 1;
  342.                 if($questionLast && count($questionLast)) {
  343.                     $ordre $questionLast[0]->getOrdre() +1;
  344.                 }
  345.                 
  346.                 $question = new Question;                
  347.             }
  348.             if($request->request->get('questionnaire')['type'] == "radio") {
  349.                 $question->setReponse1$request->request->get('questionnaire')['qcm_1'] );
  350.                 $question->setReponse2$request->request->get('questionnaire')['qcm_2'] );
  351.                 $question->setReponse3$request->request->get('questionnaire')['qcm_3'] );
  352.                 $question->setReponse4$request->request->get('questionnaire')['qcm_4'] );
  353.                 $question->setReponse5$request->request->get('questionnaire')['qcm_5'] );
  354.                 $question->setReponse6$request->request->get('questionnaire')['qcm_6'] );
  355.             }
  356.             
  357.             $question->setIntitule($request->request->get('questionnaire')['question']);
  358.             $question->setEvenement($evenement);
  359.             $question->setOrdre($ordre);
  360.             $question->setType($request->request->get('questionnaire')['type']);
  361.             $em $this->doctrine->getManager();  
  362.             $em->persist($question);
  363.             $em->flush();
  364.             
  365.         }
  366.         $galerie null;
  367.         $questionnaire null;
  368.         $participants null;
  369.         if($evenement) {
  370.             $galerie $this->doctrine->getRepository(Galerie::class)->findBy(
  371.                 ['evenement'=> $evenement], 
  372.                 ['ordre' => 'ASC']
  373.             );
  374.             $questionnaire $this->doctrine->getRepository(Question::class)->findBy(
  375.                 ['evenement'=> $evenement], 
  376.                 ['ordre' => 'ASC']
  377.             );
  378.             // Récup du nombre de participants
  379.             $participants $this->doctrine->getRepository(Inscription::class)->findBy(
  380.                 [
  381.                     'evenement' => $evenement
  382.                     'participation' => true
  383.                 ], 
  384.                 []
  385.             );
  386.         }
  387.         $meslistes = [];
  388.         foreach($this->doctrine->getRepository(ListeContact::class)->findByUtilisateur($this->getUser()) as $item) {
  389.             $meslistes[] = $item->getId();
  390.         }
  391.         return $this->renderForm('application/evenement.html.twig', [
  392.             'form'          => $form,
  393.             'stats'         => $stats,
  394.             'statInscrits'  => $statInscrits,
  395.             'meslistes'     => $meslistes,
  396.             'participants'  => $participants,
  397.             'evenement'     => $evenement,
  398.             'galerie'       => $galerie,
  399.             'questionnaire' => $questionnaire,
  400.             'reponses'      => $reponses,
  401.             'intervenantsDispo' => $this->doctrine->getRepository(Intervenant::class)->findBy([], ['nom' => 'ASC']),
  402.             'intervenantsEvt' => $this->doctrine->getRepository(EvenementIntervenant::class)->findBy(['evenement' => $evenement]),
  403.         ]);
  404.     }
  405.     
  406.     
  407.     /**
  408.      * @Route("/envoimaj-{idevenement<\d+>}", name="evenement_envoimaj")
  409.      */
  410.     public function evenementEnvoimaj(int $idevenement): Response
  411.     {
  412.         $evenement $this->doctrine->getRepository(Evenement::class)->find($idevenement);
  413.         $em $this->doctrine->getManager();
  414.         ///////// Mise à jour des envois
  415.         $envoiProgrammes $this->doctrine->getRepository(Envoi::class)->findForEvent($evenement);
  416.         
  417.         $idContactProgrammes = [];
  418.         foreach($envoiProgrammes as $envoi) {
  419.             if(!in_array($envoi->getContact()->getId(), $idContactProgrammes)) {
  420.                 $idContactProgrammes[$envoi->getContact()->getId()][] = $envoi->getMessage()->getId();
  421.             }
  422.         }
  423.         // Gestion des "déjà inscrits"
  424.         $dejaInscrits = [];
  425.         foreach ($evenement->getInscriptions() as  $inscrit) {
  426.             $dejaInscrits[] = $inscrit->getContact()->getEmail();
  427.         }
  428.         $now = new \DateTime();
  429.         $now intval$now->format('Ymd') );
  430.         foreach($evenement->getListe() as $liste) {
  431.             foreach($liste->getContacts() as $contact) {
  432.                 // Pour chaque contact, ajoute un envoi par message
  433.             
  434.             // if(!in_array($contact->getId(), $idContactProgrammes) && !$contact->isDesactiver()) {
  435.                 if(!$contact->isDesactiver() && !in_array($contact->getEmail(), $dejaInscrits)) {
  436.                     foreach($evenement->getMessages() as $message) {
  437.                         $prog intval$message->getDateEnvoi()->format('Ymd') );
  438.                         if(
  439.                             !isset($idContactProgrammes[$contact->getId()])
  440.                             || !in_array($message->getId(), $idContactProgrammes[$contact->getId()])
  441.                         ) {
  442.                             // Ajoute le message uniquement si celui ci n'est pas déjà programmé ou envoyé
  443.                             if($now-$prog <= 
  444.                                 && $message->getType() != "j-1" 
  445.                                 && $message->getType() != "j+1" 
  446.                                 && $message->getType() != "confirmation"
  447.                                 && $message->getType() != ""                                    
  448.                                 ) {
  449.                                 // N'ajoute pas l'envoi sur la date du message est dépassée de 2 jours
  450.                                 $envoi = new Envoi;
  451.                                 $envoi->setProg($message->getDateEnvoi());
  452.                                 $envoi->setContact($contact);
  453.                                 $envoi->setMessage($message);
  454.                                 $em->persist($envoi);
  455.                                 
  456.                             }
  457.                             if( $now-$prog 
  458.                                 && $message->getType() == "invitation"
  459.                                 && $now intval($evenement->getDate()->format('Ymd'))
  460.                                 ) {
  461.                                 $envoi = new Envoi;
  462.                                 $envoi->setProg(new \DateTime);
  463.                                 $envoi->setContact($contact);
  464.                                 $envoi->setMessage($message);
  465.                                 $em->persist($envoi);
  466.                             }
  467.                         }
  468.                         
  469.                     }
  470.                 }                 
  471.                 
  472.                 // Supprime de la liste des envois programmés
  473.                 if( isset($idContactProgrammes[$contact->getId()]) ) {
  474.                     unset($idContactProgrammes[$contact->getId()]);
  475.                 }
  476.             }
  477.         }
  478.         // Supprime les envois programmé, non envoyés, dans les listes non sélectionnées
  479.         foreach($evenement->getMessages() as $message) {
  480.             foreach($idContactProgrammes as $idContact => $progContact) {
  481.                 
  482.                 $envois $this->doctrine->getRepository(Envoi::class)->findNonEnvoyes($idContact$message);
  483.                 foreach($envois as $envoi) {
  484.                     $em->remove($envoi);
  485.                 }
  486.             }
  487.         }
  488.         // Supprime les envois programmé, non envoyés, pour les contacts déjà inscrits
  489.         $listeDejaEnvoyes $this->doctrine->getRepository(Envoi::class)->findDejaInscrits($dejaInscrits);
  490.         foreach ($listeDejaEnvoyes as $aSupprimer) {
  491.             $em->remove($aSupprimer);
  492.         }   
  493.         
  494.         $em->flush();
  495.       
  496.         // Message FLash
  497.         $session = new Session();
  498.         $session->getFlashBag()->add(
  499.             'success',
  500.             'Les envois de l\'événement '.$evenement->getTitre().' ont été mis à jour.'
  501.         );
  502.         
  503.         return $this->redirectToRoute('app_evenement', ['idevenement' => $idevenement]);
  504.     }  
  505.     
  506.     /**
  507.      * @Route("/supprimer-donneesperso-{idevenement<\d+>}-{hash}", name="supprimer_donneesperso")
  508.      */
  509.     public function supprimerDonneesperso(int $idevenementstring $hash): Response
  510.     {
  511.         if($hash == sha1($idevenement.$this->getParameter('app.salt'))) {
  512.             $evenement $this->doctrine->getRepository(Evenement::class)->find($idevenement);
  513.             
  514.             $satisfaction $this->doctrine->getRepository(Reponse::class)->getSatisfactionForEvent($evenement);
  515.             $em $this->doctrine->getManager();
  516.             // Suppression des réponses de questionnaire de satisfaction
  517.             foreach($satisfaction as $reponse) {
  518.                 $reponse->setInscription(null);
  519.                 $reponse->setContact(null);
  520.                 $em->persist($reponse);
  521.             }
  522.             // Suppression des réponses de questionnaire de satisfaction
  523.             foreach($evenement->getInscriptions() as $inscription) {
  524.                 $em->remove($inscription);
  525.             }
  526.             // Suppression des contacts dans les listes de contact
  527.             foreach($evenement->getListe() as $liste) {
  528.                 foreach ($liste->getContacts() as $contact) {
  529.                     foreach ($contact->getEnvois() as $envoi) {
  530.                         $em->remove($envoi);
  531.                     }
  532.                     foreach ($contact->getInscriptions() as $inscr) {
  533.                         $em->remove($inscr);
  534.                     }
  535.                     $em->remove($contact);
  536.                 }
  537.             }
  538.             $em->flush();
  539.             return $this->redirectToRoute('app_evenement', ['idevenement' => $idevenement]);
  540.         }
  541.         return $this->redirectToRoute('app_evenements');
  542.     }
  543.     
  544.     /**
  545.      * @Route("/{idevenement<\d+>}/suppr-bt", name="evenementSupprBt")
  546.      */
  547.     public function evenementSupprBt(int $idevenement) {
  548.         $evenement $this->doctrine->getRepository(Evenement::class)->find($idevenement);
  549.         if(!$evenement) {
  550.             return $this->redirectToRoute('app_evenements');
  551.         } else {
  552.             $evenements $this->doctrine->getRepository(Evenement::class)->findBy(
  553.                 ["utilisateur" => $this->getUser()], 
  554.                 ["date" => "DESC"]
  555.             );
  556.     
  557.             foreach ($this->getUser()->getAutorisations() as $auto) {
  558.                 $evenements[] = $auto;
  559.             }
  560.             if(!in_array($evenement$evenements)) {
  561.                 return $this->redirectToRoute('app_evenements');
  562.             }
  563.         }
  564.         $evenement->setBtInscriptionImg(null);
  565.         
  566.         $em $this->doctrine->getManager();  
  567.         $em->persist($evenement);
  568.         $em->flush();
  569.         
  570.         return $this->redirectToRoute('app_evenement', ['idevenement' => $evenement->getId()]);
  571.     }
  572.     /**
  573.      * @Route("/exportsatisfaction-{idevenement<\d+>}", name="exportsatisfaction")
  574.      */
  575.     public function exportsatisfaction(int $idevenement): Response
  576.     {
  577.         $evenement $this->doctrine->getRepository(Evenement::class)->find($idevenement);
  578.         $spreadsheet = new Spreadsheet();
  579.         $spreadsheet->getProperties()->setCreator($this->getUser()->getPrenom()." ".$this->getUser()->getNom())
  580.             ->setLastModifiedBy($this->getUser()->getPrenom()." ".$this->getUser()->getNom())
  581.             ->setTitle('['.date('d-m-Y').'] - Satisfaction '.$evenement->getTitre())
  582.             ->setSubject('['.date('d-m-Y').'] - Satisfaction '.$evenement->getTitre())
  583.             ->setDescription('Export des questionnaires')
  584.         ;
  585.         $reponses = [];
  586.         $satisfaction $this->doctrine->getRepository(Reponse::class)->getSatisfactionForEvent($evenement);
  587.         foreach($satisfaction as $reponse) {
  588.             $keyQuestion $reponse->getQuestion()->getOrdre()."_".$reponse->getQuestion()->getId();
  589.             $reponses[$keyQuestion]["question"] = $reponse->getQuestion();
  590.             $reponses[$keyQuestion]["liste"][] = $reponse;
  591.             if($reponse->getQuestion()->getType() == "note4") {
  592.                 if( !isset($reponses[$keyQuestion]["notes"][$reponse->getContenu()]) ) {
  593.                     $reponses[$keyQuestion]["notes"][$reponse->getContenu()] = 1;
  594.                 } else {
  595.                     $reponses[$keyQuestion]["notes"][$reponse->getContenu()]++;
  596.                 }
  597.                 ksort$reponses[$keyQuestion]["notes"] );
  598.             }
  599.             if($reponse->getQuestion()->getType() == "radio" || $reponse->getQuestion()->getType() == "checkbox") {
  600.                 // Si c'est une question QCM, on augmente le nombre pour la réponse 1, 2, 3 ou 4
  601.                 for($i=1$i<=4$i++) {
  602.                     if($reponse->getContenu() == $reponse->getQuestion()->{"getReponse".$i}()) {
  603.                         if(!isset($reponses[$keyQuestion]["detail"]["reponse".$i])) $reponses[$keyQuestion]["detail"]["reponse".$i] = 0;
  604.                         $reponses[$keyQuestion]["detail"]["reponse".$i]++;
  605.                     }
  606.                 
  607.                 }
  608.             }
  609.             // compteur du nombre total de réponse
  610.             if(!isset($reponses[$keyQuestion]["compteur"])) $reponses[$keyQuestion]["compteur"]=0;
  611.             $reponses[$keyQuestion]["compteur"]++;
  612.         }
  613.         // Créé la worksheet de récap
  614.         $newWorksheet = new Worksheet($spreadsheet"RECAP");
  615.         $spreadsheet->addSheet($newWorksheet0);
  616.         $spreadsheet->setActiveSheetIndexByName("RECAP");
  617.         $indexLine 1;
  618.         foreach ($reponses as $key => $current) {
  619.             $spreadsheet->getActiveSheet()->setCellValue'A'.$indexLine+1$current['question']->getIntitule());
  620.             if($current['question']->getType() == "note4") {
  621.                 $spreadsheet->getActiveSheet()->setCellValue'B'.$indexLine"1 étoile");
  622.                 $spreadsheet->getActiveSheet()->setCellValue'C'.$indexLine"2 étoiles");
  623.                 $spreadsheet->getActiveSheet()->setCellValue'D'.$indexLine"3 étoiles");
  624.                 $spreadsheet->getActiveSheet()->setCellValue'E'.$indexLine"4 étoiles");
  625.                 $spreadsheet->getActiveSheet()->setCellValue'F'.$indexLine"TOTAL");
  626.                 
  627.                 $spreadsheet->getActiveSheet()->setCellValue'B'.$indexLine+1, isset($current['notes'][1]) ? $current['notes'][1] : 0);
  628.                 $spreadsheet->getActiveSheet()->setCellValue'C'.$indexLine+1, isset($current['notes'][2]) ? $current['notes'][2] : 0);
  629.                 $spreadsheet->getActiveSheet()->setCellValue'D'.$indexLine+1, isset($current['notes'][3]) ? $current['notes'][3] : 0);
  630.                 $spreadsheet->getActiveSheet()->setCellValue'E'.$indexLine+1, isset($current['notes'][4]) ? $current['notes'][4] : 0);
  631.                 $spreadsheet->getActiveSheet()->setCellValue'F'.$indexLine+1$current['compteur']);
  632.                 $indexLine += 3;
  633.             }
  634.             if($current['question']->getType() == "text") {
  635.                 $indexLine ++;
  636.                 foreach ($current['liste'] as $value) {
  637.                     if($value->getContenu() != "") {
  638.                         $spreadsheet->getActiveSheet()->setCellValue'B'.$indexLine$value->getContenu() );
  639.                         $indexLine ++;
  640.                     }
  641.                 }
  642.                 $indexLine ++;
  643.             }
  644.         }
  645.         $currentQuestion 1;
  646.         foreach ($reponses as $key => $current) {
  647.             // Créé la worksheet de la question
  648.             $newWorksheet = new Worksheet($spreadsheet"QUESTION ".$currentQuestion);
  649.             $spreadsheet->addSheet($newWorksheet$currentQuestion);
  650.             $spreadsheet->setActiveSheetIndexByName("QUESTION ".$currentQuestion);
  651.             $indexLine 1;
  652.             $spreadsheet->getActiveSheet()->setCellValue'A'.$indexLine$current['question']->getIntitule());
  653.             $indexLine += 2;
  654.             
  655.             if( $current['question']->getType() == "note4") {
  656.                 $spreadsheet->getActiveSheet()->setCellValue'A'.$indexLine"NOTE");
  657.                 $spreadsheet->getActiveSheet()->setCellValue'B'.$indexLine"COMMENTAIRE");
  658.                 $spreadsheet->getActiveSheet()->setCellValue'C'.$indexLine"NOM");
  659.                 $spreadsheet->getActiveSheet()->setCellValue'D'.$indexLine"PRENOM");
  660.                 $indexLine++;
  661.             }
  662.             if( $current['question']->getType() == "text") {
  663.                 $spreadsheet->getActiveSheet()->setCellValue'A'.$indexLine"COMMENTAIRE");
  664.                 $spreadsheet->getActiveSheet()->setCellValue'B'.$indexLine"NOM");
  665.                 $spreadsheet->getActiveSheet()->setCellValue'C'.$indexLine"PRENOM");
  666.                 $indexLine++;
  667.             }
  668.             foreach($current['liste'] as $reponse) {
  669.                 if( $current['question']->getType() == "note4") {                    
  670.                     $spreadsheet->getActiveSheet()->setCellValue'A'.$indexLine$reponse->getContenu());
  671.                     $spreadsheet->getActiveSheet()->setCellValue'B'.$indexLine, ($reponse->getCommentaire()!=null $reponse->getCommentaire() :'') );
  672.                     $spreadsheet->getActiveSheet()->setCellValue'C'.$indexLine$reponse->getContact()->getNom());
  673.                     $spreadsheet->getActiveSheet()->setCellValue'D'.$indexLine$reponse->getContact()->getPrenom());
  674.                 } elseif( $current['question']->getType() == "text") {                    
  675.                     $spreadsheet->getActiveSheet()->setCellValue'A'.$indexLine$reponse->getContenu() );
  676.                     $spreadsheet->getActiveSheet()->setCellValue'B'.$indexLine$reponse->getContact()->getNom());
  677.                     $spreadsheet->getActiveSheet()->setCellValue'C'.$indexLine$reponse->getContact()->getPrenom());
  678.                 }
  679.                 $indexLine++;
  680.             }
  681.             $currentQuestion++;
  682.         }
  683.         
  684.         $writer IOFactory::createWriter($spreadsheet'Xlsx');
  685.         ob_start();
  686.         $writer->save('php://output');
  687.         $content ob_get_clean();
  688.         $response = new Response();
  689.         $response->setStatusCode(200);
  690.         $response->setContent($content);
  691.         $response->headers->set('Content-Type''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''application/force-download');
  692.         $response->headers->set('Content-Disposition','attachment; filename=Export-'.date('Y-m-d-His').'.xlsx');
  693.         return $response;
  694.     }
  695.     /**
  696.      * @Route("/exportinscription-{idevenement<\d+>}", name="exportinscription")
  697.      */
  698.     public function exportinscription(int $idevenement): Response
  699.     {
  700.         $evenement $this->doctrine->getRepository(Evenement::class)->find($idevenement);
  701.         $spreadsheet = new Spreadsheet();
  702.        
  703.         $spreadsheet->getProperties()->setCreator($this->getUser()->getPrenom()." ".$this->getUser()->getNom())
  704.             ->setLastModifiedBy($this->getUser()->getPrenom()." ".$this->getUser()->getNom())
  705.             ->setTitle('['.date('d-m-Y').'] - Inscriptions '.$evenement->getTitre())
  706.             ->setSubject('['.date('d-m-Y').'] - Inscriptions '.$evenement->getTitre())
  707.             ->setDescription('Export des inscriptions')
  708.         ;
  709.         $spreadsheet->setActiveSheetIndex(0)
  710.             ->setCellValue('A1''Nom')
  711.             ->setCellValue('B1''Prénom')
  712.             ->setCellValue('C1''Email')
  713.             ->setCellValue('D1''Code postal')
  714.             ->setCellValue('E1''Téléphone')
  715.             ->setCellValue('F1''Entité')
  716.             ->setCellValue('G1''Fonction')
  717.             ->setCellValue('H1''Date d\'inscription')
  718.             ->setCellValue('I1''Message d\'origine')
  719.             ->setCellValue('J1''Droit à l\'image')
  720.             ->setCellValue('K1''Invitant - Nom')
  721.             ->setCellValue('L1''Invitant - Prénom')
  722.             ->setCellValue('M1''Invitant - Email')
  723.             ->setCellValue('N1''Invitant - Territoire')
  724.             ->setCellValue('O1''Invitant - Agence')
  725.             ->setCellValue('P1''Type')
  726.             ->setCellValue('Q1''Nombre de participant')
  727.             ->setCellValue('R1''CV déposé')
  728.             ->setCellValue('S1''Créneau d\'arrivée')
  729.             ->setCellValue('T1''Attentes')
  730.             ->setCellValue('U1''Attentes (détail)')
  731.             ->setCellValue('V1''Connu')
  732.             ->setCellValue('W1''Invité Nom')
  733.             ->setCellValue('X1''Invité Prénom')
  734.         ;
  735.         $i 2;
  736.         $inscriptions $this->doctrine->getRepository(Inscription::class)->findInscriptionsForExport($evenement);
  737.         foreach ($inscriptions as $inscription) {
  738.             $nbParticipants intval$inscription->getNbParticipants() );
  739.             if($nbParticipants <= 1) {
  740.                 if($inscription->getInviteNom() && $inscription->getInvitePrenom()) {
  741.                     $nbParticipants 2;
  742.                 }
  743.             }
  744.             $spreadsheet->setActiveSheetIndex(0)
  745.                 ->setCellValue('A'.$i$inscription->getContact()->getNom())
  746.                 ->setCellValue('B'.$i$inscription->getContact()->getPrenom())
  747.                 ->setCellValue('C'.$i$inscription->getContact()->getEmail())
  748.                 ->setCellValue('D'.$i$inscription->getPostal())
  749.                 ->setCellValue('E'.$i$inscription->getTelephone())
  750.                 ->setCellValue('F'.$i$inscription->getContact()->getSociete()!= null $inscription->getContact()->getSociete() : '')
  751.                 ->setCellValue('G'.$i$inscription->getContact()->getFonction()!= null $inscription->getContact()->getFonction() : '')
  752.                 ->setCellValue('H'.$i$inscription->getDateInscription()->format('d-m-Y H:i'))
  753.                 ->setCellValue('I'.$i$inscription->getMessage()!= null ucfirst($inscription->getMessage()->getType()) : '')
  754.                 ->setCellValue('J'.$i$inscription->isAccordImage() == true 'Oui' 'Non')
  755.                 ->setCellValue('K'.$i$inscription->getContact()->getInvitantNom()!= null $inscription->getContact()->getInvitantNom() : '')
  756.                 ->setCellValue('L'.$i$inscription->getContact()->getInvitantPrenom()!= null $inscription->getContact()->getInvitantPrenom() : '')
  757.                 ->setCellValue('M'.$i$inscription->getContact()->getInvitantEmail()!= null $inscription->getContact()->getInvitantEmail() : '')
  758.                 ->setCellValue('N'.$i$inscription->getContact()->getInvitantTerritoire()!= null $inscription->getContact()->getInvitantTerritoire() : '')
  759.                 ->setCellValue('O'.$i$inscription->getContact()->getInvitantAgence()!= null $inscription->getContact()->getInvitantAgence() : '')
  760.                 ->setCellValue('P'.$i$inscription->getType()== "indiv" 'Individuelle' 'Groupe')
  761.                 ->setCellValue('Q'.$i$nbParticipants )
  762.                 ->setCellValue('R'.$i$inscription->getCv()!= null 'Oui' 'Non')
  763.                 ->setCellValue('S'.$i$inscription->getCreneau() !== null $inscription->getCreneau() : '' )
  764.                 ->setCellValue('T'.$i$inscription->getAttentes() !== null $inscription->getAttentes() : '' )
  765.                 ->setCellValue('U'.$i$inscription->getAttentes() == "Autre" $inscription->getAttentesAutre() : '' )
  766.                 ->setCellValue('V'.$i$inscription->getConnu() !== null $inscription->getConnu() : '' )
  767.                 ->setCellValue('W'.$i$inscription->getInviteNom() !== null $inscription->getInviteNom() : '' )
  768.                 ->setCellValue('X'.$i$inscription->getInvitePrenom() !== null $inscription->getInvitePrenom() : '' )
  769.             ;
  770.             
  771.             $i++;
  772.         }
  773.         
  774.         $writer IOFactory::createWriter($spreadsheet'Xlsx');
  775.         ob_start();
  776.         $writer->save('php://output');
  777.         $content ob_get_clean();
  778.         $response = new Response();
  779.         $response->setStatusCode(200);
  780.         $response->setContent($content);
  781.         $response->headers->set('Content-Type''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''application/force-download');
  782.         $response->headers->set('Content-Disposition','attachment; filename=Export-'.date('Y-m-d-His').'.xlsx');
  783.         return $response;
  784.     }
  785.     /**
  786.      * @Route("/message/{idmessage<\d+>}", name="message")
  787.      */
  788.     public function message(int $idmessageRequest $requestSluggerInterface $slugger): Response
  789.     {
  790.         $message $this->doctrine->getRepository(Message::class)->find($idmessage);
  791.         if(!$message$message = new Evenement;
  792.         $form $this->createForm(MessageType::class, $message);
  793.         // Ajoute / Modif un message
  794.         $form->handleRequest($request);
  795.         if ($form->isSubmitted() && $form->isValid()) {
  796.             $message $form->getData();
  797.             $date $message->getDateEnvoi();
  798.             if($date->format('Hi') == '0000') {
  799.                 $date->modify('+ 9 hours');
  800.                 $message->setDateEnvoi($date);
  801.             }
  802.              // Upload de la pièce jointe
  803.              $map $form->get('piecejointe')->getData();
  804.              if ($map) {
  805.                  $originalFilename pathinfo($map->getClientOriginalName(), PATHINFO_FILENAME);
  806.  
  807.                  $safeFilename $slugger->slug($originalFilename);
  808.                  $newFilename $safeFilename.'.'.$map->guessExtension();
  809.  
  810.                  if(!is_dir($this->getParameter('folder.uploadsite'))) {
  811.                      mkdir($this->getParameter('folder.uploadsite'), 0775);
  812.                  }
  813.  
  814.                  try {
  815.                      $map->move(
  816.                          $this->getParameter('folder.uploadsite'),
  817.                          $newFilename
  818.                      );
  819.                  } catch (FileException $e) {
  820.                      
  821.                  }
  822.  
  823.                  $message->setPiecejointe($newFilename);
  824.              }
  825.             $em $this->doctrine->getManager();
  826.             $em->persist($message);
  827.             $em->flush();   
  828.             // Mets à jour les dates des envois du message
  829.             $envois $this->doctrine->getRepository(Envoi::class)->findBy(
  830.                 [
  831.                     'message'   => $message,
  832.                     'dateEnvoi' => null
  833.                 ]
  834.             );
  835.             if( $message->getType() != "j-1" 
  836.                 && $message->getType() != "j+1" 
  837.                 && $message->getType() != "confirmation"
  838.                 ) {
  839.                     foreach($envois as $envoi) {
  840.                         $envoi->setProg($message->getDateEnvoi());
  841.                         $em->persist($envoi);
  842.                     }
  843.             } else {
  844.                 foreach($envois as $envoi) {
  845.                     $em->remove($envoi);
  846.                 }
  847.             }
  848.             $em->flush();   
  849.             
  850.             
  851.             // Message FLash
  852.             $session = new Session();
  853.             $session->getFlashBag()->add(
  854.                 'success',
  855.                 'Le message '.$message->getObjet().' a bien été ajouté/modifié.'
  856.             );
  857.             return $this->redirectToRoute('app_message', ['idmessage' => $message->getId()]);
  858.         }
  859.         return $this->renderForm('application/message.html.twig', [
  860.             'form' => $form,
  861.             'message' => $message,
  862.         ]);
  863.     }
  864.     /**
  865.      * @Route("/creationmessage-{idevenement<\d+>}", name="evenement_creationmessage")
  866.      */
  867.     public function evenementCreationmessage(int $idevenement): Response
  868.     {
  869.         $evenement $this->doctrine->getRepository(Evenement::class)->find($idevenement);
  870.         $dateEvt = clone $evenement->getDate();
  871.         $dateInvit = clone $dateEvt;
  872.         $dateInvit->modify('- 10 days');
  873.         try {
  874.             $idmessage $this->createMessage('relance''Engie Evénements''Texte Invitation'$dateInvit$evenement);
  875.         
  876.             // Message FLash
  877.             $session = new Session();
  878.             $session->getFlashBag()->add(
  879.                 'success',
  880.                 'Nouveau message ajouté. Vous pouvez dès maintenant le configurer.'
  881.             );
  882.             return $this->redirectToRoute('app_message', ['idmessage' => $idmessage]);
  883.         } catch (\Throwable $th) {
  884.             throw $this->createNotFoundException('Problème à la création de l\'événement'$th);
  885.         }
  886.         return $this->redirectToRoute('app_evenement', ['idevenement' => $evenement->getId()]);
  887.     }
  888.     /**
  889.      * @Route("/creationparcours-{idevenement<\d+>}", name="evenement_creationparcours")
  890.      */
  891.     public function evenementCreationparcours(int $idevenement): Response
  892.     {
  893.         $evenement $this->doctrine->getRepository(Evenement::class)->find($idevenement);
  894.         $dateEvt = clone $evenement->getDate();
  895.         
  896.         // Création de l'entrée SAVE THE DATE
  897.         $dateInvit = clone $dateEvt;
  898.         $dateInvit->modify('- 45 days');
  899.         $dateInvit->modify('+ 9 hours');
  900.         try {
  901.             $this->createMessage('savethedate''[SAVE THE DATE] Engie Evénements''Texte Save The Date'$dateInvit$evenement);
  902.         } catch (\Throwable $th) {
  903.             throw $this->createNotFoundException('Problème à la création de l\'événement'$th);
  904.         }
  905.         // Création de l'entrée INVITATION
  906.         $dateInvit = clone $dateEvt;
  907.         $dateInvit->modify('- 30 days');
  908.         $dateInvit->modify('+ 9 hours');
  909.         try {
  910.             $this->createMessage('invitation''[INVITATION] Engie Evénements''Texte Invitation'$dateInvit$evenement);
  911.         } catch (\Throwable $th) {
  912.             throw $this->createNotFoundException('Problème à la création de l\'événement'$th);
  913.         }
  914.         // Création de l'entrée RELANCE 1
  915.         $dateInvit = clone $dateEvt;
  916.         $dateInvit->modify('- 15 days');
  917.         $dateInvit->modify('+ 9 hours');
  918.         try {
  919.             $this->createMessage('relance''[INVITATION] Engie Evénements''Texte relance 1'$dateInvit$evenement);
  920.         } catch (\Throwable $th) {
  921.             throw $this->createNotFoundException('Problème à la création de l\'événement'$th);
  922.         }
  923.         // Création de l'entrée J-1
  924.         $dateInvit = clone $dateEvt;
  925.         $dateInvit->modify('- 1 day');
  926.         $dateInvit->modify('+ 9 hours');
  927.         try {
  928.             $this->createMessage('j-1''[J-1] Engie Evénements''Texte J-1'$dateInvit$evenement);
  929.         } catch (\Throwable $th) {
  930.             throw $this->createNotFoundException('Problème à la création de l\'événement'$th);
  931.         }
  932.         // Création de l'entrée J+1
  933.         $dateInvit = clone $dateEvt;
  934.         $dateInvit->modify('+ 1 day');
  935.         $dateInvit->modify('+ 9 hours');
  936.         try {
  937.             $this->createMessage('j+1''[J+1] Engie Evénements''Texte J+1'$dateInvit$evenement);
  938.         } catch (\Throwable $th) {
  939.             throw $this->createNotFoundException('Problème à la création de l\'événement'$th);
  940.         }
  941.         // Création de l'entrée J-1
  942.         $dateInvit = clone $dateEvt;
  943.         $dateInvit->modify('- 1 day');
  944.         $dateInvit->modify('+ 9 hours');
  945.         try {
  946.             $this->createMessage('confirmation''[CONFIRMATION] Engie Evénements''Texte confirmation'$dateInvit$evenement);
  947.         } catch (\Throwable $th) {
  948.             throw $this->createNotFoundException('Problème à la création de l\'événement'$th);
  949.         }
  950.         
  951.         return $this->redirectToRoute('app_evenement', ['idevenement' => $evenement->getId()]);
  952.     }
  953.     /**
  954.      * @Route("/suppr-{idmessage<\d+>}", name="message_suppr")
  955.      */
  956.     public function evenementSuppr(int $idmessage): Response
  957.     {
  958.         $message $this->doctrine->getRepository(Message::class)->find($idmessage);
  959.         $idevenement $message->getEvenement()->getId();
  960.     
  961.             $em $this->doctrine->getManager();
  962.             $em->remove($message);
  963.             $em->flush();            
  964.         
  965.         return $this->redirectToRoute('app_evenement', ['idevenement' => $idevenement]);
  966.     }
  967.     /**
  968.      * @Route("/supprinscription-{idinscription<\d+>}", name="inscription_suppr")
  969.      */
  970.     public function inscriptionSuppr(int $idinscription): Response
  971.     {
  972.         $inscription $this->doctrine->getRepository(Inscription::class)->find($idinscription);
  973.         $idevenement $inscription->getEvenement()->getId();
  974.     
  975.         if($inscription) { 
  976.             $em $this->doctrine->getManager();
  977.             $em->remove($inscription);
  978.             $em->flush();
  979.         }
  980.         return $this->redirectToRoute('app_evenement', ['idevenement' => $idevenement]);
  981.     }
  982.     private function createMessage(string $typestring $objetstring $texteDateTime $dateEnvoiEvenement $evenement
  983.     {
  984.         $message = new Message;
  985.         $message->setType($type);
  986.         $message->setObjet($objet);
  987.         $message->setTexte($texte);
  988.         $message->setTitre("Nouveau message");
  989.         $message->setDateEnvoi($dateEnvoi);
  990.         $message->setEvenement($evenement);
  991.         $em $this->doctrine->getManager();
  992.         $em->persist($message);
  993.         $em->flush();
  994.         $inscriptionsContactId = [];
  995.         foreach ($evenement->getInscriptions() as $inscription) {
  996.             $inscriptionsContactId[] = $inscription->getContact()->getId();
  997.         }
  998.         if($type != "j-1" && $type != "j+1" && $type != "confirmation" && $type != "") {
  999.             // Programme les envois de l'événement
  1000.             foreach($evenement->getListe() as $liste) {
  1001.                 foreach($liste->getContacts() as $contact) {
  1002.                     if( !in_array($contact->getId(), $inscriptionsContactId) and !$contact->isDesactiver() ) {
  1003.                         $envoi = new Envoi;
  1004.                         $envoi->setProg($dateEnvoi);
  1005.                         $envoi->setContact($contact);
  1006.                         $envoi->setMessage($message);
  1007.                         $em->persist($envoi);
  1008.                     }
  1009.                 }
  1010.             }
  1011.             $em->flush();
  1012.         }
  1013.        
  1014.         return $message->getId();
  1015.     }
  1016.     /**
  1017.      * @Route("/programme-suppr-{idevent<\d+>}-{idprog<\d+>}", name="programme_suppr")
  1018.      */
  1019.     public function programmeSuppr(int $ideventint $idprog): Response
  1020.     {
  1021.         $event $this->doctrine->getRepository(Evenement::class)->find($idevent);
  1022.         $programme $this->doctrine->getRepository(Programme::class)->findOneBy(
  1023.             [
  1024.                 'id' => $idprog,
  1025.                 'evenement' => $event
  1026.             ]    
  1027.         );
  1028.     
  1029.         if($programme) { 
  1030.             $em $this->doctrine->getManager();
  1031.             $em->remove($programme);
  1032.             $em->flush();
  1033.         }
  1034.         return $this->redirectToRoute('app_evenement', ['idevenement' => $idevent]);
  1035.     }
  1036.     /**
  1037.      * @Route("/programme-edit", name="programme_edit")
  1038.      */
  1039.     public function programmeEdit(Request $request): Response
  1040.     {
  1041.         
  1042.         $programme $this->doctrine->getRepository(Programme::class)->find($request->request->get('programme'));
  1043.         $result = [
  1044.             "id"=>$programme->getId(), 
  1045.             "titre"=>$programme->getTitre(), 
  1046.             "debut"=>$programme->getHeureDebut()->format('H:i'),
  1047.         ];
  1048.         if($programme->getChapo()) $result["chapo"] = $programme->getChapo();
  1049.         if($programme->getTexte()) $result["texte"] = $programme->getTexte();
  1050.         if($programme->getHeureFin()) $result["fin"] = $programme->getHeureFin()->format('H:i');
  1051.         if($programme->getJour()) $result["jour"] = $programme->getJour()->format('Y-m-d');
  1052.         return  new JsonResponse$result );
  1053.     }
  1054.     /**
  1055.      * @Route("/galerie-suppr-{idevent<\d+>}", name="galerie_suppr")
  1056.      */
  1057.     public function galerieSuppr(int $ideventRequest $request): Response
  1058.     {
  1059.         
  1060.         $galerie $this->doctrine->getRepository(Galerie::class)->findOneBy(
  1061.             [
  1062.                 'evenement'   => $this->doctrine->getRepository(Evenement::class)->find($idevent),
  1063.                 'id' => $request->request->get('galerie')
  1064.             ]
  1065.         );
  1066.         
  1067.         
  1068.         $em $this->doctrine->getManager();
  1069.         $em->remove($galerie);
  1070.         $em->flush();
  1071.         return  new JsonResponse( [$galerie->getId()] );
  1072.     }
  1073.     /**
  1074.      * @Route("/question-suppr-{idevent<\d+>}", name="question_suppr")
  1075.      */
  1076.     public function questionSuppr(int $ideventRequest $request): Response
  1077.     {
  1078.         
  1079.         $question $this->doctrine->getRepository(Question::class)->findOneBy(
  1080.             [
  1081.                 'evenement'   => $this->doctrine->getRepository(Evenement::class)->find($idevent),
  1082.                 'id' => $request->request->get('question')
  1083.             ]
  1084.         );
  1085.         
  1086.         $em $this->doctrine->getManager();
  1087.         $em->remove($question);
  1088.         $em->flush();
  1089.         return  new JsonResponse( [] );
  1090.     }
  1091.     /**
  1092.      * @Route("/question-get-{idevent<\d+>}", name="question_get")
  1093.      */
  1094.     public function questionGet(int $ideventRequest $request): Response
  1095.     {
  1096.         
  1097.         $question $this->doctrine->getRepository(Question::class)->findOneBy(
  1098.             [
  1099.                 'evenement'   => $this->doctrine->getRepository(Evenement::class)->find($idevent),
  1100.                 'id' => $request->request->get('question')
  1101.             ]
  1102.         );
  1103.         
  1104.         return  new JsonResponse( [
  1105.             'id' => $question->getId(),
  1106.             'intitule' => $question->getIntitule(),
  1107.             'type' => $question->getType(),
  1108.             'reponse1' => $question->getReponse1(),
  1109.             'reponse2' => $question->getReponse2(),
  1110.             'reponse3' => $question->getReponse3(),
  1111.             'reponse4' => $question->getReponse4(),
  1112.         ] );
  1113.     }
  1114.     /**
  1115.      * @Route("/galerie-order-{idevent<\d+>}", name="evenement_galerie_order")
  1116.      */
  1117.     public function galerieOrder(int $ideventRequest $request): Response
  1118.     {
  1119.         
  1120.         $em $this->doctrine->getManager();
  1121.         foreach( $request->request->get('order') as $key=>$item) {
  1122.             $galerie $this->doctrine->getRepository(Galerie::class)->find(intval($item));
  1123.             if($galerie) {
  1124.                 $galerie->setOrdre($key+1);
  1125.                 $em->persist($galerie);
  1126.             }
  1127.         }
  1128.         $em->flush();
  1129.         return  new JsonResponsetrue );
  1130.     }
  1131.     /**
  1132.      * @Route("/question-order-{idevent<\d+>}", name="evenement_question_order")
  1133.      */
  1134.     public function questionOrder(int $ideventRequest $request): Response
  1135.     {
  1136.         
  1137.         $em $this->doctrine->getManager();
  1138.         foreach( $request->request->get('order') as $key=>$item) {
  1139.             $question $this->doctrine->getRepository(Question::class)->find(intval($item));
  1140.             if($question) {
  1141.                 $question->setOrdre($key+1);
  1142.                 $em->persist($question);
  1143.             }
  1144.         }
  1145.         $em->flush();
  1146.         return  new JsonResponsetrue );
  1147.     }
  1148.     /**
  1149.      * @Route("/intervenant-ajout-{idevent<\d+>}", name="intervenant_ajout")
  1150.      */
  1151.     public function intervenantAjout(int $ideventRequest $request): Response
  1152.     {
  1153.         $intervenant $this->doctrine->getRepository(Intervenant::class)->find($request->request->get('intervenant'));
  1154.         $evenement $this->doctrine->getRepository(Evenement::class)->find($idevent);
  1155.         $relation = new EvenementIntervenant;
  1156.         $relation->setEvenement($evenement);
  1157.         $relation->setIntervenant($intervenant);
  1158.         $em $this->doctrine->getManager();
  1159.         $em->persist($relation);
  1160.         $em->flush();
  1161.         return  new JsonResponse( [$intervenant->getId(), strtoupper($intervenant->getNom())." ".$intervenant->getPrenom()] );
  1162.     }
  1163.     /**
  1164.      * @Route("/intervenant-suppr-{idevent<\d+>}", name="intervenant_suppr")
  1165.      */
  1166.     public function intervenantSuppr(int $ideventRequest $request): Response
  1167.     {
  1168.         
  1169.         $intervenant $this->doctrine->getRepository(Intervenant::class)->find($request->request->get('intervenant'));
  1170.         $evenement $this->doctrine->getRepository(Evenement::class)->find($idevent);
  1171.         $relation $this->doctrine->getRepository(EvenementIntervenant::class)->findOneBy(
  1172.             [
  1173.                 'evenement'   => $evenement,
  1174.                 'intervenant' => $intervenant
  1175.             ]
  1176.         );
  1177.         
  1178.         
  1179.         $em $this->doctrine->getManager();
  1180.         $em->remove($relation);
  1181.         $em->flush();
  1182.         return  new JsonResponse( [$intervenant->getId(), strtoupper($intervenant->getNom())." ".$intervenant->getPrenom()] );
  1183.     }
  1184.     /**
  1185.      * @Route("/toggle-inscription-{idevent<\d+>}", name="toggle_inscription")
  1186.      */
  1187.     public function toggleInscription(int $ideventRequest $request): Response
  1188.     {  
  1189.         if($request->request->get('idinscription') !== null) {
  1190.             // On a passé l'ID de l'inscription en paramêtre
  1191.             $inscription $this->doctrine->getRepository(Inscription::class)->findOneBy(
  1192.                 [
  1193.                     'id' => $request->request->get('idinscription'),
  1194.                     'evenement' => $idevent,
  1195.                 ], 
  1196.                 []
  1197.             );
  1198.         } elseif($request->request->get('idcontact') !== null) {
  1199.             // On a passé l'ID du contact en paramêtre
  1200.             $inscription $this->doctrine->getRepository(Inscription::class)->findOneBy(
  1201.                 [
  1202.                     'contact' => $request->request->get('idcontact'),
  1203.                     'evenement' => $idevent,
  1204.                 ], 
  1205.                 []
  1206.             );
  1207.         }
  1208.         if($inscription->isParticipation()) {
  1209.             $inscription->setParticipation(false);
  1210.         } else {
  1211.             $inscription->setParticipation(true);
  1212.         }
  1213.         $em $this->doctrine->getManager();
  1214.         $em->persist($inscription);
  1215.         $em->flush();
  1216.         return  new JsonResponse( [
  1217.                 $request->request->get('idinscription'), 
  1218.                 $inscription->isParticipation(), 
  1219.                 $request->request->get('idcontact')
  1220.             ] 
  1221.         );
  1222.     }
  1223.     
  1224.     /**
  1225.      * @Route("/force-inscription-{idevent<\d+>}", name="force_inscription")
  1226.      */
  1227.     public function forceInscription(int $ideventEvenementInfo $evtInfoRequest $request): Response
  1228.     
  1229.         $evenement $this->doctrine->getRepository(Evenement::class)->find$request->request->get('idevent') );
  1230.         $contact $this->doctrine->getRepository(Contact::class)->find$request->request->get('idcontact') );
  1231.         $message null;
  1232.         $inscription = new Inscription;
  1233.             $inscription->setDateInscription(new \DateTime);
  1234.             $inscription->setContact($contact);
  1235.             $inscription->setMessage($message);
  1236.             $inscription->setEvenement($evenement);
  1237.             $inscription->setAccordImage(0);
  1238.             $inscription->setNbParticipants(1);
  1239.             $inscription->setNom($contact->getNom());
  1240.             $inscription->setPrenom($contact->getPrenom());
  1241.             $inscription->setEmail($contact->getEmail());
  1242.             $inscription->setTelephone($contact->getTelephone());
  1243.             $inscription->setSociete($contact->getSociete());
  1244.             $inscription->setFonction($contact->getFonction());
  1245.             $em $this->doctrine->getManager();
  1246.             // Supprime les mails programmé pour les relances
  1247.             try {
  1248.                 if($contact && $message) { 
  1249.                     $poubelle $this->doctrine->getRepository(Envoi::class)->findEnvoiASupprimer($contact$message->getEvenement());
  1250.                     if($poubelle) {
  1251.                         foreach($poubelle as $envoi) {
  1252.                             $em->remove($envoi);
  1253.                         }
  1254.                     }
  1255.                 }
  1256.             } catch (\Throwable $th) {
  1257.                 //throw $th;
  1258.             }
  1259.             // Envoi du mail de confirmation d'inscription
  1260.             $confirmation  $this->doctrine->getRepository(Message::class)->findOneBy(
  1261.                 [
  1262.                     'evenement' => $evenement,
  1263.                     'type' => 'confirmation',
  1264.                 ]
  1265.             );
  1266.             if($confirmation) {
  1267.                 $titre $this->slugger->slug(strtolower($evenement->getTitre()));
  1268.                 $html $this->renderView('email/email.html.twig', [
  1269.                     'message' => $confirmation,
  1270.                     'titre' => $titre,
  1271.                 ]);
  1272.                 $email = (new Email())
  1273.                     ->from(new Address('contact@evenements.engie-solutions.com ''Invitation ENGIE Solutions'))
  1274.                     ->subject($confirmation->getObjet())
  1275.                     ->replyTo('evenements.engiesolutions@engie.com')
  1276.                     ->to(new Address($contact->getEmail(), $contact->getPrenom().' '.$contact->getNom()))
  1277.                     ->html($html)
  1278.                     ->text(strip_tags($html))
  1279.                 ;     
  1280.                 $lastProgramme $this->doctrine->getRepository(Programme::class)->findBy(
  1281.                     ['evenement' => $evenement], 
  1282.                     ['heureDebut' => 'DESC']
  1283.                 );
  1284.                 if($lastProgramme) {
  1285.                     $fin $lastProgramme[0]->getHeureDebut();
  1286.                     if( $lastProgramme[0]->getHeureFin() != null ) {
  1287.                         $fin $lastProgramme[0]->getHeureFin();
  1288.                     }
  1289.                     
  1290.                 }
  1291.                 $dateStartEnd $evtInfo->getStartEndEvt($evenement);
  1292.                 $ics $evtInfo->createIcs($evenement$dateStartEnd);
  1293.                 
  1294.                 $email->attachFromPath($this->getParameter('folder.uploadsite').$ics);
  1295.                 // $signer = new DkimSigner('file:///'.$this->getParameter('folder.key').'/dkimkey.key', 'plusvertmoinscherevent.engie.fr', 'mail');
  1296.                 // $signedEmail = $signer->sign($email);
  1297.                 $signedEmail $email;
  1298.                 $this->mailer->send($signedEmail);
  1299.             }
  1300.             $em->persist($inscription);
  1301.             $em->flush();
  1302.             return  new JsonResponse( [ 
  1303.                 $inscription->getId(),
  1304.                 $inscription->getContact()->getPrenom(),
  1305.                 $inscription->getContact()->getNom(),
  1306.                 $evenement->getId(),
  1307.                 $inscription->getContact()->getId()
  1308.             ] 
  1309.         );
  1310.     }
  1311.     /**
  1312.      * @Route("/reponse-home-{idreponse<\d+>}-{idcontact<\d+>}", name="reponse_home")
  1313.      */
  1314.     public function reponseHome(int $idreponseint $idcontact): Response
  1315.     {
  1316.         $reponse $this->doctrine->getRepository(Reponse::class)->findOneBy(
  1317.             ["id" => $idreponse"contact" => $idcontact]
  1318.         );
  1319.         if($reponse) {
  1320.             if($reponse->isHome()) {
  1321.                 $reponse->setHome(0);
  1322.             } else {
  1323.                 $reponse->setHome(1);
  1324.             }
  1325.             $em $this->doctrine->getManager();
  1326.             $em->persist($reponse);
  1327.             $em->flush();
  1328.             return $this->redirectToRoute('app_evenement', ['idevenement' => $reponse->getInscription()->getEvenement()->getId()]);
  1329.         }
  1330.     }
  1331.     /**
  1332.      * @Route("/invite-update", name="invite_update")
  1333.      */
  1334.     public function update(Request $request): JsonResponse {
  1335.         $em $this->doctrine->getManager();
  1336.         $inscription $em->getRepository(Inscription::class)->find($request->request->get('idinscription'));
  1337.         if (!$inscription) {
  1338.             return new JsonResponse(['success' => false'message' => 'Inscription non trouvée.'], 404);
  1339.         }
  1340.         $inscription->setInviteNom(!empty($request->request->get('inviteNom')) ? $request->request->get('inviteNom') : null);
  1341.         $inscription->setInvitePrenom(!empty($request->request->get('invitePrenom')) ? $request->request->get('invitePrenom') : null);
  1342.         $participants $inscription->getNbParticipants();
  1343.         if(!empty($request->request->get('inviteNom')) && !empty($request->request->get('invitePrenom'))) $participants++;
  1344.         $em->flush();
  1345.         return new JsonResponse(['success' => true'participants' => $participants]);
  1346.     }
  1347. }