src/Controller/InscriptionController.php line 49

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Pimcore\Controller\FrontendController;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\HttpFoundation\RequestStack;
  6. use Symfony\Contracts\Translation\TranslatorInterface;
  7. use Pimcore\Model\DataObject;
  8. use Pimcore\Model\Document;
  9. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use Pimcore\Model\WebsiteSetting;
  12. use App\Form\ExpertiseFormType;
  13. use App\Form\InscriptionFormType;
  14. use App\Form\ContactModalFormType;
  15. use Pimcore\Mail;
  16. use Carbon\Carbon;
  17. use Pimcore\Model\DataObject\Folder;
  18. use App\Service\Akimedia;
  19. use Pimcore\Bundle\AdminBundle\HttpFoundation\JsonResponse;
  20. use GuzzleHttp\Client;
  21. use Pimcore\Tool\Session;
  22. class InscriptionController extends FrontendController
  23. {
  24.     /**
  25.      * @Template
  26.      * @param Request $request
  27.      * @route("/{_locale}/inscription-centre", name="inscriptionCentre",methods={"GET", "POST"})
  28.      * @return \Symfony\Component\HttpFoundation\Response
  29.      *
  30.      */
  31.     public function inscriptionCentreAction(Request $request\Symfony\Contracts\Translation\TranslatorInterface $translator)
  32.     {
  33.         $session $request->getSession();
  34.         $CentreId $request->get('id');
  35.         if(!$CentreId){
  36.             $CentreId 1;
  37.         }
  38.         $token $session->get('akimedia-token');
  39.         $errorMessage "";
  40.         if(!$token){
  41.             $token Akimedia::login();
  42.             $session->set("akimedia-token"$token);
  43.         }
  44.         $dateComponents getdate();
  45.         $month date("n");
  46.         $year $dateComponents['year'];
  47.         for($i=0;$i<6;$i++){
  48.             $currentMonth $month+$i;
  49.             if($currentMonth>12):
  50.                 $m $currentMonth-12;
  51.                 $y $year+1;
  52.             else:
  53.                 $m $currentMonth;
  54.                 $y $year;
  55.             endif;
  56.             $cal[$i] = $this->build_calendar($m,$y,$CentreId,$translator);
  57.         }
  58.         // to comment start
  59.         $calJuillet $this->build_calendar($month,$year,$CentreId,$translator);
  60.         if($month >= 11){
  61.             if($month==12){
  62.                 $calAout $this->build_calendar(1,$year+1,$CentreId,$translator);
  63.                 $calSeptembre $this->build_calendar(2,$year+1,$CentreId,$translator);
  64.             }else{
  65.                 $calAout $this->build_calendar($month+1,$year,$CentreId,$translator);
  66.                 $calSeptembre $this->build_calendar(1,$year+1,$CentreId,$translator);
  67.             }
  68.         }else{
  69.             $calAout $this->build_calendar($month+1,$year,$CentreId,$translator);
  70.             $calSeptembre $this->build_calendar($month+2,$year,$CentreId,$translator);
  71.         }
  72.         $tomorrow Carbon::now()->addDay();
  73.         $date['weekStartDate'] = $tomorrow->startOfWeek()->format('d/m/Y');
  74.         $date['weekEndDate'] = $tomorrow->endOfWeek()->format('d/m/Y');
  75.         $yearAllowed = [];
  76.         $yearAllowed['year'] = 18;
  77.         $settingYearAllowed WebsiteSetting::getByName('InscriptionYearAllowed');
  78.         if($settingYearAllowed) {
  79.             $yearAllowed['max'] = Carbon::now()->subYears($settingYearAllowed->getData());
  80.             $yearAllowed['year'] = $settingYearAllowed->getData();
  81.         } else {
  82.             $yearAllowed['max'] = Carbon::now()->subYears($yearAllowed['year']);
  83.         }
  84.         $yearAllowed['min'] = Carbon::now()->subYears(130);
  85.         $horaires Akimedia::getSiteAvailabilities($request$CentreId);
  86.         $centre Akimedia::getSiteInfos($request$CentreId);
  87.         //dd($centre);
  88.         if ($request->isMethod("POST")) {
  89.             $data = [
  90.                 'datenaissance' => $request->get("dtenaissance"),
  91.                 'token' => uniqid(),
  92.                 'date' => $request->get("date"),
  93.                 'heure' => $request->get("heure"),
  94.                 'firstname' => $request->get("firstname"),
  95.                 'lastname' => $request->get("lastname"),
  96.                 'email' => $request->get("email"),
  97.                 'phone' => $request->get("phone"),
  98.                 'dejaDonnePlasma' => $request->get("alreadyPlasma"),
  99.                 'dejaDonneSang' => $request->get("alreadyBlood"),
  100.                 'type' => 'plasma',
  101.             ];
  102.             $return Akimedia::sendIncriptionSite($request$data$request->get("akimedia-centre"));
  103.             if($return !== true){
  104.                 $errorMessage $return;
  105.             }else{
  106.                 // redirect vers merci
  107.                 return $this->redirectToRoute("merci");
  108.             }
  109.         }
  110.         return $this->render('inscription/inscription-centre.html.twig',[
  111.             "centre" => $centre,
  112.             "dates" => $horaires,
  113.             "calendriers" => $cal,
  114.             "Juillet" => $calJuillet,
  115.             "Aout" => $calAout,
  116.             "Septembre" => $calSeptembre,
  117.             "errorMessage" => $errorMessage,
  118.             "date" => $date,
  119.             "yearAllowed" => $yearAllowed
  120.         ]);
  121.     }
  122.     /**
  123.      * @Template
  124.      * @param Request $request
  125.      * @return \Symfony\Component\HttpFoundation\Response
  126.      *
  127.      */
  128.     #[Route(path:[
  129.         'fr' => '/{_locale}/merci',
  130.         'de' => '/{_locale}/danke',
  131.         'nl' => '/{_locale}/bedankt',
  132.     ], name'merci')]
  133.     public function merciAction(Request $request)
  134.     {
  135.         return $this->render('inscription/merci.html.twig',[
  136.         ]);
  137.     }
  138.     //new full akimedia logic
  139.     /**
  140.      * @Route("gethorairecentreakimedia", name="getHoraireCentreAkimedia")
  141.      *
  142.      */
  143.     public function gethorairecentreakimediaAction(Request $request\Symfony\Contracts\Translation\TranslatorInterface $translator)
  144.     {
  145.         $session $request->getSession();
  146.         $token $session->get('akimedia-token');
  147.         if(!$token){
  148.             $token Akimedia::login();
  149.             $session->set('akimedia-token'$token);
  150.         }
  151.         $lang $request->get('lang');
  152.         $CentreId $request->get("centreid");
  153.         $GetDate $request->get("date");
  154.         $date $GetDate " 00:00";
  155.         $date1 $GetDate " 23:59";
  156.         $horairesResults Akimedia::getSiteHorairesByDate($request$CentreId);
  157.         $horaires $horairesResults["plages"];
  158.         $objectif $horairesResults["objectif_plasma_atteint"];
  159.         if($objectif){
  160.             $HoraireControle "<span style='background:#fff6ee; border:1px solid #F6A507; padding:5px 10px;'>".$translator->trans('Nos objectifs sont atteints pour ce jour.')."</span>";
  161.         }elseif ($horaires && count($horaires) > 0) {
  162.             $HoraireControle '';
  163.             $HoraireList '';
  164.             $HoraireControle .= '<div>';
  165.             $HoraireControle .= '<label class="control-label">Choisissez votre horaire de départ</label>';
  166.             $count 1;
  167.             foreach ($horaires as $h) {
  168.                 if (strtotime($GetDate." ".$h['horaire']) >= strtotime($date) && strtotime($GetDate." ".$h['horaire']) <= strtotime($date1)) {
  169.                     if ($h['horaire']) {
  170.                         $horaire_i 1;
  171.                         $PlaceLibrre $h['available'];
  172.                         if($PlaceLibrre <= 0){
  173.                             continue;
  174.                         }
  175.                         $now Carbon::now();
  176.                         $dateCalendar Carbon::parse($GetDate." ".$h['horaire']);
  177.                         $cuurentTime date($h['horaire']);
  178.                         if($now->gt($dateCalendar)){
  179.                             continue;
  180.                         }
  181.                         $checked '';
  182.                         if ($PlaceLibrre <= 0) {
  183.                             $checked ' disabled ';
  184.                         }
  185.                         if ($PlaceLibrre <= 0) {
  186.                             $class_state "is-disabled";
  187.                         } else {
  188.                             $class_state "is-active";
  189.                         }
  190.                         $HoraireList .= '<div class="uk-width-1-1 schedule-item-container"><div class="schedule-item ' $class_state '">
  191.                             <label for="Hdeb' $horaire_i '">' $cuurentTime ' <small style="    font-size: 15px;">(' $PlaceLibrre ' ' $translator->trans('places restantes', [], null$lang) . ')';
  192.                         $HoraireList .='</small></label>';
  193.                         if ($PlaceLibrre 0) {
  194.                             $HoraireList .= '<input data-id="' $GetDate '" type="radio" required name="inscription"
  195.                               value="' $cuurentTime '" ' $checked ' ' '
  196.                               id="Hdeb' $horaire_i '" class="uk-radio" />';
  197.                         }
  198.                         $HoraireList .= '</div></div>';
  199.                         if ($count == 0):
  200.                             $HoraireList .= '</div></div></li><li><div><div class="uk-grid-small" uk-grid>';
  201.                         endif;
  202.                         $horaire_i++;
  203.                         $count++;
  204.                     }
  205.                 }
  206.             }
  207.             if($HoraireList){
  208.                 $HoraireControle .= '<div uk-slider="finite: true;">
  209.                                                     <div class="uk-position-relative">
  210.                                                         <div class="uk-slider-container uk-light">
  211.                                                             <ul class="uk-slider-items uk-child-width-1-2@s uk-grid-small">
  212.                                                                 <li><div><div class="uk-grid-small" uk-grid>';
  213.                 $HoraireControle .= $HoraireList;
  214.                 $HoraireControle .= '</div></div></li></ul></div>';
  215.                 $HoraireControle .= '<div class="uk-hidden@s uk-light">
  216.                                                             <a class="uk-position-center-left uk-position-small" href="#" uk-slidenav-previous uk-slider-item="previous"></a>
  217.                                                             <a class="uk-position-center-right uk-position-small" href="#" uk-slidenav-next uk-slider-item="next"></a>
  218.                                                         </div>
  219.                                                         <div class="uk-visible@s">
  220.                                                             <a class="uk-position-center-left-out uk-position-small" href="#" uk-slidenav-previous uk-slider-item="previous"></a>
  221.                                                             <a class="uk-position-center-right-out uk-position-small" href="#" uk-slidenav-next uk-slider-item="next"></a>
  222.                                                         </div>
  223.                                                     </div>
  224.                                                     <ul class="uk-slider-nav uk-dotnav uk-flex-center uk-margin"></ul>
  225.                                                 </div>';
  226.                 $HoraireControle .= '</div>';
  227.             }else{
  228.                 $HoraireControle "<span style='color: red'>".$translator->trans("Nous n’avons pas de possibilités de rendez-vous pour la date choisie.")."</span>";
  229.             }
  230.         } else {
  231.             $HoraireControle "<span style='color: red'>".$translator->trans("Nous n’avons pas de possibilités de rendez-vous pour le date choisie.")."</span>";
  232.         }
  233.         $msg2 "ok";
  234.         $response = array('type' => 'succes''msg' => $HoraireControle'resultat' => $CentreId ' ' $date'msg2' => $msg2);
  235.         return new JsonResponse($response);
  236.     }
  237.     /**
  238.      * @Template
  239.      *
  240.      * @param Request $request
  241.      *
  242.      * @param DataObject $object
  243.      * @Route("/{_locale}/inscription-plasma", name="formEligibleInscription")
  244.      *
  245.      * @return response
  246.      *
  247.      */
  248.     public function formEligibleInscriptionAction(Request $request) {
  249.         /*
  250.         if(WebsiteSetting::getByName('akimediaActivate')) {
  251.             $id = $request->get('id');
  252.             if($this->editmode){
  253.                 $id = 1;
  254.             }
  255.             if($id){
  256.                 return $this->render('inscription/form-eligibilite-inscription.html.twig',[
  257.                     'centre' => $id
  258.                 ]);
  259.             }else{
  260.                 if($this->document->getProperty('listeCentresPlasma')) {
  261.                     return $this->redirect($this->document->getProperty('listeCentresPlasma'));
  262.                 } else {
  263.                     return $this->redirect('/');
  264.                 }
  265.             }
  266.         } else {
  267.             $session = $request->getSession();
  268.             if($request->get('centre') && $request->get('centre')){
  269.                 $session->set('centre', $request->get('centre'));
  270.                 $url = explode("?", $_SERVER['REQUEST_URI']);
  271.                 return $this->redirect($url[0]);
  272.             }
  273.             if($this->editmode){
  274.                 $session->set('centre', 2559);
  275.             }
  276.             if($session->get('centre')>0){
  277.                 return $this->render('inscription/form-eligibilite-inscription.html.twig',[
  278.                     'centre' => $session->get('centre')
  279.                 ]);
  280.             }else{
  281.                 if($this->document->getProperty('listeCentresPlasma')) {
  282.                     return $this->redirect($this->document->getProperty('listeCentresPlasma'));
  283.                 } else {
  284.                     return $this->redirect('/'. $request->getLocale());
  285.                 }
  286.             }
  287.         }
  288.         */
  289.         $id $request->get('id');
  290.         if($id===null) {
  291.             // Appel du snippet test eligibilite sur une page et si le param id est null on renvoit sur le snippet avec le param qui va changer le bouton de la fin
  292.             return $this->render('snippets/form-eligibilite-inscription.html.twig', [
  293.                 'centre' => 'all'
  294.             ]);
  295.         }
  296.         if(!$id) {
  297.             //Recherche du param envoyé au snippet
  298.             $id $request->attributes->get('id');
  299.         }
  300.         $session $request->getSession();
  301.         $session->set('centre'$request->get('id'));
  302.         if($this->editmode){
  303.             $id 1;
  304.         }
  305.         if($id) {
  306.             return $this->render('snippets/form-eligibilite-inscription.html.twig', [
  307.                 'centre' => $id
  308.             ]);
  309.         } else {
  310.             if($this->document->getProperty('listeCentresPlasma')) {
  311.                 return $this->redirect($this->document->getProperty('listeCentresPlasma'));
  312.             } else {
  313.                 return $this->redirect('/');
  314.             }
  315.         }
  316.     }
  317.     /**
  318.      * @Template
  319.      * @param Request $request
  320.      * @param DataObject $object
  321.      * @return response
  322.      *
  323.      */
  324.     public function defaultContactAction(Request $request)
  325.     {
  326.         if(!WebsiteSetting::getByName('akimediaActivate')) {
  327.             $centres null// On ne récupère plus plusieurs centres mais un seul
  328.             //Formulaire d'inscription
  329.             $formStatus false;
  330.             $ddsHoraires false;
  331.             $centre false;
  332.             $lang $request->getLocale();
  333.             $session $request->getSession();
  334.             $CentreId $session->get('centre');
  335.             $token $session->get('akimedia-token');
  336.             $errorMessage "";
  337.             if(!$token){
  338.                 $token Akimedia::login();
  339.                 $session->set("akimedia-token"$token);
  340.             }
  341.             $centre Akimedia::getSiteInfos($request$CentreId);
  342.             if(!$centre) {
  343.                 if($this->document->getProperty('listeCentresPlasma')) {
  344.                     return $this->redirect($this->document->getProperty('listeCentresPlasma'));
  345.                 } else {
  346.                     return $this->redirect('/'$lang);
  347.                 }
  348.             }
  349.         } else {
  350.             $session $request->getSession();
  351.             $CentreId $session->get('centre');
  352.             //Formulaire d'inscription
  353.             $formStatus false;
  354.             $ddsHoraires false;
  355.             $centre false;
  356.             $lang $request->getLocale();
  357.             if(strpos(WebsiteSetting::getByName('horairesCentresApi')->getData(), 'dds') !== false) {
  358.                 $ddsHoraires true;
  359.                 $centres null// On ne récupère plus plusieurs centres mais un seul
  360.                 //gestion guzzle
  361.                 $client = new Client();
  362.                 $response $client->request('POST'"https://www.donneurdesang.be/"$request->getLocale() ."/api/centres-by-provinces", [
  363.                     'headers' => [
  364.                         'Content-Type' => 'application/x-www-form-urlencoded',
  365.                     ]
  366.                 ]);
  367.                 $results json_decode($response->getBody(), true);
  368.                 $apiCentres $results;
  369.                 //Boucle pour récupérer le bon centre
  370.                 foreach($apiCentres as $apiCentre) {
  371.                     if($apiCentre["o_id"] == $CentreId) {
  372.                         $centre $apiCentre;
  373.                         continue;
  374.                     }
  375.                 }
  376.             } else {
  377.                 $centres = new DataObject\Centres\Listing();
  378.                 $centres->load();
  379.             }
  380.             //Suppression des paramètres et redirect
  381.             if($request->get('centre') && $request->get('centre')){
  382.                 $session->set('centre'$request->get('centre'));
  383.                 $url explode("?"$_SERVER['REQUEST_URI']);
  384.                 return $this->redirect($url[0]);
  385.             }
  386.             if($this->editmode){
  387.                 $session->set('centre'2559);
  388.             }
  389.             if(!$centre) {
  390.                 if($this->document->getProperty('listeCentresPlasma')) {
  391.                     return $this->redirect($this->document->getProperty('listeCentresPlasma'));
  392.                 } else {
  393.                     return $this->redirect('/'$lang);
  394.                 }
  395.             }
  396.         }
  397.         //////////////////////////////////////////////////
  398.         // initialize form and handle request data
  399.         $formContact $this->createForm(InscriptionFormType::class, null);
  400.         $formContact->handleRequest($request);
  401.         // On vérifie si un POST a bien été effectué et donc si le formulaire a été envoyé
  402.         if ($formContact->isSubmitted() && $formContact->isValid()) {
  403.             $data $formContact->getData();
  404.             $email                 $data['email'];
  405.             $phone                 $data['phone'];
  406.             $firstname             $data['firstname'];
  407.             $lastname             $data['lastname'];
  408.             $birthday             $data['birthday'];
  409.             $sang                 $data['sang'];
  410.             $plasma                $data['plasma'];
  411.             $gdpr                 $data['gdpr'];
  412.             $data['centreId']    = $request->get("inscription_form_centre");
  413.             if(WebsiteSetting::getByName('akimediaActivate')) {
  414.                 if($ddsHoraires) {
  415.                     //$centre = DataObject\Centres::getByCodeCentre($data['centreId']);
  416.                     $convertCentre DataObject\Centres::getByCodeCentre($centre['codeCentre']);
  417.                     $convertCentre $convertCentre->load();
  418.                     $data['centre'] = $convertCentre[0];
  419.                 } else {
  420.                     $centre DataObject\Centres::getByAkimediaId($data['centreId']);
  421.                     $centre $centre->load();
  422.                     $data['centre'] = $centre[0];
  423.                 }
  424.             } else {
  425.                 $centreObj DataObject\Centres::getByAkimediaId($data['centreId']);
  426.                 $centreObj $centreObj->load();
  427.                 $data['centre'] = $centreObj[0];
  428.             }
  429.             if($email != $request->get("inscription_form_confirmation")){
  430.                 $viewContactForm $formContact->createView();
  431.                 return[
  432.                     'centre' => $centre// Ajout Greg pour reprendre la data depuis dds
  433.                     'centres' => $centres,
  434.                     'form' => $viewContactForm,
  435.                     'formStatus' => $formStatus,
  436.                     'error' => true,
  437.                     'lang' => $lang
  438.                 ];
  439.             }
  440.             // On vérifie que tous les champs sont bien complétés
  441.             if($firstname !== "" && $lastname !== "" && $email !== ""){
  442.                 // reCaptcha verification
  443.                 $recaptchaKeyPrivate WebsiteSetting::getByName('recaptchaKeyPrivate');
  444.                 $recaptcha_url 'https://www.google.com/recaptcha/api/siteverify';
  445.                 $recaptcha_response $data['recaptcha'];
  446.                 $recaptcha file_get_contents($recaptcha_url '?secret=' $recaptchaKeyPrivate->getData() . '&response=' $recaptcha_response);
  447.                 $recaptcha json_decode($recaptcha);
  448.                 if ($recaptcha->success)
  449.                 {
  450.                     if (filter_var($emailFILTER_VALIDATE_EMAIL)) {
  451.                         // condition pour changer le folder d'enregistrement de concours dans les assets
  452.                         $folderPath Folder::getByPath("/Inscription");
  453.                         if(!$folderPath){
  454.                             $folderPath = new Folder();
  455.                             $folderPath->setKey("Inscription");
  456.                             $folderPath->setParentId(1);
  457.                             $folderPath->save();
  458.                         }
  459.                         if($this->document->getProperty('objectFormFolder')) {
  460.                             $folderPath Folder::getByPath($this->document->getProperty('objectFormFolder'));
  461.                         }
  462.                         $contact = new DataObject\Inscription();
  463.                         $contact->setLastname($lastname);
  464.                         $contact->setFirstname($firstname);
  465.                         $contact->setEmail($email);
  466.                         $contact->setPhone($phone);
  467.                         $contact->setBirthday($birthday);
  468.                         $contact->setSang($sang);
  469.                         $contact->setPlasma($plasma);
  470.                         $contact->setGdpr($gdpr);
  471.                         $contact->setCentre($data['centre']);
  472.                         /*$contact->setLang($request->getLocale());*/
  473.                         $contact->setKey($email.'_'.uniqid());
  474.                         $contact->setParent($folderPath);
  475.                         $contact->setPublished(true);
  476.                         $contact->save();
  477.                         //email au centre
  478.                         // JDS On envoie à l'adresse définie dans les settings et plus vers le centre comme c'était demandé initialement.
  479.                         $mail = new \Pimcore\Mail();
  480.                         $mail->setDocument('/emails/inscription');
  481.                         //$mail->to($data['centre']->getEmail());
  482.                         $mail->setParams($data);
  483.                         $mail->send();
  484.                         //Copie au visiteur
  485.                         $mail = new \Pimcore\Mail();
  486.                         $mail->setDocument('/emails/'.$request->getLocale().'/inscription-confirmation');
  487.                         $mail->to($email);
  488.                         $mail->setParams($data);
  489.                         $mail->send();
  490.                         $formStatus 'success';
  491.                     }else{
  492.                         $formStatus 'invalid-email';
  493.                     }
  494.                 }else{
  495.                     $formStatus 'robot';
  496.                 }
  497.             }else{
  498.                 $formStatus 'required-empty';
  499.             }
  500.         }
  501.         $viewContactForm $formContact->createView();
  502.         return $this->render('inscription/default.html.twig',[
  503.             'centre' => $centre// Ajout Greg pour reprendre la data depuis dds
  504.             'centres' => $centres,
  505.             'form' => $viewContactForm,
  506.             'formStatus' => $formStatus,
  507.             'ddsHoraires' => $ddsHoraires,
  508.             'error' => false,
  509.             'lang' => $lang
  510.         ]);
  511.     }
  512.     /**
  513.      * @Template
  514.      * @param Request $request
  515.      * @param DataObject $object
  516.      * @return response
  517.      */
  518.     public function fastContactAction(Request $request)
  519.     {
  520.         //Formulaire d'inscription
  521.         $formStatus false;
  522.         $ddsHoraires false;
  523.         $centres = new DataObject\Centres\Listing();
  524.         $centres->load();
  525.         if(strpos(WebsiteSetting::getByName('horairesCentresApi')->getData(), 'dds') !== false) {
  526.             $ddsHoraires true;
  527.         }
  528.         // initialize form and handle request data
  529.         $formContact $this->createForm(InscriptionFormType::class, null);
  530.         $formContact->handleRequest($request);
  531.         // On vérifie si un POST a bien été effectué et donc si le formulaire a été envoyé
  532.         if ($formContact->isSubmitted() && $formContact->isValid()) {
  533.             $data $formContact->getData();
  534.             $email                 $data['email'];
  535.             $phone                 $data['phone'];
  536.             $firstname             $data['firstname'];
  537.             $lastname             $data['lastname'];
  538.             $birthday             $data['birthday'];
  539.             $sang                 $data['sang'];
  540.             $plasma                $data['plasma'];
  541.             $gdpr                 $data['gdpr'];
  542.             $data['centreId']    = $request->get("inscription_form_centre");
  543.             if($ddsHoraires) {
  544.                 $centre DataObject\Centres::getByCodeCentre($data['centreId']);
  545.             } else {
  546.                 $centre DataObject\Centres::getByAkimediaId($data['centreId']);
  547.             }
  548.             $centre $centre->load();
  549.             $data['centre'] = $centre[0];
  550.             if($email != $request->get("inscription_form_confirmation")){
  551.                 $viewContactForm $formContact->createView();
  552.                 return $this->render('inscription/fast-inscription.html.twig',[
  553.                     'centres' => $centres,
  554.                     'form' => $viewContactForm,
  555.                     'formStatus' => $formStatus,
  556.                     'ddsHoraires' => $ddsHoraires,
  557.                     'error' => true,
  558.                 ]);
  559.             }
  560.             // On vérifie que tous les champs sont bien complétés
  561.             if($firstname !== "" && $lastname !== "" && $email !== ""){
  562.                 // reCaptcha verification
  563.                 $recaptchaKeyPrivate WebsiteSetting::getByName('recaptchaKeyPrivate');
  564.                 $recaptcha_url 'https://www.google.com/recaptcha/api/siteverify';
  565.                 $recaptcha_response $data['recaptcha'];
  566.                 $recaptcha file_get_contents($recaptcha_url '?secret=' $recaptchaKeyPrivate->getData() . '&response=' $recaptcha_response);
  567.                 $recaptcha json_decode($recaptcha);
  568.                 if ($recaptcha->success)
  569.                 {
  570.                     if (filter_var($emailFILTER_VALIDATE_EMAIL)) {
  571.                         // condition pour changer le folder d'enregistrement de concours dans les assets
  572.                         $folderPath Folder::getByPath("/Inscription");
  573.                         if(!$folderPath){
  574.                             $folderPath = new Folder();
  575.                             $folderPath->setKey("Inscription");
  576.                             $folderPath->setParentId(1);
  577.                             $folderPath->save();
  578.                         }
  579.                         if($this->document->getProperty('objectFormFolder')) {
  580.                             $folderPath Folder::getByPath($this->document->getProperty('objectFormFolder'));
  581.                         }
  582.                         $contact = new DataObject\Inscription();
  583.                         $contact->setLastname($lastname);
  584.                         $contact->setFirstname($firstname);
  585.                         $contact->setEmail($email);
  586.                         $contact->setPhone($phone);
  587.                         $contact->setBirthday($birthday);
  588.                         $contact->setSang($sang);
  589.                         $contact->setPlasma($plasma);
  590.                         $contact->setGdpr($gdpr);
  591.                         $contact->setCentre($data['centre']);
  592.                         /*$contact->setLang($request->getLocale());*/
  593.                         $contact->setKey($email.'_'.uniqid());
  594.                         $contact->setParent($folderPath);
  595.                         $contact->setPublished(true);
  596.                         $contact->save();
  597.                         //email au centre
  598.                         // JDS On envoie à l'adresse définie dans les settings et plus vers le centre comme c'était demandé initialement.
  599.                         $mail = new \Pimcore\Mail();
  600.                         $mail->setDocument('/emails/inscription');
  601.                         //$mail->to($data['centre']->getEmail());
  602.                         $mail->setParams($data);
  603.                         $mail->send();
  604.                         //Copie au visiteur
  605.                         $mail = new \Pimcore\Mail();
  606.                         $mail->setDocument('/emails/'.$request->getLocale().'/inscription-confirmation');
  607.                         $mail->to($email);
  608.                         $mail->setParams($data);
  609.                         $mail->send();
  610.                         $formStatus 'success';
  611.                     }else{
  612.                         $formStatus 'invalid-email';
  613.                     }
  614.                 }else{
  615.                     $formStatus 'robot';
  616.                 }
  617.             }else{
  618.                 $formStatus 'required-empty';
  619.             }
  620.         }
  621.         $viewContactForm $formContact->createView();
  622.         return $this->render('inscription/fast-inscription.html.twig',[
  623.             'centres' => $centres,
  624.             'form' => $viewContactForm,
  625.             'formStatus' => $formStatus,
  626.             'ddsHoraires' => $ddsHoraires,
  627.             'error' => false
  628.         ]);
  629.     }
  630.     /**
  631.      * @Template
  632.      * @param Request $request
  633.      * @route("/{_locale}/api/akimedia/site/{id}", name="apiAkimediaSite",methods={"GET"})
  634.      * @return array
  635.      */
  636.     public function detailAction(Request $request)
  637.     {
  638.         $session $request->getSession();
  639.         $token $session->get('akimedia-token');
  640.         if(!$token){
  641.             $token Akimedia::login();
  642.             $session->set('akimedia-token'$token);
  643.         }
  644.         $id $request->get('id');
  645.         $site Akimedia::getSiteInfos($request$id);
  646.         return new JsonResponse($site);
  647.     }
  648.     private function build_calendar($month,$year,$CentreId,$trans) {
  649.         // Create array containing abbreviations of days of week.
  650.         $daysOfWeek = array('L','M','M','J','V','S','D');
  651.         // What is the first day of the month in question?
  652.         $firstDayOfMonth mktime(0,0,0,$month,1,$year);
  653.         // How many days does this month contain?
  654.         $numberDays date('t',$firstDayOfMonth);
  655.         // Retrieve some information about the first day of the
  656.         // month in question.
  657.         $dateComponents getdate($firstDayOfMonth);
  658.         // What is the name of the month in question?
  659.         $monthName $trans->trans($dateComponents['month']);
  660.         // What is the index value (0-6) of the first day of the
  661.         // month in question.
  662.         $dayOfWeek $dateComponents['wday'] - 1;
  663.         if($dayOfWeek==-1){
  664.             $dayOfWeek=6;
  665.         }
  666.         // Create the table tag opener and day headers
  667.         $calendar "<table class='calendar'>";
  668.         $calendar .= "<caption>$monthName $year</caption>";
  669.         $calendar .= "<tr>";
  670.         // Create the calendar headers
  671.         foreach($daysOfWeek as $day) {
  672.             $calendar .= "<th class='header'>$day</th>";
  673.         }
  674.         // Create the rest of the calendar
  675.         // Initiate the day counter, starting with the 1st.
  676.         $currentDay 1;
  677.         $calendar .= "</tr><tr>";
  678.         // The variable $dayOfWeek is used to
  679.         // ensure that the calendar
  680.         // display consists of exactly 7 columns.
  681.         if ($dayOfWeek 0) {
  682.             $calendar .= "<td colspan='$dayOfWeek'>&nbsp;</td>";
  683.         }
  684.         $month str_pad($month2"0"STR_PAD_LEFT);
  685.         while ($currentDay <= $numberDays) {
  686.             // Seventh column (Saturday) reached. Start a new row.
  687.             if ($dayOfWeek == 7) {
  688.                 $dayOfWeek 0;
  689.                 $calendar .= "</tr><tr>";
  690.             }
  691.             $currentDayRel str_pad($currentDay2"0"STR_PAD_LEFT);
  692.             $date "$year-$month-$currentDayRel";
  693.             $calendar .= "<td class='day' data-centre-id='$CentreId' data-date-format='".date("d-m-Y"strtotime($date))."' data-date='$date'>$currentDay</td>";
  694.             // Increment counters
  695.             $currentDay++;
  696.             $dayOfWeek++;
  697.         }
  698.         // Complete the row of the last week in month, if necessary
  699.         if ($dayOfWeek != 7) {
  700.             $remainingDays $dayOfWeek;
  701.             $calendar .= "<td colspan='$remainingDays'>&nbsp;</td>";
  702.         }
  703.         $calendar .= "</tr>";
  704.         $calendar .= "</table>";
  705.         return $calendar;
  706.     }
  707. }