<?php
namespace App\Controller;
use App\Entity\Uid;
use Twig\Environment;
use DateTimeImmutable;
use App\Security\EmailVerifier;
use App\Repository\UidRepository;
use App\Form\RegistrationFormType;
use App\Security\AppAuthenticator;
use Symfony\Component\Mime\Address;
use App\Repository\ParamsRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use SymfonyCasts\Bundle\VerifyEmail\VerifyEmailHelperInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use SymfonyCasts\Bundle\VerifyEmail\Exception\VerifyEmailExceptionInterface;
use Symfony\Component\Security\Http\Authentication\UserAuthenticatorInterface;
class RegistrationController extends AbstractController
{
private $emailVerifier;
private $twig;
public function __construct(EmailVerifier $emailVerifier, Environment $twig)
{
$this->emailVerifier = $emailVerifier;
$this->twig = $twig;
}
/**
* @Route("/inscription", name="app_register")
*/
public function register(
Request $request,
UserPasswordHasherInterface $userPasswordHasher,
UserAuthenticatorInterface $userAuthenticator,
AppAuthenticator $authenticator,
ParamsRepository $paramsRepository,
EntityManagerInterface $entityManager,
VerifyEmailHelperInterface $verifyEmailHelper
): Response
{
$user = new Uid();
$form = $this->createForm(RegistrationFormType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user->setCreatedAt(new DateTimeImmutable());
$user->setRoles(["ROLE_CUSTOMER"]);
$user->setIsActiv(false);
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$form->get('plainPassword')->getData()
)
);
$token = uniqid();
$user->setSignature($token);
$entityManager->persist($user);
$entityManager->flush();
$parameters = [
'user' => $user,
'token' => $token
];
$headers = "From:no-reply@mazykkavinyles.fr" . "\r\n";
$headers .= "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
mail($user->getEmail(),"Confirmation inscription - Mazykka Vinyles" , $this->twig->render("registration/confirmation_email.html.twig", $parameters),$headers);
//mail('wd-creation@live.fr',"Confirmation inscription - Mazykka Vinyles" , $this->twig->render("registration/confirmation_email.html.twig", $parameters),$headers);
$userAuthenticator->authenticateUser(
$user,
$authenticator,
$request
);
$this->addFlash('success', 'Inscription enregistrée. Un e-mail de confirmation vient de vous être envoyé.');
return $this->redirectToRoute('app_register');
}
return $this->render('registration/register.html.twig', [
'current' => 'register',
'params' => $paramsRepository->findAll(),
'registrationForm' => $form->createView(),
]);
}
/**
* @Route("/verify/email/{email}", name="app_verify_email")
*/
public function verifyUserEmail($email, Request $request, UidRepository $uidRepository): Response
{
$user = $uidRepository->findOneBy(['email' => $email, 'signature' => $request->query->get('_t')]);
//$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
// validate email confirmation link, sets User::isVerified=true and persists
if($user){
try {
$this->emailVerifier->handleEmailConfirmation($request, $user);
} catch (VerifyEmailExceptionInterface $exception) {
$this->addFlash('verify_email_error', $exception->getReason());
return $this->redirectToRoute('app_register');
}
// @TODO Change the redirect on success and handle or remove the flash message in your templates
$this->addFlash('success', 'Inscription confirmée.');
return $this->redirectToRoute('home');
}
else {
$this->addFlash('danger', 'Aucune validation d\'inscription trouvée');
return $this->redirectToRoute('app_register');
}
}
}