Index: includes/module.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/module.inc,v retrieving revision 1.197 diff -u -p -r1.197 module.inc --- includes/module.inc 28 Jul 2010 01:46:59 -0000 1.197 +++ includes/module.inc 20 Aug 2010 13:00:56 -0000 @@ -72,7 +72,12 @@ function module_list($refresh = FALSE, $ $list = system_list('bootstrap'); } else { - $list = system_list('module_enabled'); + $list = array(); + foreach (system_list('module') as $name => $item) { + if ($item->status) { + $list[$name] = $name; + } + } } } } @@ -91,14 +96,14 @@ function module_list($refresh = FALSE, $ * * @param $type * The type of list to return: - * - module_enabled: All enabled modules. + * - module: All modules. * - bootstrap: All enabled modules required for bootstrap. * - theme: All themes. * * @return * An associative array of modules or themes, keyed by name, and having the - * respective database row as value. For $type 'module_enabled' and - * 'bootstrap', the array values equal the keys. + * respective database row as value. For $type 'bootstrap', the array values + * equal the keys. * * @see module_list() * @see list_themes() @@ -128,13 +133,13 @@ function system_list($type) { $lists['bootstrap'] = array_keys($bootstrap_list); } // Otherwise build the list for enabled modules and themes. - elseif (!isset($lists['module_enabled'])) { + elseif (!isset($lists[$type])) { if ($cached = cache_get('system_list', 'cache_bootstrap')) { $lists = $cached->data; } else { $lists = array( - 'module_enabled' => array(), + 'module' => array(), 'theme' => array(), 'filepaths' => array(), ); @@ -145,9 +150,9 @@ function system_list($type) { // consistent with the one used in module_implements(). $result = db_query("SELECT * FROM {system} ORDER BY weight ASC, name ASC"); foreach ($result as $record) { - if ($record->type == 'module' && $record->status) { - // Build a list of all enabled modules. - $lists['module_enabled'][$record->name] = $record->name; + // Build a list of modules. + if ($record->type == 'module') { + $lists['module'][$record->name] = $record; } // Build a list of themes. if ($record->type == 'theme') { Index: modules/system/system.module =================================================================== RCS file: /cvs/drupal/drupal/modules/system/system.module,v retrieving revision 1.955 diff -u -p -r1.955 system.module --- modules/system/system.module 20 Aug 2010 01:42:52 -0000 1.955 +++ modules/system/system.module 20 Aug 2010 13:04:55 -0000 @@ -2217,25 +2217,40 @@ function system_update_files_database(&$ } /** - * Returns an array of information about active modules or themes. + * Returns information about modules or themes. * * This function returns the information from the {system} table corresponding * to the cached contents of the .info file for each active module or theme. * * @param $type - * Either 'module' or 'theme'. + * The type of system list to use: + * - module: All modules. + * - theme: All themes. + * @param $only_enabled + * (optional) Boolean whether to return only enabled records for the provided + * $type. Defaults to TRUE. + * @param $name + * (optional) The name of a module or theme whose information shall be + * returned. If omitted, all records for the provided $type will be returned. + * If $name does not exist in the provided $type, FALSE will be returned. * * @return - * An associative array of module or theme information keyed by name. + * An associative array of module or theme information keyed by name, or only + * information for $name, if given. * * @see system_rebuild_module_data() * @see system_rebuild_theme_data() */ -function system_get_info($type) { +function system_get_info($type, $only_enabled = TRUE, $name = NULL) { $info = array(); - $result = db_query('SELECT name, info FROM {system} WHERE type = :type AND status = 1', array(':type' => $type)); - foreach ($result as $item) { - $info[$item->name] = unserialize($item->info); + $list = system_list($type); + foreach ($list as $shortname => $item) { + if (!$only_enabled || $item->status) { + $info[$shortname] = unserialize($item->info); + } + } + if (isset($name)) { + return isset($info[$name]) ? $info[$name] : FALSE; } return $info; }