src/Controller/MainController.php line 44
<?php
namespace App\Controller;
use App\Entity\Card;
use App\Entity\Team;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Label\Label;
use Endroid\QrCode\Logo\Logo;
use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin;
use Endroid\QrCode\Writer\PngWriter;
use Endroid\QrCode\Encoding\Encoding;
use Endroid\QrCode\Color\Color;
class MainController extends AbstractController
{
#[Route('/login', name: 'login')]
public function login(Request $request, EntityManagerInterface $em): Response
{
$code = $request->request->get('code');
$teams = $em->getRepository(Team::class)->findAll();
foreach ($teams as $team) {
if ($team->getCode() == $code) {
$request->getSession()->set('login', $team->getId());
}
}
if ($request->getSession()->get('login', 0) > 0) {
return $this->index($request, $em);
}
return $this->render('login.html.twig');
}
#[Route('/', name: 'main')]
public function index(Request $request, EntityManagerInterface $em): Response
{
if ($request->getSession()->get('login', 0) <= 0) {
return $this->render('login.html.twig');
}
$team = $em->getRepository(Team::class)->find($request->getSession()->get('login'));
if (($team instanceof Team) === false) {
return $this->render('login.html.twig');
}
return $this->render('index.html.twig', [
'team' => $team
]);
}
#[Route('/card/{code}', name: 'card')]
public function card(Request $request, EntityManagerInterface $em): Response
{
if ($request->getSession()->get('login', 0) <= 0) {
return $this->render('login.html.twig');
}
/** @var Team $team */
$team = $em->getRepository(Team::class)->find($request->getSession()->get('login'));
if (($team instanceof Team) === false) {
return $this->render('login.html.twig');
}
/** @var Card $foundCard */
$foundCard = null;
foreach ($em->getRepository(Card::class)->findAll() as $card) {
if ($card->getCode() == $request->get('code')) {
$foundCard = $card;
}
}
$error = false;
$errorMessage = '';
if ($foundCard->getType() != 'unlock') {
if ($team->isLocked() === true && $foundCard->getType() !== 'unlock') {
$error = true;
$errorMessage = 'Je moet eerst naar de centrale post om door te mogen gaan';
} elseif ($team->getStatus() == 'forcePrevious') {
if ($team->getPrevious() != $foundCard->getId()) {
$error = true;
$errorMessage = 'Je moet eerst naar je vorige locatie gaan voor je door mag';
} else {
$team->setStatus('');
$em->persist($team);
$em->flush();
}
} elseif (in_array($foundCard->getType(), ['hint', 'hintText']) === false && $foundCard->getTeam()->count() > 0) {
$error = true;
$errorMessage = 'Deze kaart is al een keer gescanned door een team';
}
}
$teams = [];
if ($error === false) {
switch ($foundCard->getType()) {
case 'hint':
case 'hintText':
$team->setPrevious($foundCard->getId());
$em->persist($team);
$em->flush();
break;
case 'disableAll':
foreach ($em->getRepository(Team::class)->findAll() as $team) {
$team->setLocked(true);
$em->persist($team);
$em->flush();
}
break;
case 'forceLocation':
$team->setStatus('forcePrevious');
$em->persist($team);
$em->flush();
break;
case 'unlock':
$team->setLocked(false);
break;
case 'disableOne':
$teams = $em->getRepository(Team::class)->findAll();
break;
}
$foundCard->addTeam($team);
$em->persist($foundCard);
$em->flush();
}
return $this->render('card.html.twig', [
'card' => $foundCard,
'error' => $error,
'errorMessage' => $errorMessage,
'teams' => $teams
]);
}
#[Route('/lock-team/{teamId}/{cardId}', name: 'lockTeam')]
public function lockTeam(Request $request, EntityManagerInterface $em): Response
{
if ($request->getSession()->get('login', 0) <= 0) {
return $this->render('login.html.twig');
}
/** @var Team $team */
$team = $em->getRepository(Team::class)->find($request->getSession()->get('login'));
if (($team instanceof Team) === false) {
return $this->render('login.html.twig');
}
$cardUsedToLock = $em->getRepository(Card::class)->find($request->get('cardId'));
$teamToLock = $em->getRepository(Team::class)->find($request->get('teamId'));
if (($cardUsedToLock instanceof Card) === false || ($teamToLock instanceof Team) === false) {
return $this->index($request, $em);
}
$cardsLocking = $request->getSession()->get('cardsLocking', []);
if (in_array($cardUsedToLock->getId(), $cardsLocking)) {
return $this->index($request, $em);
}
$cardsLocking[] = $cardUsedToLock->getId();
$request->getSession()->set('cardsLocking', $cardsLocking);
$team->setLocked(true);
$em->persist($team);
$em->flush();
return $this->render('locked.html.twig', [
'team' => $team,
'card' => $cardUsedToLock,
]);
}
}