![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/app/bundles/CoreBundle/Twig/Helper/ |
<?php namespace Mautic\CoreBundle\Twig\Helper; use Knp\Menu\ItemInterface; use Knp\Menu\Matcher\MatcherInterface; use Knp\Menu\Twig\Helper as KnpHelper; /** * final class MenuHelper. */ final class MenuHelper { public function __construct( private KnpHelper $helper ) { } public function getName(): string { return 'menu'; } /** * Parses attributes for the menu view. * * @param array<string, mixed> $attributes * @param array<string, mixed> $overrides */ public function parseAttributes($attributes, $overrides = []): string { if (!is_array($attributes)) { $attributes = []; } $attributes = array_merge($attributes, $overrides); $string = ''; foreach ($attributes as $name => $value) { $name = trim($name); $value = trim($value); if ($name == $value) { $string .= " $name"; } else { $string .= " $name=\"$value\""; } } return $string; } /** * Concats the appropriate classes for menu links. * * @param array<string, mixed> $options */ public function buildClasses(ItemInterface &$item, MatcherInterface &$matcher, $options): void { $isAncestor = $matcher->isAncestor($item, $options['matchingDepth']); $isCurrent = $matcher->isCurrent($item); $class = $item->getAttribute('class'); $classes = ($class) ? " {$class}" : ''; $classes .= ($isCurrent) ? " {$options['currentClass']}" : ''; $classes .= ($isAncestor) ? " {$options['ancestorClass']}" : ''; $classes .= ($isAncestor && $this->invisibleChildSelected($item, $matcher)) ? " {$options['currentClass']}" : ''; $classes .= ($item->actsLikeFirst()) ? " {$options['firstClass']}" : ''; $classes .= ($item->actsLikeLast()) ? " {$options['lastClass']}" : ''; $item->setAttribute('class', trim($classes)); } /** * @param ItemInterface $menu */ public function invisibleChildSelected($menu, MatcherInterface $matcher): bool { /** @var ItemInterface $item */ foreach ($menu as $item) { if ($matcher->isCurrent($item)) { return ($item->isDisplayed()) ? false : true; } } return false; } /** * Retrieves an item following a path in the tree. * * @param ItemInterface|string $menu * @param array<int, string> $path * @param array<string, mixed> $options */ public function get($menu, array $path = [], array $options = []): ItemInterface { return $this->helper->get($menu, $path, $options); } /** * Renders a menu with the specified renderer. * * @param ItemInterface|string|array<ItemInterface|string> $menu * @param array<string, mixed> $options * @param string $renderer */ public function render($menu, array $options = [], $renderer = null): string { if (null === $renderer) { $renderer = $menu; } $options['menu'] = $menu; return $this->helper->render($menu, $options, $renderer); } }