src/EventSubscriber/InvitationSubscriber.php line 50

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\UserInterface;
  4. use App\Event\ObjectEvent;
  5. use App\Events;
  6. use App\Message\InvitationProcess;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\HttpFoundation\RequestStack;
  9. use Symfony\Component\Messenger\MessageBusInterface;
  10. /**
  11.  * Process user invitation.
  12.  */
  13. class InvitationSubscriber implements EventSubscriberInterface
  14. {
  15.     public const SESSION_NAME 'app_invite_data';
  16.     /** @var RequestStack */
  17.     private $requestStack;
  18.     /** @var MessageBusInterface */
  19.     private $messageBus;
  20.     /**
  21.      * @param RequestStack        $requestStack
  22.      * @param MessageBusInterface $messageBus
  23.      */
  24.     public function __construct(RequestStack $requestStackMessageBusInterface $messageBus)
  25.     {
  26.         $this->requestStack $requestStack;
  27.         $this->messageBus $messageBus;
  28.     }
  29.     /**
  30.      * {@inheritdoc}
  31.      */
  32.     public static function getSubscribedEvents(): array
  33.     {
  34.         return [
  35.             Events::USER_CREATED => 'onUserCreated',
  36.             Events::USER_INVITED => 'onUserInvited',
  37.         ];
  38.     }
  39.     /**
  40.      * @param ObjectEvent $event
  41.      */
  42.     public function onUserCreated(ObjectEvent $event): void
  43.     {
  44.         $user $event->getObject();
  45.         if ($user instanceof UserInterface) {
  46.             $this->processUser($user);
  47.         }
  48.     }
  49.     /**
  50.      * @param ObjectEvent $event
  51.      */
  52.     public function onUserInvited(ObjectEvent $event): void
  53.     {
  54.         $user $event->getObject();
  55.         if ($user instanceof UserInterface) {
  56.             $this->processUser($user);
  57.         }
  58.     }
  59.     /**
  60.      * @param UserInterface $user
  61.      */
  62.     private function processUser(UserInterface $user)
  63.     {
  64.         try {
  65.             /** @var SessionInterface $session */
  66.             $session $this->requestStack->getSession();
  67.         } catch (SessionNotFoundException $e) {
  68.             return;
  69.         }
  70.         if (!$session->has(self::SESSION_NAME)) {
  71.             return;
  72.         }
  73.         // Process invitation
  74.         if ($inviteeData $session->get(self::SESSION_NAME)) {
  75.             if (isset($inviteeData['id']) && isset($inviteeData['objectClass'])) {
  76.                 $this->messageBus->dispatch(
  77.                     new InvitationProcess(
  78.                         $inviteeData['id'],
  79.                         [
  80.                             'loginUser' => (string) $user->getId(),
  81.                             'objectClass' => $inviteeData['objectClass'],
  82.                         ]
  83.                     )
  84.                 );
  85.             }
  86.         }
  87.         $session->remove(self::SESSION_NAME);
  88.     }
  89. }