src/FMT/Application/Controller/Common/RegistrationController.php line 93

Open in your IDE?
  1. <?php
  2. namespace FMT\Application\Controller\Common;
  3. use FMT\Data\Entity\User;
  4. use FMT\Domain\Service\UserManagerInterface;
  5. use FMT\Application\FormType\Security\RegistrationDonorType;
  6. use FMT\Application\FormType\Security\RegistrationStudentType;
  7. use FMT\Application\FormType\Security\UserPasswordType;
  8. use FMT\Application\Traits\ControllerHelperTrait;
  9. use FMT\Application\Twig\FlashExtension;
  10. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  11. use Symfony\Component\HttpFoundation\JsonResponse;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use FOS\UserBundle\Controller\RegistrationController as FOSBaseController;
  15. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  16. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  17. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  18. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
  19. use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
  20. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  21. /**
  22.  * Class RegistrationController
  23.  *
  24.  * @var Response
  25.  * @var Route
  26.  * @var Template
  27.  * @var Security
  28.  * @var Method
  29.  * @var ParamConverter
  30.  *
  31.  * @package FMT\Application\Controller
  32.  * @Route("/")
  33.  * @Template()
  34.  *
  35.  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  36.  */
  37. class RegistrationController extends FOSBaseController
  38. {
  39.     use ControllerHelperTrait;
  40.     const ROUTE_DONOR_REGISTER "fmt-public-donor-registration";
  41.     const ROUTE_STUDENT_REGISTER "fmt-public-student-registration";
  42.     const ROUTE_CONFIRM "fmt-public-registration-confirm";
  43.     const ROUTE_REGISTRATION_COMPLETED "fmt-public-registration-completed";
  44.     /** @var UserManagerInterface */
  45.     private $manager;
  46.     /**
  47.      * @var FlashBagInterface
  48.      */
  49.     private $flashBag;
  50.     /**
  51.      * @required
  52.      *
  53.      * @param UserManagerInterface $manager
  54.      */
  55.     public function setUserManager(UserManagerInterface $manager)
  56.     {
  57.         $this->manager $manager;
  58.     }
  59.     /**
  60.      * @required
  61.      *
  62.      * @param FlashBagInterface $flashBag
  63.      */
  64.     public function setFlashBag(FlashBagInterface $flashBag)
  65.     {
  66.         $this->flashBag $flashBag;
  67.     }
  68.     /**
  69.      * @param Request $request
  70.      * @return Response
  71.      * @Route("/register-donor", name=RegistrationController::ROUTE_DONOR_REGISTER)
  72.      * @Method({"POST"})
  73.      * @Security("not is_granted('ROLE_USER')")
  74.      */
  75.     public function donorRegistrationAction(Request $request)
  76.     {
  77.         $user $this->manager->makeDonor();
  78.         $form $this->createForm(RegistrationDonorType::class, $user);
  79.         $form->handleRequest($request);
  80.         if ($form->isSubmitted() && $form->isValid()) {
  81.             /** @var User $user */
  82.             $user $form->getData();
  83.             $this->manager->create($user);
  84.             $response $this->prepareJsonResponse(
  85.                 ['donorForm' => $form->createView()],
  86.                 '@Public/common/registration/_donor_form.html.twig',
  87.                 true,
  88.                 $this->getRegistrationCompletedUrl($request)
  89.             );
  90.         } else {
  91.             $response $this->prepareJsonResponse(
  92.                 ['donorForm' => $form->createView()],
  93.                 '@Public/common/registration/_donor_form.html.twig'
  94.             );
  95.         }
  96.         return $response;
  97.     }
  98.     /**
  99.      * @param Request $request
  100.      * @return Response
  101.      * @Route("/register-student", name=RegistrationController::ROUTE_STUDENT_REGISTER)
  102.      * @Method({"POST"})
  103.      * @Security("not is_granted('ROLE_USER')")
  104.      */
  105.     public function studentRegistrationAction(Request $request)
  106.     {
  107.         $user $this->manager->makeStudent();
  108.         $form $this->createForm(RegistrationStudentType::class, $user);
  109.         $form->handleRequest($request);
  110.         if ($form->isSubmitted() && $form->isValid()) {
  111.             /** @var User $user */
  112.             $user $form->getData();
  113.             $this->manager->create($user);
  114.             $response $this->prepareJsonResponse(
  115.                 ['studentForm' => $form->createView()],
  116.                 '@Public/common/registration/_student_form.html.twig',
  117.                 true,
  118.                 $this->getRegistrationCompletedUrl($request)
  119.             );
  120.         } else {
  121.             $response $this->prepareJsonResponse(
  122.                 ['studentForm' => $form->createView()],
  123.                 '@Public/common/registration/_student_form.html.twig'
  124.             );
  125.         }
  126.         return $response;
  127.     }
  128.     /**
  129.      * @param Request $request
  130.      * @return Response
  131.      * @Route("/registration-completed", name=RegistrationController::ROUTE_REGISTRATION_COMPLETED)
  132.      */
  133.     public function checkEmailAction(Request $request): Response
  134.     {
  135.         return parent::checkEmailAction($request);
  136.     }
  137.     /**
  138.      * @param Request $request
  139.      * @param User $user
  140.      * @return array|Response
  141.      * @throws \Exception
  142.      * @Route("/confirm/{token}", name=RegistrationController::ROUTE_CONFIRM)
  143.      * @ParamConverter("user", class="FMT\Data\Entity\User", options={
  144.      *     "repository_method" = "findUserByConfirmationToken",
  145.      *     "mapping": {"token": "token"},
  146.      *     "map_method_signature" = true
  147.      * })
  148.      */
  149.     public function confirmAction(Request $request$user): Response
  150.     {
  151.         $form $this->createForm(UserPasswordType::class, $user);
  152.         $form->handleRequest($request);
  153.         if ($form->isSubmitted() && $form->isValid()) {
  154.             $this->manager->confirm($user);
  155.             $this->flashBag->add(FlashExtension::SUCCESS_TYPE'fmt.registration.confirmation.success_message');
  156.             
  157.             $token = new UsernamePasswordToken($usernull'main'$user->getRoles());
  158.             $this->get('security.token_storage')->setToken($token);
  159.             $this->get('session')->set('_security_main'serialize($token));
  160.             
  161.             $response $this->redirectToRoute(PublicDashboardController::ROUTE_INDEX);
  162.         } else {
  163.             return $this->render('common/registration/confirm.html.twig', [
  164.                 'form' => $form->createView(),
  165.                 'email' => $user->getEmail()
  166.             ]);
  167.         }
  168.         return $response;
  169.     }
  170.     /**
  171.      * @param Request $request
  172.      * @return string|null
  173.      */
  174.     private function getRegistrationCompletedUrl(Request $request)
  175.     {
  176.         $referer $request->headers->get('referer');
  177.         $marketingPageUrl $this->generateUrl(MarketingPortalController::MARKETING_IFRAME);
  178.         if (substr_count($referer$marketingPageUrl)) {
  179.             $fosRegisteredEmailKey 'fos_user_send_confirmation_email/email';
  180.             $message $this->dataCollectorTranslator->trans('fmt.registration.check_email', [
  181.                 '%email%' => $request->getSession()->get($fosRegisteredEmailKey)
  182.             ]);
  183.             $request->getSession()->remove($fosRegisteredEmailKey);
  184.             $request->getSession()->getFlashBag()->clear();
  185.             $request->getSession()->getFlashBag()->add("success"$message);
  186.             return null;
  187.         } else {
  188.             return $this->generateUrl(self::ROUTE_REGISTRATION_COMPLETED);
  189.         }
  190.     }
  191. }