<?php
declare(strict_types=1);
/*
* ImmoBay - BAUR Immobilien
*
* @copyright Copyright (c) 2008-2022, 47GradNord - Agentur für Internetlösungen
* @author 47GradNord - Agentur für Internetlösungen <info@47gradnord.de>
*/
namespace App\Controller;
use App\Entity\User;
use App\Form\RegisterType;
use App\Service\UserManager;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Security\Http\SecurityEvents;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Error\SyntaxError;
class RegisterController extends AbstractAppController
{
/**
* @var ManagerRegistry
*/
private $managerRegistry;
private $steps = [
'start',
'validate-email',
'failed-message',
];
/**
* @var UserManager
*/
private $userManager;
public function __construct(ManagerRegistry $managerRegistry, UserManager $userManager)
{
$this->managerRegistry = $managerRegistry;
$this->userManager = $userManager;
}
/**
* @Route("/register", name="register_index", methods={"GET", "POST"} )
*/
public function index(
Request $request,
UserPasswordHasherInterface $userPasswordHasher,
Security $security,
EventDispatcherInterface $dispatcher,
TokenStorageInterface $storage
): Response {
// Handling Registration Form
$form = $this->createForm(RegisterType::class, null, [
'form_attr' => 'registerForm',
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user = new User();
$user->setFirstname($form->getData()['firstname']);
$user->setLastname($form->getData()['lastname']);
$user->setAddress($form->getData()['address']);
$user->setZip($form->getData()['zip']);
$user->setCity($form->getData()['city']);
$user->setEmail($form->getData()['email']);
$user->setMobile($form->getData()['mobile']);
$user->setAcceptPrivacy($form->getData()['acceptPrivacy']);
$user->setAcceptTermsConditions($form->getData()['acceptTermsConditions']);
$user->setFinanceStatusRegistration($form->getData()['financeStatusRegistration']);
$user->setAcceptTermsConditionsFinanceConfirmation($form->getData()['acceptTermsConditionsFinanceConfirmation']);
// User already exist
if ($this->userManager->findDuplicateUser($user)) {
$this->addFlash('danger', 'Die EMail-Adresse '.$user->getEmail().' wird schon verwendet. Bitte verwenden Sie für die Anmeldung eine andere E-Mail-Adresse.');
return $this->redirectToRoute('register_index', ['step' => 'start']);
}
$user->setPassword($userPasswordHasher->hashPassword($user, $form->get('plainPassword')->getData()));
$user->setRoles(['ROLE_USER']);
$this->persistAndFlush($this->managerRegistry, $user);
// Send E-Mail to validate E-Mail-Address
try {
$this->userManager->proceedSendValidationEmail($user);
} catch (TransportExceptionInterface|LoaderError|RuntimeError|SyntaxError $e) {
}
// Send E-Mail for Information to Admin
try {
$this->userManager->proceedRequestSendInfoRegistrationToAdmin($user);
} catch (TransportExceptionInterface|LoaderError|RuntimeError|SyntaxError $e) {
}
$token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
$storage->setToken($token);
$event = new SecurityEvents($request);
$dispatcher->dispatch($event, SecurityEvents::INTERACTIVE_LOGIN);
return $this->redirectToRoute('app_validate_contact', ['step' => 'start']);
}
// Render
return $this->render('register/index.html.twig', [
'form' => $form->createView(),
]);
}
}