<?php
namespace App\EventSubscriber;
use App\Service\SendEmail;
use CoopTilleuls\ForgotPasswordBundle\Event\CreateTokenEvent;
use DateTime;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Address;
use Twig\Environment;
class ForgotPasswordEventSubscriber implements EventSubscriberInterface
{
/**
* @var SendEmail
*/
private $mailer;
/**
* @var Environment
*/
private $twig;
/**
* ForgotPasswordEventSubscriber constructor.
* @param MailerInterface $mailer
* @param Environment $twig
*/
public function __construct(SendEmail $mailer, Environment $twig)
{
$this->mailer = $mailer;
$this->twig = $twig;
}
public static function getSubscribedEvents()
{
return [
CreateTokenEvent::class => 'onCreateToken'
];
}
/**
* @param CreateTokenEvent $event
*/
public function onCreateToken(CreateTokenEvent $event)
{
$passwordToken = $event->getPasswordToken();
$user = $passwordToken->getUser();
try {
/**
* @var DateInterval $interval
*/
$interval = date_diff(new DateTime(), $passwordToken->getExpiresAt(), true);
$this->mailer->send(
$user->getEmail(),
'Votre demande de réinitialisation de mot de passe',
'reset_password/email.html.twig',
[
'resetToken' => $passwordToken->getToken(),
'tokenLifetime' => $interval === false ? 0 : $interval->h
]
);
} catch (TransportExceptionInterface $e) {
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.");
}
// return new JsonResponse(['message' => 'An email was sent to your inbox!'], Response::HTTP_OK);
}
}