function ModuleInstaller::getModulesToInstall
Same name and namespace in other branches
- 11.x core/lib/Drupal/Core/Extension/ModuleInstaller.php \Drupal\Core\Extension\ModuleInstaller::getModulesToInstall()
Determines the full set of modules corresponding to the given list.
Parameters
string[] $module_list: An array of module machine names.
bool $enable_dependencies: (optional) If TRUE, dependencies are resolved and added to the returned list in the correct install order. If FALSE, only the given modules that are not yet installed are returned.
Return value
string[] The machine names of the modules that are not yet installed, including resolved dependencies, ordered the way ::install() would install them. Already installed modules are omitted.
Overrides ModuleInstallerInterface::getModulesToInstall
1 call to ModuleInstaller::getModulesToInstall()
- ModuleInstaller::install in core/
lib/ Drupal/ Core/ Extension/ ModuleInstaller.php - Installs a given list of modules.
File
-
core/
lib/ Drupal/ Core/ Extension/ ModuleInstaller.php, line 96
Class
- ModuleInstaller
- Default implementation of the module installer.
Namespace
Drupal\Core\ExtensionCode
public function getModulesToInstall(array $module_list, bool $enable_dependencies = TRUE) : array {
$installed_modules = \Drupal::configFactory()->get('core.extension')
->get('module') ?: [];
// Only process currently uninstalled modules.
$module_list = array_values(array_diff($module_list, array_keys($installed_modules)));
if (empty($module_list)) {
return [];
}
// Get all module data so we can find dependencies and sort. The module
// list needs to be reset so that it can re-scan and include any new
// modules that may have been added directly into the filesystem.
$module_data = \Drupal::service('extension.list.module')->reset()
->getList();
// Ensure all of the requested modules actually exist.
if ($missing_modules = array_diff_key(array_flip($module_list), $module_data)) {
throw new MissingDependencyException(sprintf('Unable to install modules %s due to missing modules %s.', implode(', ', $module_list), implode(', ', array_keys($missing_modules))));
}
foreach ($module_list as $module) {
if (!empty($module_data[$module]->info['core_incompatible'])) {
throw new MissingDependencyException("Unable to install modules: module '{$module}' is incompatible with this version of Drupal core.");
}
if ($module_data[$module]->info[ExtensionLifecycle::LIFECYCLE_IDENTIFIER] === ExtensionLifecycle::OBSOLETE) {
throw new ObsoleteExtensionException("Unable to install modules: module '{$module}' is obsolete.");
}
}
if ($enable_dependencies) {
$module_list = array_combine($module_list, $module_list);
// Add dependencies to the list. The new modules will be processed as
// the foreach loop continues.
foreach ($module_list as $module => $value) {
foreach (array_keys($module_data[$module]->requires) as $dependency) {
if (!isset($module_data[$dependency])) {
// The dependency does not exist.
throw new MissingDependencyException("Unable to install modules: module '{$module}' is missing its dependency module {$dependency}.");
}
// Skip already installed modules.
if (!isset($module_list[$dependency]) && !isset($installed_modules[$dependency])) {
if ($module_data[$dependency]->info['core_incompatible']) {
throw new MissingDependencyException("Unable to install modules: module '{$module}'. Its dependency module '{$dependency}' is incompatible with this version of Drupal core.");
}
$module_list[$dependency] = $dependency;
}
}
}
// Set the actual module weights.
$module_list = array_map(function ($module) use ($module_data) {
return $module_data[$module]->sort;
}, $module_list);
// Sort the module list by their weights (reverse).
arsort($module_list);
$module_list = array_keys($module_list);
}
return array_values($module_list);
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.