Same filename and directory in other branches
- 8.9.x core/lib/Drupal/Core/Extension/ModuleExtensionList.php
- 9 core/lib/Drupal/Core/Extension/ModuleExtensionList.php
Namespace
Drupal\Core\Extension
File
core/lib/Drupal/Core/Extension/ModuleExtensionList.php
View source
<?php
namespace Drupal\Core\Extension;
use Drupal\Core\Cache\CacheBackendInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\State\StateInterface;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\Core\Update\UpdateHookRegistry;
class ModuleExtensionList extends ExtensionList {
use StringTranslationTrait;
protected $defaults = [
'dependencies' => [],
'description' => '',
'package' => 'Other',
'version' => NULL,
'php' => \Drupal::MINIMUM_PHP,
];
protected $configFactory;
protected $profileList;
public function __construct($root, $type, CacheBackendInterface $cache, InfoParserInterface $info_parser, ModuleHandlerInterface $module_handler, StateInterface $state, ConfigFactoryInterface $config_factory, ExtensionList $profile_list, $install_profile, array $container_modules_info = []) {
parent::__construct($root, $type, $cache, $info_parser, $module_handler, $state, $install_profile);
$this->configFactory = $config_factory;
$this->profileList = $profile_list;
foreach ($container_modules_info as $module_name => $info) {
$this
->setPathname($module_name, $info['pathname']);
}
}
protected function getExtensionDiscovery() {
$discovery = parent::getExtensionDiscovery();
if ($this
->getActiveProfile()) {
$discovery
->setProfileDirectories($this
->getProfileDirectories($discovery));
}
return $discovery;
}
protected function getProfileDirectories(ExtensionDiscovery $discovery) {
$discovery
->setProfileDirectories([]);
$all_profiles = $discovery
->scan('profile');
$active_profile = $all_profiles[$this->installProfile];
$profiles = array_intersect_key($all_profiles, $this->configFactory
->get('core.extension')
->get('module') ?: [
$active_profile
->getName() => 0,
]);
$profile_directories = array_map(function (Extension $profile) {
return $profile
->getPath();
}, $profiles);
return $profile_directories;
}
protected function getActiveProfile() {
$profiles = $this->profileList
->getList();
if ($this->installProfile && isset($profiles[$this->installProfile])) {
return $profiles[$this->installProfile];
}
return NULL;
}
protected function doScanExtensions() {
$extensions = parent::doScanExtensions();
$profiles = $this->profileList
->getList();
if ($this->installProfile && isset($profiles[$this->installProfile])) {
$extensions[$this->installProfile] = $profiles[$this->installProfile];
}
return $extensions;
}
protected function doList() {
$extensions = parent::doList();
foreach ($extensions as $extension) {
$this
->ensureRequiredDependencies($extension, $extensions);
}
$installed_modules = $this->configFactory
->get('core.extension')
->get('module') ?: [];
foreach ($extensions as $name => $module) {
$module->weight = $installed_modules[$name] ?? 0;
$module->status = (int) isset($installed_modules[$name]);
$module->schema_version = UpdateHookRegistry::SCHEMA_UNINSTALLED;
}
$extensions = $this->moduleHandler
->buildModuleDependencies($extensions);
if ($this->installProfile && $extensions[$this->installProfile]) {
$active_profile = $extensions[$this->installProfile];
$active_profile->weight = 1000;
if (!isset($active_profile->info['hidden'])) {
$active_profile->info['hidden'] = TRUE;
}
if (!isset($active_profile->info['distribution']['name'])) {
$active_profile->info['distribution']['name'] = 'Drupal';
}
}
return $extensions;
}
protected function getInstalledExtensionNames() {
return array_keys($this->moduleHandler
->getModuleList());
}
protected function ensureRequiredDependencies(Extension $module, array $modules = []) {
if (!empty($module->info['required'])) {
foreach ($module->info['dependencies'] as $dependency) {
$dependency_name = Dependency::createFromString($dependency)
->getName();
if (!isset($modules[$dependency_name]->info['required'])) {
$modules[$dependency_name]->info['required'] = TRUE;
$modules[$dependency_name]->info['explanation'] = $this
->t('Dependency of required module @module', [
'@module' => $module->info['name'],
]);
$this
->ensureRequiredDependencies($modules[$dependency_name], $modules);
}
}
}
}
}
Classes