mirror of
https://github.com/MarijnDoeve/TijdVoorDeTest.git
synced 2026-03-07 13:14:20 +01:00
This commit introduces a refactored EliminationFactory for better modularity, updates the elimination preparation process, and adds functionality to view eliminations. Backoffice templates and forms have been reorganized, minor translations were corrected, and additional assets like styles and flashes were included for enhanced user experience.
94 lines
3.4 KiB
PHP
94 lines
3.4 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Controller;
|
|
|
|
use App\Entity\User;
|
|
use App\Form\RegistrationFormType;
|
|
use App\Repository\UserRepository;
|
|
use App\Security\EmailVerifier;
|
|
use Doctrine\ORM\EntityManagerInterface;
|
|
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
|
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
|
use Symfony\Bundle\SecurityBundle\Security;
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
|
|
use Symfony\Component\Routing\Attribute\Route;
|
|
use Symfony\Contracts\Translation\TranslatorInterface;
|
|
use SymfonyCasts\Bundle\VerifyEmail\Exception\VerifyEmailExceptionInterface;
|
|
|
|
final class RegistrationController extends AbstractController
|
|
{
|
|
public function __construct(private readonly EmailVerifier $emailVerifier, private readonly TranslatorInterface $translator) {}
|
|
|
|
#[Route('/register', name: 'app_register')]
|
|
public function register(
|
|
Request $request,
|
|
UserPasswordHasherInterface $userPasswordHasher,
|
|
Security $security,
|
|
EntityManagerInterface $entityManager,
|
|
): Response {
|
|
$user = new User();
|
|
$form = $this->createForm(RegistrationFormType::class, $user);
|
|
$form->handleRequest($request);
|
|
|
|
if ($form->isSubmitted() && $form->isValid()) {
|
|
/** @var string $plainPassword */
|
|
$plainPassword = $form->get('plainPassword')->getData();
|
|
|
|
$user->setPassword($userPasswordHasher->hashPassword($user, $plainPassword));
|
|
|
|
$entityManager->persist($user);
|
|
$entityManager->flush();
|
|
|
|
// generate a signed url and email it to the user
|
|
$this->emailVerifier->sendEmailConfirmation('app_verify_email', $user,
|
|
(new TemplatedEmail())
|
|
->to((string) $user->getEmail())
|
|
->subject($this->translator->trans('Please Confirm your Email'))
|
|
->htmlTemplate('backoffice/registration/confirmation_email.html.twig')
|
|
);
|
|
|
|
$response = $security->login($user, 'form_login', 'main');
|
|
\assert($response instanceof Response);
|
|
|
|
return $response;
|
|
}
|
|
|
|
return $this->render('backoffice/registration/register.html.twig', [
|
|
'registrationForm' => $form,
|
|
]);
|
|
}
|
|
|
|
#[Route('/verify/email', name: 'app_verify_email')]
|
|
public function verifyUserEmail(Request $request, TranslatorInterface $translator, UserRepository $userRepository): Response
|
|
{
|
|
$id = $request->query->get('id');
|
|
|
|
if (null === $id) {
|
|
return $this->redirectToRoute('app_register');
|
|
}
|
|
|
|
$user = $userRepository->find($id);
|
|
|
|
if (null === $user) {
|
|
return $this->redirectToRoute('app_register');
|
|
}
|
|
|
|
// validate email confirmation link, sets User::isVerified=true and persists
|
|
try {
|
|
$this->emailVerifier->handleEmailConfirmation($request, $user);
|
|
} catch (VerifyEmailExceptionInterface $verifyEmailException) {
|
|
$this->addFlash('verify_email_error', $translator->trans($verifyEmailException->getReason(), [], 'VerifyEmailBundle'));
|
|
|
|
return $this->redirectToRoute('app_register');
|
|
}
|
|
|
|
$this->addFlash('success', $this->translator->trans('Your email address has been verified.'));
|
|
|
|
return $this->redirectToRoute('app_backoffice_index');
|
|
}
|
|
}
|