You are here

public function ContentEntityCdfNormalizer::getMultilevelReferencedFields in Acquia Content Hub 8

Get multilevel entity reference fields.

Get the fields from a given entity and add them to the given content hub entity object. This also includes dependencies of the dependencies.

Parameters

\Drupal\Core\Entity\ContentEntityInterface $entity: The Drupal Entity.

array $referenced_entities: The list of Multilevel referenced entities. This must be passed as an initialized array.

array $context: Additional Context such as the account.

int $depth: The depth of the referenced entity (levels down from main entity).

Return value

\Drupal\Core\Entity\ContentEntityInterface[] All referenced entities.

1 call to ContentEntityCdfNormalizer::getMultilevelReferencedFields()
ContentEntityCdfNormalizer::normalize in src/Normalizer/ContentEntityCdfNormalizer.php
Normalizes an object into a set of arrays/scalars.

File

src/Normalizer/ContentEntityCdfNormalizer.php, line 831

Class

ContentEntityCdfNormalizer
Converts the Drupal entity object to a Acquia Content Hub CDF array.

Namespace

Drupal\acquia_contenthub\Normalizer

Code

public function getMultilevelReferencedFields(ContentEntityInterface $entity, array &$referenced_entities, array $context = [], $depth = 0) {
  $depth++;
  $maximum_depth = $this->config
    ->get('acquia_contenthub.entity_config')
    ->get('dependency_depth');
  $maximum_depth = is_int($maximum_depth) ? $maximum_depth : 3;

  // Collecting all referenced_entities UUIDs.
  $uuids = array_keys($referenced_entities);

  // Obtaining all the referenced entities for the current entity.
  $ref_entities = $this
    ->getReferencedFields($entity, $context);
  foreach ($ref_entities as $uuid => $entity) {
    if (!in_array($uuid, $uuids)) {

      // @todo This if-condition is a hack to avoid Vocabulary entities.
      if ($entity instanceof ContentEntityInterface) {
        $referenced_entities[$uuid] = $entity;

        // Only search for dependencies if we are below the maximum depth
        // configured by the admin. If not set, a default of 3 will be used.
        if ($depth < $maximum_depth) {
          $this
            ->getMultilevelReferencedFields($entity, $referenced_entities, $context, $depth);
        }
      }
    }
  }
  return $referenced_entities;
}