function EntityConfigBase::import

Same name and namespace in other branches
  1. 11.x core/modules/migrate/src/Plugin/migrate/destination/EntityConfigBase.php \Drupal\migrate\Plugin\migrate\destination\EntityConfigBase::import()

File

core/modules/migrate/src/Plugin/migrate/destination/EntityConfigBase.php, line 127

Class

EntityConfigBase
Base destination class for importing configuration entities.

Namespace

Drupal\migrate\Plugin\migrate\destination

Code

public function import(Row $row, array $old_destination_id_values = []) {
  if ($row->isStub()) {
    throw new MigrateException('Config entities can not be stubbed.');
  }
  $this->rollbackAction = MigrateIdMapInterface::ROLLBACK_DELETE;
  $ids = $this->getIds();
  $id_key = $this->getKey('id');
  if (count($ids) > 1) {
    // Ids is keyed by the key name so grab the keys.
    $id_keys = array_keys($ids);
    if (!$row->getDestinationProperty($id_key)) {
      // Set the ID into the destination in for form "val1.val2.val3".
      $row->setDestinationProperty($id_key, $this->generateId($row, $id_keys));
    }
  }
  $entity = $this->getEntity($row, $old_destination_id_values);
  // Translations are already saved in updateEntity by configuration override.
  if (!$this->isTranslationDestination()) {
    $entity->save();
  }
  if (count($ids) > 1) {
    // This can only be a config entity, content entities have their ID key
    // and that's it.
    $return = [];
    foreach ($id_keys as $id_key) {
      if ($this->isTranslationDestination() && $id_key == 'langcode') {
        // Config entities do not have a language property, get the language
        // code from the destination.
        $return[] = $row->getDestinationProperty($id_key);
      }
      else {
        $return[] = $entity->get($id_key);
      }
    }
    return $return;
  }
  return [
    $entity->id(),
  ];
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.