src/Controller/Pages/CampController.php line 473

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Pages;
  3. use App\Controller\Objects\CampCourse;
  4. use App\Controller\Objects\CampReg;
  5. use App\Controller\Objects\CampSettings;
  6. use App\Controller\System;
  7. use App\Kernel;
  8. use App\Controller\AbstractKasController;
  9. use App\Controller\Database;
  10. use App\Controller\PageInfo;
  11. use Doctrine\DBAL\Exception;
  12. use Symfony\Component\HttpFoundation\JsonResponse;
  13. use Symfony\Component\HttpFoundation\RequestStack;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\VarDumper;
  17. use Symfony\Component\HttpFoundation\RedirectResponse;
  18. class CampController extends AbstractKasController
  19. {
  20.     private CampSettings $settings;
  21.     private string $link;
  22.     public function __construct(RequestStack $requestStackDatabase $dbPageInfo $pageInfo)
  23.     {
  24.         parent::__construct($requestStack$db$pageInfo);
  25.         $this->request $requestStack->getCurrentRequest();
  26.         $this->model = new CampModel($db);
  27.         $this->settings $this->model->getSettings();
  28.         $link $this->request->getRequestUri();
  29.         if (str_starts_with($link'/aquasvet')) $this->link '/aquasvet';
  30.         elseif (str_starts_with($link'/mestska-sportovni-hala')) $this->link '/mestska-sportovni-hala';
  31.         elseif (str_starts_with($link'/kino-svet')) $this->link '/kino-svet';
  32.         else $this->link '';
  33.     }
  34.     /**
  35.      * @Route("/aquasvet/prazdniny/prihlaska-{eid}")
  36.      * @Route("/mestska-sportovni-hala/prazdniny/prihlaska-{eid}")
  37.      * @Route("/kino-svet/prazdniny/prihlaska-{eid}")
  38.      * @return Response
  39.      * @throws \Facebook\Exceptions\FacebookSDKException
  40.      */
  41.     public function prihlaska_na_kurz(string $eid): Response
  42.     {
  43.         $model = new ObjectModel($this->db);
  44.         $objectinfo $model->getObjectInfo('/aquasvet');
  45.         $objectinfo->setTitle('Přihláška na prázdniny');
  46.         $objectinfo->setButtons([]);
  47.         $id System::decrypt($eid); //COURSES_2
  48.         //pokud nenalezeno, tak 404
  49.         if (!$objectinfo->isFound() || $eid=='' || !System::IsIntPosNum($id)) return $this->render('/pages/404.html.twig', [
  50.             'pageinfo' => $this->pageInfo
  51.         ]);
  52.         $model = new HomeModel($this->db);
  53.         $top_events $model->getTopEvents(); //dump($top_events);
  54.         $facebook_feed $model->getFacebookFeed();
  55.         $course $this->model->getCourse($id);
  56.         $termines $this->model->getTermines($id);
  57.         if ($course->getName() == '' || count($termines)===0) {
  58.             return $this->render('/pages/404.html.twig', [
  59.                 'pageinfo' => $this->pageInfo
  60.             ]);
  61.         }
  62.         $objectinfo->setTitle($course->getName());
  63.         $objectinfo->setSubtitle('přihláška');
  64.         return $this->render('/pages/camp_form.html.twig', [
  65.             'eid' => $eid,
  66.             'link' => $this->link,
  67.             'course' => $course,
  68.             'termines' => $termines,
  69.             'settings' => $this->settings,
  70.             'pageinfo' => $this->pageInfo,
  71.             'objectinfo' => $objectinfo,
  72.             'top_events' => $top_events,
  73.             'facebook_feed' => $facebook_feed,
  74.             'g_site_key' => getenv('G_SITE_KEY')
  75.         ]);
  76.     }
  77.     /**
  78.      * @Route("/aquasvet/prazdniny/datum", methods={"POST"})
  79.      * @Route("/mestska-sportovni-hala/prazdniny/datum", methods={"POST"})
  80.      * @Route("/kino-svet/prazdniny/datum", methods={"POST"})
  81.      * @return Response
  82.      */
  83.     public function prihlaska_datum(): JsonResponse
  84.     {
  85.         $date $this->request->get('date');
  86.         $eid $this->request->get('eid');
  87.         $id = ($eid!='')?System::decrypt($eid):0;
  88.         $age '0';
  89.         //validace
  90.         if ((int)$id===0) {
  91.             $message 'chyba zpracování';
  92.             $focus 'id-date';
  93.         }
  94.         elseif ($date=='') {
  95.             $message 'zadejte datum narození';
  96.             $focus 'id-date';
  97.         }
  98.         elseif (!System::isDateCZ($date)) {
  99.             $message 'špatný formát data narození';
  100.             $focus 'id-date';
  101.         }
  102.         elseif (self::isFutureDate($date)) {
  103.             $message 'nenarozené účastníky nebereme';
  104.             $focus 'id-date';
  105.         }
  106.         else {
  107.             $age self::ageFromDate($date);
  108.             $course $this->model->getCourse((int)$id);
  109.             if ($age >= $course->getAgeFrom() &&  $age <= $course->getAgeTo()) {
  110.                 $message 'OK';
  111.                 $focus 'id-firstname';
  112.             }
  113.             else {
  114.                 $message 'účastník nespadá do věkové kategorie '.$course->getAgeFrom().' - '.$course->getAgeTo().'';
  115.                 $focus 'id-date';
  116.             }
  117.         }
  118.         $return = ['message' => $message'age' => $age'focus' => $focus];
  119.         return new JsonResponse($return);
  120.     }
  121.     /**
  122.      * @Route("/aquasvet/prazdniny/kapacita", methods={"POST"})
  123.      * @Route("/mestska-sportovni-hala/prazdniny/kapacita", methods={"POST"})
  124.      * @Route("/kino-svet/prazdniny/kapacita", methods={"POST"})
  125.      * @return Response
  126.      */
  127.     public function prihlaska_kapacita(): JsonResponse
  128.     {
  129.         $eid $this->request->get('eid');
  130.         $id = ($eid!='')?System::decrypt($eid):0;
  131.         //validace
  132.         if ((int)$id===0) {
  133.             $message 'chyba zpracování';
  134.             $focus 'id-date';
  135.         }
  136.         else {
  137.             $course $this->model->getCourse((int)$id);
  138.             //$course->setActual(5);
  139.             $message = ($course->getActual() < $course->getCapacity())?'OK':'SUBST';
  140.             $return = ['message' => $message'actual' => $course->getActual(), 'capacity' => $course->getCapacity(), 'actual_capacity' => $course->getActualCapacity()];
  141.             return new JsonResponse($return);
  142.         }
  143.         $return = ['message' => $message'focus' => $focus'actual' => 0'capacity' => 0'actual_capacity' => '?/?'];
  144.         return new JsonResponse($return);
  145.     }
  146.     /**
  147.      * @Route("/aquasvet/prazdniny/odeslani", methods={"POST"})
  148.      * @Route("/mestska-sportovni-hala/prazdniny/odeslani", methods={"POST"})
  149.      * @Route("/kino-svet/prazdniny/odeslani", methods={"POST"})
  150.      * @return Response
  151.      * @throws Exception
  152.      */
  153.     public function prihlaska_odeslani(): JsonResponse
  154.     {
  155.         sleep(1);
  156.         $eid $this->request->get('eid');
  157.         $id = ($eid!='')?System::decrypt($eid):0;
  158.         $message    '';
  159.         $reload     '';
  160.         $focus      '';
  161.         $error      '1';
  162.         $age        '0';
  163.         $ac         '';
  164.         $date           $this->request->get('date');
  165.         $firstname      $this->request->get('firstname');
  166.         $lastname       $this->request->get('lastname');
  167.         $firstname_par  $this->request->get('firstname-par');
  168.         $lastname_par   $this->request->get('lastname-par');
  169.         $email          $this->request->get('email');
  170.         $phone          $this->request->get('phone');
  171.         $phone2         $this->request->get('phone2');
  172.         $subst          $this->request->get('subst');
  173.         $cond           $this->request->get('cond');
  174.         $gdpr           $this->request->get('gdpr');
  175.         $note           $this->request->get('note');
  176.         $leaving        $this->request->get('leaving');
  177.         $swimskill      $this->request->get('swimskill');
  178.         $hasmedrestr    $this->request->get('hasmedrestr');
  179.         $medrestrtext   $this->request->get('medrestrtext');
  180.         //validace
  181.         if (!isset($_SERVER['HTTP_REFERER']) || strpos($_SERVER['HTTP_REFERER'], getenv('APP_URL')) !==|| (int)$id===0) {
  182.             $message 'chyba zpracování';
  183.         }
  184.         elseif ($date=='') {
  185.             $message 'zadejte datum narození';
  186.             $focus 'id-date';
  187.         }
  188.         elseif (!System::isDateCZ($date)) {
  189.             $message 'špatný formát data narození';
  190.             $focus 'id-date';
  191.         }
  192.         elseif (self::isFutureDate($date)) {
  193.             $message 'nenarozené účastníky nebereme';
  194.             $focus 'id-date';
  195.         }
  196.         elseif ($firstname=='') {
  197.             $message 'zadejte křestní jméno účastníka';
  198.             $focus 'id-firstname';
  199.         }
  200.         elseif ($lastname=='') {
  201.             $message 'zadejte příjmení účastníka';
  202.             $focus 'id-lastname';
  203.         }
  204.         elseif ((int)$leaving===0) {
  205.             $message 'vyberte odchod účastníka';
  206.             $focus 'id-leaving';
  207.         }
  208.         elseif ((int)$swimskill===0) {
  209.             $message 'vyberte plaveckou zdatnost';
  210.             $focus 'id-swimskill';
  211.         }
  212.         elseif ((int)$hasmedrestr===0) {
  213.             $message 'vyberte zdravotní omezení';
  214.             $focus 'id-hasmedrestr';
  215.         }
  216.         elseif ((int)$hasmedrestr===&& $medrestrtext=='') {
  217.             $message 'vypiště včechna zdravotní omezení';
  218.             $focus 'id-medrestrtext';
  219.         }
  220.         elseif ($firstname_par=='') {
  221.             $message 'zadejte křestní jméno zákonného zástupce';
  222.             $focus 'id-firstname-par';
  223.         }
  224.         elseif ($lastname_par=='') {
  225.             $message 'zadejte příjmení zákonného zástupce';
  226.             $focus 'id-lastname-par';
  227.         }
  228.         elseif ($email=='') {
  229.             $message 'zadejte e-mail zákonného zástupce';
  230.             $focus 'id-email';
  231.         }
  232.         elseif (!System::isEmail($email)) {
  233.             $message 'chybný formát e-mailu';
  234.             $focus 'id-email';
  235.         }
  236.         elseif ($phone=='') {
  237.             $message 'zadejte 1. telefon zákonného zástupce';
  238.             $focus 'id-phone';
  239.         }
  240.         elseif (!System::isPhone($phone)) {
  241.             $message 'chybný formát 1. telefonního čísla';
  242.             $focus 'id-phone';
  243.         }
  244.         elseif ($phone2=='') {
  245.             $message 'zadejte 2. telefon zákonného zástupce';
  246.             $focus 'id-phone2';
  247.         }
  248.         elseif (!System::isPhone($phone2)) {
  249.             $message 'chybný formát 2. telefonního čísla';
  250.             $focus 'id-phone2';
  251.         }
  252.         elseif ($phone==$phone2) {
  253.             $message 'telefonní čísla se nesmí shodovat';
  254.             $focus 'id-phone2';
  255.         }
  256.         elseif ((int)$cond!==1) {
  257.             $message 'potvrďte souhlas s podmínkami plavecké školy';
  258.             $focus 'id-cond';
  259.         }
  260.         elseif ((int)$gdpr!==1) {
  261.             $message 'potvrďte souhlas se zpracováním osobních údajů';
  262.             $focus 'id-gdpr';
  263.         }
  264.         else {
  265.             $age self::ageFromDate($date);
  266.             $pin self::generatePIN($date$firstname$lastname);
  267.             $course $this->model->getCourse($id);
  268.             $ac $course->getActualCapacity();
  269.             $reg = new CampReg();
  270.             $reg->setAge($age);
  271.             $reg->setPin($pin);
  272.             $reg->setFirstname($firstname);
  273.             $reg->setLastname($lastname);
  274.             $reg->setFirstnamePar($firstname_par);
  275.             $reg->setLastnamePar($lastname_par);
  276.             $reg->setEmail($email);
  277.             $reg->setPhone($phone);
  278.             $reg->setPhone2($phone2);
  279.             $reg->setCourseId($id);
  280.             $reg->setDate($date);
  281.             $reg->setNote($note);
  282.             $reg->setLeaving((int)$leaving);
  283.             $reg->setSwimskill((int)$swimskill);
  284.             $reg->setHasmedrestr((int)$hasmedrestr);
  285.             $reg->setMedrestrtext($medrestrtext);
  286.             $reg->setSubst(((int)$subst===1));
  287.             if ($this->model->isAlreadyIn($pin$id)) {
  288.                 $message 'na tento tábor jste již registrovaným účastníkem';
  289.             }
  290.             elseif ($age $course->getAgeFrom() ||  $age $course->getAgeTo()) {
  291.                 $message 'účastník nespadá do věkové kategorie '.$course->getAgeFrom().' - '.$course->getAgeTo();
  292.                 $focus 'id-date';
  293.             }
  294.             elseif ($course->getActual() >= $course->getCapacity() && (int)$subst==0) {
  295.                 $message 'bohužel jste se nestihli rezervovat, můžete se zaregistrovat jako náhradník';
  296.             }
  297.             elseif ($course->getActualSubst() >= $course->getCapacitySubst() && (int)$subst==1) {
  298.                 $message 'bohužel byl již naplněn také limit pro náhradníky';
  299.             }
  300.             else {
  301.                 //captcha
  302.                 /*$result = file_get_contents( 'https://www.google.com/recaptcha/api/siteverify', false, stream_context_create( array(
  303.                     'http' => array(
  304.                         'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
  305.                         'method'  => 'POST',
  306.                         'content' => http_build_query( array(
  307.                             'response' => $_POST['g-recaptcha-response'],
  308.                             'secret' => getenv('G_SECRET_KEY'),
  309.                             'remoteip' => $_SERVER['REMOTE_ADDR']
  310.                         ) ),
  311.                     ),
  312.                 ) ) );
  313.                 $result = json_decode($result);
  314.                 if ($result->success) {*/
  315.                 if (1==1) {
  316.                     //vse je OK, ulozeni
  317.                     try {
  318.                         $rid 0;
  319.                         $pincode '';
  320.                         $this->model->saveReg($reg$rid$pincode);
  321.                         $message 'úspěšně odesláno';
  322.                         $error 0;
  323.                         $eid System::encrypt($rid);
  324.                         $reg->setEid($eid);
  325.                         $reg->setPincode($pincode);
  326.                         $termines $this->model->getTermines($id);
  327.                         $files $this->model->getFiles($id);
  328.                         //$info = $this->model->getResInfo($ids);
  329.                         $subject 'Přihláška na příměstský tábor';
  330.                         $body '<h2>PŘIHLÁŠKA PŘÍMĚSTSKÝ TÁBOR</h2>';
  331.                         $body .= '<p>děkujeme za vyplnění přihlášky na příměstský tábor.</p>';
  332.                         $this->sendMail($reg$course$termines$files$subject$bodyfalse);
  333.                     } catch (Exception $e) {
  334.                         $message $e->getMessage();
  335.                         $focus 'id-submit';
  336.                     }
  337.                 }
  338.                 else {
  339.                     $message 'chyba bezpečnostní kontroly';
  340.                 }
  341.             }
  342.         }
  343.         $return = ['message' => $message'error' => $error'age' => $age'focus' => $focus'reload' => $reload'actual_capacity' => $ac];
  344.         return new JsonResponse($return);
  345.     }
  346.     /**
  347.      * @Route("/aquasvet/prihlaska-na-tabor-{eid}")
  348.      * @Route("/aquasvet/prazdniny/prihlaska-{eid}")
  349.      * @Route("/mestska-sportovni-hala/prihlaska-na-tabor-{eid}")
  350.      * @Route("/mestska-sportovni-hala/prazdniny/prihlaska-{eid}")
  351.      * @Route("/kino-svet/prihlaska-na-tabor-{eid}")
  352.      * @Route("/kino-svet/prazdniny/prihlaska-{eid}")
  353.      * @return Response
  354.      * @throws Exception
  355.      * @throws \Facebook\Exceptions\FacebookSDKException
  356.      */
  357.     public function moje_prihlaska($eid): Response
  358.     {
  359.         $model = new ObjectModel($this->db);
  360.         $objectinfo $model->getObjectInfo($this->link);
  361.         $objectinfo->setTitle('Moje přihláška');
  362.         $objectinfo->setButtons([]);
  363.         $id System::decrypt($eid);
  364.         //pokud nenalezeno, tak 404
  365.         if (!$objectinfo->isFound() || $eid=='' || System::decrypt($eid)=='' || (int)$id==0) {
  366.             return $this->render('/pages/404.html.twig', [
  367.                 'pageinfo' => $this->pageInfo
  368.             ]);
  369.         }
  370.         $model = new HomeModel($this->db);
  371.         $top_events $model->getTopEvents(); //dump($top_events);
  372.         $facebook_feed $model->getFacebookFeed();
  373.         $reg $this->model->getReg($id);
  374.         $course $this->model->getCourse($reg->getCourseId());
  375.         $termines $this->model->getTermines($reg->getCourseId());
  376.         if ($reg->getFirstname() == '' || $course->getName() == '' || count($termines)===0) {
  377.             return $this->render('/pages/404.html.twig', [
  378.                 'pageinfo' => $this->pageInfo
  379.             ]);
  380.         }
  381.         $objectinfo->setSubtitle($course->getName());
  382.         return $this->render('/pages/camp_mycourse.html.twig', [
  383.             'pageinfo' => $this->pageInfo,
  384.             'objectinfo' => $objectinfo,
  385.             'top_events' => $top_events,
  386.             'facebook_feed' => $facebook_feed,
  387.             'reg' => $reg,
  388.             'course' => $course,
  389.             'termines' => $termines,
  390.             'eid' => $eid
  391.         ]);
  392.     }
  393.     /**
  394.      * @Route("/prihlaska-na-tabor-{eid}")
  395.      * @return Response
  396.      * @throws Exception
  397.      * @throws \Facebook\Exceptions\FacebookSDKException
  398.      */
  399.     public function moje_puvodni_link($eid): Response|RedirectResponse
  400.     {
  401.         $id System::decrypt($eid);
  402.         //pokud nenalezeno, tak 404
  403.         if ($eid=='' || System::decrypt($eid)=='' || (int)$id==0) {
  404.             return $this->render('/pages/404.html.twig', [
  405.                 'pageinfo' => $this->pageInfo
  406.             ]);
  407.         }
  408.        $link $this->model->GetObjectLink($id);
  409.         if ($link=='') {
  410.             return $this->render('/pages/404.html.twig', [
  411.                 'pageinfo' => $this->pageInfo
  412.             ]);
  413.         }
  414.         else {
  415.             return new RedirectResponse($link.'/prihlaska-na-tabor-'.$eid);
  416.         }
  417.         return new RedirectResponse('/');
  418.     }
  419.     /**
  420.      * @Route("/aquasvet/prazdniny")
  421.      * @Route("/mestska-sportovni-hala/prazdniny")
  422.      * @Route("/kino-svet/prazdniny")
  423.      * @return Response
  424.      * @throws \Facebook\Exceptions\FacebookSDKException
  425.      */
  426.     public function prazdniny(): Response
  427.     {
  428.         $model = new ObjectModel($this->db);
  429.         $objectinfo $model->getObjectInfo($this->link);
  430.         //pokud nenalezeno, tak 404
  431.         if (!$objectinfo->isFound()) return $this->render('/pages/404.html.twig', [
  432.             'pageinfo' => $this->pageInfo
  433.         ]);
  434.         $model = new HomeModel($this->db);
  435.         $top_events $model->getTopEvents();
  436.         $facebook_feed $model->getFacebookFeed();
  437.         $courses $this->model->getCourses($objectinfo->getId());
  438.         return $this->render('/pages/camp_courses.html.twig', [
  439.             'link' => $this->link,
  440.             'courses' => $courses,
  441.             'pageinfo' => $this->pageInfo,
  442.             'objectinfo' => $objectinfo,
  443.             'top_events' => $top_events,
  444.             'facebook_feed' => $facebook_feed
  445.         ]);
  446.     }
  447.     /**
  448.      * @param $date
  449.      * @return float
  450.      * @throws \Exception
  451.      */
  452.     private static function ageFromDate($date):float {
  453.         if(strlen($date) >= && strlen($date) <= 10 && System::isDateCZ($date)) {
  454.             $birthday = new \DateTime($date);
  455.             $birthday->modify('first day of this month');
  456.             $diff $birthday->diff(new \DateTime());
  457.             $months $diff->format('%m') + 12 $diff->format('%y');
  458.             $months++; //vzdy se prihlasujeme na nasledujici mesic, musim se jakoby narodit o mesic driv
  459.             return $months/12;
  460.         }
  461.         return 0;
  462.     }
  463.     /**
  464.      * @param $date
  465.      * @return bool
  466.      */
  467.     private static function isFutureDate($date):bool {
  468.         $testing_date = new \DateTime($date);
  469.         $current_date = new \DateTime();
  470.         return ($testing_date $current_date);
  471.     }
  472.     /**
  473.      * @param string $date
  474.      * @param string $name
  475.      * @param string $surname
  476.      * @return string
  477.      */
  478.     public static function generatePIN(string $datestring $name,string $surname):string
  479.     {
  480.         $name str_replace(' '''System::removeAccents2($name));
  481.         $surname str_replace(' '''System::removeAccents2($surname));
  482.         $sourceString substr($name03).$surname;
  483.         $sum 0;
  484.         for ($i 0$i strlen($sourceString); $i++) {
  485.             $sum += self::letterPosInAlphabet($sourceString[$i]) * $i;
  486.         }
  487.         $sum $sum.'';
  488.         $sum substr($sum04);
  489.         while(strlen($sum) < 4) {
  490.             $sum $sum.'0';
  491.         }
  492.         $dateArray explode('.'$date);
  493.         $dateArray[0] = sprintf("%02d"$dateArray[0]);
  494.         $dateArray[1] = sprintf("%02d"$dateArray[1]);
  495.         // odstranění prvních dvou čísel u roku ( 2017 -> 17 )
  496.         $dateArray[2] = substr($dateArray[2], 2);
  497.         return implode(''$dateArray).$sum;
  498.     }
  499.     /**
  500.      * @param string $letterOfAlphabet
  501.      * @return int
  502.      */
  503.     private static function letterPosInAlphabet(string $letterOfAlphabet):int {
  504.         return ord(strtoupper($letterOfAlphabet)) - ord('A') + 1;
  505.     }
  506.     /**
  507.      * @param CampReg $reg
  508.      * @param CampCourse $course
  509.      * @param array $termines
  510.      * @param array $files
  511.      * @param string $subject
  512.      * @param string $body
  513.      * @param bool $internal
  514.      * @return void
  515.      * @throws \PHPMailer\PHPMailer\Exception
  516.      */
  517.     private function sendMail(CampReg $regCampCourse $course, array $termines, array $filesstring $subjectstring $bodybool $internal falsebool $canceled true):void {
  518.         $body $this->renderView('/partials/campreg_mail.html.twig', [
  519.             'app_url' => getenv('APP_URL'),
  520.             'reg' => $reg,
  521.             'course' => $course,
  522.             'termines' => $termines,
  523.             'files' => $files,
  524.             'sign' => true,
  525.             'canceled' => $canceled
  526.         ]);
  527.        System::sendMail($course->getMailbox(), $subject$body$reg->getEmail(), $internal);
  528.     }
  529.     /**
  530.      * @Route("/aquasvet/prihlaska-na-tabor/zruseni-terminu", methods={"POST"})
  531.      * @return Response
  532.      * @throws Exception
  533.      * @throws \PHPMailer\PHPMailer\Exception
  534.      */
  535.     public function zruseni_terminu(): JsonResponse
  536.     {
  537.         sleep(1);
  538.         $message    '';
  539.         $reload     '';
  540.         $focus      '';
  541.         $error      1;
  542.         $pincode    $this->request->get('pincode');
  543.         $eid        $this->request->get('eid');
  544.         $reason     $this->request->get('reason');
  545.         $reason2     $this->request->get('reason2');
  546.         $r_date     date('Y-m-d H:i:s');
  547.         //validace
  548.         if (!isset($_SERVER['HTTP_REFERER']) || strpos($_SERVER['HTTP_REFERER'], getenv('APP_URL')) !==0) {
  549.             $message 'chyba zpracování';
  550.         }
  551.         elseif ($eid=='' || (int)System::decrypt($eid)==0) {
  552.             $message 'chyba zpracování [2]';
  553.         }
  554.         elseif ($pincode=='') {
  555.             $message 'zadejte PIN';
  556.         }
  557.         elseif (strlen($pincode)!=|| !System::IsIntPosNum($pincode)) {
  558.             $message 'chybný formát PIN kódu';
  559.         }
  560.         elseif ($reason=='') {
  561.             $message 'vyberte důvod';
  562.         }
  563.         elseif ($reason=='jiný důvod' && $reason2=='') {
  564.             $message 'zadejte jiný důvod';
  565.         }
  566.         else {
  567.             $id System::decrypt($eid);
  568.             //$message = System::decrypt($eid);
  569.             $db_pin $this->model->getPIN($id);
  570.             if ($pincode!=$db_pin) {
  571.                 $message 'chybný PIN kód';
  572.             }
  573.             else {
  574.                 if ($reason=='jiný důvod') {
  575.                     $reason $reason2;
  576.                 }
  577.                try {
  578.                      //zruseni prihlasky a poptani nahradniku
  579.                      $subst_rids $this->model->cancelReg($id$reason$this);
  580.                      $message 'přihláška byla zrušena, děkujeme za informaci ';
  581.                      $error 0;
  582.                      $reg $this->model->getReg($id);
  583.                      $course $this->model->getCourse($reg->getCourseId());
  584.                      $termines $this->model->getTermines($reg->getCourseId());
  585.                      $files $this->model->getFiles($reg->getCourseId());
  586.                      //rusejicimu e-mail hned
  587.                      $subject 'Zrušení přihlášky';
  588.                      $body '<h2>ZRUŠENÍ ÚČASTI NA PŘÍMĚSTSKÉM TÁBORU</h2>';
  589.                      $body .= '<p>Přihláška byla zrušena z důvodu "<b>'.$reason.'</b>", děkujeme za informaci.</p>';
  590.                      $this->sendMail($reg$course$termines$files$subject$bodyfalsetrue);
  591.                      //odeslani e-mailu nahradnikum pres frontu
  592.                      if (is_array($subst_rids) && count($subst_rids)>0) {
  593.                          foreach ($subst_rids as $r_id) {
  594.                              //mail pres frontu
  595.                              $reg $this->model->getReg($r_id);
  596.                              $course $this->model->getCourse($reg->getCourseId());
  597.                              $termines $this->model->getTermines($reg->getCourseId());
  598.                              $files $this->model->getFiles($reg->getCourseId());
  599.                              $r_email $reg->getEmail();
  600.                              $r_subject 'Uvolnění příměstského tábora';
  601.                              $html '<p>'.str_replace(PHP_EOL'<br/>'$course->getMailNomintext()).'</p>';
  602.                              $html .= '<h4>Vaše přihláška</h4>';
  603.                              $html .= $this->renderView('/partials/campreg_mail.html.twig', [
  604.                                  'app_url' => getenv('APP_URL'),
  605.                                  'reg' => $reg,
  606.                                  'course' => $course,
  607.                                  'termines' => $termines,
  608.                                  'files' => $files,
  609.                                  'sign' => true,
  610.                                  'canceled' => false
  611.                              ]);
  612.                              /*
  613.                                 1   kurzyplavani@kultura-sport.cz
  614.                                 2    prazdniny@kultura-sport.cz
  615.                                 3    prazdniny-miniskola@kultura-sport.cz
  616.                                 4    prazdniny-aquasvet@kultura-sport.cz
  617.                                 5    prazdniny-kino@kultura-sport.cz
  618.                              */
  619.                              $this->model->mailToQueue($r_email$r_subject$html$r_date$course->getMailbox());
  620.                          }
  621.                      }
  622.                 } catch (Exception $e) {
  623.                     $message $e->getMessage();
  624.                 }
  625.             }
  626.         }
  627.         $return = ['message' => $message'error' => $error'focus' => $focus'reload' => $reload];
  628.         return new JsonResponse($return);
  629.     }
  630. }
  631. ?>