You are here

function install_profile_modules in Drupal 9

Same name and namespace in other branches
  1. 8 core/includes/install.core.inc \install_profile_modules()
  2. 7 includes/install.core.inc \install_profile_modules()
  3. 10 core/includes/install.core.inc \install_profile_modules()

Installs required modules via a batch process.

Parameters

$install_state: An array of information about the current installation state.

Return value

The batch definition.

1 string reference to 'install_profile_modules'
install_tasks in core/includes/install.core.inc
Returns a list of all tasks the installer currently knows about.

File

core/includes/install.core.inc, line 1564
API functions for installing Drupal.

Code

function install_profile_modules(&$install_state) {

  // We need to manually trigger the installation of core-provided entity types,
  // as those will not be handled by the module installer.
  install_core_entity_type_definitions();
  $modules = $install_state['profile_info']['install'];
  $files = \Drupal::service('extension.list.module')
    ->getList();

  // Always install required modules first. Respect the dependencies between
  // the modules.
  $required = [];
  $non_required = [];

  // Add modules that other modules depend on.
  foreach ($modules as $module) {
    if ($files[$module]->requires) {
      $modules = array_merge($modules, array_keys($files[$module]->requires));
    }
  }

  // The System and User modules have already been installed by
  // install_base_system().
  $modules = array_diff(array_unique($modules), [
    'system',
    'user',
  ]);
  foreach ($modules as $module) {
    if (!empty($files[$module]->info['required'])) {
      $required[$module] = $files[$module]->sort;
    }
    else {
      $non_required[$module] = $files[$module]->sort;
    }
  }
  arsort($required);
  arsort($non_required);
  $operations = [];
  foreach ($required + $non_required as $module => $weight) {
    $operations[] = [
      '_install_module_batch',
      [
        $module,
        $files[$module]->info['name'],
      ],
    ];
  }
  $batch = [
    'operations' => $operations,
    'title' => t('Installing @drupal', [
      '@drupal' => drupal_install_profile_distribution_name(),
    ]),
    'error_message' => t('The installation has encountered an error.'),
  ];
  return $batch;
}