ConfigImporter::importInvokeOwner

protected ConfigImporter::importInvokeOwner($collection, $op, $name)

Invokes import* methods on configuration entity storage.

Allow modules to take over configuration change operations for higher-level configuration data.

@todo Add support for other extension types; e.g., themes etc.

Parameters

string $collection: The configuration collection.

string $op: The change operation to get the unprocessed list for, either delete, create, rename, or update.

string $name: The name of the configuration to process.

Return value

bool TRUE if the configuration was imported as a configuration entity. FALSE otherwise.

Throws

\Drupal\Core\Entity\EntityStorageException Thrown if the data is owned by an entity type, but the entity storage does not support imports.

File

core/lib/Drupal/Core/Config/ConfigImporter.php, line 945

Class

ConfigImporter
Defines a configuration importer.

Namespace

Drupal\Core\Config

Code

protected function importInvokeOwner($collection, $op, $name) {
  // Renames are handled separately.
  if ($op == 'rename') {
    return $this->importInvokeRename($collection, $name);
  }
  // Validate the configuration object name before importing it.
  // Config::validateName($name);
  if ($entity_type = $this->configManager->getEntityTypeIdByName($name)) {
    $old_config = new Config($name, $this->storageComparer->getTargetStorage($collection), $this->eventDispatcher, $this->typedConfigManager);
    if ($old_data = $this->storageComparer->getTargetStorage($collection)->read($name)) {
      $old_config->initWithData($old_data);
    }

    $data = $this->storageComparer->getSourceStorage($collection)->read($name);
    $new_config = new Config($name, $this->storageComparer->getTargetStorage($collection), $this->eventDispatcher, $this->typedConfigManager);
    if ($data !== FALSE) {
      $new_config->setData($data);
    }

    $method = 'import' . ucfirst($op);
    $entity_storage = $this->configManager->getEntityManager()->getStorage($entity_type);
    // Call to the configuration entity's storage to handle the configuration
    // change.
    if (!($entity_storage instanceof ImportableEntityStorageInterface)) {
      throw new EntityStorageException(sprintf('The entity storage "%s" for the "%s" entity type does not support imports', get_class($entity_storage), $entity_type));
    }
    $entity_storage->$method($name, $new_config, $old_config);
    $this->setProcessedConfiguration($collection, $op, $name);
    return TRUE;
  }
  return FALSE;
}
doc_Drupal
2016-10-29 08:53:41
Comments
Leave a Comment

Please login to continue.