<?php
namespace App\EventSubscriber;
use App\DataFixtures\UserFixtures;
use CoopTilleuls\ForgotPasswordBundle\Event\CreateTokenEvent;
use CoopTilleuls\ForgotPasswordBundle\Event\UpdatePasswordEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
use Twig\Environment;
final class ForgotPasswordEventSubscriber implements EventSubscriberInterface
{
private $mailer;
private $twig;
private $userFixtures;
public function __construct(MailerInterface $mailer, Environment $twig, UserFixtures $userFixtures)
{
$this->mailer = $mailer;
$this->twig = $twig;
$this->userFixtures = $userFixtures;
}
public static function getSubscribedEvents()
{
return [
CreateTokenEvent::class => 'onCreateToken',
UpdatePasswordEvent::class => 'onUpdatePassword',
];
}
public function onCreateToken(CreateTokenEvent $event)
{
$passwordToken = $event->getPasswordToken();
$user = $passwordToken->getUser();
$message = (new Email())
->from('flatshowmailer@gmail.com')
->to($user->getEmail())
->subject('Reset your password')
->html($this->twig->render(
'password-reset.html.twig',
[
'user' => $user,
'token' => $passwordToken->getToken(),
]
));
if (0 === $this->mailer->send($message)) {
throw new \RuntimeException('Unable to send email');
}
}
public function onUpdatePassword(UpdatePasswordEvent $event)
{
$passwordToken = $event->getPasswordToken();
$user = $passwordToken->getUser();
// $user->setPlainPassword($event->getPassword());
$this->userFixtures->changePassword($user, $event->getPassword());
}
}