You are here

public function EntityReferenceField::onUnserializeContentField in Acquia Content Hub 8.2

Extracts the target storage and retrieves the referenced entity.

Parameters

\Drupal\acquia_contenthub\Event\UnserializeCdfEntityFieldEvent $event: The unserialize event.

Throws

\Exception

File

src/EventSubscriber/UnserializeContentField/EntityReferenceField.php, line 43

Class

EntityReferenceField
Entity/image/file field reference handling.

Namespace

Drupal\acquia_contenthub\EventSubscriber\UnserializeContentField

Code

public function onUnserializeContentField(UnserializeCdfEntityFieldEvent $event) {
  $field = $event
    ->getField();
  if (!in_array($event
    ->getFieldMetadata()['type'], $this->fieldTypes)) {
    return;
  }
  $values = [];
  if (!empty($field['value'])) {
    foreach ($field['value'] as $langcode => $value) {
      if (!$value) {
        $values[$langcode][$event
          ->getFieldName()] = [];
        continue;
      }
      if (!is_array($value)) {
        $entity = $this
          ->getEntity($value, $event);
        $values[$langcode][$event
          ->getFieldName()] = $entity
          ->id();

        // @todo handle single value ERR fields.
      }
      else {
        foreach ($value as $delta => $item) {
          $entity = $this
            ->getEntity($item, $event);
          if ($event
            ->getFieldMetadata()['type'] == 'entity_reference_revisions') {

            /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
            $values[$langcode][$event
              ->getFieldName()][] = [
              'target_id' => $entity
                ->id(),
              'target_revision_id' => $entity
                ->getRevisionId(),
            ];
          }
          else {
            $values[$langcode][$event
              ->getFieldName()][]['target_id'] = $entity
              ->id();
          }
        }
      }
    }
  }
  $event
    ->setValue($values);
  $event
    ->stopPropagation();
}