? 253569.hook_module_new.patch ? sites/all/modules ? sites/default/files Index: includes/module.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/module.inc,v retrieving revision 1.126 diff -u -p -r1.126 module.inc --- includes/module.inc 20 Sep 2008 20:22:23 -0000 1.126 +++ includes/module.inc 22 Sep 2008 14:51:00 -0000 @@ -296,6 +296,12 @@ function module_enable($module_list) { node_access_needs_rebuild(TRUE); } } + + if (!empty($invoke_modules)) { + // Invoke the hook_module_enable after all the modules have been + // enabled. + module_invoke_all('module_enable', $invoke_modules); + } } /** @@ -321,6 +327,9 @@ function module_disable($module_list) { } if (!empty($invoke_modules)) { + // Invoke hook_module_disable before disabling modules, + // so we can still call module hooks to get information. + module_invoke_all('module_disable', $invoke_modules); // Refresh the module list to exclude the disabled modules. module_list(TRUE, FALSE); // Force to regenerate the stored list of hook implementations. Index: modules/simpletest/tests/system_test.module =================================================================== RCS file: /cvs/drupal/drupal/modules/simpletest/tests/system_test.module,v retrieving revision 1.2 diff -u -p -r1.2 system_test.module --- modules/simpletest/tests/system_test.module 8 Sep 2008 20:49:47 -0000 1.2 +++ modules/simpletest/tests/system_test.module 22 Sep 2008 14:51:01 -0000 @@ -84,3 +84,39 @@ function system_test_redirect_invalid_sc function system_test_destination() { return 'The destination: ' . drupal_get_destination(); } + +/** + * Implementation of hook_module_install(). + */ +function system_test_module_install($modules) { + if (in_array('aggregator', $modules)) { + drupal_set_message(t('hook_module_install fired for aggregator')); + } +} + +/** + * Implementation of hook_module_enable(). + */ +function system_test_module_enable($modules) { + if (in_array('aggregator', $modules)) { + drupal_set_message(t('hook_module_enable fired for aggregator')); + } +} + +/** + * Implementation of hook_module_disable(). + */ +function system_test_module_disable($modules) { + if (in_array('aggregator', $modules)) { + drupal_set_message(t('hook_module_disable fired for aggregator')); + } +} + +/** + * Implementation of hook_module_uninstall(). + */ +function system_test_module_uninstall($modules) { + if (in_array('aggregator', $modules)) { + drupal_set_message(t('hook_module_uninstall fired for aggregator')); + } +} Index: modules/system/system.admin.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/system/system.admin.inc,v retrieving revision 1.90 diff -u -p -r1.90 system.admin.inc --- modules/system/system.admin.inc 20 Sep 2008 20:22:24 -0000 1.90 +++ modules/system/system.admin.inc 22 Sep 2008 14:51:04 -0000 @@ -946,6 +946,8 @@ function system_modules_submit($form, &$ } } drupal_install_modules($new_modules); + // Call the module install hook. + module_invoke_all('module_install', $new_modules); } $current_module_list = module_list(TRUE, FALSE); @@ -1091,9 +1093,13 @@ function system_modules_uninstall_submit if (!empty($form['#confirmed'])) { // Call the uninstall routine for each selected module. - foreach (array_filter($form_state['values']['uninstall']) as $module => $value) { + $modules = array_keys(array_filter($form_state['values']['uninstall'])); + foreach ($modules as $module) { drupal_uninstall_module($module); } + // Call the uninstall hook for other modules. + module_invoke_all('module_uninstall', $modules); + drupal_set_message(t('The selected modules have been uninstalled.')); unset($form_state['storage']); Index: modules/system/system.test =================================================================== RCS file: /cvs/drupal/drupal/modules/system/system.test,v retrieving revision 1.12 diff -u -p -r1.12 system.test --- modules/system/system.test 15 Sep 2008 20:48:09 -0000 1.12 +++ modules/system/system.test 22 Sep 2008 14:51:04 -0000 @@ -19,7 +19,7 @@ class EnableDisableCoreTestCase extends * Implementation of setUp(). */ function setUp() { - parent::setUp(); + parent::setUp('system_test'); $this->admin_user = $this->drupalCreateUser(array('access administration pages', 'administer site configuration')); $this->drupalLogin($this->admin_user); @@ -39,6 +39,8 @@ class EnableDisableCoreTestCase extends $this->drupalPost('admin/build/modules', $edit, t('Save configuration')); $this->assertText(t('The configuration options have been saved.'), t('Modules status has been updated.')); + $this->assertText(t('hook_module_install fired for aggregator'), t('Function hook_module_install("aggregator") called.')); + $this->assertText(t('hook_module_enable fired for aggregator'), t('Function hook_module_enable("aggregator") called.')); $this->assertModules(array('aggregator'), TRUE); $this->assertTableCount('aggregator', TRUE); @@ -48,6 +50,7 @@ class EnableDisableCoreTestCase extends $this->drupalPost('admin/build/modules', $edit, t('Save configuration')); $this->assertText(t('The configuration options have been saved.'), t('Modules status has been updated.')); + $this->assertText(t('hook_module_disable fired for aggregator'), t('Function hook_module_disable("aggregator") called.')); $this->assertModules(array('aggregator'), FALSE); $this->assertTableCount('aggregator', TRUE); @@ -58,6 +61,7 @@ class EnableDisableCoreTestCase extends $this->drupalPost(NULL, NULL, t('Uninstall')); $this->assertText(t('The selected modules have been uninstalled.'), t('Modules status has been updated.')); + $this->assertText(t('hook_module_uninstall fired for aggregator'), t('Function hook_module_uninstall("aggregator") called.')); $this->assertModules(array('aggregator'), FALSE); $this->assertTableCount('aggregator', FALSE); }