src/Subscriber/UserSubscriber.php line 68

Open in your IDE?
  1. <?php
  2. declare(strict_types 1);
  3. namespace App\Subscriber;
  4. use App\Infra\Events\SessionMessageEvent;
  5. use App\Infra\Events\UserEvent;
  6. use App\Infra\Services\MailerService;
  7. use App\Security\EmailVerifier;
  8. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. class UserSubscriber implements EventSubscriberInterface
  11. {
  12.     protected MailerService $mailerService;
  13.     protected EmailVerifier $emailVerifier;
  14.     protected EventDispatcherInterface $eventDispatcher;
  15.     public static function getSubscribedEvents()
  16.     {
  17.         return [
  18.             UserEvent::USER_REGISTER => 'userRegister',
  19.             UserEvent::USER_RETRIEVE_PASSWORD => 'userRetrievePassword',
  20.             UserEvent::USER_RETRIEVE_PASSWORD_VALIDATION => 'userRetrievePasswordValidation'
  21.         ];
  22.     }
  23.     public function __construct(
  24.         MailerService $mailerService,
  25.         EmailVerifier $emailVerifier,
  26.         EventDispatcherInterface $eventDispatcher
  27.     ) {
  28.         $this->eventDispatcher $eventDispatcher;
  29.         $this->emailVerifier $emailVerifier;
  30.         $this->mailerService $mailerService;
  31.     }
  32.     public function userRegister(UserEvent $event)
  33.     {
  34.         $this->eventDispatcher->dispatch(
  35.             new SessionMessageEvent(
  36.                 'success',
  37.                 'Votre compte a bien été crée, merci de valider votre adresse mail pour vous connecter'),
  38.             SessionMessageEvent::SESSION_MESSAGE
  39.         );
  40.         $this->emailVerifier->sendEmailConfirmation($event->getUser());
  41.     }
  42.     public function userRetrievePassword(UserEvent $event)
  43.     {
  44.         $this->eventDispatcher->dispatch(
  45.             new SessionMessageEvent(
  46.                 'success',
  47.                 'Un email de réinitialisation a bien été envoyé'),
  48.             SessionMessageEvent::SESSION_MESSAGE
  49.         );
  50.         $this->mailerService->sendMail(
  51.             $_ENV['ADMIN_MAIL'],
  52.             $event->getUser()->getEmail(),
  53.             'Mot de passe oublié',
  54.             'password/retrieve_password_email.html.twig', ['user' => $event->getUser()]
  55.         );
  56.     }
  57.     public function userRetrievePasswordValidation()
  58.     {
  59.         $this->eventDispatcher->dispatch(
  60.             new SessionMessageEvent(
  61.                 'success',
  62.                 'Votre mot de passe est changé'),
  63.             SessionMessageEvent::SESSION_MESSAGE
  64.         );
  65.     }
  66. }