src/Controller/InscriptionController.php line 342

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