src\Controller\RegistrationController.php line 73

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  9. use Symfony\Component\Validator\Validator\ValidatorInterface;
  10. use Symfony\Component\Mailer\MailerInterface;
  11. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  12. use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
  13. use App\Entity\Utilisateur;
  14. use App\Entity\Retrieve;
  15. use App\Entity\Possede;
  16. use App\Entity\Role;
  17. use App\Form\RegistrationType;
  18. use App\Form\RetrieveType;
  19. class RegistrationController extends AbstractController
  20. {
  21. #[Route("/retrieve", " app_registration_retrieve")]
  22. public function retrieve(Request $request, UserPasswordHasherInterface $passwordHasher, EntityManagerInterface $em, MailerInterface $mailer): Response
  23. {
  24. $retrieve = new Retrieve();
  25. $form = $this->createForm(RetrieveType::class, $retrieve);
  26. $form->handleRequest($request);
  27. if ($form->isSubmitted() && $form->isValid()) {
  28. $utilisateur=$em->getRepository(Utilisateur::class)->findOneBy(['email' => $retrieve->getEmail()]);
  29. if (!$utilisateur) {
  30. $this->addFlash('danger', 'Aucun compte trouvé avec cette adresse email.');
  31. return $this->redirectToRoute('app_registration_retrieve');
  32. }
  33. $newPassword = bin2hex(random_bytes(8)); // Génère un mot de passe aléatoire de 16 caractères
  34. $utilisateur->setPassword($passwordHasher->hashPassword($utilisateur, $newPassword));
  35. $em->flush();
  36. $email='contact@viteetgourmand.fr';
  37. $message = (new TemplatedEmail())
  38. ->from($email)
  39. ->to($utilisateur->getEmail())
  40. ->subject('Réinitialisation de votre mot de passe')
  41. ->htmlTemplate('emails/retrieve_password.html.twig')
  42. ->context([
  43. 'prenom' => $utilisateur->getPrenom(),
  44. 'nom' => $utilisateur->getNom(),
  45. 'newPassword' => $newPassword
  46. ]);
  47. try {
  48. $mailer->send($message);
  49. } catch (TransportExceptionInterface $e) {
  50. $this->addFlash('danger', 'Une erreur est survenue lors de l\'envoi de l\'email.');
  51. return $this->redirectToRoute('app_registration_retrieve');
  52. }
  53. $this->addFlash('success', 'Un email avec votre nouveau mot de passe vous a été envoyé.');
  54. return $this->redirectToRoute('app_security_login');
  55. }
  56. return $this->render('registration/retrieve.html.twig', [
  57. 'form' => $form->createView(),
  58. ]);
  59. }
  60. #[Route("/register", "app_registration_register")]
  61. public function register(Request $request, UserPasswordHasherInterface $passwordHasher, EntityManagerInterface $em, ValidatorInterface $validator, MailerInterface $mailer): Response
  62. {
  63. $utilisateur = new Utilisateur();
  64. $possede=new Possede();
  65. $role = $em->getRepository(Role::class)->findOneBy(['libelle' => 'ROLE_USER']);
  66. if (!$role) {
  67. throw new \Exception("Role with libelle 'ROLE_USER' not found");
  68. }
  69. $possede->setRoleId($role);
  70. $possede->setUtilisateurId($utilisateur);
  71. $utilisateur->addPossede($possede);
  72. $form = $this->createForm(RegistrationType::class, $utilisateur);
  73. $form->handleRequest($request);
  74. if ($form->isSubmitted() && $form->isValid()) {
  75. $utilisateur->setEmail($form->get('email')->getData());
  76. // encode the plain password
  77. $utilisateur->setPassword(
  78. $passwordHasher->hashPassword(
  79. $utilisateur,
  80. $form->get('password')->getData()
  81. )
  82. );
  83. $utilisateur->setPrenom($form->get('prenom')->getData());
  84. $utilisateur->setNom($form->get('nom')->getData());
  85. $utilisateur->setTelephone($form->get('telephone')->getData());
  86. $utilisateur->setVille($form->get('ville')->getData());
  87. $utilisateur->setPays($form->get('pays')->getData());
  88. $utilisateur->setAdressePostal($form->get('adresse_postal')->getData());
  89. $errors = $validator->validate($utilisateur);
  90. if (count($errors) === 0) {
  91. if ($form->isSubmitted() && $form->isValid()) {
  92. $em->persist($utilisateur);
  93. $em->flush();
  94. // do anything else you need here, like send an email
  95. $email='contact@viteetgourmand.fr';
  96. $message = (new TemplatedEmail())
  97. ->from($email)
  98. ->to($utilisateur->getEmail())
  99. ->subject('Bienvenue sur notre site Vite & Gourmand')
  100. ->htmlTemplate('emails/bienvenue.html.twig')
  101. ->context([
  102. 'prenom' => $utilisateur->getPrenom(),
  103. 'nom' => $utilisateur->getNom(),
  104. ]);
  105. try {
  106. $mailer->send($message);
  107. } catch (TransportExceptionInterface $e) {
  108. // some error prevented the email sending; display an
  109. // error message or try to resend the message
  110. $this->addFlash('danger', 'Une erreur est survenue lors de l\'envoi de votre message. Veuillez réessayer plus tard.');
  111. }
  112. $this->addFlash('success', 'Votre compte a été créé avec succès !');
  113. return $this->redirectToRoute('homepage');
  114. }
  115. else {
  116. foreach ($errors as $error) {
  117. $this->addFlash('danger', $error->getMessage());
  118. }
  119. return $this->redirectToRoute('app_registration_register');
  120. }
  121. }
  122. }
  123. // Always return a Response, even if form is not submitted or not valid
  124. return $this->render('registration/register.html.twig', [
  125. 'form' => $form->createView(),
  126. ]);
  127. }
  128. }