summaryrefslogtreecommitdiff
path: root/includes/install.core.inc
diff options
context:
space:
mode:
authorAngie Byron <webchick@24967.no-reply.drupal.org>2010-09-01 01:24:05 +0000
committerAngie Byron <webchick@24967.no-reply.drupal.org>2010-09-01 01:24:05 +0000
commit1ba166ff8e25f09035ffc90dc7bf095fa1dcd0cd (patch)
treeb33086726f1504c43df1bc9c6415b3d8d13a1b9a /includes/install.core.inc
parente5a965d777eb1f27893cd121d2880dab4af1b078 (diff)
downloadbrdo-1ba166ff8e25f09035ffc90dc7bf095fa1dcd0cd.tar.gz
brdo-1ba166ff8e25f09035ffc90dc7bf095fa1dcd0cd.tar.bz2
#898654 by chx, Damien Tournoud, alex_b: Fixed Required modules not installed before optional modules.
Diffstat (limited to 'includes/install.core.inc')
-rw-r--r--includes/install.core.inc32
1 files changed, 25 insertions, 7 deletions
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(