src/Controller/RegisterController.php line 67

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4.  * ImmoBay - BAUR Immobilien
  5.  *
  6.  * @copyright  Copyright (c) 2008-2022, 47GradNord - Agentur für Internetlösungen
  7.  * @author     47GradNord - Agentur für Internetlösungen <info@47gradnord.de>
  8.  */
  9. namespace App\Controller;
  10. use App\Entity\User;
  11. use App\Form\RegisterType;
  12. use App\Service\UserManager;
  13. use Doctrine\Persistence\ManagerRegistry;
  14. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\HttpFoundation\Response;
  17. use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
  18. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  19. use Symfony\Component\Routing\Annotation\Route;
  20. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  21. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  22. use Symfony\Component\Security\Core\Security;
  23. use Symfony\Component\Security\Http\SecurityEvents;
  24. use Twig\Error\LoaderError;
  25. use Twig\Error\RuntimeError;
  26. use Twig\Error\SyntaxError;
  27. class RegisterController extends AbstractAppController
  28. {
  29.     /**
  30.      * @var ManagerRegistry
  31.      */
  32.     private $managerRegistry;
  33.     private $steps = [
  34.         'start',
  35.         'validate-email',
  36.         'failed-message',
  37.     ];
  38.     /**
  39.      * @var UserManager
  40.      */
  41.     private $userManager;
  42.     public function __construct(ManagerRegistry $managerRegistryUserManager $userManager)
  43.     {
  44.         $this->managerRegistry $managerRegistry;
  45.         $this->userManager $userManager;
  46.     }
  47.     /**
  48.      * @Route("/register", name="register_index", methods={"GET", "POST"} )
  49.      */
  50.     public function index(
  51.         Request $request,
  52.         UserPasswordHasherInterface $userPasswordHasher,
  53.         Security $security,
  54.         EventDispatcherInterface $dispatcher,
  55.         TokenStorageInterface $storage
  56.     ): Response {
  57.         // Handling Registration Form
  58.         $form $this->createForm(RegisterType::class, null, [
  59.             'form_attr' => 'registerForm',
  60.         ]);
  61.         $form->handleRequest($request);
  62.         if ($form->isSubmitted() && $form->isValid()) {
  63.             $user = new User();
  64.             $user->setFirstname($form->getData()['firstname']);
  65.             $user->setLastname($form->getData()['lastname']);
  66.             $user->setAddress($form->getData()['address']);
  67.             $user->setZip($form->getData()['zip']);
  68.             $user->setCity($form->getData()['city']);
  69.             $user->setEmail($form->getData()['email']);
  70.             $user->setMobile($form->getData()['mobile']);
  71.             $user->setAcceptPrivacy($form->getData()['acceptPrivacy']);
  72.             $user->setAcceptTermsConditions($form->getData()['acceptTermsConditions']);
  73.             $user->setFinanceStatusRegistration($form->getData()['financeStatusRegistration']);
  74.             $user->setAcceptTermsConditionsFinanceConfirmation($form->getData()['acceptTermsConditionsFinanceConfirmation']);
  75.             // User already exist
  76.             if ($this->userManager->findDuplicateUser($user)) {
  77.                 $this->addFlash('danger''Die EMail-Adresse '.$user->getEmail().' wird schon verwendet. Bitte verwenden Sie für die Anmeldung eine andere E-Mail-Adresse.');
  78.                 return $this->redirectToRoute('register_index', ['step' => 'start']);
  79.             }
  80.             $user->setPassword($userPasswordHasher->hashPassword($user$form->get('plainPassword')->getData()));
  81.             $user->setRoles(['ROLE_USER']);
  82.             $this->persistAndFlush($this->managerRegistry$user);
  83.             // Send E-Mail to validate E-Mail-Address
  84.             try {
  85.                 $this->userManager->proceedSendValidationEmail($user);
  86.             } catch (TransportExceptionInterface|LoaderError|RuntimeError|SyntaxError $e) {
  87.             }
  88.             // Send E-Mail for Information to Admin
  89.             try {
  90.                 $this->userManager->proceedRequestSendInfoRegistrationToAdmin($user);
  91.             } catch (TransportExceptionInterface|LoaderError|RuntimeError|SyntaxError $e) {
  92.             }
  93.             $token = new UsernamePasswordToken($usernull'main'$user->getRoles());
  94.             $storage->setToken($token);
  95.             $event = new SecurityEvents($request);
  96.             $dispatcher->dispatch($eventSecurityEvents::INTERACTIVE_LOGIN);
  97.             return $this->redirectToRoute('app_validate_contact', ['step' => 'start']);
  98.         }
  99.         // Render
  100.         return $this->render('register/index.html.twig', [
  101.             'form' => $form->createView(),
  102.         ]);
  103.     }
  104. }