src/EventSubscriber/CurrentUserSubscriber.php line 69

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Harmonizely\EventSubscriber;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Harmonizely\Model\UserInterface;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\HttpKernel\Event\RequestEvent;
  8. use Symfony\Component\HttpKernel\KernelEvents;
  9. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  10. final class CurrentUserSubscriber implements EventSubscriberInterface
  11. {
  12.     private $tokenStorage;
  13.     private $entityManager;
  14.     private const ROUTES_IGNORE_THIS_FILTER = [
  15.         'panel.api.event_type.list',
  16.         'panel.api.poll.create',
  17.         'panel.api.poll.list',
  18.         'panel.api.availability_rule',
  19.         'panel.api.poll.get',
  20.         'panel.api.event.edit',
  21.         'panel.api.event.no_show.list',
  22.         'panel.api.chart.list_status',
  23.         'panel.api.chart.status',
  24.         'panel.api.chart.hour',
  25.         'panel.api.calendar_integration.calendar_account.list',
  26.         'panel.api.calendar_integration.calendar.default',
  27.         'panel.api.event.resend_notification',
  28.         'hrm_routing_form_index',
  29.         'api_organization_delete_member',
  30.         'panel.api.organization.leave',
  31.         'panel.organization.delete',
  32.         'api_organization_members_list',
  33.         'panel.api.zapier.event.mock',
  34.         'panel.api.routing_form.field.delete',
  35.         'panel.api.routing_form.create',
  36.         'panel.api.routing_form.field.create',
  37.         'panel.api.routing_form.route.create',
  38.         'panel.api.routing_form.delete',
  39.         'panel.api.routing_form.route.delete',
  40.         'panel.api.routing_form.get',
  41.         'panel.api.routing_form.route.get',
  42.         'panel.api.routing_form.list',
  43.         'panel.api.routing_form_result.list',
  44.         'panel.api.routing_form_result.delete.list',
  45.         'panel.api.routing_form.update',
  46.         'panel.api.routing_form.field.update',
  47.         'panel.api.routing_form.route.update',
  48.         'panel.api.event_type.count_by_user',
  49.         'panel.api.approve_event.approve',
  50.         'panel.api.approve_event.cancel',
  51.         'panel.api.zapier.event.get',
  52.     ];
  53.     public function __construct(EntityManagerInterface $entityManagerTokenStorageInterface $tokenStorage)
  54.     {
  55.         $this->entityManager $entityManager;
  56.         $this->tokenStorage $tokenStorage;
  57.     }
  58.     /**
  59.      * {@inheritdoc}
  60.      */
  61.     public static function getSubscribedEvents()
  62.     {
  63.         return [
  64.             KernelEvents::REQUEST => ['setCurrentUser'],
  65.         ];
  66.     }
  67.     public function setCurrentUser(RequestEvent $event)
  68.     {
  69.         if (!in_array($event->getRequest()->get('_route'), self::ROUTES_IGNORE_THIS_FILTER)) {
  70.             $token $this->tokenStorage->getToken();
  71.             if ($token && $token->getUser() instanceof UserInterface) {
  72.                 $this->entityManager
  73.                     ->getFilters()
  74.                     ->enable('current_user')
  75.                     ->setParameter('user_id'$token->getUser()->getId());
  76.             }
  77.         }
  78.     }
  79. }