180 lines
4.9 KiB
PHP
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'] : [];
|
|
}
|
|
}
|