Commit 9a7899ef authored by webchick's avatar webchick

#931190 by klausi, carlos8f: Fixed enabling modules via the UI breaks module dependencies.

parent 4b586bfe
......@@ -50,3 +50,10 @@ function module_test_hook_info() {
);
return $hooks;
}
/**
* Implements hook_modules_enabled().
*/
function module_test_modules_enabled($modules) {
variable_set('test_module_enable_order', $modules);
}
......@@ -1186,7 +1186,7 @@ function system_modules_submit($form, &$form_state) {
unset($form_state['storage']);
// Reverse the 'enable' list, to order dependencies before dependents.
rsort($actions['enable']);
krsort($actions['enable']);
// Installs, enables, and disables modules.
module_enable($actions['enable'], FALSE);
......
......@@ -318,6 +318,35 @@ class ModuleDependencyTestCase extends ModuleTestCase {
$this->assertText(t('The configuration options have been saved.'), t('Modules status has been updated.'));
$this->assertModules(array('taxonomy', 'forum'), TRUE);
}
/**
* Tests that module dependencies are enabled in the correct order via the
* UI. Dependencies should be enabled before their dependents.
*/
function testModuleEnableOrder() {
module_enable(array('module_test'), FALSE);
$this->resetAll();
$this->assertModules(array('module_test'), TRUE);
variable_set('dependency_test', 'dependency');
// module_test creates a dependency chain: forum depends on poll, which
// depends on php. The correct enable order is, php, poll, forum.
$expected_order = array('php', 'poll', 'forum');
// Enable the modules through the UI, verifying that the dependency chain
// is correct.
$edit = array();
$edit['modules[Core][forum][enable]'] = 'forum';
$this->drupalPost('admin/modules', $edit, t('Save configuration'));
$this->assertModules(array('forum'), FALSE);
$this->assertText(t('You must enable the Poll, PHP filter modules to install Forum.'), t('Dependency chain created.'));
$edit['modules[Core][poll][enable]'] = 'poll';
$edit['modules[Core][php][enable]'] = 'php';
$this->drupalPost('admin/modules', $edit, t('Save configuration'));
$this->assertModules(array('forum', 'poll', 'php'), TRUE);
// Check the actual order which is saved by module_test_modules_enabled().
$this->assertIdentical(variable_get('test_module_enable_order', FALSE), $expected_order, t('Modules enabled in the correct order.'));
}
}
/**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment