From 4dafb3953cabb0911286e6d683b495f6e1c43238 Mon Sep 17 00:00:00 2001 From: Angie Byron <webchick@24967.no-reply.drupal.org> Date: Sun, 28 Jun 2009 03:56:43 +0000 Subject: [PATCH] #482346 by Berdir: Move module installation logic to module_enable() to prevent errors upon enabling modules. --- includes/install.inc | 6 +----- includes/module.inc | 13 ++++++++++++- modules/node/node.admin.inc | 8 ++++++++ modules/system/system.test | 1 + 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/includes/install.inc b/includes/install.inc index b618594c8adf..450f7cd55612 100644 --- a/includes/install.inc +++ b/includes/install.inc @@ -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); } /** diff --git a/includes/module.inc b/includes/module.inc index a8a878cb6b75..ce8470962204 100644 --- a/includes/module.inc +++ b/includes/module.inc @@ -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) { diff --git a/modules/node/node.admin.inc b/modules/node/node.admin.inc index dbddaea1e8b8..62f49382b7b0 100644 --- a/modules/node/node.admin.inc +++ b/modules/node/node.admin.inc @@ -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(); +} \ No newline at end of file diff --git a/modules/system/system.test b/modules/system/system.test index 17694ca98b78..b62a6c74b7b9 100644 --- a/modules/system/system.test +++ b/modules/system/system.test @@ -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.')); -- GitLab