<?php
namespace App\Controller\Email;
use App\Entity\Email\Categorie;
use App\Form\Email\CategorieType;
use App\Form\Email\SupprimerCategorieType;
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 CategorieController extends AbstractController
{
/**
* @Route("/email-categorie/nouveau", name="dtc_email_categorie_ajouter")
*/
public function ajouterAction(Request $request, $type = "", EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$titre_modal = $translator->trans("Nouvelle catégorie");
$repo_objet = $em->getRepository(Categorie::class);
$get = $request->query->all();
$categorie = new Categorie();
$user = $this->getUser();
$categorie->setUtilisateur($user);
$form = $this->createForm(CategorieType::class, $categorie);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$em->persist($categorie);
$em->flush();
$retour = ['rendu' => '', 'valide' => '1', 'url' => ''];
if (array_key_exists('table', $get) && $get["table"] != "") {
$retour['type'] = 'recharger_datatable';
$retour['id_datatable'] = $get["table"];
return new JsonResponse($retour);
} else {
$this->addFlash('notice', $translator->trans('Catégorie ajoutée avec succès !'));
return new JsonResponse($retour);
}
} else {
$errors = $validator->validate($categorie);
$rendu = $this->renderView(
'Email/Categorie/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'type' => $type, 'categorie' => $categorie]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView('Email/Categorie/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'type' => $type, 'categorie' => $categorie]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
//return $this->render('Email/Categorie/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type));
}
/**
* @Route("/email-categorie/modifier/{id}", name="dtc_email_categorie_modifier")
*/
public function modifierAction(Request $request, Categorie $objet, $type = "", EntityManagerInterface $em, TranslatorInterface $translator,
ValidatorInterface $validator
) {
$categorie = $objet;
$titre_modal = $translator->trans("Modifier la catégorie");
$get = $request->query->all();
$user = $this->getUser();
$categorie->setUtilisateur($user);
$form = $this->createForm(CategorieType::class, $categorie);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, Categorie::class);
/*
if(!$droit) {
$rendu = $this->renderView('Email/Categorie/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type,'objet'=>$objet));
return new Response(json_encode(array('rendu'=>$rendu,'valide'=>'0','url'=>'','titre'=>$titre_modal)), 200, array('Content-Type'=>'application/json'));
}
*/
if ($form->isValid()) {
$em->persist($categorie);
$em->flush();
$retour = ['rendu' => '', 'valide' => '1', 'url' => ''];
if (array_key_exists('table', $get) && $get["table"] != "") {
$retour['type'] = 'recharger_datatable';
$retour['id_datatable'] = $get["table"];
return new JsonResponse($retour);
} else {
$this->addFlash('notice', $translator->trans('Catégorie modifiée avec succès !'));
return new JsonResponse($retour);
}
} else {
$errors = $validator->validate($categorie);
$rendu = $this->renderView(
'Email/Categorie/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'type' => $type, 'objet' => $objet, 'categorie' => $categorie]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView(
'Email/Categorie/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'type' => $type, 'objet' => $objet, 'categorie' => $categorie]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/*
public function ajouterAction(Request $request, Request $request, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$user = $this->getUser();
$categorie = new Categorie;
$form = $this->createForm(new CategorieType, $categorie);
$validator = $validator;
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$em = $em;
$em->persist($categorie);
$em->flush();
$this->addFlash('notice',$translator->trans('Catégorie ajoutée avec succès !'));
return $this->redirectToRoute('dtc_email_categorie_liste');
}
else {
$errors = $validator->validate($categorie);
}
}
return $this->render('Email/Categorie/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors));
}
*/
/**
* @Route("/email-categorie/supprimer/{id}", name="dtc_email_categorie_supprimer")
*/
public function supprimerAction(Request $request, Categorie $objet, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$categorie = $objet;
$titre_modal = $translator->trans("Demande de confirmation");
$user = $this->getUser();
$get = $request->query->all();
$form = $this->createForm(SupprimerCategorieType::class, $categorie);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$em->remove($categorie);
$em->flush();
$url = "";
if (array_key_exists('table', $get) && $get["table"] != "") {
return new JsonResponse(
['rendu' => '', 'valide' => '1', 'url' => $url, 'type' => 'recharger_datatable', 'id_datatable' => $get["table"]],
200,
['Content-Type' => 'application/json']
);
} else {
$this->addFlash('notice', $translator->trans('Catégorie supprimée avec succès !'));
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
}
} else {
$errors = $validator->validate($categorie);
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/*
public function modifierAction(Request $request, Categorie $categorie, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$user = $this->getUser();
$request = $request;
$form = $this->createForm(new CategorieType, $categorie);
$validator = $validator;
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$serviceDroits = $this->get('dtc.droit.utilisateur');
$droit = $this->isGranted("DTCEmailBundle:Categorie",EntityVoter::UPDATE);
if(!$droit and 1!=1) {
return $this->redirectToRoute('dtc_email_categorie_modifier',array("id"=>$categorie->getId()));
}
if ($form->isValid()) {
$em = $em;
$em->persist($categorie);
$em->flush();
$this->addFlash(
'notice',
$translator->trans('Catégorie sauvegardée avec succès !')
);
return $this->redirectToRoute('dtc_email_categorie_modifier',array("id"=>$categorie->getId()));
}
else {
$errors = $validator->validate($categorie);
}
}
return $this->render('Email/Categorie/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'categorie'=>$categorie));
}
*/
/**
* @Route("/email-categorie/", name="dtc_email_categorie_liste")
*/
public function listerAction(Request $request, EntityManagerInterface $em, ColonneTableauService $serviceColonneTableau, Datatable $datatable, TranslatorInterface $translator)
{
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [0], "visible" => false, "orderable" => false];
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [1], "visible" => $serviceColonneTableau->getColonneUtilisateur(Categorie::class, "id")];
$tableau_class_cellule[] = [
"orderable" => true,
"className" => "colonne_id",
"targets" => [2],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Categorie::class, "libelle"),
];
$tableau_class_cellule[] = [
"orderable" => true,
"className" => "colonne_id",
"targets" => [3],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Categorie::class, "sujet"),
];
$tableau_class_cellule[] = [
"orderable" => true,
"className" => "colonne_id",
"targets" => [4],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Categorie::class, "message"),
];
$tableau_class_cellule[] = ["orderable" => false, "className" => "colonne_id", "targets" => [5], "visible" => true];
$this->datatable($datatable, $translator);
return $this->render('Email/Categorie/lister.html.twig', ['tableauClassColonne' => $tableau_class_cellule]);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatable(Datatable $datatable, TranslatorInterface $translator)
{
$datatable->setEntity(Categorie::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Libellé") => 'x.libelle',
$translator->trans("Catégorie parente") => 'cp.libelle',
$translator->trans("Statut") => 'x.statut',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.categorieParent', 'cp', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_email_categorie_modifier',
],
],
3 => [
'view' => 'FO/DataTable/statut.html.twig',
'params' => [
'edit_route' => 'dtc_email_categorie_changer_statut',
],
],
4 => [
'view' => 'FO/DataTable/actions_modal.html.twig',
'params' => [
'edit_route' => 'dtc_email_categorie_modifier',
'supprimer_route' => 'dtc_email_categorie_supprimer',
'type' => "",
'entite' => 'categorie',
'table' => 'dta-emails-categorie',
'objet' => Categorie::class,
'width_modal' => 800,
],
],
]
)
->setMultiple(
[
'delete' => [
'title' => $translator->trans('Non disponible'),
'route' => '',
],
]
)
->setOrder("x.id", "asc")
->setSearch(true)
->setSearchFields([1, 2]);
//$datatable->setSearchFields(array(0,2));
return $datatable;
}
/**
* @Route("/email-categorie/grid", name="dtc_email_categorie_liste_grid")
*/
public function gridAction(Request $request, Datatable $datatable, TranslatorInterface $translator)
{
return $this->datatable($datatable, $translator)->execute();
}
/**
* @Route("/email-variable/statut/{id}", name="dtc_email_variable_changer_statut")
* @Route("/email-categorie/statut/{id}", name="dtc_email_categorie_changer_statut")
*/
public function changeStatutAction(Request $request, Categorie $categorie, EntityManagerInterface $em)
{
if ($categorie->getStatut() == 1) {
$categorie->setStatut(0);
} else {
$categorie->setStatut(1);
}
$em->persist($categorie);
$em->flush();
$em->refresh($categorie);
if ($this->getParameter('domaine_prestashop') != '') {
@fopen('http://'.$this->getParameter('domaine_prestashop').'/67PHEAuaps4P4h3/categories.php?id_categorie='.$categorie->getId(), 'r');
}
$headers = [
'Content-Type' => 'application/json',
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Methods' => 'POST',
];
return new JsonResponse(['data' => '1'], 200, $headers);
}
/**
* @Route("/email-categorie/recherche", name="dtc_email_categorie_recherche")
*/
public function rechercheAction(Request $request, EntityManagerInterface $em, PaginatorInterface $paginator)
{
$q = $request->query->get('q');
$parent = $request->query->get('parent');
if ($request->query->get('parent') != '') {
$parent = true;
} else {
$parent = false;
}
$repo = $em->getRepository(Categorie::class);
$results = $repo->getRechercheCategorie($q, 500, $parent);
$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" => "Choisir", "id" => "0"];
array_unshift($pagination_results, $option_placeholde);
$pagination->setItems($pagination_results);
$serializer = SerializerBuilder::create()->build();
return JsonResponse::fromJsonString($serializer->serialize($pagination, 'json'));
}
}