<?php
namespace App\Controller\Projets;
use App\Entity\Projets\Priorite;
use App\Entity\Projets\Tache;
use App\Form\Projets\PrioriteType;
use App\Library\Datatable\Util\Datatable;
use App\Security\Voter\EntityVoter;
use App\Service\Utilisateur\ColonneTableauService;
use Doctrine\ORM\EntityManagerInterface;
use JMS\Serializer\SerializerBuilder;
use Knp\Component\Pager\PaginatorInterface;
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 PrioriteController extends AbstractController
{
/**
* @Route("/projet/priorite/nouveau", name="dtc_priorite_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', []);
}
$priorite = new Priorite();
//$priorite->setUtilisateur($user);
$form = $this->createForm(PrioriteType::class, $priorite);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$em->persist($priorite);
$em->flush();
$this->addFlash(
'notice',
'Priorité ajoutée avec succès !'
);
return $this->redirectToRoute('dtc_priorite_liste');
} else {
$errors = $validator->validate($priorite);
}
}
return $this->render('Projets/Priorite/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors]);
}
/**
* @Route("/projet/priorite/modifier/{id}", name="dtc_priorite_modifier")
*/
public function modifierAction(Request $request, Priorite $priorite, 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', []);
}
//$priorite->setUtilisateur($user);
$form = $this->createForm(PrioriteType::class, $priorite);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, Priorite::class);
if ( ! $droit) {
$em->refresh($priorite);
return $this->redirectToRoute('dtc_priorite_modifier', ["id" => $priorite->getId()]);
}
if ($form->isValid()) {
$em->persist($priorite);
$em->flush();
$this->addFlash(
'notice',
'Etat modifiée avec succès !'
);
return $this->redirectToRoute('dtc_priorite_modifier', ["id" => $priorite->getId()]);
} else {
$errors = $validator->validate($priorite);
}
}
return $this->render('Projets/Priorite/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'priorite' => $priorite]);
}
/**
* @Route("/projet/priorite", name="dtc_priorite_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.');
$this->addFlash('warning', $translator->trans('Vous n\'avez pas les droits nécessaires pour accèder à cette 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(Priorite::class, "id")];
//$tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(2),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCProjetsBundle:Priorite","libelle"));
$this->datatable($datatable, $translator);
return $this->render('Projets/Priorite/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(Priorite::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_priorite_modifier',
],
],
1 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_priorite_modifier',
],
],
/*2 => array(
'view' => 'FO/DataTable/actions.html.twig',
'params' => array(
'edit_route' => 'dtc_priorite_modifier',
'objet' => 'DTCProjetsBundle:Priorite',
),
),*/
]
)
->setMultiple(
[
'delete' => [
'title' => $translator->trans('Non disponible'),
'route' => 'dtc_priorite_liste',
],
]
)
->setOrder("x.id", "desc")
->setSearch(true);
$datatable->setSearchFields([1]);
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/projet/priorite/grid", name="dtc_priorite_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/priorite/{tache}/{priorite}", name="dtc_priorite_changer")
*/
public function changePrioriteAction(Request $request, Tache $tache, Priorite $priorite = null, EntityManagerInterface $em)
{
$tache->setPriorite($priorite);
$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);
}
/**
* @Route("/projet/priorite/rechercher", name="dtc_priorite_recherche")
*/
public function rechercheAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, PaginatorInterface $paginator)
{
$q = $request->query->get('q');
$projet = $request->query->get('projet');
$repo = $em->getRepository(Priorite::class);
$results = $repo->getRecherchePriorite(trim($q), $projet);//à changer
$tabClient = [];
$pagination = $paginator->paginate(
$results, /* query NOT result */
$request->query->getInt('page', 1)/*page number*/,
10/*limit per page*/
);
$pagination_results = $pagination->getItems();
$option_placeholde = ["libelle" => $translator->trans("Sélectionnez"), "id" => ""];
if ($request->query->getInt('page', 1) == 1) {
array_unshift($pagination_results, $option_placeholde);
}
$pagination->setItems($pagination_results);
$serializer = SerializerBuilder::create()->build();
return JsonResponse::fromJsonString($serializer->serialize($pagination, 'json'));
}
}