/** * Sort the menu based on weight * * @param ItemInterface $menuItemA * @param ItemInterface $menuItemB * * @return int */ public static function menuSort(ItemInterface $menuItemA, ItemInterface $menuItemB) { if ($menuItemA->getExtra('weight') == $menuItemB->getExtra('weight')) { return 0; } return $menuItemA->getExtra('weight') < $menuItemB->getExtra('weight') ? -1 : 1; }
public function matchItem(ItemInterface $item) { if (null === $this->request) { return null; } $route = $this->request->attributes->get('_route'); if (null === $route) { return null; } $routes = (array) $item->getExtra('routes', array()); $parameters = (array) $item->getExtra('routesParameters', array()); foreach ($routes as $testedRoute) { if (is_string($testedRoute)) { $testedRoute = array('route' => $testedRoute); // BC layer for the configuration of route params if (isset($parameters[$testedRoute['route']])) { $testedRoute['parameters'] = $parameters[$testedRoute['route']]; trigger_error('Using the routeParameters extra is deprecated. The parameters should be passed along the route.', E_USER_DEPRECATED); } } if (!is_array($testedRoute)) { throw new \InvalidArgumentException('Routes extra items must be strings or arrays.'); } if ($this->isMatchingRoute($testedRoute)) { return true; } } return null; }
/** * Checks whether an item is current. * * If the voter is not able to determine a result, * it should return null to let other voters do the job. * * @param ItemInterface $item * * @return boolean|null */ public function matchItem(ItemInterface $item) { if ($item->getExtra('link', false) && $this->parentControl) { $presenter = $this->parentControl->getPresenter(true); $item->setCurrent(call_user_func_array(array($presenter, 'isLinkCurrent'), $item->getExtra('link'))); return $item->isCurrent(); } return null; }
/** * unless 'raw' extra isn't set to true, we try to translate the label. * * @param ItemInterface $item * @param array $options * * @return string */ protected function renderLabel(ItemInterface $item, array $options) { if ($options['allow_safe_labels'] && $item->getExtra('safe_label', false)) { return $item->getLabel(); } if ($item->getExtra('raw', false) !== false) { return $this->escape($item->getLabel()); } return $this->escape(trans($item->getLabel())); }
protected function addNavLinkRoute(ItemInterface $menu, $label, $route, $routeParameters = array()) { $item = $menu->addChild($label, array('route' => $route, 'routeParameters' => $routeParameters)); $item->setExtra('translation_domain', $menu->getExtra('translation_domain')); $menu->setExtra('request_uri', $menu->getExtra('request_uri')); if ($item->getUri() == $menu->getExtra('request_uri')) { $item->setAttribute('class', 'active'); } return $item; }
/** * Checks whether an item is current. * * If the voter is not able to determine a result, * it should return null to let other voters do the job. * * @param ItemInterface $item * @return boolean|null */ public function matchItem(ItemInterface $item) { /* @var $request \Symfony\Component\HttpFoundation\Request */ $request = $this->container->get('request'); if ($item->getUri() === $request->getRequestUri()) { return true; } if ($item->getExtra('routes') !== null && in_array($request->attributes->get('_route'), $item->getExtra('routes'))) { return true; } return null; }
/** * @param ItemInterface $parent * @param array $routes * @param string|null $basePath */ public static function addHiddenItems($parent, $routes, $basePath = null) { $parent->setDisplayChildren(false); if (null === $basePath && null !== $parent->getExtra('routes') && isset($parent->getExtra('routes')[0]['route'])) { $basePathArray = explode("_", $parent->getExtra('routes')[0]['route']); $basePathArray[count($basePathArray) - 1] = '%s'; $basePath = implode("_", $basePathArray); } foreach ($routes as $routeIndex => $routeParameters) { $route = sprintf($basePath, $routeIndex); $parent->addChild($route, ['route' => $route, 'routeParameters' => $routeParameters]); } }
/** * {@inheritdoc} */ public function matchItem(ItemInterface $item) { $admin = $item->getExtra('admin'); $match = null; if ($admin instanceof AdminInterface && $admin->hasRoute('list') && $admin->isGranted('LIST') && $this->request && $this->request->get('_sonata_admin') == $admin->getCode()) { $match = true; } $route = $item->getExtra('route'); if ($route && $this->request && $route == $this->request->get('_route')) { $match = true; } return $match; }
/** * {@inheritdoc} */ public function matchItem(ItemInterface $item) { if (($page = $this->getPage()) && $page->getId() !== null) { return $item->getExtra('_page_id', null) === $page->getId(); } return; }
/** * @param ItemInterface $item * * @return bool|null */ public function matchItem(ItemInterface $item) { if (null === $this->getRequest()) { return null; } $route = $this->getRequest()->attributes->get('_route'); $routeParameters = $this->getRequest()->attributes->get('_route_params'); if (null === $route) { return null; } $routes = (array) $item->getExtra('routes', array()); foreach ($routes as $testedRoute) { if ($route == $testedRoute['route']) { if (is_array($routeParameters) && 0 < count($routeParameters)) { if (isset($testedRoute['parameters']) && is_array($testedRoute['parameters'])) { $matching = true; foreach ($routeParameters as $index => $value) { if ('_' != substr($index, 0, 1)) { if (!isset($testedRoute['parameters'][$index]) || ($testedRoute['parameters'][$index] != $value && 0 < $testedRoute['parameters'][$index] || !is_numeric($value))) { $matching = false; } } } if ($matching) { return true; } } } else { return true; } } } return null; }
protected function modifyItem(ItemInterface $item, array $options) { if (!$item->getExtra('remove_leaf', false)) { return; } if (!$item->hasChildren()) { $this->removeItem($item); } }
public function decorate(KnpMenuItem $knpMenuItem, AdminMenuItem $adminMenuItem) { if ($adminMenuItem instanceof RoutableItem && $adminMenuItem->getRoute()) { $knpMenuItem->setUri($this->router->generate($adminMenuItem->getRoute(), $adminMenuItem->getRouteParameters())); $routes = $knpMenuItem->getExtra('routes', array()); $routes[] = array('route' => $adminMenuItem->getRoute(), 'parameters' => $adminMenuItem->getRouteParameters()); $knpMenuItem->setExtra('routes', $routes); } }
/** * {@inheritDoc} */ public function matchItem(ItemInterface $item) { if ($prefix = $item->getExtra('prefix_match', $this->defaultActive)) { if (strpos($this->getRequestUri(), $item->getUri()) === 0) { return true; } } return null; }
/** * {@inheritDoc} */ public function matchItem(ItemInterface $item = null) { if (!$this->request) { return null; } $content = $item->getExtra('content'); if (null !== $content && $this->request->attributes->has($this->requestKey) && $this->request->attributes->get($this->requestKey) instanceof $this->childClass && $this->request->attributes->get($this->requestKey)->getParentDocument() === $content) { return true; } return null; }
public function decorate(KnpMenuItem $knpMenuItem, AdminMenuItem $adminMenuItem) { if ($adminMenuItem instanceof ElementItem && $adminMenuItem->hasOption('elements')) { $routes = $knpMenuItem->getExtra('routes', array()); /** @var Element $element */ foreach ($adminMenuItem->getOption('elements') as $element) { $routes[] = array('route' => $element->getRoute(), 'parameters' => $element->getRouteParameters()); } $knpMenuItem->setExtra('routes', $routes); } }
/** * {@inheritDoc} */ public function matchItem(ItemInterface $item = null) { if (!$this->request) { return null; } $content = $item->getExtra('content'); if (null !== $content && $this->request->attributes->has($this->requestKey) && $this->request->attributes->get($this->requestKey) === $content) { return true; } return null; }
/** * @inheritdoc */ public function matchItem(ItemInterface $item) { if (!$this->validateRequestElement()) { return null; } foreach ($item->getExtra('routes', array()) as $testedRoute) { if ($this->isRouteMatchingElement($this->getRequestElement(), $testedRoute['parameters'])) { return true; } } return false; }
public function matchItem(ItemInterface $item) { if (null === $this->request) { return; } if (null === ($route = $this->request->route())) { return; } $routes = $item->getExtra('routes', []); foreach ($routes as $probe) { if ($probe === $route->getName()) { return true; } } $patterns = $item->getExtra('patterns', []); foreach ($patterns as $pattern) { if ($pattern && preg_match($pattern, $route->getName())) { return true; } } }
/** * @param ItemInterface $item * @return bool|null */ public function matchItem(ItemInterface $item) { if (null === $this->request) { return null; } $route = $this->request->attributes->get('_route'); if (null === $route) { return null; } $routes = (array) $item->getExtra('routes', []); $parameters = (array) $item->getExtra('routesParameters', []); foreach ($routes as $testedRoute) { if (!$this->routeMatch($testedRoute, $route)) { continue; } if (isset($parameters[$testedRoute]) && !$this->parametersMatch($parameters[$testedRoute])) { return null; } return true; } return null; }
/** * {@inheritDoc} */ public function matchItem(ItemInterface $item) { if (!$this->request) { return null; } $content = $item->getExtra('content'); if ($content instanceof Route && $content->hasOption('currentUriPrefix')) { $currentUriPrefix = $content->getOption('currentUriPrefix'); $currentUriPrefix = str_replace('{_locale}', $this->request->getLocale(), $currentUriPrefix); if (0 === strncmp($this->request->getPathinfo(), $currentUriPrefix, strlen($currentUriPrefix))) { return true; } } return null; }
public function matchItem(ItemInterface $item) { if (null === $this->request) { return null; } $route = $this->request->attributes->get('_route'); if (null === $route) { return null; } $routes = (array) $item->getExtra('routes', array()); $parameters = (array) $item->getExtra('routesParameters', array()); foreach ($routes as $testedRoute) { if (is_string($testedRoute)) { $testedRoute = array('route' => $testedRoute); } if (!is_array($testedRoute)) { throw new \InvalidArgumentException('Routes extra items must be strings or arrays.'); } if ($this->isMatchingRoute($testedRoute)) { return true; } } return null; }
/** * Checks whether an item is current. * * If the voter is not able to determine a result, * it should return null to let other voters do the job. * * @param ItemInterface $item * * @return boolean|null */ public function matchItem(ItemInterface $item) { $request = $this->container->get("request"); if (is_null($request)) { return null; } $route = $request->attributes->get('_route'); if (is_null($route)) { return null; } $itemRoutes = (array) $item->getExtra('routes', array()); if (in_array($route, $itemRoutes, true)) { return true; } foreach ($itemRoutes as $itemRoute) { if (is_array($itemRoute) && isset($itemRoute["route"]) && $route === $itemRoute["route"]) { return true; } } return null; }
/** * match item to route * * @param ItemInterface $item * * @return null|boolean true if the item is current, null if not */ public function matchItem(ItemInterface $item) { if (null === $this->request) { return null; } $route = $this->request->attributes->get('_route'); if (null === $route) { return null; } $routes = (array) $item->getExtra('routes', array()); foreach ($routes as $itemRoute) { if (isset($itemRoute['route'])) { if (is_string($itemRoute['route'])) { $itemRoute = array('route' => $itemRoute['route'], 'pattern' => '/' . $itemRoute['route'] . '/'); if ($this->isMatchingRoute($itemRoute)) { return true; } } } } return null; }
/** * @param ItemInterface $menu * @param array $data * @param array $itemList * @param array $options * * @return \Knp\Menu\ItemInterface */ private function createFromArray(ItemInterface $menu, array $data, array &$itemList, array $options = array()) { $isAllowed = false; foreach ($data as $itemCode => $itemData) { if (!empty($itemList[$itemCode])) { $itemOptions = $itemList[$itemCode]; if (empty($itemOptions['name'])) { $itemOptions['name'] = $itemCode; } if (empty($itemOptions['route']) && empty($itemOptions['uri'])) { $itemOptions['route'] = $itemCode; } if (!empty($itemData['position'])) { $itemOptions['extras']['position'] = $itemData['position']; } $this->moveToExtras($itemOptions, 'translateDomain'); $this->moveToExtras($itemOptions, 'translateParameters'); $newMenuItem = $menu->addChild($itemOptions['name'], array_merge($itemOptions, $options)); if (!empty($itemData['children'])) { $this->createFromArray($newMenuItem, $itemData['children'], $itemList, $options); } $isAllowed = $isAllowed || $newMenuItem->getExtra('isAllowed'); } } $menu->setExtra('isAllowed', $isAllowed); if ($menu->getExtra('hideIfEmpty') && $menu->hasChildren()) { $willDisplaySomeChildren = false; foreach ($menu->getChildren() as $child) { if ($child->isDisplayed() && $child->getExtra('isAllowed')) { $willDisplaySomeChildren = true; break; } } if (!$willDisplaySomeChildren) { $menu->setDisplay(false); } } }
protected function renderLinkElement(ItemInterface $item, array $options) { $uri = $item->getExtra('href') ? $item->getExtra('href') : $item->getUri(); $displayMode = $item->getExtra('display') ? $item->getExtra('display') : 'normal'; return sprintf('<i class="%s user-action" data-url="%s" data-toggle="tooltip" data-placement="left" title="%s" data-display-mode="%s"></i>', $item->getExtra('icon'), $this->escape($uri), $this->renderLabel($item, $options), $displayMode); }
/** * @param \Knp\Menu\ItemInterface $item * @param \Symfony\Component\HttpFoundation\ParameterBag $requestAttributes * @param \FSi\Bundle\AdminBundle\Admin\RedirectableElement $element */ function it_returns_true_if_element_in_current_request_redirects_to_the_element_in_item($item, $requestAttributes, $element) { $requestAttributes->has('element')->willReturn(true); $requestAttributes->get('element')->willReturn($element); $element->getId()->willReturn('element_id'); $element->getSuccessRouteParameters()->willReturn(array('element' => 'element_after_success')); $item->getExtra('routes', array())->willReturn(array(array('parameters' => array('element' => 'element_after_success')))); $this->matchItem($item)->shouldReturn(true); }
protected function renderLinkElement(ItemInterface $item, array $options) { $uri = $item->getExtra('href') ? $item->getExtra('href') : $item->getUri(); return sprintf('<a href="%s">%s</a>', $this->escape($uri), $this->renderLabel($item, $options)); }
/** * @param \Knp\Menu\ItemInterface $item * @param array $options * @return string */ protected function getText(ItemInterface $item, array $options) { if ($options['allow_safe_labels'] && $item->getExtra('safe_label', false)) { return $item->getLabel(); } return $this->escape($item->getLabel()); }
/** * @param Item $item * @param array $options * * @return string */ protected function renderDivider(Item $item, array $options = array()) { return $this->format('<li' . $this->renderHtmlAttributes(array('class' => 'divider' . $item->getExtra('divider'))) . '>', 'li', $item->getLevel(), $options); }
/** * Set uri, display context to menu item * * @param MenuItemInterface $item * @param array $routeParameters * @param array $options * * @return MenuFactoryInterface */ protected function setContext(MenuItemInterface $item, array $routeParameters = array(), array $options = array()) { $display = true; $rootItem = !$item->getName(); $token = $this->security->getToken(); if ($token) { if ($options['roles'] && !$this->security->isGranted($options['roles'])) { $display = false; } if ($display) { foreach ((array) $item->getExtra('oids') as $oidItem) { if (!$this->security->isGranted($oidItem['permissions'], $oidItem['oid'])) { $display = false; break; } } } } if ($options['route'] && !$rootItem) { $acceptedRouteParameters = array_intersect_key($routeParameters, $options['routeAcceptedParameters']); if ($options['routeRequiredParameters'] === $options['routeAcceptedParameters']) { $uri = $this->router->generate($options['route'], $acceptedRouteParameters, $options['routeAbsolute']); $item->setUri($uri); } else { $display = false; } } if (!$display) { if ($options['showNonAuthorized'] && !$token) { $display = true; } if ($options['showAsText']) { $display = true; $item->setUri(null); } } if (!$display) { $item->setDisplay(false); } return $this; }