src/EventSubscriber/User/ResettingSubscriber.php line 83

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber\User;
  3. use App\Utils\Emails\UserEmail;
  4. use App\Entity\User\User;
  5. use FOS\UserBundle\FOSUserEvents;
  6. use FOS\UserBundle\Event\FormEvent;
  7. use FOS\UserBundle\Event\GetResponseUserEvent;
  8. use FOS\UserBundle\Event\GetResponseNullableUserEvent;
  9. use FOS\UserBundle\Doctrine\UserManager;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. use Symfony\Component\HttpFoundation\RedirectResponse;
  12. use Symfony\Component\HttpFoundation\JsonResponse;
  13. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  14. use Symfony\Contracts\Translation\TranslatorInterface;
  15. use Symfony\Component\DependencyInjection\ContainerInterface;
  16. class ResettingSubscriber implements EventSubscriberInterface
  17. {
  18.     private $router;
  19.     private $container;
  20.     private $userEmail;
  21.     private $translator;
  22.     private $userManager;
  23.  
  24.     public function __construct(
  25.         UrlGeneratorInterface $router
  26.         ContainerInterface $container
  27.         UserEmail $userEmail,
  28.         TranslatorInterface $translator,
  29.         UserManager $userManager
  30.     ) {
  31.         $this->router           $router;
  32.         $this->container        $container;
  33.         $this->userEmail      $userEmail;
  34.         $this->translator       $translator;
  35.         $this->userManager      $userManager;
  36.     }
  37.     public static function getSubscribedEvents()
  38.     {
  39.         return array(
  40.             FOSUserEvents::RESETTING_RESET_SUCCESS              => array('onResettingResetSuccess', -10),
  41.             FOSUserEvents::RESETTING_SEND_EMAIL_INITIALIZE      => array('onResettingSendEmailInitialize', -10),
  42.             FOSUserEvents::RESETTING_SEND_EMAIL_CONFIRM         => array('onResettingSendEmailConfirm', -10),
  43.             FOSUserEvents::RESETTING_RESET_REQUEST              => array('onResettingResetRequest', -10)
  44.         );
  45.     }
  46.  
  47.     public function onResettingResetSuccess(FormEvent $event)
  48.     {
  49.         $request $event->getRequest();
  50.         
  51.         $user $event->getForm()->getData();
  52.         
  53.         // Envoi mail de notification
  54.         $redirect $this->router->generate('fos_user_profile_show');
  55.         $this->userEmail->alerteModificationMotdepasse($user);
  56.         if ($request->isXmlHttpRequest()) {
  57.             $event->setResponse(new JsonResponse(array('success' => true)));
  58.         }
  59.         else {
  60.             $response = new RedirectResponse($redirect);
  61.             $event->setResponse($response);
  62.         }
  63.     }
  64.     
  65.     public function onResettingSendEmailConfirm(GetResponseUserEvent $event
  66.     {
  67.         $ttl  $this->container->getParameter('fos_user.resetting.retry_ttl');
  68.         $user $event->getUser();
  69.         
  70.         $this->userEmail->alerteReinitialisationMotdepasse($user);
  71.         $user->setPasswordRequestedAt(new \DateTime());
  72.         $this->userManager->updateUser($user);
  73.         $event->setResponse(new JsonResponse(array('success' => true'message' => $this->translator->trans('reset_password_email_success', ['%timeout%' => ceil($ttl/3600)]))));
  74.     }
  75.     
  76.     public function onResettingSendEmailInitialize(GetResponseNullableUserEvent $event
  77.     {
  78.         $ttl     $this->container->getParameter('fos_user.resetting.retry_ttl');
  79.         $user    $event->getUser();
  80.         $request $event->getRequest();
  81.         if (is_null($user)) {
  82.             $event->setResponse(new JsonResponse(array('success' => false'errors' => $this->translator->trans('reset_password_email_not_found'))));
  83.         }
  84.         
  85.         if (!is_null($user) && $user->isPasswordRequestNonExpired($ttl)) {
  86.             $event->setResponse(new JsonResponse(array('success' => false'errors' => $this->translator->trans('reset_password_email_ttl_ko', ['%timeout%' => ceil($ttl/3600)]))));
  87.         }
  88.     }
  89.     /**
  90.      * @param GetResponseUserEvent $event
  91.      */
  92.     public function onResettingResetRequest(GetResponseUserEvent $event)
  93.     {
  94.         $request $event->getRequest();
  95.         if (!$event->getUser()->isAccountNonLocked()) {
  96.             if ($request->isXmlHttpRequest()) {
  97.                 $event->setResponse(new JsonResponse(array('success' => false'errors' => 'Votre compte est dĂ©sactivĂ©.')));
  98.             }
  99.             else {
  100.                 $event->setResponse(new RedirectResponse($this->router->generate('fos_user_resetting_request')));
  101.             }
  102.         }
  103.     }
  104. }