5 * Contains Drupal\Console\Command\Shared\ExportTrait.
8 namespace Drupal\Console\Command\Shared;
10 use Drupal\Component\Serialization\Yaml;
11 use Drupal\Console\Core\Style\DrupalStyle;
14 * Class ConfigExportTrait
16 * @package Drupal\Console\Command
22 * @param bool|false $uuid
25 protected function getConfiguration($configName, $uuid = false, $hash = false)
27 $config = $this->configStorage->read($configName);
29 // Exclude uuid base in parameter, useful to share configurations.
31 unset($config['uuid']);
34 // Exclude default_config_hash inside _core is site-specific.
36 unset($config['_core']['default_config_hash']);
43 * @param string $directory
44 * @param DrupalStyle $io
46 protected function exportConfig($directory, DrupalStyle $io, $message)
50 foreach ($this->configExport as $fileName => $config) {
51 $yamlConfig = Yaml::encode($config['data']);
53 $configFile = sprintf(
59 $io->info('- ' . $configFile);
61 // Create directory if doesn't exist
62 if (!file_exists($directory)) {
63 mkdir($directory, 0755, true);
74 * @param string $module
75 * @param DrupalStyle $io
77 protected function exportConfigToModule($module, DrupalStyle $io, $message)
81 $module = $this->extensionManager->getModule($module);
83 foreach ($this->configExport as $fileName => $config) {
84 $yamlConfig = Yaml::encode($config['data']);
86 if ($config['optional']) {
87 $configDirectory = $module->getConfigOptionalDirectory(false);
89 $configDirectory = $module->getConfigInstallDirectory(false);
92 $configFile = sprintf(
98 $io->info('- ' . $configFile);
100 // Create directory if doesn't exist
101 if (!file_exists($configDirectory)) {
102 mkdir($configDirectory, 0755, true);
112 protected function fetchDependencies($config, $type = 'config')
114 if (isset($config['dependencies'][$type])) {
115 return $config['dependencies'][$type];
121 protected function resolveDependencies($dependencies, $optional = false)
123 foreach ($dependencies as $dependency) {
124 if (!array_key_exists($dependency, $this->configExport)) {
125 $this->configExport[$dependency] = ['data' => $this->getConfiguration($dependency), 'optional' => $optional];
126 if ($dependencies = $this->fetchDependencies($this->configExport[$dependency], 'config')) {
127 $this->resolveDependencies($dependencies, $optional);
133 protected function exportModuleDependencies($io, $module, $dependencies)
135 $module = $this->extensionManager->getModule($module);
136 $info_yaml = $module->info;
138 if (empty($info_yaml['dependencies'])) {
139 $info_yaml['dependencies'] = $dependencies;
141 $info_yaml['dependencies'] = array_unique(array_merge($info_yaml['dependencies'], $dependencies));
144 if (file_put_contents($module->getPathname(), Yaml::encode($info_yaml))) {
148 $this->trans('commands.config.export.view.messages.depencies-included'),
149 $module->getPathname()
153 foreach ($dependencies as $dependency) {
155 ' [-] ' . $dependency
159 $io->error($this->trans('commands.site.mode.messages.error-writing-file') . ': ' . $this->getApplication()->getSite()->getModuleInfoFile($module));