src/Controller/InscriptionController.php line 45

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