<?php
namespace App\Controller\Utilisateur;
use App\Entity\Utilisateur\Droit;
use App\Entity\Utilisateur\TypeUtilisateur;
use App\Entity\Utilisateur\Utilisateur;
use App\Form\Utilisateur\TypeUtilisateurType;
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\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class TypeUtilisateurController extends AbstractController
{
/**
* @Route("", name="")
*/
public function dupliquerAction(Request $request, TypeUtilisateur $typeUtilisateur, EntityManagerInterface $em)
{
$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', []);
}
$typeUtilisateur_duplique = clone $typeUtilisateur;
//$article_duplique->setId(null);
$typeUtilisateur_duplique->setNom("COPIE ".$typeUtilisateur_duplique->getNom());
$em->persist($typeUtilisateur_duplique);
$em->flush();
$this->addFlash(
'notice',
'Type d\'utilisateur dupliqué avec succès !'
);
return $this->redirectToRoute('dtc_client_liste');
}
/**
* @Route("/type/utilisateur/nouveau", name="dtc_type_utilisateur_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', []);
}
$typeUtilisateur = new TypeUtilisateur;
$typeUtilisateur->setUtilisateur($user);
$form = $this->createForm(TypeUtilisateurType::class, $typeUtilisateur);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$em->persist($typeUtilisateur);
$em->flush();
$this->addFlash(
'notice',
'Type d\'utilisateur ajouté avec succès !'
);
return $this->redirectToRoute('dtc_type_utilisateur_liste');
} else {
$errors = $validator->validate($typeUtilisateur);
}
}
return $this->render('Utilisateur/TypeUtilisateur/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors]);
}
/**
* @Route("/type/utilisateur/modifier/{id}", name="dtc_type_utilisateur_modifier")
*/
public function modifierAction(Request $request, TypeUtilisateur $typeUtilisateur, EntityManagerInterface $em, ValidatorInterface $validator,
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', []);
}
$typeUtilisateur->setUtilisateur($user);
$form = $this->createForm(TypeUtilisateurType::class, $typeUtilisateur);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, TypeUtilisateur::class);
if ( ! $droit) {
return $this->redirectToRoute('dtc_type_utilisateur_modifier', ["id" => $typeUtilisateur->getId()]);
}
if ($form->isValid()) {
$em->persist($typeUtilisateur);
$em->flush();
$this->addFlash(
'notice',
'Type d\'utilisateur sauvegardé avec succès !'
);
return $this->redirectToRoute('dtc_type_utilisateur_modifier', ["id" => $typeUtilisateur->getId()]);
} else {
$errors = $validator->validate($typeUtilisateur);
}
}
$this->datatableUtilisateurs($datatable, $translator, $typeUtilisateur);
$this->datatableDroits($datatable, $translator, $typeUtilisateur);
return $this->render('Utilisateur/TypeUtilisateur/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'typeUtilisateur' => $typeUtilisateur]);
}
/**
* @Route("/type/utilisateur/", name="dtc_type_utilisateur_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(TypeUtilisateur::class, "id"),
];
$tableau_class_cellule[] = [
"className" => "colonne_id",
"targets" => [2],
"visible" => $serviceColonneTableau->getColonneUtilisateur(TypeUtilisateur::class, "libelle"),
];
$this->datatable($datatable, $translator);
return $this->render('Utilisateur/TypeUtilisateur/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(TypeUtilisateur::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Libellé") => 'x.libelle',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_type_utilisateur_modifier',
],
],
1 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_type_utilisateur_modifier',
'typeDocument' => '',
],
],
2 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
'edit_route' => 'dtc_type_utilisateur_modifier',
'objet' => TypeUtilisateur::class,
],
],
]
)
->setMultiple(
[
'delete' => [
'title' => $translator->trans('Non disponible'),
'route' => 'dtc_client_liste',
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([1]);
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/type/utilisateur/grid", name="dtc_type_utilisateur_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("", name="")
*/
public function rechercheAction(Request $request, EntityManagerInterface $em, PaginatorInterface $paginator)
{
$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', []);
}
$q = $request->query->get('q');
$repo = $em->getRepository(TypeUtilisateur::class);
$results = $repo->getRechercheTypeUtilisateur($q);
$pagination = $paginator->paginate(
$results, /* query NOT result */
$request->query->getInt('page', 1)/*page number*/,
10/*limit per page*/
);
$serializer = SerializerBuilder::create()->build();
return JsonResponse::fromJsonString($serializer->serialize($pagination, 'json'));
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatableVehicules(Datatable $datatable, TranslatorInterface $translator, $typeUtilisateur)
{
$datatable->setDatatableId('dta-vehicules')
->setEntity("DTCVehiculesBundle:VehiculeTypeUtilisateur", "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Libellé") => 'x.libelle',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->setWhere(
'x.client = :client',
['client' => $typeUtilisateur]
)
->setRenderers(
[
2 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
'edit_route' => 'dtc_vehicule_client_modifier',
],
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([1]);
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("", name="")
*/
public function gridVehiculesAction(Request $request, TypeUtilisateur $typeUtilisateur, Datatable $datatable, TranslatorInterface $translator)
{
return $this->datatableVehicules($datatable, $translator, $typeUtilisateur)->execute();
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/type/utilisateur/utilisateurs/grid/{id}", name="dtc_type_utilisateur_utilisateur_liste_grid")
*/
public function gridUtilisateursAction(Request $request, TypeUtilisateur $typeUtilisateur, Datatable $datatable, TranslatorInterface $translator)
{
return $this->datatableUtilisateurs($datatable, $translator, $typeUtilisateur)->execute();
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatableUtilisateurs(Datatable $datatable, TranslatorInterface $translator, $typeUtilisateur)
{
$datatable->setEntity(Utilisateur::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Réf") => 'x.reference',
$translator->trans("Email") => 'x.email',
$translator->trans("Prénom") => 'x.prenom',
$translator->trans("Nom") => 'x.nom',
$translator->trans("Téléphone") => 'x.telephone',
$translator->trans("Type") => 't.libelle',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.type', 't', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setWhere(
'x.type = :type',
['type' => $typeUtilisateur]
)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_utilisateur_modifier',
],
],
1 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_utilisateur_modifier',
'typeDocument' => '',
],
],
7 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
'edit_route' => 'dtc_utilisateur_modifier',
'objet' => Utilisateur::class,
],
],
]
)
->setMultiple(
[
'delete' => [
'title' => $translator->trans('Non disponible'),
'route' => 'dtc_utilisateur_liste',
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([1, 2, 3]);
return $datatable;
}
public function CreerDroits(TypeUtilisateur $typeUtilisateur, EntityManagerInterface $em)
{
$repo_droit = $em->getRepository(Droit::class);
$listeDroits = $repo_droit->getListeDroits();
if (count($listeDroits) > 0) {
foreach ($listeDroits as $d) {
//echo "<div>ID ".$d->getId()."</div>";
$droit_existe = $repo_droit->findOneBy(["typesUtilisateur" => $typeUtilisateur, "parent" => $d]);
if ( ! is_object($droit_existe)) {
$d_clone = clone $d;
$d_clone->setTypesUtilisateur($typeUtilisateur);
$d_clone->setParent($d);
$em->persist($d_clone);
} else {
$droit_existe->setStatut($d->getStatut());
$em->persist($droit_existe);
}
}
$em->flush();
}
//echo "AAA ".$typeUtilisateur->getId();
//exit;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/type/utilisateur/droits/grid/{id}", name="dtc_type_utilisateur_droits_liste_grid")
*/
public function gridDroitsAction(Request $request, TypeUtilisateur $typeUtilisateur, EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
// $this->CreerDroits($typeUtilisateur, $em);
return $this->datatableDroits($datatable, $translator, $typeUtilisateur)->execute();
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatableDroits(Datatable $datatable, TranslatorInterface $translator, $typeUtilisateur)
{
$datatable->setEntity(Droit::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Libellé") => 'x.libelle',
$translator->trans("Voir") => 'x.voir',
$translator->trans("Ajouter") => 'x.ajouter',
$translator->trans("Modifier") => 'x.modifier',
$translator->trans("Supprimer") => 'x.supprimer',
$translator->trans("Exporter") => 'x.exporter',
//$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.typesUtilisateur', 't', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setWhere(
'x.typesUtilisateur = :type',
['type' => $typeUtilisateur]
)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_droit_modifier',
],
],
1 => [
'view' => 'FO/DataTable/libelle_droit.html.twig',
'params' => [],
],
/*
5 => array(
'view' => 'FO/DataTable/booleen.html.twig',
),
*
*/
2 => [
'view' => 'FO/DataTable/statut_permissions.html.twig',
'params' => [
'edit_route' => 'dtc_droit_statut',
'action' => 'voir',
'typeUtilisateur' => $typeUtilisateur,
],
],
3 => [
'view' => 'FO/DataTable/statut_permissions.html.twig',
'params' => [
'edit_route' => 'dtc_droit_statut',
'action' => 'ajouter',
'typeUtilisateur' => $typeUtilisateur,
],
],
4 => [
'view' => 'FO/DataTable/statut_permissions.html.twig',
'params' => [
'edit_route' => 'dtc_droit_statut',
'action' => 'modifier',
'typeUtilisateur' => $typeUtilisateur,
],
],
5 => [
'view' => 'FO/DataTable/statut_permissions.html.twig',
'params' => [
'edit_route' => 'dtc_droit_statut',
'action' => 'supprimer',
'typeUtilisateur' => $typeUtilisateur,
],
],
6 => [
'view' => 'FO/DataTable/statut_permissions.html.twig',
'params' => [
'edit_route' => 'dtc_droit_statut',
'action' => 'exporter',
'typeUtilisateur' => $typeUtilisateur,
],
],
7 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
//'edit_route' => 'dtc_droit_modifier',
//'objet' => 'DTCUtilisateurBundle:Droit',
],
],
]
)
->setOrder("x.position", "asc")
->setWhere("x.statut = :statut AND t.id =:typeUtilisateur", ["statut" => "1", "typeUtilisateur" => $typeUtilisateur])
->setSearch(true)
->setSearchFields([1]);
return $datatable;
}
}