From 1ba166ff8e25f09035ffc90dc7bf095fa1dcd0cd Mon Sep 17 00:00:00 2001 From: Angie Byron Date: Wed, 1 Sep 2010 01:24:05 +0000 Subject: #898654 by chx, Damien Tournoud, alex_b: Fixed Required modules not installed before optional modules. --- includes/install.core.inc | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) (limited to 'includes/install.core.inc') diff --git a/includes/install.core.inc b/includes/install.core.inc index 5e16023b2..720588eb8 100644 --- a/includes/install.core.inc +++ b/includes/install.core.inc @@ -1354,16 +1354,34 @@ function install_profile_modules(&$install_state) { $files = system_rebuild_module_data(); variable_del('install_profile_modules'); - // Install dependencies first. - $modules = array_flip($modules); - foreach ($modules as $module => $weight) { - $modules[$module] = $files[$module]->sort; + // Always install required modules first. Respect the dependencies between + // the modules. + $required = array(); + $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)); + } + } + $modules = array_unique($modules); + foreach ($modules as $module) { + if (!empty($files[$module]->info['required'])) { + $required[$module] = $files[$module]->sort; + } + else { + $non_required[$module] = $files[$module]->sort; + } } - arsort($modules); - $modules = array_keys($modules); + arsort($required); + arsort($non_required); $operations = array(); - foreach ($modules as $module) { + foreach ($required + $non_required as $module => $weight) { $operations[] = array('_install_module_batch', array($module, $files[$module]->info['name'])); } $batch = array( -- cgit v1.2.3