src/Controller/DashboardCompetitionController.php line 88

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  8. use Symfony\Component\Form\FormError;
  9. use App\Entity\Event;
  10. use App\Entity\Competition;
  11. use App\Entity\Participant;
  12. use App\Form\Type\CompetitionFormType;
  13. class DashboardCompetitionController extends AbstractController {
  14.     /**
  15.      * @Route("/dashboard/event/{slug}/competitions", name="dashboard_competition_index")
  16.      */
  17.     public function index(EntityManagerInterface $em$slug) {
  18.         $event $em->getRepository(Event::class)->findOneBy(['slug' => $slug]);
  19.         if (null === $event) {
  20.             return $this->redirectToRoute('dashboard_index');
  21.         }
  22.         return $this->render('dashboard/competition/index.html.twig', [
  23.                     'event' => $event
  24.         ]);
  25.     }
  26.     /**
  27.      * @Route("/dashboard/event/{slug}/competition/add", name="dashboard_competition_create")
  28.      */
  29.     public function create(Request $requestEntityManagerInterface $em$slug) {
  30.         $event $em->getRepository(Event::class)->findOneBy(['slug' => $slug]);
  31.         if (null === $event) {
  32.             return $this->redirectToRoute('dashboard_index');
  33.         }
  34.         $competition = new Competition();
  35.         $form $this->createForm(CompetitionFormType::class, $competition);
  36.         $form->handleRequest($request);
  37.         if ($form->isSubmitted() && $form->isValid()) {
  38.             $image $form->get('image')->getData();
  39.             if ($image) {
  40.                 $newFilename uniqid() . '.' $image->guessExtension();
  41.                 try {
  42.                     $image->move(
  43.                             $this->getParameter('upload_directory'), $newFilename
  44.                     );
  45.                 } catch (FileException $e) {
  46.                     $form->get('image')->addError(new FormError($e->getMessage()));
  47.                     return $this->render('dashboard/competition/create.html.twig', [
  48.                                 'event' => $event,
  49.                                 'competition' => $competition,
  50.                                 'form' => $form->createView()
  51.                     ]);
  52.                 }
  53.                 $competition->setPicture($newFilename);
  54.             }
  55.             // save changes to db
  56.             $competition->setEvent($event);
  57.             $em->persist($competition);
  58.             $em->flush();
  59.             // set success flash message
  60.             $this->get('session')->getFlashBag()->set('success''Competition successfully created!');
  61.             // redirect to listing page
  62.             return $this->redirectToRoute('dashboard_competition_index', ['slug' => $slug]);
  63.         }
  64.         return $this->render('dashboard/competition/create.html.twig', [
  65.                     'event' => $event,
  66.                     'competition' => $competition,
  67.                     'form' => $form->createView()
  68.         ]);
  69.     }
  70.     /**
  71.      * @Route("/dashboard/event/{slug}/competition/{competitionSlug}/edit", name="dashboard_competition_edit")
  72.      */
  73.     public function edit(Request $requestEntityManagerInterface $em$slug$competitionSlug) {
  74.         $event $em->getRepository(Event::class)->findOneBy(['slug' => $slug]);
  75.         if (null === $event) {
  76.             return $this->redirectToRoute('dashboard_index');
  77.         }
  78.         $competition $em->getRepository(Competition::class)->findOneBy(['slug' => $competitionSlug]);
  79.         if (null === $competition) {
  80.             return $this->redirectToRoute('dashboard_competition_index', ['slug' => $slug]);
  81.         }
  82.         $form $this->createForm(CompetitionFormType::class, $competition);
  83.         $form->handleRequest($request);
  84.         if ($form->isSubmitted() && $form->isValid()) {
  85.             $image $form->get('image')->getData();
  86.             if ($image) {
  87.                 $newFilename uniqid() . '.' $image->guessExtension();
  88.                 try {
  89.                     $image->move(
  90.                             $this->getParameter('upload_directory'), $newFilename
  91.                     );
  92.                 } catch (FileException $e) {
  93.                     $form->get('image')->addError(new FormError($e->getMessage()));
  94.                     return $this->render('dashboard/competition/create.html.twig', [
  95.                                 'event' => $event,
  96.                                 'competition' => $competition,
  97.                                 'form' => $form->createView()
  98.                     ]);
  99.                 }
  100.                 $competition->setPicture($newFilename);
  101.             }
  102.             $em->persist($competition);
  103.             $em->flush();
  104.             // set success flash message
  105.             $this->get('session')->getFlashBag()->set('success''Competition successfully updated!');
  106.             // redirect to homepage
  107.             return $this->redirectToRoute('dashboard_competition_index', ['slug' => $slug]);
  108.         }
  109.         return $this->render('dashboard/competition/edit.html.twig', [
  110.                     'event' => $event,
  111.                     'competition' => $competition,
  112.                     'form' => $form->createView()
  113.         ]);
  114.     }
  115.     /**
  116.      * @Route("/dashboard/competition/{slug}/update/status", name="dashboard_competition_update_status")
  117.      */
  118.     public function updateStatus(EntityManagerInterface $em$slug) {
  119.         $competition $em->getRepository(Competition::class)->findOneBy(['slug' => $slug]);
  120.         if (null !== $competition) {
  121.             // check current event status
  122.             if ($competition->isActive()) {
  123.                 $active false;
  124.             } else {
  125.                 $active true;
  126.             }
  127.             // save new status to DB
  128.             $competition->setActive($active);
  129.             $em->persist($competition);
  130.             $em->flush();
  131.             // set flash message
  132.             $this->get('session')->getFlashBag()->set('success'sprintf('Competition successfully %s!'$active 'enabled' 'disabled'));
  133.         }
  134.         return $this->redirectToRoute('dashboard_index');
  135.     }
  136.     /**
  137.      * @Route("/dashboard/event/{slug}/competition/{competitionSlug}/delete", name="dashboard_competition_delete")
  138.      */
  139.     public function delete(EntityManagerInterface $em$slug$competitionSlug) {
  140.         $event $em->getRepository(Event::class)->findOneBy(['slug' => $slug]);
  141.         if (null === $event) {
  142.             return $this->redirectToRoute('dashboard_index');
  143.         }
  144.         $competition $em->getRepository(Competition::class)->findOneBy(['slug' => $competitionSlug]);
  145.         if (null === $competition) {
  146.             return $this->redirectToRoute('dashboard_competition_index', ['slug' => $slug]);
  147.         }
  148.         $em->remove($competition);
  149.         $em->flush();
  150.         // set flash message
  151.         $this->get('session')->getFlashBag()->set('success''Competition successfully deleted!');
  152.         return $this->redirectToRoute('dashboard_competition_index', ['slug' => $slug]);
  153.     }
  154.     /**
  155.      * @Route("/dashboard/event/{slug}/competition/{competitionSlug}/participants", name="dashboard_competition_participants")
  156.      */
  157.     public function participants(EntityManagerInterface $em$slug$competitionSlug) {
  158.         $event $em->getRepository(Event::class)->findOneBy(['slug' => $slug]);
  159.         if (null === $event) {
  160.             return $this->redirectToRoute('dashboard_index');
  161.         }
  162.         $competition $em->getRepository(Competition::class)->findOneBy(['slug' => $competitionSlug]);
  163.         if (null === $competition) {
  164.             return $this->redirectToRoute('dashboard_competition_index', ['slug' => $slug]);
  165.         }
  166.         return $this->render('dashboard/competition/participants.html.twig', [
  167.                     'event' => $event,
  168.                     'competition' => $competition
  169.         ]);
  170.     }
  171.     /**
  172.      * @Route("/dashboard/event/{slug}/competition/{competitionSlug}/participant/{hash}/delete", name="dashboard_competition_participant_delete")
  173.      */
  174.     public function deleteParticipant(EntityManagerInterface $em$slug$competitionSlug$hash) {
  175.         $event $em->getRepository(Event::class)->findOneBy(['slug' => $slug]);
  176.         if (null === $event) {
  177.             return $this->redirectToRoute('dashboard_index');
  178.         }
  179.         $competition $em->getRepository(Competition::class)->findOneBy(['slug' => $competitionSlug]);
  180.         if (null === $competition) {
  181.             return $this->redirectToRoute('dashboard_competition_index', ['slug' => $slug]);
  182.         }
  183.         $participant $em->getRepository(Participant::class)->findOneBy(['hash' => $hash]);
  184.         if (null === $participant) {
  185.             return $this->redirectToRoute('dashboard_competition_participants', ['slug' => $slug'competitionSlug' => $competitionSlug]);
  186.         }
  187.         $em->remove($participant);
  188.         $em->flush();
  189.         // set flash message
  190.         $this->get('session')->getFlashBag()->set('success''Participant successfully deleted!');
  191.         return $this->redirectToRoute('dashboard_competition_participants', ['slug' => $slug'competitionSlug' => $competitionSlug]);
  192.     }
  193. }