3 namespace Drupal\Console\Bootstrap;
5 use Drupal\Console\Utils\Site;
6 use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
7 use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
8 use Symfony\Component\DependencyInjection\ContainerBuilder;
9 use Symfony\Component\Config\FileLocator;
10 use Symfony\Component\Finder\Finder;
11 use Symfony\Component\Yaml\Yaml;
12 use Drupal\Console\Utils\TranslatorManager;
13 use Drupal\Console\Extension\Extension;
14 use Drupal\Console\Extension\Manager;
17 * FindCommandsCompilerPass
19 class AddServicesCompilerPass implements CompilerPassInterface
37 * AddCommandsCompilerPass constructor.
40 * @param string $appRoot
41 * @param boolean $rebuild
43 public function __construct($root, $appRoot, $rebuild = false)
46 $this->appRoot = $appRoot;
47 $this->rebuild = $rebuild;
53 public function process(ContainerBuilder $container)
55 $loader = new YamlFileLoader(
57 new FileLocator($this->root)
61 $this->root. DRUPAL_CONSOLE_CORE . 'services.yml',
62 $this->root. DRUPAL_CONSOLE . 'uninstall.services.yml',
63 $this->root. DRUPAL_CONSOLE . 'services.yml',
64 // $this->root. DRUPAL_CONSOLE . 'extend.console.uninstall.services.yml',
67 foreach ($servicesFiles as $servicesFile) {
68 if (file_exists($servicesFile)) {
69 $loader->load($servicesFile);
73 $container->get('console.configuration_manager')
74 ->loadConfiguration($this->root)
80 $site = $container->get('console.site');
82 if (!$this->rebuild && $site->cachedServicesFileExists()) {
83 $loader->load($site->cachedServicesFile());
85 $site->removeCachedServicesFile();
86 $finder = new Finder();
91 '%s/config/services/drupal-console',
92 $this->root.DRUPAL_CONSOLE
97 foreach ($finder as $file) {
98 $loader->load($file->getPathName());
99 $servicesData = $this->extractServiceData(
100 $file->getPathName(),
106 * @var Manager $extensionManager
108 $extensionManager = $container->get('console.extension_manager');
110 * @var Extension[] $modules
112 $modules = $extensionManager->discoverModules()
118 foreach ($modules as $module) {
119 if ($module->origin == 'core') {
120 $consoleServicesExtensionFile = $this->root . DRUPAL_CONSOLE .
121 'config/services/drupal-core/'.$module->getName().'.yml';
122 if (is_file($consoleServicesExtensionFile)) {
123 $loader->load($consoleServicesExtensionFile);
124 $servicesData = $this->extractServiceData(
125 $consoleServicesExtensionFile,
131 $consoleServicesExtensionFile = $this->appRoot . '/' .
132 $module->getPath() . '/console.services.yml';
133 if (is_file($consoleServicesExtensionFile)) {
134 $loader->load($consoleServicesExtensionFile);
135 $servicesData = $this->extractServiceData(
136 $consoleServicesExtensionFile,
143 * @var Extension[] $themes
145 $themes = $extensionManager->discoverThemes()
150 foreach ($themes as $theme) {
151 $consoleServicesExtensionFile = $this->appRoot . '/' .
152 $theme->getPath() . '/console.services.yml';
153 if (is_file($consoleServicesExtensionFile)) {
154 $loader->load($consoleServicesExtensionFile);
155 $servicesData = $this->extractServiceData(
156 $consoleServicesExtensionFile,
162 if ($servicesData && is_writable($site->getCacheDirectory())) {
164 $site->cachedServicesFile(),
165 Yaml::dump($servicesData, 4, 2)
170 $consoleExtendServicesFile = $this->root . DRUPAL_CONSOLE . '/extend.console.services.yml';
172 if (file_exists($consoleExtendServicesFile)) {
173 $loader->load($consoleExtendServicesFile);
176 $configurationManager = $container->get('console.configuration_manager');
177 $directory = $configurationManager->getConsoleDirectory() . 'extend/';
178 $autoloadFile = $directory . 'vendor/autoload.php';
179 if (is_file($autoloadFile)) {
180 include_once $autoloadFile;
181 $extendServicesFile = $directory . 'extend.console.services.yml';
182 if (is_file($extendServicesFile)) {
183 $loader->load($extendServicesFile);
187 $container->setParameter(
188 'console.service_definitions',
189 $container->getDefinitions()
192 $definition = $container->getDefinition('console.translator_manager');
193 $definition->setClass(TranslatorManager::class);
198 * @param $servicesData
202 protected function extractServiceData($filePath, $servicesData)
204 $serviceFileData = Yaml::parse(
205 file_get_contents($filePath)
208 $servicesData = array_merge_recursive(
213 return $servicesData;