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 12:50:18 -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.6 diff -u -F^f -r1.6 admin.css --- modules/system/admin.css 1 Sep 2006 09:23:45 -0000 1.6 +++ modules/system/admin.css 1 Sep 2006 12:50:18 -0000 @@ -61,3 +61,8 @@ table.system-status-report tr.ok th { background-image: url('../../misc/watchdog-ok.png'); } + +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.362 diff -u -F^f -r1.362 system.module --- modules/system/system.module 1 Sep 2006 09:23:45 -0000 1.362 +++ modules/system/system.module 1 Sep 2006 12:50:21 -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) { + $missing_deps = array(); + // 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]) && $missing_deps) { + $form['description'][$filename]['missing_deps'] = array( + '#value' => t('Missing dependencies: %missing_deps', array('%missing_deps' => implode(', ', $missing_deps))), + '#prefix' => '