<?php
declare(strict_types=1);
namespace App\Obs\Controller;
use AndreaSprega\Bundle\BreadcrumbBundle\Annotation\Breadcrumb;
use App\Core\Entity\Stream;
use App\Core\Entity\Tournament;
use App\Core\Form\Type\StreamFormType;
use App\Core\Repository\StreamRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
/**
* @Route("/{_locale}/admin/tournament/{tournament}", name="app_admin_tournament_obs_")
*/
class TournamentAdminObsStreamController extends AbstractController
{
private StreamRepository $streamRepository;
private EntityManagerInterface $entityManager;
private UrlGeneratorInterface $urlGenerator;
public function __construct(
StreamRepository $streamRepository,
EntityManagerInterface $entityManager,
UrlGeneratorInterface $urlGenerator
) {
$this->streamRepository = $streamRepository;
$this->entityManager = $entityManager;
$this->urlGenerator = $urlGenerator;
}
/**
* @Route("/obs-stream-settings", name="stream_settings", methods={"GET"})
* @Breadcrumb({
* { "label" = "Home", "route" = "app_admin_home" },
* { "label" = "Tournament list", "route" = "app_admin_tournament_list" },
* { "label" = "$tournament.name" },
* { "label" = "Streams" }
* })
*/
public function obsStreamSettings(Request $request, Tournament $tournament): Response
{
$streams = $this->streamRepository->findBy(['tournament' => $tournament]);
return $this->render(
'obs/Admin/Tournament/stream_settings.html.twig',
[
'tournament' => $tournament,
//'api_url' => $apiUrl,
'streams' => $streams,
]
);
}
/**
* @Route("/stream/{stream}/edit", name="stream_edit", methods={"GET", "POST"})
* @Breadcrumb({
* { "label" = "Home", "route" = "app_admin_home" },
* { "label" = "Tournaments", "route" = "app_admin_tournament_list" },
* { "label" = "$tournament.name" },
* { "label" = "OBS Settings" }
* })
*/
public function editStream(Request $request, Tournament $tournament, Stream $stream): Response
{
$form = $this->createForm(StreamFormType::class, $stream);
$form->handleRequest($request);
$streamProcessResponse = $this->processObsStream($form, $tournament);
if ($streamProcessResponse !== null) {
return $streamProcessResponse;
}
return $this->render(
'obs/Admin/Tournament/edit_stream.html.twig',
[
'tournament' => $tournament,
'stream' => $stream,
'form' => $form->createView(),
]
);
}
private function processObsStream(FormInterface $form, Tournament $tournament): ?Response
{
if ($form->isSubmitted() && $form->isValid()) {
/** @var Stream $stream */
$stream = $form->getData();
$this->entityManager->persist($stream);
$this->entityManager->flush();
$this->addFlash(
'notice',
"Your have saved something!"
);
return $this->redirectToRoute(
'app_admin_tournament_obs_settings',
[
'tournament' => $tournament->getId(),
]
);
}
return null;
}
}