src/Core/Controller/Admin/CompetitionAdminController.php line 133

Open in your IDE?
  1. <?php
  2. namespace App\Core\Controller\Admin;
  3. use AndreaSprega\Bundle\BreadcrumbBundle\Annotation\Breadcrumb;
  4. use App\Core\Entity\Competition;
  5. use App\Core\Entity\Tournament;
  6. use App\Core\Form\Type\CompetitionFromType;
  7. use App\Core\Repository\CompetitionRepository;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Symfony\Component\Form\FormInterface;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. /**
  14.  * @Route("/{_locale}/admin/tournament/{tournament}/competition", name="app_admin_competition_")
  15.  */
  16. class CompetitionAdminController extends AbstractAdminController
  17. {
  18.     private EntityManagerInterface $entityManager;
  19.     private CompetitionRepository $competitionRepository;
  20.     public function __construct(EntityManagerInterface $entityManagerCompetitionRepository $competitionRepository)
  21.     {
  22.         $this->entityManager $entityManager;
  23.         $this->competitionRepository $competitionRepository;
  24.     }
  25.     /**
  26.      * @Route("/list", name="list", methods={"GET"})
  27.      * @Breadcrumb({
  28.      *   { "label" = "Home", "route" = "app_admin_home" },
  29.      *   { "label" = "Tournaments list", "route" = "app_admin_tournament_list" },
  30.      *   { "label" = "$tournament.name" },
  31.      *   { "label" = "Competitions list" }
  32.      * })
  33.      *
  34.      * @param Request $request
  35.      * @param Tournament $tournament
  36.      * @return Response
  37.      */
  38.     public function index(Request $requestTournament $tournament): Response
  39.     {
  40.         //TODO: fetch all competitions - show a list. Include action buttons for easier access. Think of CRUD actions.
  41.         $competitions $this->competitionRepository->findBy(['tournament' => $tournament]);
  42.         //TODO: what if competition is null
  43.         return $this->render(
  44.             'admin/Competition/list.html.twig',
  45.             [
  46.                 'user' => $this->getUser(),
  47.                 'competition_list' => $competitions,
  48.                 'tournament' => $tournament,
  49.             ]
  50.         );
  51.     }
  52.     /**
  53.      * @Route("/add", name="add", methods={"GET", "POST"})
  54.      * @Breadcrumb({
  55.      *   { "label" = "Home", "route" = "app_admin_home" },
  56.      *   { "label" = "Tournaments list", "route" = "app_admin_tournament_list" },
  57.      *   { "label" = "$tournament.name" },
  58.      *   { "label" = "Competitions list", "route" = "app_admin_competition_list", "params" = {"tournament" = "$tournament.id"} },
  59.      *   { "label" = "Add competition" }
  60.      * })
  61.      *
  62.      * @param Request $request
  63.      * @param Tournament $tournament
  64.      * @return Response
  65.      */
  66.     public function add(Request $requestTournament $tournament): Response
  67.     {
  68.         $redirectIfEditIsDisabled $this->disableEditIfTournamentActive($tournament);
  69.         if ($redirectIfEditIsDisabled) {
  70.             return $redirectIfEditIsDisabled;
  71.         }
  72.         $form $this->createForm(CompetitionFromType::class);
  73.         $form->handleRequest($request);
  74.         $addProcessResponse $this->processCompetition($form$tournament);
  75.         if ($addProcessResponse !== null) {
  76.             return $addProcessResponse;
  77.         }
  78.         return $this->render(
  79.             'admin/Competition/add.html.twig',
  80.             [
  81.                 'form' => $form->createView(),
  82.                 'tournament' => $tournament,
  83.             ]
  84.         );
  85.     }
  86.     /**
  87.      * @Route("/{competition}/delete", name="delete", methods={"GET"})
  88.      *
  89.      * @param Request $request
  90.      * @param Tournament $tournament
  91.      * @param Competition $competition
  92.      * @return Response
  93.      */
  94.     public function delete(Request $requestTournament $tournamentCompetition $competition): Response
  95.     {
  96.         $redirectIfEditIsDisabled $this->disableEditIfTournamentActive($tournament);
  97.         if ($redirectIfEditIsDisabled) {
  98.             return $redirectIfEditIsDisabled;
  99.         }
  100.         $this->entityManager->remove($competition);
  101.         $this->entityManager->flush();
  102.         return $this->redirectToRoute('app_admin_competition_list', ['tournament' => $tournament->getId()]);
  103.     }
  104.     /**
  105.      * @Route("/{competition}/edit", name="edit", methods={"GET", "POST"})
  106.      * @Breadcrumb({
  107.      *   { "label" = "Home", "route" = "app_admin_home" },
  108.      *   { "label" = "Tournaments list", "route" = "app_admin_tournament_list" },
  109.      *   { "label" = "$tournament.name" },
  110.      *   { "label" = "Competitions list", "route" = "app_admin_competition_list", "params" = {"tournament" = "$tournament.id"} },
  111.      *   { "label" = "Edit competition" }
  112.      * })
  113.      *
  114.      * @param Request $request
  115.      * @param Tournament $tournament
  116.      * @param Competition $competition
  117.      * @return Response
  118.      */
  119.     public function edit(Request $requestTournament $tournamentCompetition $competition): Response
  120.     {
  121.         $redirectIfEditIsDisabled $this->disableEditIfTournamentActive($tournament);
  122.         if ($redirectIfEditIsDisabled) {
  123.             return $redirectIfEditIsDisabled;
  124.         }
  125.         $form $this->createForm(CompetitionFromType::class, $competition);
  126.         $form->handleRequest($request);
  127.         $addProcessResponse $this->processCompetition($form$tournament);
  128.         if ($addProcessResponse !== null) {
  129.             return $addProcessResponse;
  130.         }
  131.         return $this->render(
  132.             'admin/Competition/edit.html.twig',
  133.             [
  134.                 'form' => $form->createView(),
  135.                 'competition' => $competition,
  136.                 'tournament' => $tournament,
  137.             ]
  138.         );
  139.     }
  140.     private function processCompetition(FormInterface $formTournament $tournament): ?Response
  141.     {
  142.         if ($form->isSubmitted() && $form->isValid()) {
  143.             /** @var Competition $competition */
  144.             $competition $form->getData();
  145.             $competition->setTournament($tournament);
  146.             $this->entityManager->persist($competition);
  147.             $this->entityManager->flush();
  148.             $this->addFlash(
  149.                 'notice',
  150.                 "Your have saved a competition: {$competition->getId()} {$competition->getName()}"
  151.             );
  152.             return $this->redirectToRoute(
  153.                 'app_admin_competition_list',
  154.                 [
  155.                     'tournament' => $tournament->getId(),
  156.                 ]
  157.             );
  158.         }
  159.         return null;
  160.     }
  161. }