src/Controller/MenuDefaultController.php line 24

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\HttpFoundation\Response;
  6. class MenuDefaultController extends Controller
  7. {
  8.     public function fetchMenuAction(Request $request$identifier$currentUrl$renderUL true)
  9.     {
  10.         $locale $request->getLocale();
  11.         $em $this->getDoctrine()->getManager();
  12.         $menu $em->getRepository('App:Menu')->findOneBy(['identifier' => $identifier]);
  13.         if (null === $menu) {
  14.             return new Response('');
  15.             // throw $this->createNotFoundException('PCGC: The menu \'' . $indentifier . '\' does not exist');
  16.         }
  17.         return $this->render('@theme/common/menu.html.twig', [
  18.             'menu' => $this->getMenuStructure($locale$menu),
  19.             'currentUrl' => $currentUrl,
  20.         ]);
  21.     }
  22.     public function hasMenuChildren($menuData$id)
  23.     {
  24.         return array_filter($menuData, fn ($var) => $var['menu_parent_id'] == $id);
  25.     }
  26.     private function getMenuStructure($locale$menu)
  27.     {
  28.         $menuData $menu->getMenuItems();
  29.         $items = [];
  30.         foreach ($menuData as $menuItem) {
  31.             $page $menuItem->getPageId();
  32.             if (null != $page) {
  33.                 $navTitle $page->getNavTitle();
  34.                 $slug $page->getSlug();
  35.             } else {
  36.                 $navTitle $menuItem->getNameOverride();
  37.                 $slug $menuItem->getUrlOverride();
  38.             }
  39.             //no navtitle override for translations
  40.             if ('en' == $locale && '' != $menuItem->getNameOverride()) {
  41.                 $navTitle $menuItem->getNameOverride();
  42.             }
  43.             $items[] = [
  44.                 'menu_item_id' => $menuItem->getMenuItemId(),
  45.                 'navtitle' => $navTitle,
  46.                 'slug' => $this->fixSlug($slug),
  47.                 'isdynamic' => $menuItem->getIsdynamic(),
  48.                 'url_override' => $menuItem->getUrlOverride() ? $this->fixSlug($menuItem->getUrlOverride()) : null,
  49.                 'dynamicentity' => $menuItem->getDynamicentity(),
  50.                 'new_window' => $menuItem->getNewwindow(),
  51.                 'menu_parent_id' => $menuItem->getMenuParentId(),
  52.             ];
  53.         }
  54.         foreach ($items as $key => $item) {
  55.             if (!$item['isdynamic']) {
  56.                 continue;
  57.             }
  58.             $items[$key]['dynamic_items'] = $this->getDynamicItems($item);
  59.         }
  60.         $menu $this->hasMenuChildren($items0);
  61.         foreach ($menu as $key => $item) {
  62.             $menu[$key]['children'] = $this->hasMenuChildren($items$item['menu_item_id']);
  63.             foreach ($menu[$key]['children'] as $key2 => $item2) {
  64.                 $menu[$key]['children'][$key2]['children'] = $this->hasMenuChildren($items$item2['menu_item_id']);
  65.                 foreach ($menu[$key]['children'][$key2]['children'] as $key3 => $item3) {
  66.                     $menu[$key]['children'][$key2]['children'][$key3]['children'] = $this->hasMenuChildren($items$item3['menu_item_id']);
  67.                 }
  68.             }
  69.         }
  70.         return $menu;
  71.     }
  72.     private function getDynamicItems($item)
  73.     {
  74.         $dynamicItems = [];
  75.         $em $this->getDoctrine()->getManager();
  76.         $bundleEntity str_replace('/'''$item['dynamicentity']);
  77.         $dyn_manu_items $em->getRepository($bundleEntity)->findBy(['active' => 1'deleted' => 0]);
  78.         $possibleTitles = ['getTitle''getName''getHeadline''getHeading',  'getMetaTitle'];
  79.         foreach ($dyn_manu_items as $dyn_manu_item) {
  80.             // check to ensure that the get<Whatever> fucntion exists on the entity
  81.             foreach ($possibleTitles as $title) {
  82.                 if (method_exists($dyn_manu_item$title)) {
  83.                     $dyn_title call_user_func([$dyn_manu_item$title]);
  84.                     break;
  85.                 }
  86.             }
  87.             $url $item['url_override'].'/'.$dyn_manu_item->getSlug();
  88.             $dynamicItems[] = [
  89.                 'navtitle' => $dyn_title,
  90.                 'slug' => $url,
  91.             ];
  92.         }
  93.         return $dynamicItems;
  94.     }
  95.     private function fixSlug($slug)
  96.     {
  97.         // some slugs will be prefixed with '/' while other may not (i.e db or custom) - so add them if they need them
  98.         if ('http' === substr($slug04)) {
  99.             return $slug;
  100.         }
  101.         if ('/' == substr($slug01)) {
  102.             $slug ltrim($slug'/');
  103.         }
  104.         $slug ltrim($slug'/');
  105.         return '/'.$slug;
  106.     }
  107. }