src/Obs/Controller/TournamentAdminObsStreamController.php line 48

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Obs\Controller;
  4. use AndreaSprega\Bundle\BreadcrumbBundle\Annotation\Breadcrumb;
  5. use App\Core\Entity\Stream;
  6. use App\Core\Entity\Tournament;
  7. use App\Core\Form\Type\StreamFormType;
  8. use App\Core\Repository\StreamRepository;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\Form\FormInterface;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  16. /**
  17.  * @Route("/{_locale}/admin/tournament/{tournament}", name="app_admin_tournament_obs_")
  18.  */
  19. class TournamentAdminObsStreamController extends AbstractController
  20. {
  21.     private StreamRepository $streamRepository;
  22.     private EntityManagerInterface $entityManager;
  23.     private UrlGeneratorInterface $urlGenerator;
  24.     public function __construct(
  25.         StreamRepository $streamRepository,
  26.         EntityManagerInterface $entityManager,
  27.         UrlGeneratorInterface $urlGenerator
  28.     ) {
  29.         $this->streamRepository $streamRepository;
  30.         $this->entityManager $entityManager;
  31.         $this->urlGenerator $urlGenerator;
  32.     }
  33.     /**
  34.      * @Route("/obs-stream-settings", name="stream_settings", methods={"GET"})
  35.      * @Breadcrumb({
  36.      *   { "label" = "Home", "route" = "app_admin_home" },
  37.      *   { "label" = "Tournament list", "route" = "app_admin_tournament_list" },
  38.      *   { "label" = "$tournament.name" },
  39.      *   { "label" = "Streams" }
  40.      * })
  41.      */
  42.     public function obsStreamSettings(Request $requestTournament $tournament): Response
  43.     {
  44.         $streams $this->streamRepository->findBy(['tournament' => $tournament]);
  45.         return $this->render(
  46.             'obs/Admin/Tournament/stream_settings.html.twig',
  47.             [
  48.                 'tournament' => $tournament,
  49.                 //'api_url' => $apiUrl,
  50.                 'streams' => $streams,
  51.             ]
  52.         );
  53.     }
  54.     /**
  55.      * @Route("/stream/{stream}/edit", name="stream_edit", methods={"GET", "POST"})
  56.      * @Breadcrumb({
  57.      *   { "label" = "Home", "route" = "app_admin_home" },
  58.      *   { "label" = "Tournaments", "route" = "app_admin_tournament_list" },
  59.      *   { "label" = "$tournament.name" },
  60.      *   { "label" = "OBS Settings" }
  61.      * })
  62.      */
  63.     public function editStream(Request $requestTournament $tournamentStream $stream): Response
  64.     {
  65.         $form $this->createForm(StreamFormType::class, $stream);
  66.         $form->handleRequest($request);
  67.         $streamProcessResponse $this->processObsStream($form$tournament);
  68.         if ($streamProcessResponse !== null) {
  69.             return $streamProcessResponse;
  70.         }
  71.         return $this->render(
  72.             'obs/Admin/Tournament/edit_stream.html.twig',
  73.             [
  74.                 'tournament' => $tournament,
  75.                 'stream' => $stream,
  76.                 'form' => $form->createView(),
  77.             ]
  78.         );
  79.     }
  80.     private function processObsStream(FormInterface $formTournament $tournament): ?Response
  81.     {
  82.         if ($form->isSubmitted() && $form->isValid()) {
  83.             /** @var Stream $stream */
  84.             $stream $form->getData();
  85.             $this->entityManager->persist($stream);
  86.             $this->entityManager->flush();
  87.             $this->addFlash(
  88.                 'notice',
  89.                 "Your have saved something!"
  90.             );
  91.             return $this->redirectToRoute(
  92.                 'app_admin_tournament_obs_settings',
  93.                 [
  94.                     'tournament' => $tournament->getId(),
  95.                 ]
  96.             );
  97.         }
  98.         return null;
  99.     }
  100. }