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

  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\UserBundle\Entity\User;
  6. use FOS\UserBundle\Event\UserEvent;
  7. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  10. use Symfony\Component\Security\Core\User\UserInterface;
  11. /**
  12. * Listing Search Trigger Listener.
  13. */
  14. class ListingSearchTriggerListener implements EventSubscriberInterface
  15. {
  16. /** @var UserInterface */
  17. protected $user;
  18. /** @var TokenStorageInterface */
  19. private $tokenStorage;
  20. /** @var EventDispatcherInterface */
  21. protected $dispatcher;
  22. public function __construct(
  23. private readonly EventDispatcherInterface $eventDispatcher,
  24. TokenStorageInterface $tokenStorage,
  25. ) {
  26. $this->dispatcher = $tokenStorage;
  27. $this->tokenStorage = $tokenStorage;
  28. $this->user = $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null;
  29. }
  30. public function listingSearchEvent(SearchTriggerInterface $event): void
  31. {
  32. $this->updateUserImperssion();
  33. }
  34. /**
  35. * Update User Impression.
  36. */
  37. protected function updateUserImperssion(): void
  38. {
  39. if ($this->user instanceof User) {
  40. try {
  41. $this->eventDispatcher
  42. ->dispatch(new UserEvent($this->user), 'aqarmap.listing.user.search');
  43. } catch (\Exception $e) {
  44. /** @var UserInterface $this- >user */
  45. if ($this->user && $this->user->hasRole('ROLE_ADMIN')) {
  46. $this->logger->error('Search Listener: '.$e->getMessage());
  47. }
  48. }
  49. }
  50. }
  51. public static function getSubscribedEvents(): array
  52. {
  53. return [
  54. SearchTriggerEvent::EVENT_NAME => 'listingSearchEvent',
  55. ];
  56. }
  57. }