src/Timeline/EventSubscriber/TimelineMercureSubscriber.php line 50

Open in your IDE?
  1. <?php
  2. namespace App\Timeline\EventSubscriber;
  3. use App\Timeline\Event\TimelinePostDeletedEvent;
  4. use App\Timeline\Event\TimelinePostEditedEvent;
  5. use App\Timeline\Event\TimelinePostEvents;
  6. use App\Timeline\Event\TimelinePostLikedEvent;
  7. use App\Timeline\Event\TimelinePostPublishedEvent;
  8. use App\Timeline\Event\TimelinePostSharedEvent;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Symfony\Component\HttpFoundation\RequestStack;
  11. use Symfony\Component\Mercure\HubInterface;
  12. use Symfony\Component\Mercure\Update;
  13. class TimelineMercureSubscriber implements EventSubscriberInterface
  14. {
  15.   public function __construct(
  16.     protected HubInterface $hub,
  17.     protected \Twig\Environment $twig,
  18.     protected RequestStack $requestStack
  19.   ) {
  20.   }
  21.   public static function getSubscribedEvents()
  22.   {
  23.     return [
  24.         TimelinePostEvents::PUBLISHED => 'postPublished',
  25.         TimelinePostEvents::EDITED => 'postEdited',
  26.         TimelinePostEvents::DELETED => 'postDeleted',
  27.         TimelinePostEvents::LIKED => 'postLiked',
  28.         TimelinePostEvents::DISLIKED => 'postLiked',
  29.     ];
  30.   }
  31.   public function postPublished(TimelinePostPublishedEvent $event)
  32.   {
  33.     $post $event->post;
  34.     $html $this->twig->render('network/event/timeline-post/published.stream.twig', [
  35.       'post' => $post,
  36.     ]);
  37.     $targets = [$post->getProfile(), ...$post->getShowPostAt()];
  38.     foreach ($targets as $target) {
  39.       $this->hub->publish(new Update(sprintf('timeline-posts-%s'$target->getId()), $html));
  40.     }
  41.   }
  42.   public function postEdited(TimelinePostEditedEvent $event)
  43.   {
  44.     $post $event->post;
  45.     $html $this->twig->render('network/event/timeline-post/edited.stream.twig', [
  46.       'post' => $post,
  47.     ]);
  48.     $this->hub->publish(new Update($event->getTopic(), $html));
  49.   }
  50.   public function postDeleted(TimelinePostDeletedEvent $event)
  51.   {
  52.     $postId $event->postId;
  53.     $html $this->twig->render('network/event/timeline-post/deleted.stream.twig', [
  54.       'postId' => $postId,
  55.     ]);
  56.     $this->hub->publish(new Update($event->getTopic(), $html));
  57.   }
  58.   public function postLiked(TimelinePostLikedEvent $event)
  59.   {
  60.     $post $event->post;
  61.     $html $this->twig->render('network/event/timeline-post/liked.stream.twig', [
  62.       'post' => $post,
  63.     ]);
  64.     $this->hub->publish(new Update($event->getTopic(), $html));
  65.   }
  66. }