entity_meta_relation-8.x-1.0-beta8/src/Field/ComputedHostEntityItemList.php

src/Field/ComputedHostEntityItemList.php
<?php

namespace Drupal\emr\Field;

use Drupal\Core\TypedData\ComputedItemListTrait;
use Drupal\entity_reference_revisions\EntityReferenceRevisionsFieldItemList;

/**
 * Item list for a computed field that stores related host entity.
 */
class ComputedHostEntityItemList extends EntityReferenceRevisionsFieldItemList {

  use ComputedItemListTrait;

  /**
   * {@inheritdoc}
   */
  protected function computeValue() {
    $entity = $this->getEntity();

    $entity_type_manager = \Drupal::entityTypeManager();
    /** @var \Drupal\emr\EntityMetaStorageInterface $entity_meta_storage */
    $entity_meta_storage = $entity_type_manager->getStorage('entity_meta');
    $content_entities = $entity_meta_storage->getRelatedEntities($entity);
    foreach ($content_entities as $content_entity_id => $content_entity) {
      $this->list[] = $this->createItem(count($this->list), $content_entity);
    }
  }

  /**
   * {@inheritdoc}
   */
  public function preSave() {
    // We don't have entity metas, we need to carry over from published ones.
    if (empty($this->list)) {
      $entity_type_manager = \Drupal::entityTypeManager();

      $entity = $this->getEntity();
      // Load up the revision of the content which represents the loaded one,
      // instead of the new attempted one.
      $revision_id = $entity->getLoadedRevisionId() ?? $entity->getRevisionId();
      if (!$revision_id) {
        return;
      }

      /** @var \Drupal\Core\Entity\RevisionableStorageInterface $entity_meta_storage */
      $entity_meta_storage = $entity_type_manager->getStorage('entity_meta');
      $revision = $entity_meta_storage->loadRevision($revision_id);
      $content_entities = $entity_meta_storage->getRelatedEntities($revision);
      foreach ($content_entities as $content_entity_id => $content_entity) {
        $this->list[] = $this->createItem(count($this->list), $content_entity);
      }
    }
  }

  /**
   * {@inheritdoc}
   */
  public function getConstraints() {
    // We don't want to validate any constraints related with entity reference.
    return [];
  }

}

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

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