src/Controller/Main/RegistrationController.php line 81

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Main;
  3. use App\Entity\Main\User;
  4. use App\Entity\Main\UserRegistrationData;
  5. use App\Events\Main\Registration\SecurityEvent;
  6. use App\Events\Main\User\UserCreatedEvent;
  7. use App\Events\Main\User\UserRegisteredEvent;
  8. use App\EventSubscribers\Main\SecuritySubscriber;
  9. use App\EventSubscribers\Main\UserSubscriber;
  10. use App\Form\Main\UserSimpleRegistrationType;
  11. use App\Services\TranslationManager;
  12. use App\Services\UserManager;
  13. use App\Services\ReferralProgramManager;
  14. use App\Tools\Encryption;
  15. use Doctrine\ORM\EntityManagerInterface;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  18. use Symfony\Component\HttpFoundation\JsonResponse;
  19. use Symfony\Component\HttpFoundation\RedirectResponse;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\HttpFoundation\RequestStack;
  22. use Symfony\Component\HttpFoundation\Response;
  23. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  24. use Symfony\Component\Routing\Annotation\Route;
  25. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  26. /**
  27.  * Controller managing the registration.
  28.  *
  29.  * @Route(
  30.  *     condition="not (context.getHost() matches '%coaching_domain.host.regexp%')"
  31.  * )
  32.  */
  33. class RegistrationController extends AbstractController
  34. {
  35.     use BrulafineControllerTrait;
  36.     /**
  37.      * @param RequestStack $requestStack
  38.      * @param ReferralProgramManager $referralProgramManager
  39.      * @param UserManager $serviceUserManager
  40.      * @param EventDispatcherInterface $dispatcher
  41.      * @param EntityManagerInterface $entityManager
  42.      * @return Response
  43.      * @throws \Exception
  44.      * @Route("/register", name="user_registration")
  45.      */
  46.     public function registerAction(
  47.         RequestStack $requestStack,
  48.         ReferralProgramManager $referralProgramManager,
  49.         UserManager $serviceUserManager,
  50.         EventDispatcherInterface $dispatcher,
  51.         EntityManagerInterface $entityManager,
  52.         AuthorizationCheckerInterface $authorizationChecker,
  53.         Encryption $encrypter,
  54.         UserPasswordHasherInterface $userPasswordHasher
  55.     ) {
  56.         $setup $this->getSetup();
  57.         $request $requestStack->getCurrentRequest();
  58.         $registerAsGuest $request->request->get('register_as_guest');
  59.         if ($authorizationChecker->isGranted('ROLE_USER')) {
  60.             $url $this->generateUrl('brulafine_user_compte');
  61.             if ($referralProgramManager->isReferralProgramEnabled($setup->getUser(), $setup->getSite())) {
  62.                 $url =  $this->generateUrl('brulafine_user_referral_program');
  63.             }
  64.             return $this->appendCookie(new RedirectResponse($url), $setup->getCookie());
  65.         }
  66.         $user = new User();
  67.         $user->setEnabled(true);
  68.         $session $request->getSession();
  69.         $userRegistrationData = new UserRegistrationData();
  70.         $userRegistrationData->setCGU(true);
  71.         $email $request->query->get('f_mail');
  72.         if (null === $email) {
  73.             $email $session->get('f_mail');
  74.         }
  75.         if (isset($email) && filter_var($emailFILTER_VALIDATE_EMAIL)) {
  76.             $userRegistrationData->setEmail($email);
  77.             $session->set('f_mail'$email);
  78.         }
  79.         $form $this->createForm(UserSimpleRegistrationType::class, $userRegistrationData);
  80.         $form->handleRequest($request);
  81.         if (($form->isSubmitted() && $form->isValid()) || $registerAsGuest) {
  82.             $email $userRegistrationData->getEmail();
  83.             if (!filter_var($emailFILTER_VALIDATE_EMAIL)) {
  84.                 if ($request->isXmlHttpRequest()) {
  85.                     $res = [
  86.                         'status' => 'error',
  87.                         'message' => $this->get('translator')->trans'flashMessages.site.incorrectEmail', array(), TranslationManager::TRANSLATION_DOMAIN_FLASH),
  88.                         'code' => 801,
  89.                         'data' => ['email' => $email],
  90.                     ];
  91.                     return $this->appendCookie(new JsonResponse($resResponse::HTTP_UNAUTHORIZED), $setup->getCookie());
  92.                 }
  93.                 $response $this->render($this->getTemplatesDir() . '/Security/views/Registration/register.html.twig', [
  94.                     'form' => $form->createView(),
  95.                     'tracking' => $setup->getTracking(),
  96.                     'site' => $setup->getSite(),
  97.                     'submit_button' => $request->attributes->get('submit_button'),
  98.                 ]);
  99.                 return $this->appendCookie($response$setup->getCookie());
  100.             }
  101.             /** @var User $userExists */
  102.             $userExists $entityManager->getRepository(User::class)->findOneByUsername($email);
  103.             if ($userExists && !$userExists->hasRole(User::ROLE_GUEST)) {
  104.                 if ($request->isXmlHttpRequest()) {
  105.                     $res = [
  106.                         'status' => 'error',
  107.                         'message' => $this->get('translator')->trans'flashMessages.site.emailAlreadyExists', array(), TranslationManager::TRANSLATION_DOMAIN_FLASH),
  108.                         'code' => 802,
  109.                         'data' => ['email' => $email],
  110.                     ];
  111.                     return $this->appendCookie(new JsonResponse($resResponse::HTTP_UNAUTHORIZED), $setup->getCookie());
  112.                 }
  113.                 $response $this->render($this->getTemplatesDir() . '/Security/views/Registration/register.html.twig', [
  114.                     'form' => $form->createView(),
  115.                     'tracking' => $setup->getTracking(),
  116.                     'site' => $setup->getSite(),
  117.                     'submit_button' => $request->attributes->get('submit_button'),
  118.                 ]);
  119.                 return $this->appendCookie($response$setup->getCookie());
  120.             }
  121.             if ($userExists && $userExists->hasRole(User::ROLE_GUEST) && $registerAsGuest) {
  122.                 if ($request->isXmlHttpRequest()) {
  123.                     $session->set(User::GUEST_USER_SESSION_KEY$userExists->getId());
  124.                     $res = [
  125.                         'user' => $userExists->getId(),
  126.                         'message' => 'User already has GUEST Account',
  127.                         'email' => $email,
  128.                     ];
  129.                     return $this->appendCookie(new JsonResponse($res), $setup->getCookie());
  130.                 }
  131.             }
  132.             if ($userExists && $userExists->hasRole(User::ROLE_GUEST) && !$registerAsGuest) {
  133.                 $userExists->removeRole(User::ROLE_GUEST);
  134.                 $user $userExists;
  135.             }
  136.             $password $serviceUserManager->generatePassword();
  137.             $user->setEncryptedPassword($encrypter->encrypt($serviceUserManager->generatePassword()));
  138.             $user->setTracking($setup->getTracking());
  139.             $user->setEmail($form->getData()->getEmail());
  140.             $user->setPlainPassword($password);
  141.             $user->setPassword($userPasswordHasher->hashPassword($user$user->getPlainPassword()));
  142.             $user->setUserIp($request->getClientIp());
  143.             $user->setUserAgent($request->headers->get('User-Agent''N/A'));
  144.             $user->setRegisteredFrom($setup->getSite());
  145.             if ($registerAsGuest) {
  146.                 $user->addRole(User::ROLE_GUEST);
  147.                 $user->setUserLocale($request->getLocale());
  148.             }
  149.             $dispatcher->dispatch(
  150.                 new UserCreatedEvent($user$request),
  151.                 UserSubscriber::USER_CREATED
  152.             );
  153.             $request->attributes->set('user_plain_password'$password);
  154.             if (!$user->hasRole(User::ROLE_GUEST)) {
  155.                 $dispatcher->dispatch(
  156.                     new UserRegisteredEvent($setup->getTracking(), $user$setup->getSite()),
  157.                     UserSubscriber::REWARD_APPLYING
  158.                 );
  159.                 $url $this->generateUrl('brulafine_user_compte');
  160.                 if ($referralProgramManager->isReferralProgramEnabled($user$setup->getSite())) {
  161.                     $url $this->generateUrl('brulafine_user_referral_program');
  162.                 }
  163.                 $response = new RedirectResponse($url);
  164.                 $dispatcher->dispatch(
  165.                     new SecurityEvent($user$request$response),
  166.                     SecuritySubscriber::REGISTRATION_COMPLETED
  167.                 );
  168.             }
  169.             if ($session->has('f_mail')) {
  170.                 $session->remove('f_mail');
  171.             }
  172.             $res = [
  173.                 'user' => $user->getId(),
  174.                 'message' => 'User created',
  175.                 'email' => $user->getEmail(),
  176.             ];
  177.             if ($request->isXmlHttpRequest()) {
  178.                 if ($registerAsGuest) {
  179.                     $session->set(User::GUEST_USER_SESSION_KEY$user->getId());
  180.                 }
  181.                 return $this->appendCookie(new JsonResponse($res), $setup->getCookie());
  182.             }
  183.             return $this->appendCookie($response$setup->getCookie());
  184.         }
  185.         $errors $form->getErrors(truetrue);
  186.         if ($request->isXmlHttpRequest()) {
  187.             $data = [];
  188.             foreach ($form['email']->getErrors(truetrue) as $error) {
  189.                 $data['email'] = $error->getMessage();
  190.             }
  191.             $res = [
  192.                 'status' => 'error',
  193.                 'message' => $data['email'] ?? $this->get('translator')->trans'flashMessages.site.notValidEmail', array(), TranslationManager::TRANSLATION_DOMAIN_FLASH),
  194.                 'code' => 801,
  195.                 'data' => $data,
  196.             ];
  197.             return $this->appendCookie(new JsonResponse($resResponse::HTTP_UNAUTHORIZED), $setup->getCookie());
  198.         }
  199.         $response $this->render($this->getTemplatesDir() . '/Security/views/Registration/register.html.twig', [
  200.             'form' => $form->createView(),
  201.             'tracking' => $setup->getTracking(),
  202.             'site' => $setup->getSite(),
  203.             'submit_button' => $request->attributes->get('request')->attributes->get('submit_button'),
  204.         ]);
  205.         return $this->appendCookie($response$setup->getCookie());
  206.     }
  207. }