Index: modules/forum.module =================================================================== RCS file: /cvs/drupal/drupal/modules/forum.module,v retrieving revision 1.267 diff -u -F^f -r1.267 forum.module --- modules/forum.module 6 Sep 2005 19:38:56 -0000 1.267 +++ modules/forum.module 7 Sep 2005 04:24:15 -0000 @@ -34,6 +34,14 @@ function forum_node_info() { } /** + * 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.229 diff -u -F^f -r1.229 system.module --- modules/system.module 28 Aug 2005 18:17:47 -0000 1.229 +++ modules/system.module 7 Sep 2005 04:24:16 -0000 @@ -550,11 +550,46 @@ function system_module_listing() { 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('%enabled module has been enabled for you because %module needs it to work properly. Please read the documentation of %enabled module about its proper installation (for eg. database tables, permissions and settings).', array ('%module' => theme('placeholder', $module), '%enabled' => theme ('placeholder', $enabled)))); + } + else { + drupal_set_message(t('%enabled modules has been enabled for you because %module needs them to work properly. Please read the appropriate documentation of %enabled modules for proper installation (for eg. database tables, permissions and settings).', array ('%module' => theme('placeholder', $module), '%enabled' => theme('placeholder', $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