src/Controller/PreinscriptionController.php line 40

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Center;
  4. use App\Entity\Config;
  5. use App\Entity\FormationGroup;
  6. use App\Entity\Formulaire;
  7. use App\Entity\FormulaireFieldChoiceValue;
  8. use App\Entity\Periode;
  9. use App\Entity\Preinscription;
  10. use App\Entity\PreinscriptionData;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Dompdf\Dompdf;
  13. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  14. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  18. use Symfony\Component\Mailer\MailerInterface;
  19. use Symfony\Component\Mime\Address;
  20. use Symfony\Component\Mime\Email;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. class PreinscriptionController extends AbstractController
  23. {
  24.     /**
  25.      * @Route("/{center}/preinscription/{slug}/{formulaire}",
  26.      *     name="mmpp_preinscription",
  27.      *     defaults={"formulaire": null}
  28.      * )
  29.      * @Route("/{center}/preinscription/{slug}/{formulaire}/{currentYear}",
  30.      *     name="mmpp_preinscription_current_year",
  31.      *     defaults={"formulaire": null}
  32.      * )
  33.      * @ParamConverter("center", options={"mapping": {"center" = "slug"}})
  34.      *
  35.      * @throws \Symfony\Component\Mailer\Exception\TransportExceptionInterface
  36.      */
  37.     public function indexAction(
  38.         EntityManagerInterface $em,
  39.         Request $request,
  40.         MailerInterface $mailer,
  41.         Center $center$slug,
  42.         Formulaire $formulaire null,
  43.         $currentYear null
  44.     ) {
  45.         $this->formationGroups $em->getRepository(FormationGroup::class)
  46.             ->findWithFormationByCenter($center);
  47.         if (null === $formulaire) {
  48.             throw $this->createNotFoundException('Cette page est désactivée');
  49.         }
  50.         $periode $em->getRepository(Periode::class)->findOneBy(array('isDefault' => true));
  51.         // Conditions pour fermer les inscriptions
  52.         if (!$formulaire->isIsActive()) {
  53.             return $this->redirectToRoute('mmpp_preinscription_closed', array(
  54.                 'center' => $center->getSlug(),
  55.                 'slug' => $slug,
  56.                 'formulaire' => $formulaire->getId()
  57.             ));
  58.         }
  59.         //  verification de l'IP
  60.         //$reader = new Reader('/var/www/geoip/GeoLite2-Country.mmdb');
  61.         //$record = $reader->country($_SERVER['REMOTE_ADDR']);
  62.         //if (!empty($record->country->isoCode)) {
  63.             // on redirige et on marque en session pour ne plus rediriger
  64.             /*if ( (in_array($record->country->isoCode, array('MQ', 'GP'))) && ($center_slug == 'bordeaux') && ($this->session->get('redirected') == false) ) {
  65.                 $this->session->set('redirected', true);
  66.                 return $this->redirect($this->generateUrl('mmpp_front_homepage3', array('center_slug' => 'antilles')));
  67.                 // on est déjà sur le site antilles, on marque pour ne plus rediriger
  68.             } elseif ( (in_array($record->country->isoCode, array('MQ', 'GP'))) && ($center_slug == 'bordeaux') ) {
  69.                 $this->session->set('redirected', true);
  70.             }*/
  71.         //}
  72.         $errors = array();
  73.         $datas = array();
  74.         $studentMail null;
  75.         $parentMail null;
  76.         if ($request->isMethod('POST')) {
  77.             // on check les required vides
  78.             foreach ($formulaire->getBlocks() as $block) {
  79.                 foreach ($block->getFields() as $field) {
  80.                     $value $request->request->get('field_'.$field->getId());
  81.                     if ($field->getRequired() && empty($value)) {
  82.                         // depend d'aucun autre champ, donc si absent et required, pas bien
  83.                         if (null == $field->getDependsOn()) {
  84.                             $errors[] = 'Le champ '.$field->getLabel(). ' est obligatoire';
  85.                         // peut dependre d'un autre chose. Si c'est autre champ n'a pas la valeur correspondante,
  86.                         // ce champ n'apparait pas et donc n'est pas obligatoire
  87.                         } else {
  88.                             // valeur
  89.                             $dependsOn $field->getDependsOn();
  90.                             // champ d'origine de la dépendance
  91.                             $dependsField $dependsOn->getField();
  92.                             $dependsPost $request->request->get('field_'.$dependsField->getId());
  93.                             // bonne valeur, donc affiché, donc si absent et required, pas bon
  94.                             if ( $dependsPost == $dependsOn) {
  95.                                 $errors[] = 'Le champ '.$field->getLabel(). ' est obligatoire';
  96.                             }
  97.                         }
  98.                     }
  99.                     if ($field->getSlug() == 'adresse-e-mail') {
  100.                         $existings $em->getRepository(Preinscription::class)
  101.                             ->findWithDatas($center, array('email' => $value'today' => true));
  102.                         if (count($existings) > 0) {
  103.                             $errors[] = 'Une pré-inscription existe déjà avec cette adresse Email';
  104.                         }
  105.                         $studentMail $value;
  106.                     }
  107.                     if ($field->getSlug() == 'adresse-e-mail-des-parents') {
  108.                         $parentMail $value;
  109.                     }
  110.                     if ($field->getSlug() == 'bac-serie') {
  111.                         $precisezBac $request->request->get('field_301');
  112.                         if ( ($value == 414) && (empty($precisezBac)) ) { // autre bac
  113.                             $errors[] = 'Vous devez précisez votre bac';
  114.                         }
  115.                     }
  116.                 }
  117.             }
  118.             if ($studentMail == $parentMail) {
  119.                 $errors[] = 'Les adresses email des parents et de l\'élève ne peuvent pas être identiques';
  120.             }
  121.             $datas $request->request->all();
  122.             $payment $request->request->get('payment');
  123.             // pour le pdf
  124.             $tabDatas = array();
  125.             // pour l'email
  126.             $content '<html><body><h3>Pré-inscription</h3><table style="min-width: 600px;border:solid 1px #00007e">';
  127.             // on sauvegarde les infos
  128.             if (empty($errors)) {
  129.                 $preinscription = new Preinscription();
  130.                 $preinscription->setCenter($center);
  131.                 $preinscription->setGeneratedKey$this->generateKey() );
  132.                 $preinscription->setValidated(false);
  133.                 $preinscription->setEmailSend(false);
  134.                 $preinscription->setDeleted(false);
  135.                 $preinscription->setState(1);
  136.                 $preinscription->setFormulaire($formulaire);
  137.                 $preinscription->setPaymentType($payment);
  138.                 $preinscription->setCreatedOn(new \DateTime());
  139.                 $preinscription->setUpdatedOn(new \DateTime());
  140.                 $preinscription->setPeriode($periode);
  141.                 $bac $request->request->get('field_297');
  142.                 foreach ($formulaire->getBlocks() as $block) {
  143.                     if ($block->getName() == 'formation_man') {
  144.                         foreach ($block->getFields() as $field) {
  145.                             $value $request->request->get('field_'.$field->getId());
  146.                             if($field->getType() == 'select'){
  147.                                 $choiceValue $em->getRepository(FormulaireFieldChoiceValue::class)
  148.                                     ->find($value);
  149.                                 $value $choiceValue->getValue();
  150.                                 switch ($value){
  151.                                     case  'Ergotherapie':
  152.                                         $preinscription->setFormulaire($em->getRepository(Formulaire::class)->findOneBy([
  153.                                         'slug' => 'mise-a-niveau-scientifique-ergotherapie'
  154.                                         ]));
  155.                                     break;
  156.                                     case  'Orthoptiste':
  157.                                         $preinscription->setFormulaire($em->getRepository(Formulaire::class)->findOneBy([
  158.                                         'slug' => 'mise-a-niveau-scientifique-orthoptiste'
  159.                                         ]));
  160.                                     break;
  161.                                     case  'Autres concours':
  162.                                         $preinscription->setFormulaire($em->getRepository(Formulaire::class)->findOneBy([
  163.                                         'slug' => 'mise-a-niveau-scientifique-autres-concours'
  164.                                         ]));
  165.                                     break;
  166.                                     case  'PASS/LAS-autre concours':
  167.                                         $preinscription->setFormulaire($em->getRepository(Formulaire::class)->findOneBy([
  168.                                             'slug' => 'mise-a-niveau-scientifique-pass-las-autres-concours'
  169.                                         ]));
  170.                                         break;
  171.                                     case  'Filières étrangères':
  172.                                         $preinscription->setFormulaire($em->getRepository(Formulaire::class)->findOneBy([
  173.                                             'slug' => 'mise-a-niveau-scientifique-filieres-etrangeres'
  174.                                         ]));
  175.                                         break;
  176.                                     case  'Filières étrangères avec option espagnol':
  177.                                         $preinscription->setFormulaire($em->getRepository(Formulaire::class)->findOneBy([
  178.                                             'slug' => 'mise-a-niveau-scientifique-filiere-etrangeres-option-espagnol'
  179.                                         ]));
  180.                                         break;
  181.                                 }
  182.                             }
  183.                         }
  184.                     }
  185.                     if ($block->getName() == 'formation_param') {
  186.                         foreach ($block->getFields() as $field) {
  187.                             $value $request->request->get('field_'.$field->getId());
  188.                             if($field->getType() == 'select'){
  189.                                 $choiceValue $em->getRepository(FormulaireFieldChoiceValue::class)
  190.                                     ->find($value);
  191.                                 $value $choiceValue->getValue();
  192.                                 switch ($value){
  193.                                     case  'Ergotherapie':
  194.                                         $preinscription->setFormulaire($em->getRepository(Formulaire::class)->findOneBy([
  195.                                             'slug' => 'paramedical-ergotherapie'
  196.                                         ]));
  197.                                         break;
  198.                                     case  'Psychomotricite':
  199.                                         $preinscription->setFormulaire($em->getRepository(Formulaire::class)->findOneBy([
  200.                                             'slug' => 'paramedical-psychomotricite'
  201.                                         ]));
  202.                                         break;
  203.                                     case  'Podologie':
  204.                                         $preinscription->setFormulaire($em->getRepository(Formulaire::class)->findOneBy([
  205.                                             'slug' => 'paramedical-podologie'
  206.                                         ]));
  207.                                         break;
  208.                                     case  'Orthoptie':
  209.                                         $preinscription->setFormulaire($em->getRepository(Formulaire::class)->findOneBy([
  210.                                             'slug' => 'paramedical-orthoptie'
  211.                                         ]));
  212.                                         break;
  213.                                     case  'Audioprothésiste':
  214.                                         $preinscription->setFormulaire($em->getRepository(Formulaire::class)->findOneBy([
  215.                                             'slug' => 'paramedical-audioprothesiste'
  216.                                         ]));
  217.                                         break;
  218.                                 }
  219.                             }
  220.                         }
  221.                     }
  222.                     foreach ($block->getFields() as $field) {
  223.                         $value $request->request->get('field_'.$field->getId());
  224.                         if(isset($value)){
  225.                             // nothing
  226.                             if ($field->getType() == 'static') {
  227.                                 $value $field->getValue();
  228.                             // one integer
  229.                             } elseif ($field->getType() == 'radio') {
  230.                                 $choiceValue $em->getRepository(FormulaireFieldChoiceValue::class)
  231.                                     ->find($value);
  232.                                 $value $choiceValue->getValue();
  233.                                 $tabDatas[$field->getSlug()] = $choiceValue->getSlug();
  234.                             } elseif ($field->getType() == 'select') {
  235.                                 $choiceValue $em->getRepository(FormulaireFieldChoiceValue::class)
  236.                                     ->find($value);
  237.                                 $value $choiceValue->getValue();
  238.                                 $tabDatas[$field->getSlug()] = $choiceValue->getValue();
  239.                             // array of int
  240.                             } elseif ( ($field->getType() == 'checkbox') && (!empty($value))) {
  241.                                 $values = array();
  242.                                 $slugs = array();
  243.                                 foreach ($value as $id) {
  244.                                     $choiceValue $em->getRepository(FormulaireFieldChoiceValue::class)
  245.                                         ->find($id);
  246.                                     $values[] = $choiceValue->getValue();
  247.                                     $slugs[] = $choiceValue->getSlug();
  248.                                 }
  249.                                 $value implode(', '$values);
  250.                                 $tabDatas[$field->getSlug()] = $slugs;
  251.                             } else {
  252.                                 $tabDatas[$field->getSlug()] = $value;
  253.                             }
  254.                             //$content .= $field->getLabel().': '.$value."\n";
  255.                             if ( ($field->getSlug() != 'annee-d-obtention' ) || ($bac != 401)) {
  256.                                 $content .= '<tr><td style="border-bottom: dashed 1px #d0d0F0; padding:4px;border-right: dotted 1px #00007e">'.$field->getLabel().'</td><td style="border-bottom: dashed 1px #d0d0F0; padding: 4px;">'.$value.'</td></tr>';
  257.                             }
  258.                             $line = new PreinscriptionData();
  259.                             $line->setKey($field->getLabel());
  260.                             $line->setValue($value);
  261.                             $line->setPreinscription($preinscription);
  262.                             $em->persist($line);
  263.                             if ($field->getSlug() == 'prenom') {
  264.                                 $preinscription->setFirstname(ucfirst($value));
  265.                             }
  266.                             if ($field->getSlug() == 'nom') {
  267.                                 $preinscription->setLastname(strtoupper($value));
  268.                             }
  269.                         }
  270.                     }
  271.                 }
  272.                 if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
  273.                     $ip $_SERVER['HTTP_CLIENT_IP'];
  274.                 } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  275.                     $ip $_SERVER['HTTP_X_FORWARDED_FOR'];
  276.                 } else {
  277.                     $ip $_SERVER['REMOTE_ADDR'];
  278.                 }
  279.                 $ipLine = (new PreinscriptionData())
  280.                     ->setPreinscription($preinscription)
  281.                     ->setValue($ip)
  282.                     ->setKey('IP');
  283.                 $em->persist($ipLine);
  284.                 $em->persist($preinscription);
  285.                 $em->flush();
  286.                 $content .= '</table></body></html>';
  287.                 // email
  288.                 $message = (new Email())
  289.                     ->subject('Pré-inscription MMPP')
  290.                     ->from(new Address('contact@mmpp.fr'$tabDatas['prenom'].' '.$tabDatas['nom']))
  291.                     ->replyTo(new Address($tabDatas['adresse-e-mail'], $tabDatas['prenom'].' '.$tabDatas['nom']))
  292.                     ->to('contact@mmpp.fr')
  293.                     ->html($content);
  294.                 $mailer->send($message);
  295.                 if ($payment == 'cb') {
  296.                     return $this->redirectToRoute('mmpp_front_switch_payment', [
  297.                         'center' => $center->getSlug(),
  298.                         'id' => $preinscription->getId()
  299.                     ]);
  300.                 }
  301.                 // Pdf
  302.                 $html $this->renderView('preinscription/Pdf/'.$formulaire->getSlug().'.html.twig', array('datas' => $tabDatas));
  303.                 $dompdf = new Dompdf();
  304.                 $dompdf->loadHtml($html);
  305.                 $dompdf->setPaper('a4''portrait');
  306.                 $dompdf->render();
  307.                 $pdfoutput $dompdf->output();
  308.                 $response = new Response($pdfoutput);
  309.                 $disposition $response->headers->makeDisposition(
  310.                     ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  311.                     'preinscription_mmpp.pdf'
  312.                 );
  313.                 $response->headers->set('Content-Disposition'$disposition);
  314.                 return $response;
  315.             }
  316.         }
  317.         $configAll $em->getRepository(Config::class)
  318.             ->findAll();
  319.         foreach ($configAll as $c) {
  320.             $config[$c->getKey()] = $c->getValue();
  321.         }
  322.         return $this->render('preinscription/index.html.twig', array(
  323.             'center' => $center,
  324.             'formationGroups' => $this->formationGroups,
  325.             'formulaire' => $formulaire,
  326.             'errors' => $errors,
  327.             'datas' => $datas,
  328.             'path' => null,
  329.             'periode' => $periode,
  330.             'config' => $config
  331.         ));
  332.     }
  333.     /**
  334.      * @Route("/{center}/closed/{slug}/{formulaire}", name="mmpp_preinscription_closed")
  335.      * @ParamConverter("center", options={"mapping": {"center" = "slug"}})
  336.      */
  337.     public function closedAction(EntityManagerInterface $emCenter $centerFormulaire $formulaire)
  338.     {
  339.         $this->formationGroups $em->getRepository(FormationGroup::class)
  340.             ->findWithFormationByCenter($center);
  341.         return $this->render('preinscription/closed.html.twig', array(
  342.             'center' => $center,
  343.             'formationGroups' => $this->formationGroups,
  344.             'formulaire' => $formulaire,
  345.         ));
  346.     }
  347.     /**
  348.      * @Route("/{center}/payment/switch/{id}", name="mmpp_front_switch_payment")
  349.      * @ParamConverter("center", options={"mapping": {"center" = "slug"}})
  350.      */
  351.     public function switchPaymentAction(
  352.         Center $center,
  353.         Preinscription $preinscription
  354.     ) {
  355.         return $this->render('payment/switch.html.twig', [
  356.             'center_slug' => $center->getSlug(),
  357.             'center' => $center,
  358.             'preinscription' => $preinscription
  359.         ]);
  360.     }
  361.     /**
  362.      * @Route("/{center}/display/payment/pr/{id}", name="mmpp_front_display_pr_payment")
  363.      * @ParamConverter("center", options={"mapping": {"center" = "slug"}})
  364.      */
  365.     public function displayPrPaymentAction(
  366.         Center $center,
  367.         Preinscription $preinscription
  368.     ) {
  369.         return $this->render('payment/payment-pr.html.twig', [
  370.             'center_slug' => $center->getSlug(),
  371.             'center' => $center,
  372.             'preinscription' => $preinscription
  373.         ]);
  374.     }
  375.     private function generateKey()
  376.     {
  377.         $symbols = array(
  378.             'a','b','c','d','e','f','g','h','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
  379.             '2','3','4','5','6','7','8','9'
  380.         );
  381.         $key '';
  382.         for ($i=0$i<8$i++) {
  383.             $key .= $symbols[array_rand($symbols)];
  384.         }
  385.         return strtoupper($key);
  386.     }
  387. }