* @author Timo Hund */ class HierarchyFacet extends AbstractFacet { const TYPE_HIERARCHY = 'hierarchy'; /** * String * @var string */ protected static $type = self::TYPE_HIERARCHY; /** * @var NodeCollection */ protected $childNodes; /** * @var NodeCollection */ protected $allNodes; /** * @var array */ protected $nodesByKey = []; /** * OptionsFacet constructor * * @param SearchResultSet $resultSet * @param string $name * @param string $field * @param string $label * @param array $configuration Facet configuration passed from typoscript */ public function __construct(SearchResultSet $resultSet, $name, $field, $label = '', array $configuration = []) { parent::__construct($resultSet, $name, $field, $label, $configuration); $this->childNodes = new NodeCollection(); $this->allNodes = new NodeCollection(); } /** * @param Node $node */ public function addChildNode(Node $node) { $this->childNodes->add($node); } /** * @return NodeCollection */ public function getChildNodes() { return $this->childNodes; } /** * Creates a new node on the right position with the right parent node. * * @param string $parentKey * @param string $key * @param string $label * @param string $value * @param integer $count * @param boolean $selected */ public function createNode($parentKey, $key, $label, $value, $count, $selected) { /** @var $parentNode Node|null */ $parentNode = isset($this->nodesByKey[$parentKey]) ? $this->nodesByKey[$parentKey] : null; /** @var Node $node */ $node = $this->objectManager->get(Node::class, $this, $parentNode, $key, $label, $value, $count, $selected); $this->nodesByKey[$key] = $node; if ($parentNode === null) { $this->addChildNode($node); } else { $parentNode->addChildNode($node); } $this->allNodes->add($node); } /** * Get facet partial name used for rendering the facet * * @return string */ public function getPartialName() { return !empty($this->configuration['partialName']) ? $this->configuration['partialName'] : 'Hierarchy'; } /** * The implementation of this method should return a "flatten" collection of all items. * * @return AbstractFacetItemCollection */ public function getAllFacetItems() { return $this->allNodes; } }