src/Component/CompanyMatch/EventSubscriber/CompanyMatchEventSubscriber.php line 98

Open in your IDE?
  1. <?php
  2. namespace App\Component\CompanyMatch\EventSubscriber;
  3. use App\Component\CompanyMatch\Client\CompanyMatchClient;
  4. use App\Component\CompanyMatch\Event\CompanyMatchUserViewedEvent;
  5. use App\Component\CompanyMatch\Form\Setting\CompanyMatchSettingType;
  6. use App\Component\CompanyMatch\Util\CompanyMatchUserHistorian;
  7. use App\Component\CompanyMatch\Util\CompanyMatchUtil;
  8. use App\Entity\SiteUserData;
  9. use App\Event\SettingsSavedEvent;
  10. use App\EventListener\FeatureFlagListener;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Flagception\Manager\FeatureManagerInterface;
  13. use FOS\UserBundle\Controller\ResettingController;
  14. use FOS\UserBundle\Event\FilterUserResponseEvent;
  15. use FOS\UserBundle\Event\FormEvent;
  16. use FOS\UserBundle\FOSUserEvents;
  17. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  18. use Symfony\Component\HttpFoundation\RedirectResponse;
  19. use Symfony\Component\Routing\RouterInterface;
  20. use Symfony\Component\Security\Http\Event\LoginSuccessEvent;
  21. class CompanyMatchEventSubscriber implements EventSubscriberInterface
  22. {
  23.     public function __construct(
  24.         private readonly CompanyMatchClient $client,
  25.         private readonly EntityManagerInterface $entityManager,
  26.         private readonly FeatureManagerInterface $featureManager,
  27.         private readonly ResettingController $resettingController,
  28.         private readonly RouterInterface $router,
  29.         protected readonly CompanyMatchUserHistorian $companyMatchUserHistorian,
  30.     ) {
  31.     }
  32.     public static function getSubscribedEvents(): array
  33.     {
  34.         return [
  35.             SettingsSavedEvent::class => 'settingsSaved',
  36.             FOSUserEvents::REGISTRATION_SUCCESS => ['userRegistered', -50],
  37.             FOSUserEvents::REGISTRATION_COMPLETED => ['userRegisteredCompleted', -50],
  38.             LoginSuccessEvent::class => 'onLoginSuccess',
  39.             CompanyMatchUserViewedEvent::class => 'userViewed',
  40.         ];
  41.     }
  42.     public function settingsSaved(SettingsSavedEvent $event): void
  43.     {
  44.         if (!$this->featureCheck()) {
  45.             return;
  46.         }
  47.         if (CompanyMatchSettingType::class !== \get_class($event->getType())) {
  48.             return;
  49.         }
  50.         $this->client->updateUrlToken();
  51.         $event->stopPropagation();
  52.     }
  53.     public function userRegistered(FormEvent $event): void
  54.     {
  55.         if (!$this->featureCheck()) {
  56.             return;
  57.         }
  58.         if (!empty(CompanyMatchUtil::getCookie($event->getRequest()))) {
  59.             $event->setResponse(new RedirectResponse($this->router->generate('pages_user_dashboard')));
  60.             return;
  61.         }
  62.         $event->setResponse(new RedirectResponse($this->router->generate('company_match_init', [
  63.             'email' => $event->getForm()->getData()->getEmail(),
  64.             'user_dashboard' => true,
  65.         ])));
  66.     }
  67.     public function userRegisteredCompleted(FilterUserResponseEvent $event): void
  68.     {
  69.         if (!$this->featureCheck()) {
  70.             return;
  71.         }
  72.         if (($request $event->getRequest())
  73.             && ($user $event->getUser())->getPasswordRequestedAt() instanceof \DateTime
  74.         ) {
  75.             $request->attributes->set('username'$user->getUsername());
  76.             $this->resettingController->sendEmailAction($request);
  77.         }
  78.     }
  79.     public function userViewed(CompanyMatchUserViewedEvent $event): void
  80.     {
  81.         $this->companyMatchUserHistorian->increaseViewCount($event->getCompanySiteUser());
  82.     }
  83.     public function onLoginSuccess(LoginSuccessEvent $event): void
  84.     {
  85.         if (!$this->featureCheck()) {
  86.             return;
  87.         }
  88.         if ('front_secured_area' !== $event->getFirewallName()) {
  89.             return;
  90.         }
  91.         if (($user $this->entityManager->getRepository(SiteUserData::class)
  92.                 ->findOneBy(['user' => $event->getUser()])) instanceof SiteUserData
  93.             && null !== ($companyMatchToken $user->getCompanyMatchToken())
  94.         ) {
  95.             CompanyMatchUtil::setCookie($event->getResponse(), $companyMatchToken);
  96.         }
  97.     }
  98.     private function featureCheck(): bool
  99.     {
  100.         return $this->featureManager->isActive(FeatureFlagListener::FEATURE_COMPANY_MATCH);
  101.     }
  102. }