src/EventListener/SalesManagoListener.php line 88

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\Gos\PortalSettings;
  4. use App\Entity\Gos\User;
  5. use App\Utils\PortalSettingsService;
  6. use App\Utils\SalesManago\SalesManagoEvent;
  7. use App\Utils\SalesManago\v2\Action\Contact\Upsert\Events\SalesManagoUpsertEventsV2;
  8. use App\Utils\SalesManago\v2\Action\SalesManagoEventDispatcher;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use FOS\UserBundle\Event\FilterUserResponseEvent;
  11. use FOS\UserBundle\FOSUserEvents;
  12. use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationSuccessEvent;
  13. use Lexik\Bundle\JWTAuthenticationBundle\Events as JWTAuthenticationEvents;
  14. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  15. use Symfony\Component\HttpFoundation\Cookie;
  16. use Symfony\Component\HttpFoundation\RequestStack;
  17. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  18. use Symfony\Component\HttpKernel\KernelEvents;
  19. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  20. use Symfony\Component\Security\Http\SecurityEvents;
  21. class SalesManagoListener implements EventSubscriberInterface
  22. {
  23.     public const ROUTES = ['uniqskills_login_check''uniqskills_otp_login''uniqskills_register''eforum_login_check''eforum_otp_login''eforum_register'];
  24.     private $salesManagoUtils;
  25.     private $salesManagoEventDispatcher;
  26.     private $em;
  27.     private $portalSettingsService;
  28.     private $requestStack;
  29.     public function __construct(
  30.         EntityManagerInterface $em,
  31.         SalesManagoEvent $salesManagoUtils,
  32.         SalesManagoEventDispatcher $salesManagoEventDispatcher,
  33.         PortalSettingsService $portalSettingsService,
  34.         RequestStack $requestStack
  35.     ) {
  36.         $this->salesManagoUtils $salesManagoUtils;
  37.         $this->salesManagoEventDispatcher $salesManagoEventDispatcher;
  38.         $this->em $em;
  39.         $this->portalSettingsService $portalSettingsService;
  40.         $this->requestStack $requestStack;
  41.     }
  42.     public static function getSubscribedEvents(): array
  43.     {
  44.         return [
  45.             FOSUserEvents::REGISTRATION_COMPLETED           => ['onRegistrationCompleted', -1],
  46.             SecurityEvents::INTERACTIVE_LOGIN               => ['onSecurityInteractiveLogin', -1],
  47.             JWTAuthenticationEvents::AUTHENTICATION_SUCCESS => 'onAuthenticationSuccessResponse',
  48.             KernelEvents::RESPONSE                          => 'onKernelResponse'
  49.         ];
  50.     }
  51.     public function onRegistrationCompleted(FilterUserResponseEvent $event)
  52.     {
  53.         $user    $event->getUser();
  54.         $request $event->getRequest();
  55.         $portalSettings $this->em->getRepository(PortalSettings::class)
  56.             ->findOneByHash($this->portalSettingsService->getPortalSettingsHash($request));
  57.         $request->getSession()->set('salesManagoContactId'$this->salesManagoUtils->getSalesManagoContactId($user));
  58.         $this->salesManagoEventDispatcher->dispatchContactUpsert($userSalesManagoUpsertEventsV2::ON_REGISTRATION$portalSettings);
  59.     }
  60.     public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
  61.     {
  62.         $user    $event->getAuthenticationToken()->getUser();
  63.         $request $event->getRequest();
  64.         $request->getSession()->set('salesManagoContactId'$this->salesManagoUtils->getSalesManagoContactId($user));
  65.        //No handling for api authentication context, don't confuse with api_login, check security.yaml
  66.         if ($request->attributes->get('_firewall_context''') !== 'security.firewall.map.context.api') {
  67.             $portalSettings $this->em->getRepository(PortalSettings::class)
  68.                 ->findOneByHash($this->portalSettingsService->getPortalSettingsHash($request));
  69.             if ($portalSettings) {
  70.                 $this->salesManagoEventDispatcher->dispatchLoginEvent($user$portalSettings);
  71.             }
  72.         }
  73.     }
  74.     public function onAuthenticationSuccessResponse(AuthenticationSuccessEvent $event)
  75.     {
  76.         $data $event->getData();
  77.         $user $event->getUser();
  78.         if (!$user instanceof User) {
  79.             return;
  80.         }
  81.         $data['salesManagoContactId'] = $this->salesManagoUtils->getSalesManagoContactId($user);
  82.         $event->setData($data);
  83.     }
  84.     public function onKernelResponse(ResponseEvent $event)
  85.     {
  86.         $request  $event->getRequest();
  87.         $response $event->getResponse();
  88.         if (!in_array($request->attributes->get('_route'), self::ROUTES))
  89.         {
  90.             return;
  91.         }
  92.         $salesManagoContactId $request->getSession()->get('salesManagoContactId');
  93.         if (!$request->cookies->has('smclient') && $salesManagoContactId)
  94.         {
  95.             $response->headers->setCookie(
  96.                 Cookie::create(
  97.                     'smclient',
  98.                     $salesManagoContactId,
  99.                     strtotime('now + 10 years'),
  100.                     '/',
  101.                     null,
  102.                     false,
  103.                     false
  104.                 )
  105.             );
  106.         }
  107.         $event->setResponse($response);
  108.     }
  109. }