<?php
namespace App\Controller\Projets;
use App\Entity\Projets\Reference;
use App\Entity\Projets\Tache;
use App\Form\Projets\ReferenceType;
use App\Library\Datatable\Util\Datatable;
use App\Security\Voter\EntityVoter;
use App\Service\Utilisateur\ColonneTableauService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class ReferenceController extends AbstractController
{
/**
* @Route("/projet/reference/nouveau", name="dtc_reference_ajouter")
*/
public function ajouterAction(Request $request, EntityManagerInterface $em, ValidatorInterface $validator)
{
$user = $this->getUser();
if ( ! is_object($user) || ! is_object($user->getType()) || $user->getType()->getId() != "1") {
//throw new AccessDeniedException('This user does not have access to this section.');
return $this->redirectToRoute('dtcfo_homepage', []);
}
$reference = new Reference();
//$reference->setUtilisateur($user);
$form = $this->createForm(ReferenceType::class, $reference);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$em->persist($reference);
$em->flush();
$this->addFlash(
'notice',
'Référence ajoutée avec succès !'
);
return $this->redirectToRoute('dtc_reference_liste');
} else {
$errors = $validator->validate($reference);
}
}
return $this->render('Projets/Reference/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors]);
}
/**
* @Route("/projet/reference/modifier/{id}", name="dtc_reference_modifier")
*/
public function modifierAction(Request $request, Reference $reference, EntityManagerInterface $em, ValidatorInterface $validator)
{
$user = $this->getUser();
if ( ! is_object($user) || ! is_object($user->getType()) || $user->getType()->getId() != "1") {
//throw new AccessDeniedException('This user does not have access to this section.');
return $this->redirectToRoute('dtcfo_homepage', []);
}
//$reference->setUtilisateur($user);
$form = $this->createForm(ReferenceType::class, $reference);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, Reference::class);
if ( ! $droit) {
$em->refresh($reference);
return $this->redirectToRoute('dtc_reference_modifier', ["id" => $reference->getId()]);
}
if ($form->isValid()) {
$em->persist($reference);
$em->flush();
$this->addFlash(
'notice',
'Reference modifiée avec succès !'
);
return $this->redirectToRoute('dtc_reference_modifier', ["id" => $reference->getId()]);
} else {
$errors = $validator->validate($reference);
}
}
return $this->render('Projets/Reference/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'reference' => $reference]);
}
/**
* @Route("/projet/reference", name="dtc_reference_liste")
*/
public function listerAction(Request $request, ColonneTableauService $serviceColonneTableau, Datatable $datatable, TranslatorInterface $translator)
{
$user = $this->getUser();
if ( ! is_object($user) || ! is_object($user->getType()) || $user->getType()->getId() != "1") {
//throw new AccessDeniedException('This user does not have access to this section.');
return $this->redirectToRoute('dtcfo_homepage', []);
}
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [0], "visible" => false, "orderable" => false];
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [1], "visible" => $serviceColonneTableau->getColonneUtilisateur(Reference::class, "id")];
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [2], "visible" => $serviceColonneTableau->getColonneUtilisateur(Reference::class, "libelle")];
$this->datatable($datatable, $translator);
return $this->render('Projets/Reference/lister.html.twig', ['tableauClassColonne' => $tableau_class_cellule]);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatable(Datatable $datatable, TranslatorInterface $translator)
{
$user = $this->getUser();
if ( ! is_object($user) || ! is_object($user->getType()) || $user->getType()->getId() != "1") {
//throw new AccessDeniedException('This user does not have access to this section.');
return $this->redirectToRoute('dtcfo_homepage', []);
}
$datatable->setEntity(Reference::class, "x")
->setFields(
[
"ID" => 'x.id',
$translator->trans("Libellé") => 'x.libelle',
"Actions" => 'x.id',
"_identifier_" => 'x.id',
]
)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_reference_modifier',
],
],
1 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_reference_modifier',
],
],
2 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
'edit_route' => 'dtc_reference_modifier',
'objet' => Reference::class,
],
],
]
)
->setMultiple(
[
'delete' => [
'title' => $translator->trans('Non disponible'),
'route' => 'dtc_reference_liste',
],
]
)
->setOrder("x.id", "desc")
->setSearch(true);
$datatable->setSearchFields([1]);
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/projet/reference/grid", name="dtc_reference_liste_grid")
*/
public function gridAction(Request $request, Datatable $datatable, TranslatorInterface $translator)
{
$user = $this->getUser();
if ( ! is_object($user) || ! is_object($user->getType()) || $user->getType()->getId() != "1") {
//throw new AccessDeniedException('This user does not have access to this section.');
return $this->redirectToRoute('dtcfo_homepage', []);
}
return $this->datatable($datatable, $translator)->execute();
}
/**
* @Route("/projet/reference/{tache}/{reference}", name="dtc_reference_changer")
*/
public function changeReferenceAction(Request $request, Tache $tache, Reference $reference = null, EntityManagerInterface $em)
{
$tache->setReference($reference);
$em->persist($tache);
$em->flush();
$headers = [
'Content-Type' => 'application/json',
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Methods' => 'POST',
];
return new JsonResponse(['data' => '1'], 200, $headers);
}
}