Files
popsu-d9/old.vendor/drupal/console/src/Bootstrap/DrupalKernelTrait.php
2022-04-27 11:30:43 +02:00

180 lines
4.9 KiB
PHP

<?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'] : [];
}
}