src/EventSubscriber/EditProfileSubscriber.php line 57

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Harmonizely\EventSubscriber;
  4. use FOS\UserBundle\Event\GetResponseUserEvent;
  5. use Harmonizely\Service\Core\Contract\ICompanySelector;
  6. use Harmonizely\Service\Panel\Api\Logout\Contract\ILogoutAfterChangePasswordService;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use FOS\UserBundle\FOSUserEvents;
  9. use FOS\UserBundle\Event\FilterUserResponseEvent;
  10. use Harmonizely\Core\BackgroundWork\Contract\IClient;
  11. use Harmonizely\Background\Data\DirectorySaveUserData;
  12. class EditProfileSubscriber implements EventSubscriberInterface
  13. {
  14.     /**
  15.      * @var string
  16.      */
  17.     private string $userEmail;
  18.     /**
  19.      * @var IClient
  20.      */
  21.     private IClient $backgroundClient;
  22.     /**
  23.      * @var ILogoutAfterChangePasswordService
  24.      */
  25.     private ILogoutAfterChangePasswordService $logoutAfterChangePasswordService;
  26.     /**
  27.      * @var ICompanySelector
  28.      */
  29.     private ICompanySelector $companySelector;
  30.     /**
  31.      * @param IClient $backgroundClient
  32.      * @param ILogoutAfterChangePasswordService $logoutAfterChangePasswordService
  33.      * @param ICompanySelector $companySelector
  34.      */
  35.     public function __construct(
  36.         IClient $backgroundClient,
  37.         ILogoutAfterChangePasswordService $logoutAfterChangePasswordService,
  38.         ICompanySelector $companySelector
  39.     )
  40.     {
  41.         $this->backgroundClient $backgroundClient;
  42.         $this->logoutAfterChangePasswordService $logoutAfterChangePasswordService;
  43.         $this->companySelector $companySelector;
  44.     }
  45.     /**
  46.      * @return string[]
  47.      */
  48.     public static function getSubscribedEvents(): array
  49.     {
  50.         return [
  51.             FOSUserEvents::PROFILE_EDIT_COMPLETED => 'profileEditCompleted',
  52.             FOSUserEvents::PROFILE_EDIT_INITIALIZE => 'profileEditInitialize',
  53.         ];
  54.     }
  55.     public function profileEditInitialize(GetResponseUserEvent $event): void
  56.     {
  57.         $this->userEmail $event->getUser()->getEmail();
  58.     }
  59.     /**
  60.      * @param FilterUserResponseEvent $event
  61.      * @return void
  62.      */
  63.     public function profileEditCompleted(FilterUserResponseEvent $event): void
  64.     {
  65.         $user $event->getUser();
  66.         if ($user->getEmail() !== $this->userEmail) {
  67.             $this->logoutAfterChangePasswordService->perform();
  68.         }
  69.         $this->backgroundClient->add(new DirectorySaveUserData(
  70.             $user->getId(),
  71.             $this->companySelector->getCompany()
  72.         ));
  73.         $this->backgroundClient->runJobs();
  74.     }
  75. }