src/EventSubscriber/UserSubscriber.php line 45

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use ApiPlatform\Symfony\EventListener\EventPriorities as EventPrioritiesAlias;
  4. use App\Enum\ActivityLogCategoryEnum;
  5. use App\Enum\ActivityLogMethodEnum;
  6. use App\Traits\SentryNotifyTrait;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Doctrine\ORM\ORMException;
  9. use Evo\Infrastructure\MappingORM\ActivityLog;
  10. use Evo\Infrastructure\MappingORM\Organization;
  11. use Evo\Infrastructure\MappingORM\User;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpKernel\Event\ViewEvent;
  15. use Symfony\Component\HttpKernel\KernelEvents;
  16. use Symfony\Component\Security\Core\Authentication\Token\SwitchUserToken;
  17. use Symfony\Component\Security\Core\Security;
  18. class UserSubscriber implements EventSubscriberInterface
  19. {
  20.     use SentryNotifyTrait;
  21.     private const ROUTE_NAME 'api_users_put_item';
  22.     private Security $security;
  23.     private EntityManagerInterface $em;
  24.     public function __construct(Security $securityEntityManagerInterface $em)
  25.     {
  26.         $this->security $security;
  27.         $this->em $em;
  28.     }
  29.     public static function getSubscribedEvents(): array
  30.     {
  31.         return [
  32.             KernelEvents::VIEW => ['onWrite'EventPrioritiesAlias::POST_WRITE],
  33.         ];
  34.     }
  35.     /**
  36.      * @throws \JsonException
  37.      * @throws ORMException
  38.      */
  39.     public function onWrite(ViewEvent $event)
  40.     {
  41.         $entity $event->getControllerResult();
  42.         $request $event->getRequest();
  43.         if (!$request instanceof Request) {
  44.             return;
  45.         }
  46.         if (!$entity instanceof User) {
  47.             return;
  48.         }
  49.         $routeName $event->getRequest()->attributes->get('_route');
  50.         if (self::ROUTE_NAME !== $routeName) {
  51.             return;
  52.         }
  53.         $requestData json_decode($event->getRequest()->getContent(), true512JSON_THROW_ON_ERROR);
  54.         if (isset($requestData['organizations']) && isset($requestData['addedOrganizations'])) {
  55.             $token $this->security->getToken();
  56.             if ($token instanceof SwitchUserToken) {
  57.                 $user $token->getOriginalToken()->getUser();
  58.             } else {
  59.                 $user $this->security->getUser();
  60.             }
  61.             foreach ($requestData['addedOrganizations'] as $orga) {
  62.                 if ('string' !== gettype($orga)) {
  63.                     continue;
  64.                 }
  65.                 $orgaId explode('/'$orga);
  66.                 $orgaId end($orgaId);
  67.                 $organization $this->em->getReference(Organization::class, $orgaId);
  68.                 $activityLog ActivityLog::create(
  69.                     $user,
  70.                     ActivityLogMethodEnum::CREATE,
  71.                     'AJOUT USER ID: '.$entity->getId(),
  72.                     ActivityLogCategoryEnum::USER,
  73.                     [],
  74.                     $organization,
  75.                     null,
  76.                     $entity->getFullName()
  77.                 );
  78.                 $this->em->persist($activityLog);
  79.             }
  80.             try {
  81.                 $this->em->flush();
  82.             } catch (\Exception $e) {
  83.                 $this->captureSentryException($e);
  84.             }
  85.         }
  86.     }
  87. }