src/JuridicusBundle/Controller/RegistrationController.php line 49

Open in your IDE?
  1. <?php
  2. namespace JF\JuridicusBundle\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
  6. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  7. use JF\JuridicusBundle\Form\KundeType;
  8. use JF\JuridicusBundle\Form\PruefungsamtSelectType;
  9. use JF\JuridicusBundle\Entity\Kunde;
  10. use JF\JuridicusBundle\Entity\Email;
  11. use JF\JuridicusBundle\Entity\Gebuehr;
  12. use JF\JuridicusBundle\Entity\Pruefungsamt;
  13. use JF\JuridicusBundle\Entity\User;
  14. use JF\JuridicusBundle\Entity\MailTemplate;
  15. use JF\JuridicusBundle\Entity\Bundesland;
  16. use JF\JuridicusBundle\Services\PdfCreator;
  17. use Swift_Mailer;
  18. use Swift_Message;
  19. use Doctrine\ORM\EntityManagerInterface;
  20. use JF\JuridicusBundle\Services\Sms;
  21. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  22. use Psr\Log\LoggerInterface;
  23. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  24. /**
  25.  * @Route("/registration")
  26.  */
  27. class RegistrationController extends AbstractController
  28. {
  29.     public function __construct(
  30.         private PdfCreator $pdfCreator,
  31.         private EntityManagerInterface $em
  32.         private UserPasswordHasherInterface $passwordHasher,
  33.         private Swift_Mailer $mailer,
  34.         private Sms $smsService,
  35.         private LoggerInterface $logger ) {
  36.     }
  37.     /**
  38.      * @Route("/schritt-1", name="registration")
  39.      */
  40.     public function registerSelectAction()
  41.     {
  42.         $form $this->createForm(PruefungsamtSelectType::class, new Kunde());
  43.     
  44.         return $this->render('@JFJuridicusBundle/Registration/register_select.html.twig', array(
  45.             'form' => $form->createView()
  46.         ));
  47.     }
  48.     /**
  49.      *
  50.      * @Route("/schritt-2", name="registration_check_pruefungsamt_selection")
  51.      * @Method({"POST"})
  52.      */
  53.     public function registerAction(Request $request)
  54.     {
  55.         $form $this->createForm(PruefungsamtSelectType::class, null); //changedFrom
  56.         $form->handleRequest($request); //changedFrom bind
  57.         if ($form->isSubmitted() && $form->isValid()) {
  58.             $em $this->getDoctrine()->getManager();
  59.             
  60.             /*
  61.             $formData = $form->getData();
  62.             $examen = $formData['examen'];
  63.             $bundesland_id = $formData['bundesland'];
  64.             $entity = new Kunde();
  65.             $entity->setExamen($examen); */
  66.             
  67.             $entity $form->getData();
  68.             $examen $entity->getExamen();
  69.             $bundesland_id $entity->getBundesland()->getId();
  70.             $bundesland $em->getRepository(Bundesland::class)->find($bundesland_id);
  71.             $entity->setBundesland($bundesland);
  72.             
  73.             $pa $em->getRepository(Pruefungsamt::class)->findByBundeslandAndExamen($bundesland_id$examen);
  74.             /* @var $pa Pruefungsamt */
  75.             if (!$pa) {
  76.                 throw $this->createNotFoundException('Prüfungsamt wurde nicht gefunden.');
  77.             }
  78.             $form $this->createForm(KundeType::class, $entity, array(
  79.                 'pruefungsamt' => $pa,
  80.                 'em' => $em,
  81.             ));
  82.                         
  83.             return $this->render('@JFJuridicusBundle/Registration/register.html.twig', array(
  84.                 'pruefungsamt' => $pa,
  85.                 'form' => $form->createView()
  86.             ));
  87.         } 
  88.         return $this->render('@JFJuridicusBundle/Registration/register_select.html.twig', array(
  89.             'form' => $form->createView()
  90.         ));
  91.     }
  92.     /**
  93.      * @Route("/create", name="registration_create")
  94.      * @Method({"POST"})
  95.      */
  96.     public function createAction(Request $request)
  97.     {
  98.         // zuerst Bundesland und Examen verifizieren
  99.         $params $request->request->get('kunde');
  100.         $examen $params['examen'];
  101.         $bundesland_id $params['bundesland'];
  102.         if (!$bundesland_id || !$examen) {
  103.             return $this->redirect($this->generateUrl('registration'));
  104.         }
  105.         $em $this->getDoctrine()->getManager();
  106.         $pa $em->getRepository(Pruefungsamt::class)->findByBundeslandAndExamen($bundesland_id$examen);
  107.         /* @var $pa \JF\JuridicusBundle\Entity\Pruefungsamt */
  108.         if (!$pa) {
  109.             throw $this->createNotFoundException('Prüfungsamt wurde nicht gefunden.');
  110.         }
  111.         $kunde = new Kunde();
  112.         $kunde->setAnrufErlaubt(false);
  113.         $kunde->setExportErlaubt(false);
  114.         $kunde->setVerkaeufer(false);
  115.         if (! $pa->hasVollbestand()) {
  116.             // Strafzahlung eintragen
  117.             $strafe $pa->getCurrentGebuehrByTyp(Gebuehr::TYP_STRAFGEBUEHR);
  118.             if ($strafe) {
  119.                 $kunde->setBetragStrafe($strafe->getBetrag());
  120.                 $kunde->setStrafeBezahlt(false);
  121.             }
  122.             // Facebook-Pflicht
  123.             $kunde->setPflichtFacebookPost(true);
  124.         }
  125.         $form $this->createForm(KundeType::class, $kunde, array(
  126.             'pruefungsamt' => $pa,
  127.             'em' => $em,
  128.         ));
  129.         $form->handleRequest($request);
  130.         
  131.         if ($form->isSubmitted() && $form->isValid()) {
  132.             $kunde $form->getData();
  133.             $user $em->getRepository(User::class)->findOneBy(['email' => $kunde->getEmail()]);
  134.             // alten User ggfs. umbiegen
  135.             if ($user) {
  136.                 $kunde_old $user->getKunde();
  137.                 if ($kunde_old) {
  138.                     $kunde_old->setUser(null);
  139.                     $em->persist($kunde_old);
  140.                     $em->flush();
  141.                 } else {
  142.                     $user->addRole("ROLE_KUNDE");
  143.                 }
  144.             } else {
  145.                 // entsprechenden User neu erstellen
  146.                 $user = new User();
  147.                 $user->addRole("ROLE_KUNDE");
  148.                 $user->setUsername($kunde->getEmail());
  149.                 $user->setEmail($kunde->getEmail());
  150.                 $user->setPlainPassword(substr(uniqid(md5(rand())), 88));
  151.             }
  152.             $token uniqid(md5(rand()));
  153.             $user->setConfirmationToken($token);
  154.             $user->setPassword(uniqid(md5(rand())));
  155.             $user->setEnabled(false);
  156.             $em->persist($user);
  157.             $kunde->setUser($user);
  158.             $kunde->setLoggedIn(false);
  159.             $em->persist($kunde);
  160.             $this->pdfCreator->createStempel($kunde);
  161.             $em->flush();
  162.             // finde neuestes Template
  163.             $template $em->getRepository(MailTemplate::class)->findCurrentByTyp(Email::REGISTRIERUNG);
  164.             
  165.             $link $this->generateUrl('registration_activate', array('token' => $token), UrlGeneratorInterface::ABSOLUTE_URL); //chagngedFrom true
  166.             
  167.             $replacements = array(
  168.                 'vorname' => $kunde->getVorname(),
  169.                 'nachname' => $kunde->getNachname(),
  170.                 'email' => $kunde->getEmail(),
  171.                 'handynummer' => $kunde->getHandynummer(),
  172.                 'link' => $link
  173.             );
  174.             
  175.              $this->logger->info(sprintf('Link: %s '$link));
  176.       
  177.             $mailerBcc $this->getParameter('mailer_bcc');
  178.             $mailUser     $this->getParameter('mailer_user');
  179.             $message = (new Swift_Message($template->getBetreff()))
  180.                     ->setFrom(array($mailUser => 'Juridicus'))
  181.                     ->setReplyTo('info@juridicus.de')
  182.                     ->setTo($kunde->getEmail())
  183.                     ->setBody($template->replace($replacements), 'text/html')
  184.             ;
  185.             if (isset($mailerBcc)) {
  186.                 $message->setBcc(array($mailerBcc));
  187.             }
  188.             if ($this->mailer->send($message)) {
  189.                 // Versand speichern
  190.                 $email = new Email();
  191.                 $email
  192.                     ->setTyp(Email::REGISTRIERUNG)
  193.                     ->setKunde($kunde)
  194.                 ;
  195.                 $em->persist($email);
  196.                 $em->flush();
  197.                 $this->get('session')->set('registration_email_success'$kunde->getEmail());
  198.                 return $this->redirect($this->generateUrl('registration_email_success'));
  199.             } else {
  200.                 //print_r("NICHT");
  201.                 $this->get('session')->set('registration_email_error'$kunde->getEmail());
  202.                 return $this->redirect($this->generateUrl('registration_email_error'));
  203.             }
  204.         }
  205.         return $this->render('@JFJuridicusBundle/Registration/register.html.twig', array(
  206.             'pruefungsamt' => $pa,
  207.             'form' => $form->createView()
  208.         ));
  209.     }
  210.     /**
  211.      * Receive the confirmation token and send SMS with password
  212.      *
  213.      * @Route("/activate/{token}", name="registration_activate")
  214.      */
  215.     public function activateAction($token)
  216.     {
  217.         $em $this->getDoctrine()->getManager();
  218.         /* @var $sms_service \JF\JuridicusBundle\Services\Sms */
  219.         $user $this->em->getRepository(User::class)->findOneBy(['confirmationToken' => $token]);
  220.         if (null === $user) {
  221.             throw $this->createNotFoundException('Der Aktivierungscode ist ungültig oder wurde schon verwendet.');
  222.         }
  223.         $kunde $user->getKunde();
  224.         /* @var $kunde \JF\JuridicusBundle\Entity\Kunde */
  225.         if (null === $kunde) {
  226.             throw $this->createNotFoundException('Der Benutzer zu diesem Aktivierungscode ist nicht mehr vorhanden.');
  227.         }
  228.         $password_plain substr(uniqid(md5(rand())), 88);
  229.         $hashedPassword $this->passwordHasher->hashPassword(
  230.             $user,
  231.             $password_plain
  232.         );
  233.         
  234.         $user->setEnabled(true);
  235.         $user->setConfirmationToken(null);
  236.         $user->setPlainPassword($password_plain);
  237.         $user->setPassword($hashedPassword);
  238.         $em->persist($user);
  239.         $this->logger->info(sprintf('User: %s PW: %s'$user->getEmail(), $password_plain));
  240.         // Senden des Passwords per SMS
  241.         $template $em->getRepository(MailTemplate::class)->findCurrentByTyp(Email::SMS);
  242.         $replacements = array(
  243.             'vorname' => $kunde->getVorname(),
  244.             'nachname' => $kunde->getNachname(),
  245.             'email' => $kunde->getEmail(),
  246.             'handynummer' => $kunde->getHandynummer(),
  247.             'password' => $password_plain
  248.         );
  249.         if ($this->smsService->send(html_entity_decode(strip_tags($template->replace($replacements))), $kunde->getHandynummer())) {
  250.             $kunde->setSmsSendAt(new \DateTime());
  251.             $kunde->setSmsStatusId($this->smsService->getStatusId());
  252.             $em->persist($kunde);
  253.             $em->flush();
  254.             $this->container->get('session')->set('registration_sms_success'$kunde->getEmail());
  255.             return $this->redirect($this->generateUrl('registration_sms_success'));
  256.         } else {
  257.             $session $this->container->get('session');
  258.             $session->set('registration_sms_error'$kunde->getEmail());
  259.             $session->set('registration_sms_code'$sms_service->getSendStatusCode());
  260.             $session->set('registration_sms_message'$sms_service->getSendStatusMessage());
  261.             return $this->redirect($this->generateUrl('registration_sms_error'));
  262.         }
  263.     }
  264.     /**
  265.      * Tell the user to check his email provider
  266.      *
  267.      * @Route("/email/success", name="registration_email_success")
  268.      */
  269.     public function emailSuccessAction()
  270.     {
  271.         $session $this->container->get('session');
  272.         $email $session->get('registration_email_success');
  273.         $session->remove('registration_email_success');
  274.         if (empty($email)) {
  275.             // the user does not come from the sendEmail action
  276.             return $this->redirect($this->generateUrl('homepage'));
  277.         }
  278.         $kunde $this->em->getRepository(User::class)->findOneBy(['email' => $email])->getKunde();
  279.         return $this->render('@JFJuridicusBundle/Registration/email_success.html.twig', array(
  280.             'kunde' => $kunde
  281.         ));
  282.     }
  283.     /**
  284.      * Tell the user that email sending failed
  285.      *
  286.      * @Route("/email/error", name="registration_email_error")
  287.      */
  288.     public function emailErrorAction()
  289.     {
  290.         $session $this->container->get('session');
  291.         $email $session->get('registration_email_error');
  292.         $session->remove('registration_email_error');
  293.         if (empty($email)) {
  294.             // the user does not come from the sendEmail action
  295.             return $this->redirect($this->generateUrl('homepage'));
  296.         }
  297.         $kunde $this->em->getRepository(User::class)->findOneBy(['email' => $email])->getKunde();
  298.         return $this->render('@JFJuridicusBundle/Registration/email_error.html.twig', array(
  299.             'kunde' => $kunde
  300.         ));
  301.     }
  302.     /**
  303.      * Tell the user to check his sms
  304.      *
  305.      * @Route("/sms/success", name="registration_sms_success")
  306.      */
  307.     public function smsSuccessAction()
  308.     {
  309.         $session $this->get('session');
  310.         $email $session->get('registration_sms_success');
  311.         $session->remove('registration_sms_success');
  312.         if (empty($email)) {
  313.             // the user does not come from the sendEmail action
  314.             return $this->redirect($this->generateUrl('homepage'));
  315.         }
  316.         $kunde $this->em->getRepository(User::class)->findOneBy(['email' => $email])->getKunde();
  317.         return $this->render('@JFJuridicusBundle/Registration/sms_success.html.twig', array(
  318.             'kunde' => $kunde
  319.         ));
  320.     }
  321.     /**
  322.      * Tell the user that sms sending failed
  323.      *
  324.      * @Route("/sms/error", name="registration_sms_error")
  325.      */
  326.     public function smsErrorAction()
  327.     {
  328.         $session $this->container->get('session');
  329.         $email $session->get('registration_sms_error');
  330.         $code $session->get('registration_sms_code');
  331.         $message $session->get('registration_sms_message');
  332.         $session->remove('registration_sms_error');
  333.         $session->remove('registration_sms_code');
  334.         $session->remove('registration_sms_message');
  335.         if (empty($email) || empty($code) || empty($message)) {
  336.             // the user does not come from the sendSms action
  337.             return $this->redirect($this->generateUrl('homepage'));
  338.         }
  339.         $kunde $this->em->getRepository(User::class)->findOneBy(['email' => $email])->getKunde();
  340.         return $this->render('@JFJuridicusBundle/Registration/sms_error.html.twig', array(
  341.             'kunde' => $kunde,
  342.             'code' => $code,
  343.             'message' => $message,
  344.         ));
  345.     }
  346. }