Index: modules/forum.module =================================================================== RCS file: /cvs/drupal/drupal/modules/forum.module,v retrieving revision 1.239 diff -U3 -r1.239 forum.module --- modules/forum.module 23 Mar 2005 21:53:10 -0000 1.239 +++ modules/forum.module 26 Mar 2005 03:09:09 -0000 @@ -32,6 +32,14 @@ } /** + * Implementation of hook_info(). + */ +function forum_info($key) { + $info['depends'] = array('comment', 'node'); + return $info[$key]; +} + +/** * Implementation of hook_access(). */ function forum_access($op, $node) { Index: modules/system.module =================================================================== RCS file: /cvs/drupal/drupal/modules/system.module,v retrieving revision 1.202 diff -U3 -r1.202 system.module --- modules/system.module 23 Mar 2005 20:26:21 -0000 1.202 +++ modules/system.module 26 Mar 2005 03:09:10 -0000 @@ -499,11 +499,46 @@ return $output; } +/** + * Resolve dependencies between modules. + */ +function system_module_dependencies(&$edit) { + $new_module = FALSE; + foreach ($edit['status'] as $module => $status) { + if ($status) { + drupal_load('module', $module); + $enabled = array(); + foreach ((array) module_invoke($module, 'info', 'depends') as $required) { + if (!$edit['status'][$required]) { + $edit['status'][$required] = 1; + $enabled[] = $required; + } + } + if (!empty($enabled)) { + $new_module = TRUE; + if (count($enabled) == 1) { + drupal_set_message(t("The following module has been enabled since it's dependent on %module in order function properly: %dependents.", array ('%module' => ''. $module .'', '%dependents' => ''. implode(', ', $enabled) .''))); + } + else { + drupal_set_message(t("The following modules have been enabled since they're dependent on %module in order function properly: %dependents.", array ('%module' => ''. $module .'', '%dependents' => ''. implode(', ', $enabled) .''))); + } + } + } + } + // New modules have been enabled, also check their dependencies. + if ($new_module) { + system_module_dependencies($edit); + } +} + function system_listing_save($edit = array()) { $op = $_POST['op']; $edit = $_POST['edit']; if ($op == t('Save configuration')) { + if ($edit['type'] == 'module') { + system_module_dependencies($edit); + } db_query("UPDATE {system} SET status = 0 WHERE type = '%s'", $edit['type']); foreach ($edit['status'] as $name => $status) { // Make certain that the default theme is enabled to avoid user error