You are here

protected static function StorageCopyTrait::replaceStorageContents in Drupal 9

Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/Config/StorageCopyTrait.php \Drupal\Core\Config\StorageCopyTrait::replaceStorageContents()

Copy the configuration from one storage to another and remove stale items.

This method empties target storage and copies all collections from source. Configuration is only copied and not imported, should not be used with the active storage as the target.

Parameters

\Drupal\Core\Config\StorageInterface $source: The configuration storage to copy from.

\Drupal\Core\Config\StorageInterface $target: The configuration storage to copy to.

7 calls to StorageCopyTrait::replaceStorageContents()
ConfigManager::createSnapshot in core/lib/Drupal/Core/Config/ConfigManager.php
Creates a configuration snapshot following a successful import.
ConfigTestTrait::copyConfig in core/tests/Drupal/Tests/ConfigTestTrait.php
Copies configuration objects from source storage to target storage.
ExportStorageManager::getStorage in core/lib/Drupal/Core/Config/ExportStorageManager.php
Get the config storage.
ImportStorageTransformer::transform in core/lib/Drupal/Core/Config/ImportStorageTransformer.php
Transform the storage to be imported from.
ReadOnlyStorageTest::testWriteOperations in core/tests/Drupal/Tests/Core/Config/ReadOnlyStorageTest.php
@covers ::write @covers ::delete @covers ::rename @covers ::deleteAll

... See full list

File

core/lib/Drupal/Core/Config/StorageCopyTrait.php, line 22

Class

StorageCopyTrait
Utility trait to copy configuration from one storage to another.

Namespace

Drupal\Core\Config

Code

protected static function replaceStorageContents(StorageInterface $source, StorageInterface &$target) {

  // Make sure there is no stale configuration in the target storage.
  foreach (array_merge([
    StorageInterface::DEFAULT_COLLECTION,
  ], $target
    ->getAllCollectionNames()) as $collection) {
    $target
      ->createCollection($collection)
      ->deleteAll();
  }

  // Copy all the configuration from all the collections.
  foreach (array_merge([
    StorageInterface::DEFAULT_COLLECTION,
  ], $source
    ->getAllCollectionNames()) as $collection) {
    $source_collection = $source
      ->createCollection($collection);
    $target_collection = $target
      ->createCollection($collection);
    foreach ($source_collection
      ->listAll() as $name) {
      $data = $source_collection
        ->read($name);
      if ($data !== FALSE) {
        $target_collection
          ->write($name, $data);
      }
      else {
        \Drupal::logger('config')
          ->notice('Missing required data for configuration: %config', [
          '%config' => $name,
        ]);
      }
    }
  }

  // Make sure that the target is set to the same collection as the source.
  $target = $target
    ->createCollection($source
    ->getCollectionName());
}