comparison core/lib/Drupal/Core/Config/UnmetDependenciesException.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 129ea1e6d783
comparison
equal deleted inserted replaced
-1:000000000000 0:4c8ae668cc8c
1 <?php
2
3 namespace Drupal\Core\Config;
4
5 use Drupal\Component\Render\FormattableMarkup;
6 use Drupal\Core\StringTranslation\TranslationInterface;
7
8 /**
9 * An exception thrown if configuration has unmet dependencies.
10 */
11 class UnmetDependenciesException extends ConfigException {
12
13 /**
14 * A list of configuration objects that have unmet dependencies.
15 *
16 * The list is keyed by the config object name, and the value is an array of
17 * the missing dependencies:
18 *
19 * @code
20 *
21 * self::configObjects = [
22 * config_object_name => [
23 * 'missing_dependency_1',
24 * 'missing_dependency_2',
25 * ]
26 * ];
27 *
28 * @endcode
29 *
30 * @var array
31 */
32 protected $configObjects = [];
33
34 /**
35 * The name of the extension that is being installed.
36 *
37 * @var string
38 */
39 protected $extension;
40
41 /**
42 * Gets the list of configuration objects that have unmet dependencies.
43 *
44 * @return array
45 * A list of configuration objects that have unmet dependencies, keyed by
46 * object name, with the value being a list of the unmet dependencies.
47 */
48 public function getConfigObjects() {
49 return $this->configObjects;
50 }
51
52 /**
53 * Gets the name of the extension that is being installed.
54 *
55 * @return string
56 * The name of the extension that is being installed.
57 */
58 public function getExtension() {
59 return $this->extension;
60 }
61
62 /**
63 * Gets a translated message from the exception.
64 *
65 * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
66 * The string translation service.
67 *
68 * @return string
69 */
70 public function getTranslatedMessage(TranslationInterface $string_translation, $extension) {
71 return $string_translation->translate(
72 'Unable to install %extension due to unmet dependencies: %config_names',
73 [
74 '%config_names' => static::formatConfigObjectList($this->configObjects),
75 '%extension' => $extension,
76 ]
77 );
78 }
79
80 /**
81 * Creates an exception for an extension and a list of configuration objects.
82 *
83 * @param $extension
84 * The name of the extension that is being installed.
85 * @param array $config_objects
86 * A list of configuration keyed by configuration name, with unmet
87 * dependencies as the value.
88 *
89 * @return \Drupal\Core\Config\PreExistingConfigException
90 */
91 public static function create($extension, array $config_objects) {
92 $message = new FormattableMarkup('Configuration objects provided by %extension have unmet dependencies: %config_names',
93 [
94 '%config_names' => static::formatConfigObjectList($config_objects),
95 '%extension' => $extension
96 ]
97 );
98 $e = new static($message);
99 $e->configObjects = $config_objects;
100 $e->extension = $extension;
101 return $e;
102 }
103
104 /**
105 * Formats a list of configuration objects.
106 *
107 * @param array $config_objects
108 * A list of configuration object names that have unmet dependencies.
109 *
110 * @return string
111 * The imploded config_objects, formatted in an easy to read string.
112 */
113 protected static function formatConfigObjectList(array $config_objects) {
114 $list = [];
115 foreach ($config_objects as $config_object => $missing_dependencies) {
116 $list[] = $config_object . ' (' . implode(', ', $missing_dependencies) . ')';
117 }
118 return implode(', ', $list);
119 }
120
121 }