vendor/score/cms/src/Controller/MenuController.php line 86

Open in your IDE?
  1. <?php
  2. namespace Score\CmsBundle\Controller;
  3. use Score\CmsBundle\Entity\Menu;
  4. use Score\CmsBundle\Form\MenuForm;
  5. use Score\CmsBundle\Entity\Page\Page;
  6. use Score\CmsBundle\Entity\Block\Block;
  7. use Score\CmsBundle\Entity\Multisite\Site;
  8. use Score\CmsBundle\Services\OptionManager;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Score\CmsBundle\Services\AdminPageManager;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Score\CmsBundle\Entity\Multisite\SiteItemMenu;
  13. use Score\BaseBundle\Services\AdjacencyArrayTreeManager;
  14. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  15. class MenuController extends AbstractController
  16. {
  17.     private function canIAccess()
  18.     {
  19.         $allowed = ["ROLE_MENU_MANAGER""ROLE_ADMIN"];
  20.         return (count(array_intersect($allowed$this->getUser()->getRoles())) >= 1);
  21.     }
  22.     public function getRootPage()
  23.     {
  24.         $em $this->getDoctrine()->getManager();
  25.         $pageRepo $em->getRepository(Page::class);
  26.         $page $pageRepo->findOneBy(['name' => 'root']);
  27.         //$pageManager = $this->get('score.admin.page.manager');
  28.         //$page = $pageManager->getPageById(1);
  29.         return $page;
  30.     }
  31.      /**
  32.      * @Route("/admin/menu/delete", name="score_cms_menu_delete")
  33.      */
  34.     public function deleteAction(Request $request)
  35.     {
  36.         $em $this->getDoctrine()->getManager();
  37.         $treeManager =  new \Score\BaseBundle\Services\AdjacencyTreeManager$this->getDoctrine()->getManager());
  38.         $repository $this->getDoctrine()->getRepository(Menu::class);
  39.         $menuId $request->get('mid');
  40.         $menuList $repository->findBy(['parentId' => 0]);
  41.         $menuName '';
  42.         $currentMenu null;
  43.         foreach($menuList as $topMenu)
  44.         {
  45.             if($menuId  == $topMenu->getId())
  46.             {
  47.                 $menuName $topMenu->getName();
  48.                 $currentMenu $topMenu;
  49.             }
  50.         }
  51.         if($request->get('confirm') == 'yes')
  52.         {
  53.             $items $repository->findBy(array('rootId' => $menuId ), ['lvl' => 'ASC']);
  54.             $treeManager->setRepository($repository);
  55.             $items $treeManager->buildArray($menuId);
  56.             if(is_array($items ))
  57.             {
  58.                 foreach($items as $item)
  59.                 {
  60.                     $em->remove($item);
  61.                 }
  62.             }
  63.             $em->remove($currentMenu);
  64.             $em->flush();
  65.             return $this->redirectToRoute('score_cms_menu');
  66.         }
  67.         return $this->render('@ScoreCms/Menu/delete.html.twig', [
  68.             'menuName' => $menuName,
  69.             'mid' => $menuId
  70.         ]);
  71.     }
  72.     /**
  73.      * @Route("/admin/menu/edit", name="score_cms_menu")
  74.      */
  75.     public function indexAction(AdjacencyArrayTreeManager $treeManagerRequest $requestAdminPageManager $pageManagerOptionManager $optionManager)
  76.     {
  77.         if (!$this->canIAccess())
  78.             return $this->redirectToRoute('admin_start');
  79.         if('delete' == $request->get('btn_action'))
  80.         {
  81.             return $this->redirectToRoute('score_cms_menu_delete',['mid' => $request->get('menuId')]);
  82.         }
  83.         $menuId $request->get('menuId');
  84.         $repository $this->getDoctrine()->getRepository(Menu::class);
  85.         $menuList $repository->findBy(['parentId' => 0]);
  86.         $pageList $pageManager->getPageParentChoices($this->getRootPage()->getId());
  87.         $currentMenuId $menuId;
  88.         if ($menuId === null)
  89.         {
  90.             $currentMenuId $menuList[0]->getId();
  91.         }
  92.             
  93.         $items $this->getMenuItemsTree($treeManager$currentMenuId);
  94.         $menu $repository->find($currentMenuId );
  95.         $existMenuItems =[];
  96.         foreach($menu->getSiteItemMenu() as $siteItem)
  97.         {
  98.             $existMenuItems[] = $siteItem->getSite()->getId();
  99.         }
  100.         $multisiteSites$this->getDoctrine()->getRepository(Site::class)->findAll();
  101.         $multisiteChoices = [];
  102.         $multisiteEnabled false;
  103.         foreach($multisiteSites as $multisiteSite)
  104.         {
  105.             $multisiteChoices[$multisiteSite->getId()] = $multisiteSite->getName();
  106.         }
  107.         if(empty($multisiteChoices))
  108.         {
  109.             $multisiteEnabled true;
  110.         }
  111.         return $this->render('@ScoreCms/Menu/index.html.twig', [
  112.             'list' => $menuList,
  113.             'pageList' => $pageList,
  114.             'items' => $items,
  115.             'currentMenuId' => $currentMenuId,
  116.             'multisiteChoices' => $multisiteChoices,
  117.             'existMenuItems' => $existMenuItems,
  118.             'multisiteEnabled' => $multisiteEnabled,
  119.             'menu' => $menu
  120.         ]);
  121.         //return $this->redirect($this->generateUrl('user'));
  122.         //return $this->render('ScoreCmsBundle:Default:dashboard.html.twig');
  123.     }
  124.     private function getMenuItemsTree($treeManager$rootId)
  125.     {
  126.         $repository $this->getDoctrine()->getRepository(Menu::class);
  127.         $items $repository->findBy(array('rootId' => $rootId), ['lvl' => 'ASC']);
  128.         //$treeManager = $this->container->get('score.manager.adjacency_array_tree');
  129.         $treeManager->setCollection($items);
  130.         $tree $treeManager->buildTree($rootId);
  131.         return $tree;
  132.     }
  133.     /**
  134.      * @Route("/admin/menu/create", name="score_cms_menu_create")
  135.      */
  136.     public function createAction(Request $request)
  137.     {
  138.         if (!$this->canIAccess())
  139.             return $this->redirectToRoute('admin_start');
  140.         $em $this->getDoctrine()->getManager();
  141.         $menu = new Menu();
  142.         $menu->setName($request->get('name'));
  143.         $menu->setParentId(0);
  144.         $em->persist($menu);
  145.         $em->flush();
  146.         //vytvor blok
  147.         $block = new Block();
  148.         $block->setName($menu->getName());
  149.         $block->setLang('sk');
  150.         $block->setType('menu');
  151.         $block->setVisibility(true);
  152.         $block->setParamsArr(['menuId' => $menu->getId()]);
  153.         $em->persist($block);
  154.         $em->flush();
  155.         $this->addFlash('score_cms_menu_create_success''Menu bolo vytvorené');
  156.         return $this->redirectToRoute('score_cms_menu',["menuId" => $menu->getId()]);
  157.     }
  158.     private function saveMenuItems($items$parentId$rootId$lvl 1)
  159.     {
  160.         $entityManager $this->getDoctrine()->getManager();
  161.         foreach ($items as $order => $item) {
  162.             $menu = new Menu();
  163.             $menu->setParentId($parentId);
  164.             $menu->setName($item['name']);
  165.             $menu->setLink($item['url']);
  166.             if(array_key_exists('visibility',$item) && $item['visibility'] == 'hidden')
  167.             {
  168.                 $menu->setVisibility(false);
  169.             }
  170.             else
  171.             {
  172.                 $menu->setVisibility(true);
  173.             }
  174.             $menu->setSortOrder(($order 1));
  175.             $menu->setRootId($rootId);
  176.             $menu->setLvl($lvl);
  177.             $menu->setLinkType($item['type']);
  178.             if ('page' == $item['type']) {
  179.                 $menu->setLinkTypeData(json_encode(array(
  180.                     'id' => $item['typeId'],
  181.                     'seoId' => $item['url']
  182.                 )));
  183.             }
  184.             $entityManager->persist($menu);
  185.            
  186.             if (array_key_exists('children'$item)) {
  187.                 $this->saveMenuItems($item['children'], $menu->getId(), $rootId$lvl 1);
  188.             }
  189.         }
  190.         $entityManager->flush();
  191.     }
  192.     /**
  193.      * @Route("/admin/menu/save", name="score_cms_menu_save")
  194.      */
  195.     public function saveAction(Request $request)
  196.     {
  197.         if (!$this->canIAccess())
  198.             return $this->redirectToRoute('admin_start');
  199.         $menuId $request->get('root_id');
  200.         $items $request->get('items');
  201.         $repository $this->getDoctrine()->getRepository(Menu::class);
  202.         $menu $repository->find($menuId);
  203.         
  204.         $em $this->getDoctrine()->getManager();
  205.         $siteRepository =  $em->getRepository(Site::class);
  206.         $siteItemRepository =  $em->getRepository(SiteItemMenu::class);
  207.         $em->getConnection()->beginTransaction();
  208.         try {
  209.             $qd $siteItemRepository->createQueryBuilder('t')->delete();
  210.             $qd->where('t.menu = :itemId');
  211.             $qd->setParameter('itemId'$menuId);
  212.             $query $qd->getQuery();
  213.             $query->getResult();
  214.             
  215.             if(null != $request->get('multisite'))
  216.             {
  217.                 $multisites =explode(',',$request->get('multisite'));
  218.                 foreach($multisites as $siteId)
  219.                 {
  220.                     $site $siteRepository->find($siteId);
  221.                     $siteItemMenu = new SiteItemMenu();
  222.                     $siteItemMenu->setSite($site);
  223.                     $siteItemMenu->setMenu($menu);
  224.                     $em->persist($siteItemMenu);
  225.                     $em->flush();
  226.                 }
  227.                 
  228.             }
  229.             //first delete all item with root
  230.             $query $this->getDoctrine()->getManager()->createQuery('DELETE FROM ScoreCmsBundle:Menu m  WHERE m.rootId = :rootId')->setParameter('rootId'$menuId);
  231.             $deleteResult $query->getResult();
  232.             $this->saveMenuItems($items$menuId$menuId1);
  233.             if(null != $request->get('menuTitle'))
  234.             {
  235.                 $menu->setName($request->get('menuTitle'));
  236.                 $em->persist($menu);
  237.                 $em->flush();
  238.             }
  239.            
  240.             $em->getConnection()->commit();
  241.         }
  242.         catch (Exception $e) {
  243.             dump($e);
  244.             $em->getConnection()->rollBack();
  245.             throw $e;
  246.         }
  247.         return $this->json(['status' => 'success']);
  248.     }
  249.       /**
  250.      * @Route("/admin/menu/visibility", name="score_cms_menu_save_visibility")
  251.      */
  252.     public function changeVisibilityAction(Request $request)
  253.     {
  254.         if (!$this->canIAccess())
  255.         {
  256.             return $this->redirectToRoute('admin_start');
  257.         }
  258.         $itemId $request->get('itemid');
  259.         $em $this->getDoctrine()->getManager();
  260.         $siteItemRepository =  $em->getRepository(Menu::class);
  261.         $menuItem $siteItemRepository->find($itemId);
  262.         if($request->get('v') == 'y')
  263.         {
  264.             $menuItem->setVisibility(true);
  265.         }
  266.         if($request->get('v') == 'n')
  267.         {
  268.             $menuItem->setVisibility(false);
  269.         }
  270.         $em->persist($menuItem);
  271.         $em->flush();
  272.         return $this->redirectToRoute('score_cms_menu',[]);
  273.        
  274.     }
  275. }