protected function 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;
}

© 2001–2016 by the original authors
Licensed under the GNU General Public License, version 2 and later.
Drupal is a registered trademark of Dries Buytaert.
https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Config!ConfigImporter.php/function/ConfigImporter::importInvokeOwner/8.1.x