diff options
-rw-r--r-- | includes/module.inc | 20 | ||||
-rw-r--r-- | includes/theme.inc | 1 | ||||
-rw-r--r-- | modules/system/system.install | 12 | ||||
-rw-r--r-- | modules/system/system.module | 27 |
4 files changed, 43 insertions, 17 deletions
diff --git a/includes/module.inc b/includes/module.inc index bb7d32621..f932b7f49 100644 --- a/includes/module.inc +++ b/includes/module.inc @@ -72,7 +72,9 @@ function module_list($refresh = FALSE, $bootstrap = FALSE, $sort = FALSE, $fixed $list = system_list('bootstrap'); } else { - $list = system_list('module_enabled'); + // Not using drupal_map_assoc() here as that requires common.inc. + $list = array_keys(system_list('module_enabled')); + $list = (!empty($list) ? array_combine($list, $list) : array()); } } } @@ -96,9 +98,10 @@ function module_list($refresh = FALSE, $bootstrap = FALSE, $sort = FALSE, $fixed * - 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. + * An associative array of modules or themes, keyed by name. For $type + * 'bootstrap', the array values equal the keys. For $type 'module_enabled' + * or 'theme', the array values are objects representing the respective + * database row, with the 'info' property already unserialized. * * @see module_list() * @see list_themes() @@ -143,11 +146,12 @@ function system_list($type) { // Drupal installations, which might have modules installed in different // locations in the file system. The ordering here must also be // consistent with the one used in module_implements(). - $result = db_query("SELECT * FROM {system} ORDER BY weight ASC, name ASC"); + $result = db_query("SELECT * FROM {system} WHERE type = 'theme' OR (type = 'module' AND status = 1) 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; + $record->info = unserialize($record->info); + // Build a list of all enabled modules. + if ($record->type == 'module') { + $lists['module_enabled'][$record->name] = $record; } // Build a list of themes. if ($record->type == 'theme') { diff --git a/includes/theme.inc b/includes/theme.inc index f5731693f..adbffbe92 100644 --- a/includes/theme.inc +++ b/includes/theme.inc @@ -583,7 +583,6 @@ function list_themes($refresh = FALSE) { try { foreach (system_list('theme') as $theme) { if (file_exists($theme->filename)) { - $theme->info = unserialize($theme->info); $themes[] = $theme; } } diff --git a/modules/system/system.install b/modules/system/system.install index 4c8dcb9fa..1e110d880 100644 --- a/modules/system/system.install +++ b/modules/system/system.install @@ -1573,8 +1573,7 @@ function system_schema() { ), 'primary key' => array('filename'), 'indexes' => array( - 'bootstrap' => array('status', 'bootstrap', 'type', 'weight', 'name'), - 'system_list' => array('weight', 'name'), + 'system_list' => array('status', 'bootstrap', 'type', 'weight', 'name'), 'type_name' => array('type', 'name'), ), ); @@ -2885,6 +2884,15 @@ function system_update_7060(&$sandbox) { } /** + * Replace 'system_list' index with 'bootstrap' index on {system}. + */ +function system_update_7061() { + db_drop_index('system', 'bootstrap'); + db_drop_index('system', 'system_list'); + db_add_index('system', 'system_list', array('status', 'bootstrap', 'type', 'weight', 'name')); +} + +/** * @} End of "defgroup updates-6.x-to-7.x" * The next series of updates should start at 8000. */ diff --git a/modules/system/system.module b/modules/system/system.module index be167a888..33f232f74 100644 --- a/modules/system/system.module +++ b/modules/system/system.module @@ -2217,25 +2217,40 @@ function system_update_files_database(&$files, $type) { } /** - * Returns an array of information about active modules or themes. + * Returns an array of information about enabled 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'. + * @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 or is not enabled, an empty + * array 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. If no records are available, an empty + * array is returned. * * @see system_rebuild_module_data() * @see system_rebuild_theme_data() */ -function system_get_info($type) { +function system_get_info($type, $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); + if ($type == 'module') { + $type = 'module_enabled'; + } + $list = system_list($type); + foreach ($list as $shortname => $item) { + if (!empty($item->status)) { + $info[$shortname] = $item->info; + } + } + if (isset($name)) { + return isset($info[$name]) ? $info[$name] : array(); } return $info; } |