<?php
namespace App\Controller;
use App\Entity\Entity;
use App\Entity\Form;
use App\Entity\FormUserAnswers;
use App\Repository\AnimalRepository;
use App\Repository\CategoryRepository;
use App\Repository\FormRepository;
use App\Repository\MapObjectRepository;
use App\Repository\MapObjectTypeRepository;
use App\Repository\UserEntityRepository;
use App\Serialization\BigListSerialization;
use App\Serialization\FormSerialization;
use Nzo\UrlEncryptorBundle\Annotations\ParamDecryptor;
use Nzo\UrlEncryptorBundle\Encryptor\Encryptor;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
class FormController extends AbstractController
{
#[Route(path: 'booking', name: 'booking_index')]
public function index(): Response
{
return $this->render('form/index.html.twig');
}
#[Route(path: 'forms', name: 'forms_index')]
public function indexForms(FormRepository $formRepository): Response
{
$user = $this->getUser();
$forms = $formRepository->findAllByUser($user);
// TODO: SuperAdmin
$undefined = [];
$categories = [];
foreach ($forms as $form) {
if ($form->getCategory() == null) {
$undefined[] = $form;
} else {
$category = $form->getCategory();
if (!array_key_exists($category->getId(), $categories)) {
$categories[$category->getId()] = [];
$categories[$category->getId()]["name"] = $category->getName();
$categories[$category->getId()]["forms"] = [];
}
$categories[$category->getId()]["forms"][] = $form;
}
}
$results = [];
foreach ($categories as $categoryTab) {
$results[] = $categoryTab;
}
//sort categories
usort($results, function ($a, $b) {
return $a['name'] <=> $b['name'];
});
$results[] = [
"name" => "Undefined",
"forms" => $undefined
];
// Recover all forms for user
return $this->render('form/indexForms.html.twig', [
'forms' => $results
]);
}
#[Route(path: 'form/{id}', name: 'form_detail')]
#[ParamDecryptor(["id"])]
public function formDetail(Form $form, Request $request, MapObjectRepository $mapObjectRepository, Encryptor $encryptor): Response
{
$mapObject = $request->query->get('mapObject', null);
if($mapObject){
$mapObject = $mapObjectRepository->findOneBy(array('id' => $encryptor->decrypt($mapObject)));
}
return $this->render('form/detail.html.twig', [
'form' => $form,
'mapObject' => $mapObject ? $mapObject->getId() : null
]);
}
}