src/EventListener/SetDefaultUserIntroListener.php line 72

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Harmonizely\EventListener;
  4. use FOS\UserBundle\Event\FilterUserResponseEvent;
  5. use FOS\UserBundle\Event\UserEvent;
  6. use FOS\UserBundle\FOSUserEvents;
  7. use Harmonizely\Core\StringUtil;
  8. use Harmonizely\Model\UserInterface;
  9. use Harmonizely\Service\Panel\OAuth\OAuthSession;
  10. use Harmonizely\Service\Panel\Unsubscribe\Contract\IUnsubscribeEmailService;
  11. use Harmonizely\Types\Company\WelcomeTourStepType;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  14. use Symfony\Contracts\Translation\TranslatorInterface;
  15. final class SetDefaultUserIntroListener implements EventSubscriberInterface
  16. {
  17.     /**
  18.      * @var TranslatorInterface
  19.      */
  20.     private TranslatorInterface $translator;
  21.     /**
  22.      * @var IUnsubscribeEmailService
  23.      */
  24.     private IUnsubscribeEmailService $unsubscribeEmailService;
  25.     /**
  26.      * @var SessionInterface
  27.      */
  28.     private SessionInterface $session;
  29.     /**
  30.      * @param TranslatorInterface $translator
  31.      * @param IUnsubscribeEmailService $unsubscribeEmailService
  32.      * @param SessionInterface $session
  33.      */
  34.     public function __construct(
  35.         TranslatorInterface $translator,
  36.         IUnsubscribeEmailService $unsubscribeEmailService,
  37.         SessionInterface $session
  38.     )
  39.     {
  40.         $this->translator $translator;
  41.         $this->unsubscribeEmailService $unsubscribeEmailService;
  42.         $this->session $session;
  43.     }
  44.     /**
  45.      * {@inheritdoc}
  46.      */
  47.     public static function getSubscribedEvents()
  48.     {
  49.         return [
  50.             FOSUserEvents::REGISTRATION_INITIALIZE => 'onInitialize',
  51.             FOSUserEvents::REGISTRATION_COMPLETED => 'onCompeted',
  52.         ];
  53.     }
  54.     public function onInitialize(UserEvent $event)
  55.     {
  56.         $user $event->getUser();
  57.         if ($user instanceof UserInterface) {
  58.             $request $event->getRequest();
  59.             $user->setWelcomeTourStep(WelcomeTourStepType::TYPE_CALENDAR_INTEGRATION);
  60.             $user->setReferral($request->cookies->get('ref'));
  61.             if ($request) {
  62.                 $user->setCountryId($request->headers->get('X-country-code'));
  63.             }
  64.             $user->setIntro($this->translator->trans('Welcome to my scheduling page. Please follow the instructions to add a meeting to my calendar.'));
  65.             $oauthData $this->session->get(OAuthSession::PENDING_REGISTRATION_KEY);
  66.             if ($oauthData) {
  67.                 $user->setEmail($oauthData['email']);
  68.                 $user->setFullName($oauthData['name']);
  69.             }
  70.         }
  71.     }
  72.     public function onCompeted(FilterUserResponseEvent $event)
  73.     {
  74.         $user $event->getUser();
  75.         $this->session->set(UserInterface::USER_CONFIRMATION_TOKEN_SESSION_KEY$user->getConfirmationToken());
  76.         $registrationFormData $event->getRequest()->get('fos_user_registration_form');
  77.         if ($registrationFormData && (!isset($registrationFormData['promoLetters']) || !$registrationFormData['promoLetters'])) {
  78.             $this->unsubscribeEmailService->perform($user);
  79.         }
  80.     }
  81. }