vendor/uvdesk/core-framework/Dashboard/NavigationTemplate.php line 25

Open in your IDE?
  1. <?php
  2. namespace Webkul\UVDesk\CoreFrameworkBundle\Dashboard;
  3. use Symfony\Component\Routing\RouterInterface;
  4. use Symfony\Component\HttpFoundation\RequestStack;
  5. use Webkul\UVDesk\CoreFrameworkBundle\Services\UserService;
  6. use Symfony\Component\DependencyInjection\ContainerInterface;
  7. use Webkul\UVDesk\CoreFrameworkBundle\Dashboard\Segments\NavigationInterface;
  8. use Webkul\UVDesk\CoreFrameworkBundle\Framework\ExtendableComponentInterface;
  9. use Symfony\Contracts\Translation\TranslatorInterface;
  10. class NavigationTemplate implements ExtendableComponentInterface
  11. {
  12.     CONST TEMPLATE '<ul class="uv-menubar">[[ COLLECTION ]]</ul>';
  13.     CONST TEMPLATE_ITEM '<li title = "[[ NAME ]]" class = "[[ ATTRIBUTES ]]" data-toggle = "tooltip" data-placement = "right"><a class="[[ isActive ]]" href="[[ URL ]]"><span class="uv-icon">[[ SVG ]]</span><span class="uv-menu-item">[[ NAME ]]</span></a></li>';
  14.     
  15.     private $segments = [];
  16.     
  17.     public function __construct(ContainerInterface $containerRequestStack $requestStackRouterInterface $routerUserService $userServiceTranslatorInterface $translator)
  18.     {
  19.         $this->router $router;
  20.         $this->container $container;
  21.         $this->requestStack $requestStack;
  22.         $this->userService $userService;
  23.         $this->translator $translator;
  24.     }
  25.     
  26.     public function appendNavigation(NavigationInterface $segment$tags = [])
  27.     {
  28.         $this->segments[] = $segment;
  29.     }
  30.     
  31.     public function render()
  32.     {
  33.         $router $this->router;
  34.         $request $this->requestStack->getCurrentRequest();
  35.         
  36.         
  37.         $route $this->requestStack->getCurrentRequest()->get('_route');
  38.         // Compile accessible segments by end-user
  39.         $accessibleSegments = [];
  40.         
  41.         $hiddenItems = [
  42.             'Apps',
  43.             'Knowledgebase'
  44.         ];
  45.         
  46.         foreach ($this->segments as $item) {
  47.             
  48.             //echo "<p>".$item::getTitle()."</p>";
  49.             if (in_array($item::getTitle(), $hiddenItems)) {
  50.                 continue;
  51.             }
  52.             
  53.             if (null == $item::getRoles()) {
  54.                 $accessibleSegments[] = $item;
  55.             } else {
  56.                 foreach ($item::getRoles() as $requiredPermission) {
  57.                     if ($this->userService->isAccessAuthorized($requiredPermission)) {
  58.                         $accessibleSegments[] = $item;
  59.                         
  60.                         break;
  61.                     }
  62.                 }
  63.             }
  64.         }
  65.         
  66.         if (array_key_exists(2$accessibleSegments))
  67.         {
  68.             $temp $accessibleSegments[1];
  69.             $accessibleSegments[1] = $accessibleSegments[2];
  70.             $accessibleSegments[2] = $temp;
  71.         }
  72.         // Reduce the accessible segments into injectible html snippet
  73.         $html array_reduce($accessibleSegments, function($html$segment) use ($router$request$route) {
  74.             $isActive '';
  75.             if($segment::getRouteName() == $route) {
  76.                 $isActive "uv-item-active";
  77.             }
  78.             
  79.             $html .= strtr(self::TEMPLATE_ITEM, [
  80.                 '[[ SVG ]]' => $segment::getIcon(),
  81.                 '[[ NAME ]]' => $this->translator->trans($segment::getTitle()),
  82.                 '[[ URL ]]' => $router->generate($segment::getRouteName()),
  83.                 '[[ isActive ]]' => $isActive,
  84.             ]);
  85.             
  86.             return $html;
  87.         }, '');
  88.         
  89.         return strtr(self::TEMPLATE, ['[[ COLLECTION ]]' => $html]);
  90.     }
  91. }