src/EventListener/ResetPasswordListener.php line 69

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use FOS\UserBundle\Event\GetResponseNullableUserEvent;
  4. use FOS\UserBundle\FOSUserEvents;
  5. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\HttpFoundation\JsonResponse;
  8. use Symfony\Component\HttpFoundation\RedirectResponse;
  9. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  10. use FOS\UserBundle\Event\FormEvent;
  11. use FOS\UserBundle\Event\GetResponseUserEvent;
  12. use Symfony\Contracts\Translation\TranslatorInterface;
  13. class ResetPasswordListener implements EventSubscriberInterface
  14. {
  15.     private UrlGeneratorInterface $router;
  16.     private TranslatorInterface $translator;
  17.     private ParameterBagInterface $parameterBag;
  18.     public function __construct(
  19.         UrlGeneratorInterface $router,
  20.         TranslatorInterface $translator,
  21.         ParameterBagInterface $parameterBag
  22.     ) {
  23.         $this->router       $router;
  24.         $this->translator   $translator;
  25.         $this->parameterBag $parameterBag;
  26.     }
  27.     public static function getSubscribedEvents(): array
  28.     {
  29.         return [
  30.             FOSUserEvents::RESETTING_RESET_INITIALIZE      => [
  31.                 ['onResettingResetInitialize', -10]
  32.             ],
  33.             FOSUserEvents::RESETTING_RESET_SUCCESS         => [
  34.                 ['onResetPasswordComplete', -10]
  35.             ],
  36.             FOSUserEvents::RESETTING_SEND_EMAIL_INITIALIZE => [
  37.                 ['onResettingSendEmailInitialize', -10]
  38.             ],
  39.             FOSUserEvents::RESETTING_SEND_EMAIL_COMPLETED => [
  40.                 ['onResettingSendEmailCompleted', -10]
  41.             ]
  42.         ];
  43.     }
  44.     public function onResettingResetInitialize(GetResponseUserEvent $event): void
  45.     {
  46.         if (!$event->getUser()->isPasswordRequestNonExpired($this->parameterBag->get'fos_user_token_ttl')))
  47.         {
  48.             $session $event->getRequest()->getSession();
  49.             $session->getFlashBag()->set(
  50.                 'danger',
  51.                 $this->translator->trans(
  52.                     'errors.account.linkExpired',
  53.                     [],
  54.                     'messages',
  55.                     $session->get('userLocale''pl')
  56.                 )
  57.             );
  58.             $event->setResponse(new RedirectResponse($this->router->generate('fos_user_resetting_request')));
  59.         }
  60.     }
  61.     public function onResetPasswordComplete(FormEvent $event): void
  62.     {
  63.         $url $this->router->generate('fos_user_security_login');
  64.         $event->setResponse( new RedirectResponse($url) );
  65.     }
  66.     public function onResettingSendEmailInitialize(GetResponseNullableUserEvent $event): void
  67.     {
  68.         $request $event->getRequest();
  69.         $origin  $request->request->get('origin');
  70.         if ($event->getUser() === null)
  71.         {
  72.             $request->getSession()->getFlashBag()->set('danger',
  73.                 $this->translator->trans(
  74.                     'errors.account.emailNotExists',
  75.                     [],
  76.                     'messages',
  77.                     $request->getSession()->get('userLocale''pl')
  78.                 ));
  79.             if ($request->request->get('from_app'))
  80.             {
  81.                 $event->setResponse(new JsonResponse([
  82.                     'status'   => false,
  83.                     'message'  => $this->translator->trans(
  84.                         'errors.account.emailNotExists',
  85.                         [],
  86.                         'messages',
  87.                         $request->getSession()->get('userLocale''pl')
  88.                     )
  89.                 ]));
  90.             }
  91.             elseif ($origin == 'eforum')
  92.             {
  93.                 $event->setResponse(new RedirectResponse($this->router->generate('eforum_reset')));
  94.             }
  95.             elseif ($origin == 'uniqskills')
  96.             {
  97.                 $event->setResponse(new RedirectResponse($this->router->generate('uniqskills_reset')));
  98.             }
  99.             else
  100.             {
  101.                 $event->setResponse(new RedirectResponse($this->router->generate('fos_user_resetting_request')));
  102.             }
  103.         }
  104.     }
  105.     public function onResettingSendEmailCompleted(GetResponseUserEvent $event): void
  106.     {
  107.         $request $event->getRequest();
  108.         $origin  $request->request->get('origin');
  109.         if ($origin == 'eforum')
  110.         {
  111.             $request->getSession()->set('origin''eforum');
  112.         }
  113.         elseif ($origin == 'uniqskills')
  114.         {
  115.             $request->getSession()->set('origin''uniqskills');
  116.         }
  117.     }
  118. }