#898654 by chx, Damien Tournoud, alex_b: Fixed Required modules not installed before optional modules.

merge-requests/26/head
Angie Byron 2010-09-01 01:24:05 +00:00
parent e5a965d777
commit 1ba166ff8e
1 changed files with 25 additions and 7 deletions

View File

@ -1354,16 +1354,34 @@ function install_profile_modules(&$install_state) {
$files = system_rebuild_module_data(); $files = system_rebuild_module_data();
variable_del('install_profile_modules'); variable_del('install_profile_modules');
// Install dependencies first. // Always install required modules first. Respect the dependencies between
$modules = array_flip($modules); // the modules.
foreach ($modules as $module => $weight) { $required = array();
$modules[$module] = $files[$module]->sort; $non_required = array();
// Although the profile module is marked as required, it needs to go after
// every dependency, including non-required ones. So clear its required
// flag for now to allow it to install late.
$files[$install_state['parameters']['profile']]->info['required'] = FALSE;
// Add modules that other modules depend on.
foreach ($modules as $module) {
if ($files[$module]->requires) {
$modules = array_merge($modules, array_keys($files[$module]->requires));
}
} }
arsort($modules); $modules = array_unique($modules);
$modules = array_keys($modules); 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 = array(); $operations = array();
foreach ($modules as $module) { foreach ($required + $non_required as $module => $weight) {
$operations[] = array('_install_module_batch', array($module, $files[$module]->info['name'])); $operations[] = array('_install_module_batch', array($module, $files[$module]->info['name']));
} }
$batch = array( $batch = array(