src/Controller/Backoffice/EvenementController.php line 510

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