Security update for Core, with self-updated composer
[yaffs-website] / vendor / drupal / console / src / Bootstrap / DrupalKernelTrait.php
1 <?php
2
3 namespace Drupal\Console\Bootstrap;
4
5 use Symfony\Component\Finder\Finder;
6 use Symfony\Component\HttpFoundation\Request;
7 use Drupal\Core\DependencyInjection\ServiceModifierInterface;
8 use Drupal\Console\Core\Utils\DrupalFinder;
9
10 /**
11  * Trait DrupalKernelTrait
12  *
13  * @package Drupal\Console\Bootstrap
14  */
15 trait DrupalKernelTrait
16 {
17     /**
18      * @var ServiceModifierInterface[]
19      */
20     protected $serviceModifiers = [];
21
22     /**
23      * @inheritdoc
24      */
25     public static function createFromRequest(Request $request, $class_loader, $environment, $allow_dumping = true, $app_root = null)
26     {
27         $kernel = new static($environment, $class_loader, $allow_dumping, $app_root);
28         static::bootEnvironment($app_root);
29         $kernel->initializeSettings($request);
30
31         return $kernel;
32     }
33
34     /**
35      * @param \Drupal\Core\DependencyInjection\ServiceModifierInterface $serviceModifier
36      */
37     public function addServiceModifier(ServiceModifierInterface $serviceModifier)
38     {
39         $this->serviceModifiers[] = $serviceModifier;
40     }
41
42     /**
43      * @inheritdoc
44      */
45     protected function getContainerBuilder()
46     {
47         $container = parent::getContainerBuilder();
48         foreach ($this->serviceModifiers as $serviceModifier) {
49             $serviceModifier->alter($container);
50         }
51
52         return $container;
53     }
54
55     /**
56      * {@inheritdoc}
57      */
58     public function discoverServiceProviders()
59     {
60         // Discover Drupal service providers
61         parent::discoverServiceProviders();
62
63         // Discover Drupal Console service providers
64         $this->discoverDrupalConsoleServiceProviders();
65     }
66
67     public function getContainerKey()
68     {
69         return hash("sha256", $this->getContainerCacheKey());
70     }
71
72     public function discoverDrupalConsoleServiceProviders()
73     {
74         $drupalFinder = new DrupalFinder();
75         $drupalFinder->locateRoot(getcwd());
76
77         // Load DrupalConsole services
78         $this->addDrupalConsoleServices($drupalFinder->getComposerRoot());
79
80         // Load DrupalConsole services
81         $this->addDrupalConsoleConfigServices($drupalFinder->getComposerRoot());
82
83         // Load DrupalConsole extended services
84         $this->addDrupalConsoleExtendedServices($drupalFinder->getComposerRoot());
85
86         // Add DrupalConsole module(s) services
87         $this->addDrupalConsoleModuleServices($drupalFinder->getDrupalRoot());
88
89         // Add DrupalConsole theme(s) services
90         $this->addDrupalConsoleThemeServices($drupalFinder->getDrupalRoot());
91     }
92
93     protected function addDrupalConsoleServices($root)
94     {
95         $servicesFiles = array_filter(
96             [
97                 $root. DRUPAL_CONSOLE_CORE . 'services.yml',
98                 $root. DRUPAL_CONSOLE . 'uninstall.services.yml',
99                 $root. DRUPAL_CONSOLE . 'services.yml'
100             ],
101             function ($file) {
102                 return file_exists($file);
103             }
104         );
105
106         $this->addDrupalServiceFiles($servicesFiles);
107     }
108
109     protected function addDrupalConsoleConfigServices($root)
110     {
111         $finder = new Finder();
112         $finder->files()
113             ->name('*.yml')
114             ->in(
115                 sprintf(
116                     '%s/config/services',
117                     $root.DRUPAL_CONSOLE
118                 )
119             );
120
121         $servicesFiles  = [];
122         foreach ($finder as $file) {
123             $servicesFiles[] = $file->getPathname();
124         }
125
126         $this->addDrupalServiceFiles($servicesFiles);
127     }
128
129     protected function addDrupalConsoleExtendedServices($root)
130     {
131         $servicesFiles = array_filter(
132             [
133                 $root . DRUPAL_CONSOLE . 'extend.console.services.yml',
134                 $root . DRUPAL_CONSOLE . 'extend.console.uninstall.services.yml',
135             ],
136             function ($file) {
137                 return file_exists($file);
138             }
139         );
140
141         $this->addDrupalServiceFiles($servicesFiles);
142     }
143
144     protected function addDrupalConsoleModuleServices($root)
145     {
146         $servicesFiles  = [];
147         $moduleFileNames = $this->getModuleFileNames();
148         foreach ($moduleFileNames as $module => $filename) {
149             $servicesFile = $root . '/' .
150                 dirname($filename) .
151                 "/console.services.yml";
152             if (file_exists($servicesFile)) {
153                 $servicesFiles[] = $servicesFile;
154             }
155         }
156
157         $this->addDrupalServiceFiles($servicesFiles);
158     }
159
160     public function addDrupalServiceFiles($servicesFiles)
161     {
162         $this->serviceYamls['site'] = array_merge(
163             $this->serviceYamls['site'],
164             $servicesFiles
165         );
166     }
167
168     protected function addDrupalConsoleThemeServices($root)
169     {
170         $themes = $this->getThemeFileNames();
171     }
172
173     private function getThemeFileNames()
174     {
175         $extensions = $this->getConfigStorage()->read('core.extension');
176
177         return isset($extensions['theme']) ? $extensions['theme'] : [];
178     }
179 }