diff core/lib/Drupal/Core/Config/PreExistingConfigException.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 129ea1e6d783
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/lib/Drupal/Core/Config/PreExistingConfigException.php	Wed Nov 29 16:09:58 2017 +0000
@@ -0,0 +1,96 @@
+<?php
+
+namespace Drupal\Core\Config;
+
+use Drupal\Component\Utility\SafeMarkup;
+
+/**
+ * An exception thrown if configuration with the same name already exists.
+ */
+class PreExistingConfigException extends ConfigException {
+
+  /**
+   * A list of configuration objects that already exist in active configuration.
+   *
+   * @var array
+   */
+  protected $configObjects = [];
+
+  /**
+   * The name of the module that is being installed.
+   *
+   * @var string
+   */
+  protected $extension;
+
+  /**
+   * Gets the list of configuration objects that already exist.
+   *
+   * @return array
+   *   A list of configuration objects that already exist in active
+   *   configuration keyed by collection.
+   */
+  public function getConfigObjects() {
+    return $this->configObjects;
+  }
+
+  /**
+   * Gets the name of the extension that is being installed.
+   *
+   * @return string
+   *   The name of the extension that is being installed.
+   */
+  public function getExtension() {
+    return $this->extension;
+  }
+
+  /**
+   * Creates an exception for an extension and a list of configuration objects.
+   *
+   * @param $extension
+   *   The name of the extension that is being installed.
+   * @param array $config_objects
+   *   A list of configuration objects that already exist in active
+   *   configuration, keyed by config collection.
+   *
+   * @return \Drupal\Core\Config\PreExistingConfigException
+   */
+  public static function create($extension, array $config_objects) {
+    $message = SafeMarkup::format('Configuration objects (@config_names) provided by @extension already exist in active configuration',
+      [
+        '@config_names' => implode(', ', static::flattenConfigObjects($config_objects)),
+        '@extension' => $extension
+      ]
+    );
+    $e = new static($message);
+    $e->configObjects = $config_objects;
+    $e->extension = $extension;
+    return $e;
+  }
+
+  /**
+   * Flattens the config object array to a single dimensional list.
+   *
+   * @param array $config_objects
+   *   A list of configuration objects that already exist in active
+   *   configuration, keyed by config collection.
+   *
+   * @return array
+   *   A list of configuration objects that have been prefixed with their
+   *   collection.
+   */
+  public static function flattenConfigObjects(array $config_objects) {
+    $flat_config_objects = [];
+    foreach ($config_objects as $collection => $config_names) {
+      $config_names = array_map(function ($config_name) use ($collection) {
+        if ($collection != StorageInterface::DEFAULT_COLLECTION) {
+          $config_name = str_replace('.', DIRECTORY_SEPARATOR, $collection) . DIRECTORY_SEPARATOR . $config_name;
+        }
+        return $config_name;
+      }, $config_names);
+      $flat_config_objects = array_merge($flat_config_objects, $config_names);
+    }
+    return $flat_config_objects;
+  }
+
+}