vendor/dachcom-digital/members/src/MembersBundle/EventListener/PostConfirmationListener.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\Mailer\MailerInterface;
  6. use MembersBundle\Manager\UserManagerInterface;
  7. use MembersBundle\MembersEvents;
  8. use MembersBundle\Tool\TokenGenerator;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Symfony\Component\HttpFoundation\RedirectResponse;
  11. use Symfony\Component\HttpFoundation\Session\Attribute\NamespacedAttributeBag;
  12. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  13. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  14. class PostConfirmationListener implements EventSubscriberInterface
  15. {
  16.     protected UserManagerInterface $userManager;
  17.     protected MailerInterface $mailer;
  18.     protected TokenGenerator $tokenGenerator;
  19.     protected UrlGeneratorInterface $router;
  20.     protected SessionInterface $session;
  21.     protected string $postEventType;
  22.     protected string $postEventOauthType;
  23.     public function __construct(
  24.         UserManagerInterface $userManager,
  25.         MailerInterface $mailer,
  26.         UrlGeneratorInterface $router,
  27.         SessionInterface $session,
  28.         TokenGenerator $tokenGenerator,
  29.         string $postEventType,
  30.         string $postEventOauthType
  31.     ) {
  32.         $this->userManager $userManager;
  33.         $this->mailer $mailer;
  34.         $this->tokenGenerator $tokenGenerator;
  35.         $this->router $router;
  36.         $this->session $session;
  37.         $this->postEventType $postEventType;
  38.         $this->postEventOauthType $postEventOauthType;
  39.     }
  40.     public static function getSubscribedEvents(): array
  41.     {
  42.         return [
  43.             MembersEvents::REGISTRATION_SUCCESS => 'onRegistrationSuccess',
  44.         ];
  45.     }
  46.     /**
  47.      * @see confirmByAdmin
  48.      * @see confirmInstant
  49.      * @see confirmByMail
  50.      */
  51.     public function onRegistrationSuccess(FormEvent $event): void
  52.     {
  53.         $request $event->getRequest();
  54.         if ($request->attributes->get('_members_sso_aware'null) === true) {
  55.             $type $this->postEventOauthType;
  56.         } else {
  57.             $type $this->postEventType;
  58.         }
  59.         $methodName str_replace('_'''lcfirst(ucwords($type'_')));
  60.         call_user_func_array([$this$methodName], [$event]);
  61.     }
  62.     private function confirmByMail(FormEvent $event): void
  63.     {
  64.         /** @var UserInterface $user */
  65.         $user $event->getForm()->getData();
  66.         $user->setPublished(false);
  67.         if (null === $user->getConfirmationToken()) {
  68.             $user->setConfirmationToken($this->tokenGenerator->generateToken());
  69.         }
  70.         $this->userManager->updateUser($user);
  71.         $this->mailer->sendConfirmationEmailMessage($user);
  72.         /** @var NamespacedAttributeBag $sessionBag */
  73.         $sessionBag $this->session->getBag('members_session');
  74.         $sessionBag->set('members_user_send_confirmation_email/email'$user->getEmail());
  75.         $url $this->router->generate('members_user_registration_check_email');
  76.         $event->setResponse(new RedirectResponse($url));
  77.     }
  78.     private function confirmByAdmin(FormEvent $event): void
  79.     {
  80.         /** @var UserInterface $user */
  81.         $user $event->getForm()->getData();
  82.         $user->setPublished(false);
  83.         if (null === $user->getConfirmationToken()) {
  84.             $user->setConfirmationToken($this->tokenGenerator->generateToken());
  85.         }
  86.         $this->userManager->updateUser($user);
  87.         $this->mailer->sendAdminNotificationEmailMessage($user);
  88.         /** @var NamespacedAttributeBag $sessionBag */
  89.         $sessionBag $this->session->getBag('members_session');
  90.         $sessionBag->set('members_user_send_confirmation_email/email'$user->getEmail());
  91.         $url $this->router->generate('members_user_registration_check_admin');
  92.         $event->setResponse(new RedirectResponse($url));
  93.     }
  94.     private function confirmInstant(FormEvent $event): void
  95.     {
  96.         /** @var UserInterface $user */
  97.         $user $event->getForm()->getData();
  98.         $user->setPublished(true);
  99.         $this->userManager->updateUser($user);
  100.     }
  101. }