src/EventSubscriber/Tournament/TournamentPlayerRegisteredEventSubscriber.php line 20

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber\Tournament;
  3. use App\Entity\Tournament;
  4. use App\Event\Tournament\TournamentPlayerRegisteredEvent;
  5. use App\Event\Tournament\TournamentRegistrationClosedEvent;
  6. use App\Helper\TournamentHelper;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
  10. class TournamentPlayerRegisteredEventSubscriber implements EventSubscriberInterface
  11. {
  12.     public function __construct(
  13.         private EntityManagerInterface $entityManager, private EventDispatcherInterface $eventDispatcher
  14.     ) {
  15.     }
  16.     public function onTournamentPlayerRegisteredEvent(TournamentPlayerRegisteredEvent $tournamentPlayerRegisteredEvent): void
  17.     {
  18.         $tournament $tournamentPlayerRegisteredEvent->getTournament();
  19.         // the tournament is still open (not full) so we don't need to go further
  20.         if (TournamentHelper::isRegistrationOpen($tournament)) {
  21.             return;
  22.         }
  23.         $tournament
  24.             ->setStatus(Tournament::REGISTRATION_CLOSED_STATUS)
  25.         ;
  26.         $this->entityManager->flush();
  27.         $this->eventDispatcher->dispatch(new TournamentRegistrationClosedEvent($tournament));
  28.     }
  29.     public static function getSubscribedEvents(): array
  30.     {
  31.         return [
  32.             TournamentPlayerRegisteredEvent::class => 'onTournamentPlayerRegisteredEvent',
  33.         ];
  34.     }
  35. }