#482346 by Berdir: Move module installation logic to module_enable() to prevent errors upon enabling modules.

merge-requests/26/head
Angie Byron 2009-06-28 03:56:43 +00:00
parent 783d541179
commit 4dafb3953c
4 changed files with 22 additions and 6 deletions

View File

@ -516,11 +516,7 @@ function drupal_install_modules($module_list = array(), $disable_modules_install
} while ($moved);
asort($module_list);
$module_list = array_keys($module_list);
$modules_installed = array_filter($module_list, '_drupal_install_module');
if (!$disable_modules_installed_hook && !empty($modules_installed)) {
module_invoke_all('modules_installed', $modules_installed);
}
module_enable($module_list);
module_enable($module_list, $disable_modules_installed_hook);
}
/**

View File

@ -177,9 +177,15 @@ function module_load_all_includes($type, $name = NULL) {
*
* @param $module_list
* An array of module names.
* @param $disable_modules_installed_hook
* Normally just testing wants to set this to TRUE.
*/
function module_enable($module_list) {
function module_enable($module_list, $disable_modules_installed_hook = FALSE) {
$invoke_modules = array();
// Try to install the enabled modules and collect which were installed.
// $module_list is not changed and already installed modules are ignored.
$modules_installed = array_filter($module_list, '_drupal_install_module');
foreach ($module_list as $module) {
$existing = db_query("SELECT status FROM {system} WHERE type = :type AND name = :name", array(
':type' => 'module',
@ -203,6 +209,11 @@ function module_enable($module_list) {
module_list(TRUE);
// Force to regenerate the stored list of hook implementations.
registry_rebuild();
// If any modules were newly installed, execute the hook for them.
if (!$disable_modules_installed_hook && !empty($modules_installed)) {
module_invoke_all('modules_installed', $modules_installed);
}
}
foreach ($invoke_modules as $module) {

View File

@ -634,3 +634,11 @@ function node_multiple_delete_confirm_submit($form, &$form_state) {
$form_state['redirect'] = 'admin/content/node';
return;
}
/**
* Implement hook_modules_installed()
*/
function node_modules_installed($modules) {
// Clear node type cache for node permissions.
node_type_clear();
}

View File

@ -113,6 +113,7 @@ class EnableDisableTestCase extends ModuleTestCase {
// Install (and enable) aggregator module.
$edit = array();
$edit['modules[Core][aggregator][enable]'] = 'aggregator';
$edit['modules[Core][forum][enable]'] = 'forum';
$this->drupalPost('admin/build/modules', $edit, t('Save configuration'));
$this->assertText(t('The configuration options have been saved.'), t('Modules status has been updated.'));