src/Subscriber/Guestbook/NotificationSubscriber.php line 98

Open in your IDE?
  1. <?php
  2. namespace App\Subscriber\Guestbook;
  3. use App\Entity\Member;
  4. use App\Event\Guestbook\GuestbookEntryAcceptedEvent;
  5. use App\Event\Guestbook\GuestbookEntryCreatedEvent;
  6. use App\Event\RedisEventManager;
  7. use App\Event\User\RegistrationEvent;
  8. use App\Service\Media\MemberMediaService;
  9. use App\Subscriber\AbstractRedisEventManagerSubscriber;
  10. use Frivol\Common\Service\Notification\Activity\NewRegistrationActivity;
  11. use Frivol\Common\Service\Notification\GuestbookAcceptedNotification;
  12. use Frivol\Common\Service\Notification\GuestbookCreatedNotification;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. use Symfony\Component\Routing\RouterInterface;
  15. class NotificationSubscriber extends AbstractRedisEventManagerSubscriber implements EventSubscriberInterface
  16. {
  17.     /**
  18.      * @var MemberMediaService
  19.      */
  20.     protected $memberMediaService;
  21.     /**
  22.      * NotificationSubscriber constructor.
  23.      */
  24.     public function __construct(MemberMediaService $memberMediaServiceRedisEventManager $redisEventManager,
  25.         RouterInterface $router)
  26.     {
  27.         $this->memberMediaService $memberMediaService;
  28.         parent::__construct($redisEventManager$router);
  29.     }
  30.     public static function getSubscribedEvents(): array
  31.     {
  32.         return [
  33.             GuestbookEntryCreatedEvent::class => [
  34.                 ['onNewGuestbookEntryCreateNotification'0],
  35.             ],
  36.             GuestbookEntryAcceptedEvent::class => [
  37.                 ['onAcceptedCreateNotification'0],
  38.             ],
  39.             RegistrationEvent::class => [
  40.                 ['onRegistrationSendActivityNotification'0],
  41.             ],
  42.         ];
  43.     }
  44.     public function onAcceptedCreateNotification(GuestbookEntryAcceptedEvent $event)
  45.     {
  46.         $sender $event->getEntry()->getSender();
  47.         $recipient $event->getEntry()->getRecipient();
  48.         $notification = new GuestbookAcceptedNotification();
  49.         $notification->setData([
  50.             'username' => $recipient->getUsername(),
  51.             'image' => $this->getMediaUrl($recipient),
  52.             'url' => $this->getGuestbookRoute($recipient),
  53.         ]);
  54.         $this->getRedisEventManager()->publishToMemberWithFrom($sender$recipient$notification);
  55.     }
  56.     /**
  57.      * @throws \Exception
  58.      */
  59.     public function onNewGuestbookEntryCreateNotification(GuestbookEntryCreatedEvent $event)
  60.     {
  61.         $sender $event->getEntry()->getSender();
  62.         $recipient $event->getEntry()->getRecipient();
  63.         $notification = new GuestbookCreatedNotification();
  64.         $notification->setData([
  65.             'username' => $sender->getUsername(),
  66.             'image' => $this->getMediaUrl($sender),
  67.             'toUsername' => $recipient->getUsername(),
  68.         ]);
  69.         $this->getRedisEventManager()->publishToMemberWithFrom($sender$recipient$notification);
  70.     }
  71.     public function getMediaUrl(Member $sender): ?string
  72.     {
  73.         if (!$sender->getMainPhoto()) {
  74.             return null;
  75.         }
  76.         return $this->memberMediaService->getUrlForMemberMedia($sender->getMainPhoto(), false'100x100');
  77.     }
  78.     public function getGuestbookRoute(Member $member): string
  79.     {
  80.         return $this->getRouter()->generate('frivol_frontend_profile_user', [
  81.             'username' => $member->getUsername(),
  82.         ]).'/gaestebuch';
  83.     }
  84.     public function onRegistrationSendActivityNotification(RegistrationEvent $event): void
  85.     {
  86.         if (!$event->getAccount() || !$event->getAccount()->getMember()) {
  87.             return;
  88.         }
  89.         $notification = new NewRegistrationActivity();
  90.         $notification->setFromMemberId($event->getAccount()->getMember()->getId());
  91.         $notification->setFromUsername($event->getAccount()->getMember()->getUsername());
  92.         $this->getRedisEventManager()->publishToHomepage($notification);
  93.     }
  94. }