src/Subscriber/HomepageFeedSubscriber.php line 173

Open in your IDE?
  1. <?php
  2. /*
  3.  * Author: Dominik Piekarski <code@dompie.de>
  4.  * Created at: 2022/01/28 10:54
  5.  */
  6. declare(strict_types=1);
  7. namespace App\Subscriber;
  8. use App\Dictionary\PaymentType;
  9. use App\Entity\Content;
  10. use App\Event\Amateur\BlogEntryUpdatedEvent;
  11. use App\Event\Content\CommentCreatedEvent;
  12. use App\Event\Content\ContentPublishedEvent;
  13. use App\Event\Guestbook\GuestbookCommentChangedEvent;
  14. use App\Event\Guestbook\GuestbookEntryAcceptedEvent;
  15. use App\Event\Payment\PaymentCreatedEvent;
  16. use App\Event\RedisEventManager;
  17. use App\Event\User\FriendshipConfirmedEvent;
  18. use App\Event\User\LivecamOnlineEvent;
  19. use App\Event\User\LoginCreatedEvent;
  20. use App\Event\User\MemberCreatedEvent;
  21. use App\Event\User\ProfileVisitEvent;
  22. use App\Event\UserGroups\UserGroupPostCreatedEvent;
  23. use App\Service\NotificationActivityFactory;
  24. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  25. class HomepageFeedSubscriber implements EventSubscriberInterface
  26. {
  27.     private RedisEventManager $redis;
  28.     private NotificationActivityFactory $factory;
  29.     public function __construct(RedisEventManager $redisNotificationActivityFactory $factory)
  30.     {
  31.         $this->redis $redis;
  32.         $this->factory $factory;
  33.     }
  34.     public static function getSubscribedEvents(): array
  35.     {
  36.         return [
  37.             ContentPublishedEvent::class => [
  38.                 ['onContentPublishSendHomepageFeed'0],
  39.             ],
  40.             BlogEntryUpdatedEvent::class => [
  41.                 ['onBlogEntryApproveSendHomepageFeed'0],
  42.             ],
  43.             LoginCreatedEvent::class => [
  44.                 ['onLoginSendHomepageFeed'0],
  45.             ],
  46.             ProfileVisitEvent::class => [
  47.                 ['onProfileVisitSendHomepageFeed'0],
  48.             ],
  49.             PaymentCreatedEvent::class => [
  50.                 ['onBookingDoneSendHomepageFeed'0],
  51.             ],
  52.             MemberCreatedEvent::class => [
  53.                 ['onRegistrationConfirmSendHomepageFeed'0],
  54.             ],
  55.             LivecamOnlineEvent::class => [
  56.                 ['onWebcamOnlineSendHomepageFeed'0],
  57.             ],
  58.             GuestbookEntryAcceptedEvent::class => [
  59.                 ['onNewGuestbookEntrySendHomepageFeed'0],
  60.             ],
  61.             GuestbookCommentChangedEvent::class => [
  62.                 ['onGuestbookCommentSendHomepageFeed'0],
  63.             ],
  64.             CommentCreatedEvent::class => [
  65.                 ['onContentCommentSendHomepageFeed'0],
  66.             ],
  67.             FriendshipConfirmedEvent::class => [
  68.                 ['onFriendshipAcceptSendHomepageFeed'0],
  69.             ],
  70.             UserGroupPostCreatedEvent::class => [
  71.                 ['onGroupPostSendHomepageFeed'0],
  72.             ],
  73.         ];
  74.     }
  75.     public function onContentPublishSendHomepageFeed(ContentPublishedEvent $event): void
  76.     {
  77.         $author $event->getAuthor();
  78.         if (null === $author) {
  79.             return;
  80.         }
  81.         $content $event->getContent();
  82.         if (!$content instanceof Content) {
  83.             return;
  84.         }
  85.         $feedItem $this->factory->contentPublishActivity($author$content);
  86.         $this->redis->publishToHomepage($feedItem);
  87.     }
  88.     public function onBlogEntryApproveSendHomepageFeed(BlogEntryUpdatedEvent $event): void
  89.     {
  90.         $entry $event->getBlogEntry();
  91.         if (!$entry->isPublic()) {
  92.             return;
  93.         }
  94.         $feedItem $this->factory->blogPostActivity($entry);
  95.         $this->redis->publishToHomepage($feedItem);
  96.     }
  97.     public function onLoginSendHomepageFeed(LoginCreatedEvent $event): void
  98.     {
  99.         return; // This is already done by ActivityFeedSubscriber->onLoginCreateActivityFeed
  100.     }
  101.     public function onProfileVisitSendHomepageFeed(ProfileVisitEvent $event): void
  102.     {
  103.         $feedItem $this->factory->profileVisitActivity($event->getVisitor(), $event->getProfileOwner());
  104.         $this->redis->publishToHomepage($feedItem);
  105.     }
  106.     public function onBookingDoneSendHomepageFeed(PaymentCreatedEvent $event): void
  107.     {
  108.         $payment $event->getPayment();
  109.         if (PaymentType::BOOKING !== $payment->getType()) {
  110.             return;
  111.         }
  112.         $feedItem $this->factory->bookingDoneActivity($payment);
  113.         $this->redis->publishToHomepage($feedItem);
  114.     }
  115.     public function onRegistrationConfirmSendHomepageFeed(MemberCreatedEvent $event): void
  116.     {
  117.         $member $event->getMember();
  118.         if (!$member) {
  119.             return;
  120.         }
  121.         $feedItem $this->factory->newRegistrationActivity($member);
  122.         $this->redis->publishToHomepage($feedItem);
  123.     }
  124.     public function onWebcamOnlineSendHomepageFeed(LivecamOnlineEvent $event): void
  125.     {
  126.         $member $event->getMember();
  127.         if (!$member) {
  128.             return;
  129.         }
  130.         $feedItem $this->factory->webcamOnlineActivity($member);
  131.         $this->redis->publishToHomepage($feedItem);
  132.     }
  133.     public function onNewGuestbookEntrySendHomepageFeed(GuestbookEntryAcceptedEvent $event): void
  134.     {
  135.         $feedItem $this->factory->guestbookEntryActivity($event->getEntry());
  136.         $this->redis->publishToHomepage($feedItem);
  137.     }
  138.     public function onGuestbookCommentSendHomepageFeed(GuestbookCommentChangedEvent $event): void
  139.     {
  140.         $feedItem $this->factory->guestbookCommentActivitySendHomepageFeed($event->getEntry());
  141.         $this->redis->publishToHomepage($feedItem);
  142.     }
  143.     public function onContentCommentSendHomepageFeed(CommentCreatedEvent $event): void
  144.     {
  145.         $feedItem $this->factory->contentCommentActivity($event->getComment());
  146.         $this->redis->publishToHomepage($feedItem);
  147.     }
  148.     public function onFriendshipAcceptSendHomepageFeed(FriendshipConfirmedEvent $event): void
  149.     {
  150.         $feedItem $this->factory->friendshipActivity($event->getFriendship());
  151.         $this->redis->publishToHomepage($feedItem);
  152.     }
  153.     public function onGroupPostSendHomepageFeed(UserGroupPostCreatedEvent $event): void
  154.     {
  155.         $feedItem $this->factory->groupActivity($event->getEntity());
  156.         $this->redis->publishToHomepage($feedItem);
  157.     }
  158. }