src/Controller/Admin/MenuController.php line 43

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Admin;
  3. use App\Entity\Menu;
  4. use App\Repository\Admin\MenuRepository;
  5. use App\Service\SearchHelper;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Doctrine\Common\Collections\Criteria;
  12. /**
  13.  * Admin Menu Controller.
  14.  * @Route("/admin/menu/")
  15.  * @IsGranted("ROLE_ADMIN")
  16.  */
  17. class MenuController extends AbstractController {
  18.     private $urls = [
  19.         'list' => 'admin_menu_list',
  20.         'edit' => 'admin_menu_edit',
  21.         'view' => 'admin_menu_view',
  22.         'delete' => 'admin_menu_delete',
  23.         'create' => 'admin_menu_new',
  24.     ];
  25.     private $token_prefix 'admin_menu';
  26.     /**
  27.      * Menu List.
  28.      * @Route(
  29.      *      "list/{page}/{sort}/{dir}",
  30.      *      name="admin_menu_list",
  31.      *      methods={"GET","POST"},
  32.      *      requirements={"page"="\d+","sort"="[0-9a-zA-Z\.]+","dir"="asc|desc"},
  33.      *      defaults={"page"=1,"sort"="createdAt","dir"="desc"}
  34.      *  )
  35.      *
  36.      * @return string
  37.      */
  38.     public function defaultAction(
  39.         Request $request$page$sort$dirMenuRepository $menuRepositorySearchHelper $searchHelper
  40.     ) {
  41.         $limit $request->query->getInt('limit'20);
  42.         $searchHelper->searchSession($this->token_prefix);
  43.         $searchHelper->addParameter('title''like''title''title''Title''Enter title...''text''all');
  44.         $searchHelper->addParameter('slug''like''slug''slug''Slug''Enter slug...''text''all');
  45.         $searchHelper->addParameter('intro''like''introText''intro''Intro Text''Enter intro text...''text''all');
  46.         $searchHelper->addParameter('content''like''content''content''Content''Enter content...''text''all');
  47.         $searchHelper->addParameter('isEnabled''eq''isEnabled''isEnabled''Is Enabled''Please select...''select''full', [null => "Please Select"=> "Enabled"=> "Not Enabled"], true);
  48.         $action $request->request->get('_action''');
  49.         if ($this->isCsrfTokenValid('quicksearch'$request->request->get('_csrf_token')) && $action == 'quicksearch'$searchHelper->processQuick();
  50.         if ($this->isCsrfTokenValid('fullsearch'$request->request->get('_csrf_token')) && $action == 'fullsearch') :
  51.             if ($request->get('reset'0) == 1)
  52.                 $searchHelper->resetActive();
  53.             else
  54.                 $searchHelper->processFull();
  55.         endif;
  56.         $criteria $searchHelper->getCriteria();
  57.         //$criteria->andWhere(Criteria::expr()->eq('isActive', true));
  58.         //$criteria->andWhere(Criteria::expr()->eq('isDeceased', false));
  59.         $criteria->orderBy([$sort => $dir]);
  60.         $entries $menuRepository->matching($criteria);
  61.         $totalSearch $entries->count();
  62.         $entries $entries->slice(($page-1)*$limit$limit);
  63.         $totalCriteria Criteria::create();
  64.         //$totalCriteria->andWhere(Criteria::expr()->eq('isActive', true));
  65.         //$totalCriteria->andWhere(Criteria::expr()->eq('isDeceased', false));
  66.         $total $menuRepository->countAll($totalCriteria);
  67.         $pages ceil($totalSearch/$limit);
  68.         return $this->render('/admin/menu/list.html.twig', [
  69.             'title' => 'Menus',
  70.             'listParams' => [],
  71.             'entries' => $entries,
  72.             'activeSearch' => $searchHelper->isActive(),
  73.             'quickSearchValue' => $searchHelper->getQuickSearchValue(),
  74.             'searchFields' => $searchHelper->getSearchParams(),
  75.             'ordering' => [
  76.                 'sort' => $sort,
  77.                 'dir' => $dir
  78.             ],
  79.             'page' => [
  80.                 'icon' => 'list',
  81.                 'title' => 'List Menus',
  82.                 'subtitle' => 'View the list with the Menus',
  83.                 'header' => 'Training Manager - Menus List'
  84.             ],
  85.             'urls' => $this->urls,
  86.             'tokenPrefix' => $this->token_prefix,
  87.             'pagination' => [
  88.                 'total' => $total,
  89.                 'totalSearch' => $totalSearch,
  90.                 'limit' => $limit,
  91.                 'totalPages' => $pages,
  92.                 'page' => $page,
  93.                 'listURL' => $this->urls['list']
  94.             ],
  95.         ]);
  96.     }
  97.     /**
  98.      * @Route("new", name="admin_menu_new", methods={"GET","POST"})
  99.      */
  100.     public function new(
  101.         Request $request,
  102.         \Symfony\Contracts\Translation\TranslatorInterface $translator,
  103.         \Doctrine\Persistence\ManagerRegistry $managerRegistry
  104.     ): Response {
  105.         $menu = new Menu();
  106.         $form $this->createForm(\App\Form\Admin\MenuForm::class, $menu);
  107.         $form->handleRequest($request);
  108.         if ($form->isSubmitted() && $form->isValid()) :
  109.             $entityManager $managerRegistry->getManager();
  110.             $entityManager->persist($menu);
  111.             $entityManager->flush();
  112.             $this->addFlash(
  113.                 'success',
  114.                 $translator->trans('Entry was saved successfully!')
  115.             );
  116.             if ($form->get('save')->isClicked()) return $this->redirectToRoute($this->urls['edit'], ["id" => $menu->getID()]);
  117.             if ($form->get('save-exit')->isClicked()) return $this->redirectToRoute($this->urls['list']);
  118.             if ($form->get('save-new')->isClicked()) return $this->redirectToRoute($this->urls['create']);
  119.         endif;
  120.         return $this->render('admin/menu/new.html.twig', [
  121.             'title' => 'Create new Menu',
  122.             'page' => [
  123.                 'icon' => 'star',
  124.                 'title' => 'New Menu',
  125.             ],
  126.             'urls' => $this->urls,
  127.             'entry' => $menu,
  128.             'form' => $form->createView(),
  129.         ]);
  130.     }
  131.     /**
  132.      * @Route("show/{id}", name="admin_menu_view", methods={"GET"})
  133.      */
  134.     public function show(
  135.         Menu $menu
  136.     ): Response {
  137.         return $this->render('admin/menu/show.html.twig', [
  138.             'title' => 'View Menu',
  139.             'page' => [
  140.                 'icon' => 'star',
  141.                 'title' => 'View Menu'
  142.             ],
  143.             'urls' => $this->urls,
  144.             'tokenPrefix' => $this->token_prefix,
  145.             'entry' => $menu,
  146.         ]);
  147.     }
  148.     /**
  149.      * @Route("edit/{id}", name="admin_menu_edit", methods={"GET","POST"})
  150.      */
  151.     public function edit(
  152.         Request $request,
  153.         Menu $menu,
  154.         \Symfony\Contracts\Translation\TranslatorInterface $translator,
  155.         \Doctrine\Persistence\ManagerRegistry $managerRegistry
  156.     ): Response {
  157.         $form $this->createForm(\App\Form\Admin\MenuForm::class, $menu);
  158.         $form->handleRequest($request);
  159.         if ($form->isSubmitted() && $form->isValid()) {
  160.             $managerRegistry->getManager()->flush();
  161.             $this->addFlash(
  162.                 'success',
  163.                 $translator->trans('Entry was updated successfully!')
  164.             );
  165.             if ($form->get('save-exit')->isClicked()) return $this->redirectToRoute($this->urls['list']);
  166.             if ($form->get('save-new')->isClicked()) return $this->redirectToRoute($this->urls['create']);
  167.         }
  168.         return $this->render('admin/menu/edit.html.twig', [
  169.             'title' => 'Edit Menu',
  170.             'page' => [
  171.                 'icon' => 'star',
  172.                 'title' => 'Edit Menu'
  173.             ],
  174.             'urls' => $this->urls,
  175.             'tokenPrefix' => $this->token_prefix,
  176.             'entry' => $menu,
  177.             'form' => $form->createView(),
  178.         ]);
  179.     }
  180.     /**
  181.      * @Route("delete/{id}", name="admin_menu_delete", methods={"POST"})
  182.      */
  183.     public function delete(
  184.         Request $request,
  185.         Menu $menu,
  186.         \Symfony\Contracts\Translation\TranslatorInterface $translator,
  187.         \Doctrine\Persistence\ManagerRegistry $managerRegistry
  188.     ): Response {
  189.         $returnURL null;
  190.         if ($this->isCsrfTokenValid($this->token_prefix '-delete' $menu->getId(), $request->request->get('_token'))) {
  191.             $returnURL $request->get('_return')?$request->get('_return'):null;
  192.             $entityManager $managerRegistry->getManager();
  193.             $entityManager->remove($menu);
  194.             $entityManager->flush();
  195.             $this->addFlash(
  196.                 'success',
  197.                 $translator->trans('Entry was deleted successfully!')
  198.             );
  199.             if ($returnURL) return $this->redirect($returnURL);
  200.         } else {
  201.             $this->addFlash(
  202.                 'danger',
  203.                 $translator->trans('Invalid Token!')
  204.             );
  205.         }
  206.         return $this->redirectToRoute($this->urls['list']);
  207.     }
  208. }