You are here

protected function ModuleExtensionList::doList in Drupal 9

Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/Extension/ModuleExtensionList.php \Drupal\Core\Extension\ModuleExtensionList::doList()

Builds the list of extensions.

Return value

\Drupal\Core\Extension\Extension[] Processed extension objects, keyed by machine name.

Throws

\Drupal\Core\Extension\InfoParserException If one of the .info.yml files is incomplete, or causes a parsing error.

Overrides ExtensionList::doList

File

core/lib/Drupal/Core/Extension/ModuleExtensionList.php, line 153

Class

ModuleExtensionList
Provides a list of available modules.

Namespace

Drupal\Core\Extension

Code

protected function doList() {

  // Find modules.
  $extensions = parent::doList();

  // It is possible that a module was marked as required by
  // hook_system_info_alter() and modules that it depends on are not required.
  foreach ($extensions as $extension) {
    $this
      ->ensureRequiredDependencies($extension, $extensions);
  }

  // Add status, weight, and schema version.
  $installed_modules = $this->configFactory
    ->get('core.extension')
    ->get('module') ?: [];
  foreach ($extensions as $name => $module) {
    $module->weight = isset($installed_modules[$name]) ? $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];

    // Installation profile hooks are always executed last.
    $active_profile->weight = 1000;

    // Installation profiles are hidden by default, unless explicitly
    // specified otherwise in the .info.yml file.
    if (!isset($active_profile->info['hidden'])) {
      $active_profile->info['hidden'] = TRUE;
    }

    // The installation profile is required.
    $active_profile->info['required'] = TRUE;

    // Add a default distribution name if the profile did not provide one.
    // @see install_profile_info()
    // @see drupal_install_profile_distribution_name()
    if (!isset($active_profile->info['distribution']['name'])) {
      $active_profile->info['distribution']['name'] = 'Drupal';
    }
  }
  return $extensions;
}