src/Aqarmap/Bundle/ListingBundle/EventListener/ListingSearchTriggerListener.php line 48

Open in your IDE?
  1. <?php
  2. namespace Aqarmap\Bundle\ListingBundle\EventListener;
  3. use Aqarmap\Bundle\ListingBundle\Event\SearchTriggerEvent;
  4. use Aqarmap\Bundle\ListingBundle\Event\SearchTriggerInterface;
  5. use Aqarmap\Bundle\MainBundle\Contract\ProducerFactoryInterface;
  6. use Aqarmap\Bundle\UserBundle\Entity\User;
  7. use FOS\UserBundle\Event\UserEvent;
  8. use Psr\Log\LoggerInterface;
  9. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  12. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  13. use Symfony\Component\Security\Core\User\UserInterface;
  14. /**
  15.  * Listing Search Trigger Listener.
  16.  */
  17. class ListingSearchTriggerListener implements EventSubscriberInterface
  18. {
  19.     /** @var UserInterface */
  20.     protected $user;
  21.     /** @var TokenStorageInterface */
  22.     private $tokenStorage;
  23.     /** @var EventDispatcherInterface */
  24.     protected $dispatcher;
  25.     /**
  26.      * @var EventDispatcherInterface
  27.      */
  28.     private $eventDispatcher;
  29.     public function __construct(
  30.         LoggerInterface $logger,
  31.         EventDispatcherInterface $eventDispatcher,
  32.         TokenStorageInterface $tokenStorage,
  33.         ProducerFactoryInterface $producerFactory,
  34.         SessionInterface $session
  35.     ) {
  36.         $this->dispatcher $tokenStorage;
  37.         $this->tokenStorage $tokenStorage;
  38.         $this->user $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null;
  39.         $this->eventDispatcher $eventDispatcher;
  40.     }
  41.     public function listingSearchEvent(SearchTriggerInterface $event): void
  42.     {
  43.         $this->updateUserImperssion();
  44.     }
  45.     /**
  46.      * Update User Impression.
  47.      */
  48.     protected function updateUserImperssion(): void
  49.     {
  50.         if ($this->user instanceof User) {
  51.             try {
  52.                 $this->eventDispatcher
  53.                     ->dispatch(new UserEvent($this->user), 'aqarmap.listing.user.search');
  54.             } catch (\Exception $e) {
  55.                 /** @var UserInterface $this- >user */
  56.                 if ($this->user && $this->user->hasRole('ROLE_ADMIN')) {
  57.                     $this->logger->error('Search Listener: '.$e->getMessage());
  58.                 }
  59.             }
  60.         }
  61.     }
  62.     public static function getSubscribedEvents()
  63.     {
  64.         return [
  65.             SearchTriggerEvent::EVENT_NAME => 'listingSearchEvent',
  66.         ];
  67.     }
  68. }