src/EventSubscriber/ForgotPasswordEventSubscriber.php line 51

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Service\SendEmail;
  4. use CoopTilleuls\ForgotPasswordBundle\Event\CreateTokenEvent;
  5. use DateTime;
  6. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\HttpFoundation\JsonResponse;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
  11. use Symfony\Component\Mailer\MailerInterface;
  12. use Symfony\Component\Mime\Address;
  13. use Twig\Environment;
  14. class ForgotPasswordEventSubscriber implements EventSubscriberInterface
  15. {
  16. /**
  17. * @var SendEmail
  18. */
  19. private $mailer;
  20. /**
  21. * @var Environment
  22. */
  23. private $twig;
  24. /**
  25. * ForgotPasswordEventSubscriber constructor.
  26. * @param MailerInterface $mailer
  27. * @param Environment $twig
  28. */
  29. public function __construct(SendEmail $mailer, Environment $twig)
  30. {
  31. $this->mailer = $mailer;
  32. $this->twig = $twig;
  33. }
  34. public static function getSubscribedEvents()
  35. {
  36. return [
  37. CreateTokenEvent::class => 'onCreateToken'
  38. ];
  39. }
  40. /**
  41. * @param CreateTokenEvent $event
  42. */
  43. public function onCreateToken(CreateTokenEvent $event)
  44. {
  45. $passwordToken = $event->getPasswordToken();
  46. $user = $passwordToken->getUser();
  47. try {
  48. /**
  49. * @var DateInterval $interval
  50. */
  51. $interval = date_diff(new DateTime(), $passwordToken->getExpiresAt(), true);
  52. $this->mailer->send(
  53. $user->getEmail(),
  54. 'Votre demande de réinitialisation de mot de passe',
  55. 'reset_password/email.html.twig',
  56. [
  57. 'resetToken' => $passwordToken->getToken(),
  58. 'tokenLifetime' => $interval === false ? 0 : $interval->h
  59. ]
  60. );
  61. } catch (TransportExceptionInterface $e) {
  62. throw new \RuntimeException("Une erreur s'est produite lors de l'envoi d'un e-mail pour réinitialiser votre mot de passe, veuillez réessayer plus tard.");
  63. }
  64. // return new JsonResponse(['message' => 'An email was sent to your inbox!'], Response::HTTP_OK);
  65. }
  66. }