src/Controller/InscriptionController.php line 46

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