vendor/shopware/core/Content/Category/Tree/Tree.php line 10

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\Content\Category\Tree;
  3. use Shopware\Core\Content\Category\CategoryEntity;
  4. use Shopware\Core\Framework\Log\Package;
  5. use Shopware\Core\Framework\Struct\Struct;
  6. #[Package('content')]
  7. class Tree extends Struct
  8. {
  9.     /**
  10.      * @var TreeItem[]
  11.      */
  12.     protected $tree;
  13.     /**
  14.      * @var CategoryEntity|null
  15.      */
  16.     protected $active;
  17.     public function __construct(?CategoryEntity $active, array $tree)
  18.     {
  19.         $this->tree $tree;
  20.         $this->active $active;
  21.     }
  22.     public function isSelected(CategoryEntity $category): bool
  23.     {
  24.         if ($category->getId() === $this->active->getId()) {
  25.             return true;
  26.         }
  27.         $ids explode('|'$this->active->getPath());
  28.         return \in_array($category->getId(), $idstrue);
  29.     }
  30.     public function getTree(): array
  31.     {
  32.         return $this->tree;
  33.     }
  34.     public function setTree(array $tree): void
  35.     {
  36.         $this->tree $tree;
  37.     }
  38.     public function getActive(): ?CategoryEntity
  39.     {
  40.         return $this->active;
  41.     }
  42.     public function setActive(?CategoryEntity $active): void
  43.     {
  44.         $this->active $active;
  45.     }
  46.     public function getChildren(string $categoryId): ?Tree
  47.     {
  48.         $match $this->find($categoryId$this->tree);
  49.         if ($match) {
  50.             return new Tree($match->getCategory(), $match->getChildren());
  51.         }
  52.         // active id is not part of $this->tree? active id is root or used as first level
  53.         if ($this->active && $this->active->getId() === $categoryId) {
  54.             return $this;
  55.         }
  56.         return null;
  57.     }
  58.     public function getApiAlias(): string
  59.     {
  60.         return 'category_tree';
  61.     }
  62.     /**
  63.      * @param TreeItem[] $tree
  64.      */
  65.     private function find(string $categoryId, array $tree): ?TreeItem
  66.     {
  67.         if (isset($tree[$categoryId])) {
  68.             return $tree[$categoryId];
  69.         }
  70.         foreach ($tree as $item) {
  71.             $nested $this->find($categoryId$item->getChildren());
  72.             if ($nested) {
  73.                 return $nested;
  74.             }
  75.         }
  76.         return null;
  77.     }
  78. }