vendor/umbrella2/corebundle/src/Menu/DTO/MenuItem.php line 289

Open in your IDE?
  1. <?php
  2. namespace Umbrella\CoreBundle\Menu\DTO;
  3. use function Symfony\Component\String\u;
  4. use Umbrella\CoreBundle\Utils\Utils;
  5. class MenuItem implements \Countable\IteratorAggregate
  6. {
  7.     protected Menu $menu;
  8.     protected string $name;
  9.     protected ?MenuItem $parent null;
  10.     /**
  11.      * Children map using id as key
  12.      *
  13.      * @var MenuItem[]
  14.      */
  15.     protected array $children = [];
  16.     protected ?string $icon null;
  17.     protected string $label;
  18.     protected ?string $translationDomain 'messages';
  19.     protected ?string $badgeLabel null;
  20.     protected ?string $badgeClass null;
  21.     protected ?string $target null;
  22.     protected ?string $url null;
  23.     protected ?string $route null;
  24.     protected array $routeParams = [];
  25.     protected array $matchingRoutes = [];
  26.     protected bool $active false;
  27.     protected bool $visible true;
  28.     /**
  29.      * MenuItem constructor.
  30.      */
  31.     public function __construct(Menu $menustring $name)
  32.     {
  33.         $this->menu $menu;
  34.         $this->name $name;
  35.         $this->label Utils::humanize($name);
  36.     }
  37.     public function getName(): string
  38.     {
  39.         return $this->name;
  40.     }
  41.     public function getCssId(): string
  42.     {
  43.         return sprintf('menu-item-%s-%d'u($this->name)->snake(), $this->getLevel());
  44.     }
  45.     public function getMenu(): Menu
  46.     {
  47.         return $this->menu;
  48.     }
  49.     public function getParent(): ?self
  50.     {
  51.         return $this->parent;
  52.     }
  53.     public function setParent(?MenuItem $parent): self
  54.     {
  55.         $this->parent $parent;
  56.         return $this;
  57.     }
  58.     public function isRoot(): bool
  59.     {
  60.         return null === $this->parent;
  61.     }
  62.     public function getChildren(): array
  63.     {
  64.         return $this->children;
  65.     }
  66.     public function hasChildren(): bool
  67.     {
  68.         return count($this->children) > 0;
  69.     }
  70.     public function addChild(MenuItem $child): self
  71.     {
  72.         $child->parent $this;
  73.         $this->children[$child->name] = $child;
  74.         return $this;
  75.     }
  76.     public function hasChild(string $name): bool
  77.     {
  78.         return isset($this->children[$name]);
  79.     }
  80.     public function getChild(string $name): self
  81.     {
  82.         return $this->children[$name];
  83.     }
  84.     public function removeChild(string $name): self
  85.     {
  86.         $this->children[$name]->setParent(null);
  87.         unset($this->children[$name]);
  88.         return $this;
  89.     }
  90.     public function getIcon(): ?string
  91.     {
  92.         return $this->icon;
  93.     }
  94.     public function setIcon(?string $icon): self
  95.     {
  96.         $this->icon $icon;
  97.         return $this;
  98.     }
  99.     public function getLabel(): string
  100.     {
  101.         return $this->label;
  102.     }
  103.     public function setLabel(string $label): self
  104.     {
  105.         $this->label $label;
  106.         return $this;
  107.     }
  108.     public function getTranslationDomain(): ?string
  109.     {
  110.         return $this->translationDomain;
  111.     }
  112.     public function setTranslationDomain(?string $translationDomain): self
  113.     {
  114.         $this->translationDomain $translationDomain;
  115.         return $this;
  116.     }
  117.     public function hasBadge(): bool
  118.     {
  119.         return !empty($this->badgeLabel);
  120.     }
  121.     public function setBadge(string $badgeLabel, ?string $badgeClass null): MenuItem
  122.     {
  123.         $this->badgeLabel $badgeLabel;
  124.         $this->badgeClass $badgeClass;
  125.         return $this;
  126.     }
  127.     public function getBadgeLabel(): ?string
  128.     {
  129.         return $this->badgeLabel;
  130.     }
  131.     public function getBadgeClass(): ?string
  132.     {
  133.         return $this->badgeClass;
  134.     }
  135.     public function hasLink(): bool
  136.     {
  137.         return !empty($this->route) || !empty($this->url);
  138.     }
  139.     public function getTarget(): ?string
  140.     {
  141.         return $this->target;
  142.     }
  143.     public function setTarget(?string $target): self
  144.     {
  145.         $this->target $target;
  146.         return $this;
  147.     }
  148.     public function getUrl(): ?string
  149.     {
  150.         return $this->url;
  151.     }
  152.     public function setUrl(?string $url): self
  153.     {
  154.         $this->url $url;
  155.         return $this;
  156.     }
  157.     public function getRoute(): ?string
  158.     {
  159.         return $this->route;
  160.     }
  161.     public function getRouteParams(): array
  162.     {
  163.         return $this->routeParams;
  164.     }
  165.     public function setRoute(string $route, array $routeParams = []): self
  166.     {
  167.         if (null !== $this->route) {
  168.             $this->removeMatchingRoute($this->route);
  169.         }
  170.         $this->route $route;
  171.         $this->routeParams $routeParams;
  172.         $this->addMatchingRoute($route$routeParams);
  173.         return $this;
  174.     }
  175.     public function getMatchingRoutes(): array
  176.     {
  177.         return $this->matchingRoutes;
  178.     }
  179.     public function addMatchingRoute(string $route, array $routeParams = []): self
  180.     {
  181.         $this->matchingRoutes[$route] = $routeParams;
  182.         return $this;
  183.     }
  184.     public function removeMatchingRoute(string $route): self
  185.     {
  186.         unset($this->matchingRoutes[$route]);
  187.         return $this;
  188.     }
  189.     public function clearMatchingRoutes(): self
  190.     {
  191.         $this->matchingRoutes = [];
  192.         return $this;
  193.     }
  194.     public function getLevel(): int
  195.     {
  196.         return $this->parent $this->parent->getLevel() + 0;
  197.     }
  198.     public function isActive(): bool
  199.     {
  200.         return $this->active;
  201.     }
  202.     public function setActive(bool $active): self
  203.     {
  204.         $this->active $active;
  205.         return $this;
  206.     }
  207.     public function isVisible(): bool
  208.     {
  209.         return $this->visible;
  210.     }
  211.     public function setVisible(bool $visible): self
  212.     {
  213.         $this->visible $visible;
  214.         return $this;
  215.     }
  216.     // Interface implementations
  217.     /**
  218.      * {@inheritdoc}
  219.      */
  220.     public function getIterator(): iterable
  221.     {
  222.         return new \ArrayIterator($this->children);
  223.     }
  224.     /**
  225.      * {@inheritdoc}
  226.      */
  227.     public function count(): int
  228.     {
  229.         return count($this->children);
  230.     }
  231. }