src/Controller/CMS/CategorieController.php line 249

Open in your IDE?
  1. <?php
  2. namespace App\Controller\CMS;
  3. use App\Entity\CMS\Article;
  4. use App\Entity\CMS\ArticleCategorie;
  5. use App\Entity\CMS\Categorie;
  6. use App\Form\CMS\CategorieType;
  7. use App\Form\CMS\SupprimerCategorieType;
  8. use App\Library\Datatable\Util\Datatable;
  9. use App\Security\Voter\EntityVoter;
  10. use App\Service\FO\Logo;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use JMS\Serializer\SerializerBuilder;
  13. use Knp\Component\Pager\PaginatorInterface;
  14. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  15. use Symfony\Component\HttpFoundation\JsonResponse;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. use Symfony\Component\Validator\Validator\ValidatorInterface;
  20. use Symfony\Contracts\Translation\TranslatorInterface;
  21. class CategorieController extends AbstractController
  22. {
  23.     /**
  24.      * @Route("/cms/categorie/nouveau", name="dtc_cms_categorie_ajouter")
  25.      */
  26.     public function ajouterAction(Request $requestEntityManagerInterface $emLogo $logoServiceTranslatorInterface $translatorValidatorInterface $validator)
  27.     {
  28.         $categorie = new Categorie();
  29.         $user      $this->getUser();
  30.         //$categorie->setUtilisateur($user);
  31.         $form   $this->createForm(CategorieType::class, $categorie);
  32.         $errors "";
  33.         $form->handleRequest($request);
  34.         if ($form->isSubmitted()) {
  35.             $tokenP $request->request->get('tokenPicture');
  36.             if ($form->isValid()) {
  37.                 $em->persist($categorie);
  38.                 $em->flush();
  39.                 $logoService->sauvegarder($categorie'cms_categorie'$tokenP);
  40.                 $this->addFlash(
  41.                     'notice',
  42.                     $translator->trans('Catégorie ajoutée avec succès !')
  43.                 );
  44.                 return $this->redirectToRoute('dtc_cms_categorie_modifier', ["id" => $categorie->getId()]);
  45.             } else {
  46.                 $errors $validator->validate($categorie);
  47.             }
  48.         }
  49.         return $this->render('Cms/Categorie/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors]);
  50.     }
  51.     /**
  52.      * @Route("/cms/categorie/modifier/{id}", name="dtc_cms_categorie_modifier", requirements={"id"="\d+"})
  53.      */
  54.     public function modifierAction(Request   $requestCategorie $categorieEntityManagerInterface $emLogo $logoService
  55.                                    Datatable $datatableTranslatorInterface $translatorValidatorInterface $validator
  56.     ) {
  57.         $user $this->getUser();
  58.         //$categorie->setUtilisateur($user);
  59.         $form   $this->createForm(CategorieType::class, $categorie);
  60.         $errors "";
  61.         $form->handleRequest($request);
  62.         if ($form->isSubmitted()) {
  63.             $droit $this->isGranted(EntityVoter::UPDATECategorie::class);
  64.             if ( ! $droit) {
  65.                 return $this->redirectToRoute('dtc_cms_categorie_modifier', ["id" => $categorie->getId()]);
  66.             }
  67.             if ($form->isValid()) {
  68.                 $em->persist($categorie);
  69.                 $em->flush();
  70.                 $logoService->sauvegarder($categorie'cms_categorie');
  71.                 $this->addFlash(
  72.                     'notice',
  73.                     $translator->trans('Catégorie sauvegardé avec succès !')
  74.                 );
  75.                 return $this->redirectToRoute('dtc_cms_categorie_modifier', ["id" => $categorie->getId()]);
  76.             } else {
  77.                 $errors $validator->validate($categorie);
  78.             }
  79.         }
  80.         $this->datatableArticles($categorie$datatable$translator);
  81.         return $this->render('Cms/Categorie/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors'categorie' => $categorie]);
  82.     }
  83.     /**
  84.      * @Route("/cms/categorie/{page}", name="dtc_cms_categorie_liste", defaults={"page":1}, requirements={"page"="\d+"})
  85.      */
  86.     public function listerAction(Request $request$pageDatatable $datatableTranslatorInterface $translator)
  87.     {
  88.         $tableau_class_cellule   = [];
  89.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [0], "visible" => true"orderable" => false];
  90.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [1], "visible" => true];
  91.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [2], "visible" => true"orderable" => false];
  92.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [3], "visible" => true];
  93.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [4], "visible" => true];
  94.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [5], "visible" => true];
  95.         $tableau_class_cellule[] = ["className" => " colonne_id""targets" => [6], "visible" => true"orderable" => false];
  96.         $this->datatable($datatable$translator);
  97.         return $this->render('Cms/Categorie/lister.html.twig', ['name' => 'categorie''tableauClassColonne' => $tableau_class_cellule]);
  98.     }
  99.     /**
  100.      * set datatable configs
  101.      *
  102.      * @return \App\Library\Datatable\Util\Datatable
  103.      */
  104.     private function datatable(Datatable $datatableTranslatorInterface $translator)
  105.     {
  106.         $datatable->setEntity(Categorie::class, "x")
  107.                   ->setFields(
  108.                       [
  109.                           $translator->trans("ID")      => 'x.id',
  110.                           $translator->trans("Logo")    => 'x.logo',
  111.                           $translator->trans("Titre")   => 'x.titre',
  112.                           $translator->trans("Ordre")   => 'x.ordre',
  113.                           $translator->trans("Statut")  => 'x.statut',
  114.                           $translator->trans("Actions") => 'x.id',
  115.                           "_identifier_"                => 'x.id',
  116.                       ]
  117.                   )
  118.                   ->setWhere(
  119.                       'x.id != :id',
  120.                       ['id' => '1']
  121.                   )
  122.                   ->setRenderers(
  123.                       [
  124.                           => [
  125.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  126.                               'params' => [
  127.                                   'edit_route' => 'dtc_cms_categorie_modifier',
  128.                               ],
  129.                           ],
  130.                           => [
  131.                               'view'   => 'FO/DataTable/logo.html.twig',
  132.                               'params' => [
  133.                                   'edit_route' => 'dtc_cms_categorie_modifier',
  134.                               ],
  135.                           ],
  136.                           => [
  137.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  138.                               'params' => [
  139.                                   'edit_route' => 'dtc_cms_categorie_modifier',
  140.                               ],
  141.                           ],
  142.                           => [
  143.                               'view'   => 'FO/DataTable/statut.html.twig',
  144.                               'params' => [
  145.                                   'edit_route' => 'dtc_cms_categorie_changer_statut',
  146.                               ],
  147.                           ],
  148.                           => [
  149.                               'view'   => 'FO/DataTable/actions.html.twig',
  150.                               'params' => [
  151.                                   'edit_route' => 'dtc_cms_categorie_modifier',
  152.                                   'objet'      => Categorie::class,
  153.                               ],
  154.                           ],
  155.                       ]
  156.                   )
  157.                   ->setMultiple(
  158.                       [
  159.                           'delete' => [
  160.                               'title' => 'Non disponible',
  161.                               'route' => 'dtc_cms_categorie_liste',
  162.                           ],
  163.                       ]
  164.                   )
  165.                   ->setOrder("x.id""desc")
  166.                   ->setSearch(true)
  167.                   ->setSearchFields([2]);
  168.         //$datatable->setSearchFields(array(0,2));
  169.         return $datatable;
  170.     }
  171.     /**
  172.      * Grid action
  173.      * @return Response
  174.      */
  175.     /**
  176.      * @Route("/cms/categorie/grid", name="dtc_cms_categorie_liste_grid")
  177.      */
  178.     public function gridAction(Request $requestDatatable $datatableTranslatorInterface $translator)
  179.     {
  180.         return $this->datatable($datatable$translator)->execute();
  181.     }
  182.     /**
  183.      * @Route("/cms/categorie/recherche", name="dtc_cms_categorie_recherche")
  184.      */
  185.     public function rechercheAction(Request $requestEntityManagerInterface $emPaginatorInterface $paginator)
  186.     {
  187.         $q      $request->query->get('q');
  188.         $parent $request->query->get('par');
  189.         $repo    $em->getRepository(Categorie::class);
  190.         $results $repo->getRechercheCategorie($q$parent);
  191.         $pagination $paginator->paginate(
  192.             $results/* query NOT result */
  193.             $request->query->getInt('page'1/*page number*/,
  194.             10 /*limit per page*/
  195.         );
  196.         $pagination_results $pagination->getItems();
  197.         $option_placeholde  = ["libelle" => "Sélectionnez""id" => ""];
  198.         if ($request->query->getInt('page'1) == 1) {
  199.             array_unshift($pagination_results$option_placeholde);
  200.         }
  201.         $pagination->setItems($pagination_results);
  202.         $serializer SerializerBuilder::create()->build();
  203.         return JsonResponse::fromJsonString($serializer->serialize($pagination'json'));
  204.     }
  205.     /**
  206.      * @Route("", name="")
  207.      */
  208.     public function listerCategorieDossierArticleAction(Request $request$article null$mode ""EntityManagerInterface $em)
  209.     {
  210.         $repo_article           $em->getRepository(Article::class);
  211.         $article                $repo_article->find($article);
  212.         $repo_categorie         $em->getRepository(Categorie::class);
  213.         $repo_article_categorie $em->getRepository(ArticleCategorie::class);
  214.         $nbCategoriesEnfant = [];
  215.         $articleCategories  = [];
  216.         if (is_object($article)) {
  217.             //$categoriesArticle = $repo_article_categorie->findByArticle($articleId);
  218.             foreach ($article->getArticleCategorie() as $categorieArticle) {
  219.                 $boucler             true;
  220.                 $articleCategories[] = $categorieArticle->getCategorie()->getId();
  221.                 if (is_object($categorieArticle->getCategorie()->getCategorieParent()) and $categorieArticle->getCategorie()->getCategorieParent()->getId() > 1) {
  222.                     $parent $categorieArticle->getCategorie()->getCategorieParent();
  223.                     while ($boucler) {
  224.                         if ( ! array_key_exists($parent->getId(), $nbCategoriesEnfant)) {
  225.                             $nbCategoriesEnfant[$parent->getId()] = 1;
  226.                         } else {
  227.                             $nbCategoriesEnfant[$parent->getId()]++;
  228.                         }
  229.                         if (is_object($parent->getCategorieParent()) and $parent->getCategorieParent()->getId() > 1) {
  230.                             $parent $parent->getCategorieParent();
  231.                         } else {
  232.                             $boucler false;
  233.                         }
  234.                     }
  235.                 }
  236.             }
  237.         }
  238.         //print_r($nbCategoriesEnfant);
  239.         //\Doctrine\Common\Util\Debug::dump($articleId);
  240.         $categories $repo_categorie->findBy(['categorieParent' => 1], ['titre' => 'ASC']);//CategorieParent
  241.         return $this->render('Cms/Categorie/lister-dossier.html.twig', [
  242.             'nbCategoriesEnfant' => $nbCategoriesEnfant,
  243.             'categories'         => $categories,
  244.             'article'            => $article,
  245.             'categoriesArticle'  => $articleCategories,
  246.             'mode'               => $mode,
  247.         ]);
  248.     }
  249.     /**
  250.      * @Route("/cms/categorie/supprimer/{id}", name="dtc_cms_categorie_supprimer", requirements={"id"="\d+"})
  251.      */
  252.     public function supprimerAction(Request $requestCategorie $objetEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  253.     {
  254.         $titre_modal $translator->trans("Demande de confirmation");
  255.         $user        $this->getUser();
  256.         $message     '';
  257.         //Verifier si la categorie a des produits
  258.         if (count($objet->getCategoriesEnfant()) > 0) {
  259.             $message .= 'La catégorie n\'est pas supprimable car elle contient des produits.';
  260.         }
  261.         //Verifier si la categorie a des categories enfantes
  262.         if (count($objet->getCategoriesEnfant()) > 0) {
  263.             if ($message != '') {
  264.                 $message .= ' ';
  265.             }
  266.             $message .= 'La catégorie n\'est pas supprimable car elle contient des catégories enfants';
  267.         }
  268.         $form   $this->createForm(SupprimerCategorieType::class, $objet);
  269.         $errors "";
  270.         $form->handleRequest($request);
  271.         if ($form->isSubmitted()) {
  272.             if ($form->isValid()) {
  273.                 $em->remove($objet);
  274.                 $em->flush();
  275.                 $this->addFlash(
  276.                     'notice',
  277.                     $translator->trans('Catégorie supprimée avec succès !')
  278.                 );
  279.                 $url $this->generateUrl('dtc_categorie_liste');
  280.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  281.             } else {
  282.                 $errors $validator->validate($objet);
  283.                 $rendu  $this->renderView('Cms/Categorie/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors'message' => $message]);
  284.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  285.             }
  286.         }
  287.         $rendu $this->renderView('Cms/Categorie/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors'message' => $message]);
  288.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  289.     }
  290.     /**
  291.      * set datatable configs
  292.      *
  293.      * @return \App\Library\Datatable\Util\Datatable
  294.      */
  295.     private function datatableArticles($categorieDatatable $datatableTranslatorInterface $translator)
  296.     {
  297.         $datatable
  298.             ->setDatatableId('dta-produits')
  299.             ->setEntity(Article::class, "x")
  300.             ->setFields(
  301.                 [
  302.                     $translator->trans("ID")      => 'x.id',
  303.                     $translator->trans("Titre")   => 'x.titre',
  304.                     $translator->trans("Actions") => 'x.id',
  305.                     "_identifier_"                => 'x.id',
  306.                 ]
  307.             )
  308.             ->addJoin('x.articleCategorie''ac'\Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  309.             ->setWhere(
  310.                 'ac.categorie = :categorie',
  311.                 ['categorie' => $categorie]
  312.             )
  313.             ->setRenderers(
  314.                 [
  315.                     => [
  316.                         'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  317.                         'params' => [
  318.                             'edit_route' => 'dtc_cms_article_modifier',
  319.                         ],
  320.                     ],
  321.                     => [
  322.                         'view'   => 'FO/DataTable/actions.html.twig',
  323.                         'params' => [
  324.                             'edit_route' => 'dtc_cms_article_modifier',
  325.                             'objet' => Article::class,
  326.                         ],
  327.                     ],
  328.                 ]
  329.             )
  330.             ->setOrder("x.id""desc")
  331.             ->setSearch(true)//->setSearchFields(array(2,3,4))
  332.         ;
  333.         //$datatable->setSearchFields(array(0,2));
  334.         return $datatable;
  335.     }
  336.     /**
  337.      * Grid action
  338.      * @return Response
  339.      */
  340.     /**
  341.      * @Route("/cms/categorie/produits/grid/{id}", name="dtc_cms_categorie_articles_liste_grid", requirements={"id"="\d+"})
  342.      */
  343.     public function gridArticlesAction(Request $requestCategorie $categorieDatatable $datatableTranslatorInterface $translator)
  344.     {
  345.         //$this->datatableProduits($categorie);
  346.         return $this->datatableArticles($categorie$datatable$translator)->execute();
  347.     }
  348.     /**
  349.      * @Route("/cms/categorie/statut/{id}", name="dtc_cms_categorie_changer_statut", requirements={"id"="\d+"})
  350.      */
  351.     public function changeStatutAction(Request $requestCategorie $categorieEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  352.     {
  353.         if ($categorie->getStatut() == 1) {
  354.             $categorie->setStatut(0);
  355.         } else {
  356.             $categorie->setStatut(1);
  357.         }
  358.         $em->persist($categorie);
  359.         $em->flush();
  360.         $headers = [
  361.             'Content-Type'                 => 'application/json',
  362.             'Access-Control-Allow-Origin'  => '*',
  363.             'Access-Control-Allow-Methods' => 'POST',
  364.         ];
  365.         return new JsonResponse(['data' => '1'], 200$headers);
  366.     }
  367. }