![]() 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/vendor/knplabs/knp-menu/src/Knp/Menu/Matcher/ |
<?php namespace Knp\Menu\Matcher; use Knp\Menu\ItemInterface; use Knp\Menu\Matcher\Voter\VoterInterface; /** * A MatcherInterface implementation using a voter system */ class Matcher implements MatcherInterface { /** * @var \SplObjectStorage<ItemInterface, bool> */ private \SplObjectStorage $cache; /** * @var iterable|VoterInterface[] */ private iterable $voters; /** * @param VoterInterface[]|iterable $voters */ public function __construct($voters = []) { $this->voters = $voters; $this->cache = new \SplObjectStorage(); } public function isCurrent(ItemInterface $item): bool { $current = $item->isCurrent(); if (null !== $current) { return $current; } if ($this->cache->contains($item)) { return $this->cache[$item]; } foreach ($this->voters as $voter) { $current = $voter->matchItem($item); if (null !== $current) { break; } } $current = (bool) $current; $this->cache[$item] = $current; return $current; } public function isAncestor(ItemInterface $item, ?int $depth = null): bool { if (0 === $depth) { return false; } $childDepth = null === $depth ? null : $depth - 1; foreach ($item->getChildren() as $child) { if ($this->isCurrent($child) || $this->isAncestor($child, $childDepth)) { return true; } } return false; } public function clear(): void { $this->cache = new \SplObjectStorage(); } }