entity_hierarchy-8.x-2.24/src/Information/AncestryLabelTrait.php

src/Information/AncestryLabelTrait.php
<?php

namespace Drupal\entity_hierarchy\Information;

use Drupal\Core\Entity\ContentEntityInterface;

/**
 * Provides a trait for ancestry labels.
 */
trait AncestryLabelTrait {

  /**
   * Tree node mapper.
   *
   * @var \Drupal\entity_hierarchy\Storage\EntityTreeNodeMapperInterface
   */
  protected $entityTreeNodeMapper;

  /**
   * Key factory.
   *
   * @var \Drupal\entity_hierarchy\Storage\NestedSetNodeKeyFactory
   */
  protected $keyFactory;

  /**
   * Generate labels including ancestry.
   *
   * @param \Drupal\Core\Entity\ContentEntityInterface $entity
   *   Entity to generate label for.
   * @param \PNX\NestedSet\NestedSetInterface|\Drupal\entity_hierarchy\Storage\NestedSetStorage $storage
   *   Tree storage.
   * @param string $entity_type_id
   *   Entity type ID.
   * @param array $tags
   *   Cache tags.
   *
   * @return string
   *   Label with ancestry if applicable.
   */
  protected function generateEntityLabelWithAncestry(ContentEntityInterface $entity, $storage, $entity_type_id, &$tags = []) {
    $key = $this->keyFactory->fromEntity($entity);
    $ancestors = $storage->findAncestors($key);
    // Remove ourself.
    array_pop($ancestors);
    $ancestor_entities = $this->entityTreeNodeMapper->loadAndAccessCheckEntitysForTreeNodes($entity_type_id, $ancestors);
    $ancestors_labels = [];
    foreach ($ancestor_entities as $ancestor_node) {
      if (!$ancestor_entities->contains($ancestor_node)) {
        // Doesn't exist or is access hidden.
        continue;
      }
      $ancestor_entity = $ancestor_entities->offsetGet($ancestor_node);
      $ancestors_labels[] = $ancestor_entity->label();
      foreach ($ancestor_entity->getCacheTags() as $tag) {
        $tags[] = $tag;
      }
    }
    if (!$ancestors || !$ancestors_labels) {
      // No parents.
      return $entity->label();
    }
    return sprintf('%s (%s)', $entity->label(), implode(' ❭ ', $ancestors_labels));
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc