vendor/dachcom-digital/members/src/MembersBundle/EventListener/ResettingListener.php line 57

Open in your IDE?
  1. <?php
  2. namespace MembersBundle\EventListener;
  3. use MembersBundle\Adapter\User\UserInterface;
  4. use MembersBundle\Event\FormEvent;
  5. use MembersBundle\Event\GetResponseUserEvent;
  6. use MembersBundle\Manager\UserManagerInterface;
  7. use MembersBundle\MembersEvents;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\HttpFoundation\RedirectResponse;
  10. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  11. class ResettingListener implements EventSubscriberInterface
  12. {
  13.     private UserManagerInterface $userManager;
  14.     private UrlGeneratorInterface $router;
  15.     private int $tokenTtl;
  16.     public function __construct(
  17.         UserManagerInterface $userManager,
  18.         UrlGeneratorInterface $router,
  19.         int $tokenTtl
  20.     ) {
  21.         $this->userManager $userManager;
  22.         $this->router $router;
  23.         $this->tokenTtl $tokenTtl;
  24.     }
  25.     public static function getSubscribedEvents(): array
  26.     {
  27.         return [
  28.             MembersEvents::RESETTING_RESET_INITIALIZE => 'onResettingResetInitialize',
  29.             MembersEvents::RESETTING_RESET_SUCCESS    => 'onResettingResetSuccess',
  30.             MembersEvents::RESETTING_RESET_REQUEST    => 'onResettingResetRequest',
  31.         ];
  32.     }
  33.     public function onResettingResetInitialize(GetResponseUserEvent $event): void
  34.     {
  35.         if (!$event->getUser()->isPasswordRequestNonExpired($this->tokenTtl)) {
  36.             $event->setResponse(new RedirectResponse($this->router->generate('members_user_resetting_request')));
  37.         }
  38.     }
  39.     public function onResettingResetSuccess(FormEvent $event): void
  40.     {
  41.         /** @var UserInterface $user */
  42.         $user $event->getForm()->getData();
  43.         $user->setConfirmationToken(null);
  44.         $user->setPasswordRequestedAt(null);
  45.         $user->setPublished(true);
  46.         $this->userManager->updateUser($user);
  47.     }
  48.     public function onResettingResetRequest(GetResponseUserEvent $event): void
  49.     {
  50.         if (!$event->getUser()->isAccountNonLocked()) {
  51.             $event->setResponse(new RedirectResponse($this->router->generate('members_user_resetting_request')));
  52.         }
  53.     }
  54. }