<?php
namespace App\Controller;
use App\Entity\User;
use App\Form\RegistrationFormType;
use App\Security\EmailVerifier;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mime\Address;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
use SymfonyCasts\Bundle\VerifyEmail\Exception\VerifyEmailExceptionInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
class RegistrationController extends AbstractController
{
private $emailVerifier;
public function __construct(EmailVerifier $emailVerifier)
{
$this->emailVerifier = $emailVerifier;
}
/**
* @Route("/register", name="app_register")
*/
public function register(Request $request, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager, MailerInterface $mailer): Response
{
$user = new User();
$form = $this->createForm(RegistrationFormType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// encode the plain password
$plainPassword = $form->get('plainPassword')->getData();
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$plainPassword
)
);
if($request->get('become_partner_checkbox') && $request->get('become_partner_checkbox') == 'yes')
$user->setRoles(array('ROLE_USER', 'ROLE_PARTNER'));
if($request->get('reg_fname'))
$user->setFname($request->get('reg_fname'));
if($request->get('reg_lname'))
$user->setLname($request->get('reg_lname'));
$phone = $request->get('reg_phone');
if($request->get('reg_phone'))
$user->setPhone($phone);
$userData = array();
if($request->get('reg_neph')){
$userData['neph'] = $request->get('reg_neph');
$user->setData(json_encode($userData));
} else {
$user->setData('');
}
$user->setIsVerified(true);
$entityManager->persist($user);
$entityManager->flush();
// generate a signed url and email it to the user
// $this->emailVerifier->sendEmailConfirmation('app_verify_email', $user,
// (new TemplatedEmail())
// ->from(new Address('contact@esrautomoto.fr', 'ESR'))
// ->to($user->getEmail())
// ->subject('Please Confirm your Email')
// ->htmlTemplate('registration/confirmation_email.html.twig')
// );
$baseUrl = $request->getSchemeAndHttpHost();
$emailTemplate = '<table style="width: 70%; font-size: 17px; border-spacing: 0px;"><tr style="background:#020f57;"><td style="padding:20px 10px;" align="center"><img src="'.$baseUrl.'/assets/img/icon.png" /></td></tr><tr style="background:#ececec;"><td style="padding:20px 10px;"><br />Bonjour,<br /><br />__MESSAGE__<br /><br />Bien cordialement<br /><br /></td></tr><tr style="background:#e91e63"><td style="padding:20px 10px; color:#ffffff;" align="center">ESRAutoMoto® 2023<br /><a href="tel:0141538591">0141538591</a><br />contact@esrautomoto.fr</td></tr></table>';
$message = str_replace('__MESSAGE__', 'Nous sommes très heureux de vous compter parmi nous.<br />Voici vos informations de connexion:<br /><br /><ul><li><b>Identifiant:</b> '.$user->getEmail().'</li><li><b>Mot de passe:</b> '.$plainPassword.'</li></ul>', $emailTemplate);
$sendEmail = (new Email())
->from('contact@esrautomoto.fr')
->to($user->getEmail())
->subject('Bienvenue sur ESR AutoMoto')
->html($message);
$mailer->send($sendEmail);
$messageAdmin = str_replace('__MESSAGE__', 'L\'utilisateur '.$user->getEmail().' vient de s\'inscrire sur la plateforme.<br />Son numéro de téléphone: <a href="tel:'.$phone.'">'.$phone.'</a>', $emailTemplate);
$sendEmailAdmin = (new Email())
->from('contact@esrautomoto.fr')
->to('gestion.ducode@icloud.com')
->subject('Nouvelle inscription sur ESR AutoMoto')
->html($messageAdmin);
$mailer->send($sendEmailAdmin);
// do anything else you need here, like send an email
return $this->redirectToRoute('login', array('success'=>'yes'));
}
return $this->render('registration/register.html.twig', [
'registrationForm' => $form->createView(),
]);
}
/**
* @Route("/verify/email", name="app_verify_email")
*/
public function verifyUserEmail(Request $request): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
// validate email confirmation link, sets User::isVerified=true and persists
try {
$this->emailVerifier->handleEmailConfirmation($request, $this->getUser());
} 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', 'Your email address has been verified.');
return $this->redirectToRoute('app_register');
}
}