Index: modules/forum/forum.info =================================================================== RCS file: /cvs/drupal/drupal/modules/forum/forum.info,v retrieving revision 1.1 diff -u -F^f -r1.1 forum.info --- modules/forum/forum.info 31 Aug 2006 20:22:35 -0000 1.1 +++ modules/forum/forum.info 1 Sep 2006 03:02:24 -0000 @@ -1,4 +1,4 @@ ; $Id: forum.info,v 1.1 2006/08/31 20:22:35 dries Exp $ name = Forum description = Enables threaded discussions about general topics. - +dependencies = taxonomy comment Index: modules/system/admin.css =================================================================== RCS file: /cvs/drupal/drupal/modules/system/admin.css,v retrieving revision 1.4 diff -u -F^f -r1.4 admin.css --- modules/system/admin.css 28 Aug 2006 07:56:21 -0000 1.4 +++ modules/system/admin.css 1 Sep 2006 03:02:24 -0000 @@ -36,3 +36,8 @@ margin-right: 1em; padding-right: 4px; } + +div.admin-missing, div.admin-required { + font-size: 1.1em; + color: #444; +} \ No newline at end of file Index: modules/system/system.module =================================================================== RCS file: /cvs/drupal/drupal/modules/system/system.module,v retrieving revision 1.357 diff -u -F^f -r1.357 system.module --- modules/system/system.module 31 Aug 2006 20:22:36 -0000 1.357 +++ modules/system/system.module 1 Sep 2006 03:02:26 -0000 @@ -1217,6 +1217,7 @@ function system_modules() { // Get current list of modules $files = module_rebuild_cache(); + // First Pass. foreach ($files as $filename => $file) { $info = $file->info; $form['name'][$file->name] = array('#value' => $info['name']); @@ -1224,10 +1225,54 @@ function system_modules() { $options[$file->name] = ''; if ($file->status) { $status[] = $file->name; + // for later dependency checking. + $info['enabled'] = TRUE; } if ($file->throttle) { $throttle[] = $file->name; } + $modules[$file->name] = $info; + } + // Store modules list for validation hook. + $form['modules'] = array('#type' => 'value', '#value' => $modules); + + // Second pass. Dependency checking. + $form['reverse_deps'] = array('#type' => 'value', '#value' => array()); + foreach ($form['modules']['#value'] as $filename => $info) { + // Check missing dependencies. + if (isset($info['dependencies'])) { + foreach (explode(' ', $info['dependencies']) as $dependency) { + if (!isset($modules[$dependency]) || !isset($modules[$dependency]['enabled'])) { + // Store fact we need to disable so theme can handle it. + $form['disabled'][$filename] = array('#type' => 'value', '#value' => 1); + $missing_deps[] = isset($modules[$dependency]) ? $modules[$dependency]['name'] : $dependency; + } + else if (isset($info['enabled'])) { + // Store the fact we need to disable so the theme function can handle it. + $form['disabled'][$dependency] = array('#type' => 'value', '#value' => 1); + $form['reverse_deps']['#value'][$dependency][] = $info['name']; + } + } + + // Add text for missing dependencies. + if (isset($form['disabled'][$filename])) { + $form['description'][$filename]['missingdeps'] = array( + '#value' => t('Missing dependencies: %missingdeps', array('%missingdeps' => implode(', ', $missing_deps))), + '#prefix' => '