src/Controller/MainController.php line 42

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Card;
  4. use App\Entity\Team;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. use Endroid\QrCode\QrCode;
  11. use Endroid\QrCode\Label\Label;
  12. use Endroid\QrCode\Logo\Logo;
  13. use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin;
  14. use Endroid\QrCode\Writer\PngWriter;
  15. use Endroid\QrCode\Encoding\Encoding;
  16. use Endroid\QrCode\Color\Color;
  17. class MainController extends AbstractController
  18. {
  19.     #[Route('/login'name'login')]
  20.     public function login(Request $requestEntityManagerInterface $em): Response
  21.     {
  22.         $code $request->request->get('code');
  23.         $teams $em->getRepository(Team::class)->findAll();
  24.         foreach ($teams as $team) {
  25.             if ($team->getCode() == $code) {
  26.                 $request->getSession()->set('login'$team->getId());
  27.             }
  28.         }
  29.         if ($request->getSession()->get('login'0) > 0) {
  30.             return $this->index($request$em);
  31.         }
  32.         return $this->render('login.html.twig');
  33.     }
  34.     #[Route('/'name'main')]
  35.     public function index(Request $requestEntityManagerInterface $em): Response
  36.     {
  37.         if ($request->getSession()->get('login'0) <= 0) {
  38.             return $this->render('login.html.twig');
  39.         }
  40.         $team $em->getRepository(Team::class)->find($request->getSession()->get('login'));
  41.         if (($team instanceof Team) === false) {
  42.             return $this->render('login.html.twig');
  43.         }
  44.         return $this->render('index.html.twig', [
  45.             'team' => $team
  46.         ]);
  47.     }
  48.     #[Route('/card/{code}'name'card')]
  49.     public function card(Request $requestEntityManagerInterface $em): Response
  50.     {
  51.         if ($request->getSession()->get('login'0) <= 0) {
  52.             return $this->render('login.html.twig');
  53.         }
  54.         /** @var Team $team */
  55.         $team $em->getRepository(Team::class)->find($request->getSession()->get('login'));
  56.         if (($team instanceof Team) === false) {
  57.             return $this->render('login.html.twig');
  58.         }
  59.         /** @var Card $foundCard */
  60.         $foundCard null;
  61.         foreach ($em->getRepository(Card::class)->findAll() as $card) {
  62.             if ($card->getCode() == $request->get('code')) {
  63.                 $foundCard $card;
  64.             }
  65.         }
  66.         $error false;
  67.         $errorMessage '';
  68.         if ($foundCard->getType() != 'unlock') {
  69.             if ($team->isLocked() === true && $foundCard->getType() !== 'unlock') {
  70.                 $error true;
  71.                 $errorMessage 'Je moet eerst naar de centrale post om door te mogen gaan';
  72.             } elseif ($team->getStatus() == 'forcePrevious') {
  73.                 if ($team->getPrevious() != $foundCard->getId()) {
  74.                     $error true;
  75.                     $errorMessage 'Je moet eerst naar je vorige locatie gaan voor je door mag';
  76.                 } else {
  77.                     $team->setStatus('');
  78.                     $em->persist($team);
  79.                     $em->flush();
  80.                 }
  81.             } elseif (in_array($foundCard->getType(), ['hint''hintText']) === false && $foundCard->getTeam()->count() > 0) {
  82.                 $error true;
  83.                 $errorMessage 'Deze kaart is al een keer gescanned door een team';
  84.             }
  85.         }
  86.         $teams = [];
  87.         if ($error === false) {
  88.             switch ($foundCard->getType()) {
  89.                 case 'hint':
  90.                 case 'hintText':
  91.                     $team->setPrevious($foundCard->getId());
  92.                     $em->persist($team);
  93.                     $em->flush();
  94.                     break;
  95.                 case 'disableAll':
  96.                     foreach ($em->getRepository(Team::class)->findAll() as $team) {
  97.                         $team->setLocked(true);
  98.                         $em->persist($team);
  99.                         $em->flush();
  100.                     }
  101.                     break;
  102.                 case 'forceLocation':
  103.                     $team->setStatus('forcePrevious');
  104.                     $em->persist($team);
  105.                     $em->flush();
  106.                     break;
  107.                 case 'unlock':
  108.                     $team->setLocked(false);
  109.                     break;
  110.                 case 'disableOne':
  111.                     $teams $em->getRepository(Team::class)->findAll();
  112.                     break;
  113.             }
  114.             $foundCard->addTeam($team);
  115.             $em->persist($foundCard);
  116.             $em->flush();
  117.         }
  118.         return $this->render('card.html.twig', [
  119.             'card' => $foundCard,
  120.             'error' => $error,
  121.             'errorMessage' => $errorMessage,
  122.             'teams' => $teams
  123.         ]);
  124.     }
  125.     #[Route('/lock-team/{teamId}/{cardId}'name'lockTeam')]
  126.     public function lockTeam(Request $requestEntityManagerInterface $em): Response
  127.     {
  128.         if ($request->getSession()->get('login'0) <= 0) {
  129.             return $this->render('login.html.twig');
  130.         }
  131.         /** @var Team $team */
  132.         $team $em->getRepository(Team::class)->find($request->getSession()->get('login'));
  133.         if (($team instanceof Team) === false) {
  134.             return $this->render('login.html.twig');
  135.         }
  136.         $cardUsedToLock $em->getRepository(Card::class)->find($request->get('cardId'));
  137.         $teamToLock $em->getRepository(Team::class)->find($request->get('teamId'));
  138.         if (($cardUsedToLock instanceof Card) === false || ($teamToLock instanceof Team) === false) {
  139.             return $this->index($request$em);
  140.         }
  141.         $cardsLocking $request->getSession()->get('cardsLocking', []);
  142.         if (in_array($cardUsedToLock->getId(), $cardsLocking)) {
  143.             return $this->index($request$em);
  144.         }
  145.         $cardsLocking[] = $cardUsedToLock->getId();
  146.         $request->getSession()->set('cardsLocking'$cardsLocking);
  147.         $team->setLocked(true);
  148.         $em->persist($team);
  149.         $em->flush();
  150.         return $this->render('locked.html.twig', [
  151.             'team' => $team,
  152.             'card' => $cardUsedToLock,
  153.         ]);
  154.     }
  155. }