src/Subscriber/User/ProfileVisit/NotificationSubscriber.php line 33

Open in your IDE?
  1. <?php
  2. namespace App\Subscriber\User\ProfileVisit;
  3. use App\Dictionary\ImageFilter;
  4. use App\Entity\MemberMedia;
  5. use App\Event\RedisEventManager;
  6. use App\Event\User\ProfileVisitEvent;
  7. use App\Subscriber\AbstractRedisEventManagerSubscriber;
  8. use Frivol\Common\Service\Notification\ProfileVisitNotification;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Symfony\Component\Routing\RouterInterface;
  11. class NotificationSubscriber extends AbstractRedisEventManagerSubscriber implements EventSubscriberInterface
  12. {
  13.     public function __construct(RedisEventManager $redisEventManagerRouterInterface $router)
  14.     {
  15.         parent::__construct($redisEventManager$router);
  16.     }
  17.     public static function getSubscribedEvents(): array
  18.     {
  19.         return [
  20.             ProfileVisitEvent::class => [
  21.                 ['onProfileVisitCreateNotification'0],
  22.             ],
  23.         ];
  24.     }
  25.     /**
  26.      * @throws \Exception
  27.      */
  28.     public function onProfileVisitCreateNotification(ProfileVisitEvent $event)
  29.     {
  30.         if ($event->getVisitor() === $event->getProfileOwner()) {
  31.             // ignore self visits
  32.             return;
  33.         }
  34.         $notification = new ProfileVisitNotification();
  35.         $visitor $event->getVisitor();
  36.         $owner $event->getProfileOwner();
  37.         $visitedAt = new \DateTime();
  38.         $data = [
  39.             'id' => $visitor->getId(),
  40.             'username' => $visitor->getUsername(),
  41.             'visitedAt' => $visitedAt->format('c'),
  42.             'fromUsername' => $visitor->getUsername(),
  43.             'fromSex' => $visitor->getSex(),
  44.         ];
  45.         if ($visitor->getMainPhoto() instanceof MemberMedia) {
  46.             $data['image'] = $visitor->getMainPhoto()->getUrl(ImageFilter::SIZE_100x100);
  47.         }
  48.         $notification->setData($data);
  49.         $this->getRedisEventManager()->publishToMemberWithFrom($visitor$owner$notification);
  50.     }
  51. }