src/Jockeyexchange/EventSubscriber/JockeyexchangeMercureSubscriber.php line 33

Open in your IDE?
  1. <?php
  2. namespace App\Jockeyexchange\EventSubscriber;
  3. use App\Jockeyexchange\Event\JockeyexchangeRacedayAttendEvent;
  4. use App\Jockeyexchange\Event\JockeyexchangeRacedayAttendEvents;
  5. use App\Jockeyexchange\Service\JockeyexchangeService;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\HttpFoundation\RequestStack;
  8. use Symfony\Component\Mercure\HubInterface;
  9. use Symfony\Component\Mercure\Update;
  10. class JockeyexchangeMercureSubscriber implements EventSubscriberInterface
  11. {
  12.   public function __construct(
  13.     protected HubInterface $hub,
  14.     protected \Twig\Environment $twig,
  15.     protected RequestStack $requestStack,
  16.     protected JockeyexchangeService $jockeyexchangeService
  17.   ) {
  18.   }
  19.   public static function getSubscribedEvents()
  20.   {
  21.     return [
  22.         JockeyexchangeRacedayAttendEvents::RACEDAY_ATTEND => 'racedayAttend',
  23.         // JockeyexchangeRacedayAttendEvents::RACEDAY_CANCEL => 'racedayCancel',
  24.         // JockeyexchangeRacedayAttendEvents::RACE_ATTEND => 'raceAttend',
  25.         // JockeyexchangeRacedayAttendEvents::RACE_CANCEL => 'raceCancel',
  26.     ];
  27.   }
  28.   public function racedayAttend(JockeyexchangeRacedayAttendEvent $event)
  29.   {
  30.     $raceday $event->getRaceday();
  31.     $attendedRaces $event->getAttendedRaces();
  32.     $profile $event->getProfile();
  33.     $racedayAttendees $this->jockeyexchangeService->getOtherJockeyRacedayAttendees($raceday);
  34.     $html $this->twig->render('/jockeyexchange/streams/raceday_list_stream.html.twig', [
  35.       'raceday' => $raceday,
  36.       'user' => $profile,
  37.       'otherRacedayAttendees' => $racedayAttendees,
  38.     ]);
  39.     $this->hub->publish(new Update(sprintf($event->getTopic(), $profile->getId()), $htmlfalse));
  40.   }
  41. }