Security update for Core, with self-updated composer
[yaffs-website] / vendor / drupal / console / src / Bootstrap / DrupalKernelTrait.php
diff --git a/vendor/drupal/console/src/Bootstrap/DrupalKernelTrait.php b/vendor/drupal/console/src/Bootstrap/DrupalKernelTrait.php
new file mode 100644 (file)
index 0000000..2177f39
--- /dev/null
@@ -0,0 +1,179 @@
+<?php
+
+namespace Drupal\Console\Bootstrap;
+
+use Symfony\Component\Finder\Finder;
+use Symfony\Component\HttpFoundation\Request;
+use Drupal\Core\DependencyInjection\ServiceModifierInterface;
+use Drupal\Console\Core\Utils\DrupalFinder;
+
+/**
+ * Trait DrupalKernelTrait
+ *
+ * @package Drupal\Console\Bootstrap
+ */
+trait DrupalKernelTrait
+{
+    /**
+     * @var ServiceModifierInterface[]
+     */
+    protected $serviceModifiers = [];
+
+    /**
+     * @inheritdoc
+     */
+    public static function createFromRequest(Request $request, $class_loader, $environment, $allow_dumping = true, $app_root = null)
+    {
+        $kernel = new static($environment, $class_loader, $allow_dumping, $app_root);
+        static::bootEnvironment($app_root);
+        $kernel->initializeSettings($request);
+
+        return $kernel;
+    }
+
+    /**
+     * @param \Drupal\Core\DependencyInjection\ServiceModifierInterface $serviceModifier
+     */
+    public function addServiceModifier(ServiceModifierInterface $serviceModifier)
+    {
+        $this->serviceModifiers[] = $serviceModifier;
+    }
+
+    /**
+     * @inheritdoc
+     */
+    protected function getContainerBuilder()
+    {
+        $container = parent::getContainerBuilder();
+        foreach ($this->serviceModifiers as $serviceModifier) {
+            $serviceModifier->alter($container);
+        }
+
+        return $container;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function discoverServiceProviders()
+    {
+        // Discover Drupal service providers
+        parent::discoverServiceProviders();
+
+        // Discover Drupal Console service providers
+        $this->discoverDrupalConsoleServiceProviders();
+    }
+
+    public function getContainerKey()
+    {
+        return hash("sha256", $this->getContainerCacheKey());
+    }
+
+    public function discoverDrupalConsoleServiceProviders()
+    {
+        $drupalFinder = new DrupalFinder();
+        $drupalFinder->locateRoot(getcwd());
+
+        // Load DrupalConsole services
+        $this->addDrupalConsoleServices($drupalFinder->getComposerRoot());
+
+        // Load DrupalConsole services
+        $this->addDrupalConsoleConfigServices($drupalFinder->getComposerRoot());
+
+        // Load DrupalConsole extended services
+        $this->addDrupalConsoleExtendedServices($drupalFinder->getComposerRoot());
+
+        // Add DrupalConsole module(s) services
+        $this->addDrupalConsoleModuleServices($drupalFinder->getDrupalRoot());
+
+        // Add DrupalConsole theme(s) services
+        $this->addDrupalConsoleThemeServices($drupalFinder->getDrupalRoot());
+    }
+
+    protected function addDrupalConsoleServices($root)
+    {
+        $servicesFiles = array_filter(
+            [
+                $root. DRUPAL_CONSOLE_CORE . 'services.yml',
+                $root. DRUPAL_CONSOLE . 'uninstall.services.yml',
+                $root. DRUPAL_CONSOLE . 'services.yml'
+            ],
+            function ($file) {
+                return file_exists($file);
+            }
+        );
+
+        $this->addDrupalServiceFiles($servicesFiles);
+    }
+
+    protected function addDrupalConsoleConfigServices($root)
+    {
+        $finder = new Finder();
+        $finder->files()
+            ->name('*.yml')
+            ->in(
+                sprintf(
+                    '%s/config/services',
+                    $root.DRUPAL_CONSOLE
+                )
+            );
+
+        $servicesFiles  = [];
+        foreach ($finder as $file) {
+            $servicesFiles[] = $file->getPathname();
+        }
+
+        $this->addDrupalServiceFiles($servicesFiles);
+    }
+
+    protected function addDrupalConsoleExtendedServices($root)
+    {
+        $servicesFiles = array_filter(
+            [
+                $root . DRUPAL_CONSOLE . 'extend.console.services.yml',
+                $root . DRUPAL_CONSOLE . 'extend.console.uninstall.services.yml',
+            ],
+            function ($file) {
+                return file_exists($file);
+            }
+        );
+
+        $this->addDrupalServiceFiles($servicesFiles);
+    }
+
+    protected function addDrupalConsoleModuleServices($root)
+    {
+        $servicesFiles  = [];
+        $moduleFileNames = $this->getModuleFileNames();
+        foreach ($moduleFileNames as $module => $filename) {
+            $servicesFile = $root . '/' .
+                dirname($filename) .
+                "/console.services.yml";
+            if (file_exists($servicesFile)) {
+                $servicesFiles[] = $servicesFile;
+            }
+        }
+
+        $this->addDrupalServiceFiles($servicesFiles);
+    }
+
+    public function addDrupalServiceFiles($servicesFiles)
+    {
+        $this->serviceYamls['site'] = array_merge(
+            $this->serviceYamls['site'],
+            $servicesFiles
+        );
+    }
+
+    protected function addDrupalConsoleThemeServices($root)
+    {
+        $themes = $this->getThemeFileNames();
+    }
+
+    private function getThemeFileNames()
+    {
+        $extensions = $this->getConfigStorage()->read('core.extension');
+
+        return isset($extensions['theme']) ? $extensions['theme'] : [];
+    }
+}