Commit 89d04ea7 authored by webchick's avatar webchick

#561452 by pwolanin and David_Rothstein: Add API function to get module/theme...

#561452 by pwolanin and David_Rothstein: Add API function to get module/theme info without rebuilding it.
parent a0ec577e
......@@ -5527,10 +5527,10 @@ function drupal_flush_all_caches() {
// If invoked from update.php, we must not update the theme information in the
// database, or this will result in all themes being disabled.
if (defined('MAINTENANCE_MODE') && MAINTENANCE_MODE == 'update') {
_system_get_theme_data();
_system_rebuild_theme_data();
}
else {
system_get_theme_data();
system_rebuild_theme_data();
}
drupal_theme_rebuild();
......
......@@ -559,7 +559,7 @@ function drupal_verify_profile($install_state) {
* Normally just testing wants to set this to TRUE.
*/
function drupal_install_modules($module_list = array(), $disable_modules_installed_hook = FALSE) {
$files = system_get_module_data();
$files = system_rebuild_module_data();
$module_list = array_flip(array_values($module_list));
do {
$moved = FALSE;
......@@ -654,7 +654,7 @@ function drupal_install_system() {
->execute();
// Now that we've installed things properly, bootstrap the full Drupal environment
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
system_get_module_data();
system_rebuild_module_data();
}
/**
......
......@@ -35,7 +35,7 @@ function _registry_rebuild() {
require_once DRUPAL_ROOT . '/includes/database/' . $driver . '/query.inc';
// Get current list of modules and their files.
$modules = system_get_module_data();
$modules = system_rebuild_module_data();
// Get the list of files we are going to parse.
$files = array();
foreach ($modules as &$module) {
......
......@@ -569,7 +569,7 @@ function list_themes($refresh = FALSE) {
}
else {
// Scan the installation when the database should not be read.
$themes = _system_get_theme_data();
$themes = _system_rebuild_theme_data();
}
foreach ($themes as $theme) {
......@@ -2342,7 +2342,7 @@ function template_preprocess_maintenance_page(&$variables) {
global $theme;
// Retrieve the theme data to list all available regions.
$theme_data = _system_get_theme_data();
$theme_data = _system_rebuild_theme_data();
$regions = $theme_data[$theme]->info['regions'];
// Get all region content set with drupal_add_region_content().
......
......@@ -37,8 +37,8 @@ function update_check_incompatibility($name, $type = 'module') {
// Store values of expensive functions for future use.
if (empty($themes) || empty($modules)) {
$themes = _system_get_theme_data();
$modules = system_get_module_data();
$themes = _system_rebuild_theme_data();
$modules = system_rebuild_module_data();
}
if ($type == 'module' && isset($modules[$name])) {
......
......@@ -1296,7 +1296,7 @@ function install_bootstrap_full(&$install_state) {
*/
function install_profile_modules(&$install_state) {
$modules = variable_get('install_profile_modules', array());
$files = system_get_module_data();
$files = system_rebuild_module_data();
variable_del('install_profile_modules');
$operations = array();
foreach ($modules as $module) {
......
......@@ -47,7 +47,7 @@ function help_page($name) {
function help_links_as_list() {
$empty_arg = drupal_help_arg();
$module_info = system_get_module_data();
$module_info = system_rebuild_module_data();
$modules = array();
foreach (module_implements('help', TRUE) as $module) {
......
......@@ -146,12 +146,11 @@ function system_admin_menu_block_page() {
*/
function system_admin_by_module() {
$modules = system_get_module_data();
$module_info = system_get_info('module');
$menu_items = array();
$help_arg = module_exists('help') ? drupal_help_arg() : FALSE;
foreach ($modules as $file) {
$module = $file->name;
foreach ($module_info as $module => $info) {
if ($module == 'help') {
continue;
}
......@@ -169,7 +168,7 @@ function system_admin_by_module() {
// Sort.
ksort($admin_tasks);
$menu_items[$file->info['name']] = array($file->info['description'], $admin_tasks);
$menu_items[$info['name']] = array($info['description'], $admin_tasks);
}
}
return theme('system_admin_by_module', array('menu_items' => $menu_items));
......@@ -200,7 +199,7 @@ function system_settings_overview() {
*/
function system_themes_form() {
// Get current list of themes.
$themes = system_get_theme_data();
$themes = system_rebuild_theme_data();
// Remove hidden themes from the display list.
foreach ($themes as $theme_key => $theme) {
......@@ -396,7 +395,7 @@ function system_theme_settings($form, &$form_state, $key = '') {
if ($key) {
$settings = theme_get_settings($key);
$var = str_replace('/', '_', 'theme_' . $key . '_settings');
$themes = system_get_theme_data();
$themes = system_rebuild_theme_data();
$features = $themes[$key]->info['features'];
}
else {
......@@ -643,7 +642,7 @@ function _system_is_incompatible(&$incompatible, $files, $file) {
*/
function system_modules($form, $form_state = array()) {
// Get current list of modules.
$files = system_get_module_data();
$files = system_rebuild_module_data();
// Remove hidden modules from display list.
foreach ($files as $filename => $file) {
......@@ -834,7 +833,7 @@ function _system_modules_build_row($info, $extra) {
* Display confirmation form for required modules.
*
* @param $modules
* Array of module file objects as returned from system_get_module_data().
* Array of module file objects as returned from system_rebuild_module_data().
* @param $storage
* The contents of $form_state['storage']; an array with two
* elements: the list of required modules and the list of status
......@@ -891,7 +890,7 @@ function system_modules_submit($form, &$form_state) {
// Get a list of all modules, it will be used to find which module requires
// which.
$files = system_get_module_data();
$files = system_rebuild_module_data();
// The modules to be enabled.
$modules_to_be_enabled = array();
......
......@@ -720,9 +720,10 @@ function hook_mail_alter(&$message) {
/**
* Alter the information parsed from module and theme .info files
*
* This hook is invoked in _system_get_module_data() and in _system_get_theme_data().
* A module may implement this hook in order to add to or alter the data
* generated by reading the .info file with drupal_parse_info_file().
* This hook is invoked in _system_rebuild_module_data() and in
* _system_rebuild_theme_data(). A module may implement this hook in order to
* add to or alter the data generated by reading the .info file with
* drupal_parse_info_file().
*
* @param &$info
* The .info file contents, passed by reference so that it can be altered.
......
......@@ -345,12 +345,12 @@ function system_install() {
}
// Clear out module list and hook implementation statics before calling
// system_get_theme_data().
// system_rebuild_theme_data().
module_list(TRUE);
module_implements('', FALSE, TRUE);
// Load system theme data appropriately.
system_get_theme_data();
system_rebuild_theme_data();
// Inserting uid 0 here confuses MySQL -- the next user might be created as
// uid 2 which is not what we want. So we insert the first user here, the
......@@ -2212,7 +2212,7 @@ function system_update_7021() {
variable_del('site_footer');
// Rebuild theme data, so the new 'help' region is identified.
system_get_theme_data();
system_rebuild_theme_data();
}
/**
......
......@@ -1846,13 +1846,36 @@ function system_update_files_database(&$files, $type) {
$query->execute();
}
/**
* Returns an array of information about active 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'.
* @return
* An associative array of module or theme information keyed by name.
*
* @see system_rebuild_module_data()
* @see system_rebuild_theme_data()
*/
function system_get_info($type) {
$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);
}
return $info;
}
/**
* Helper function to scan and collect module .info data.
*
* @return
* An associative array of module information.
*/
function _system_get_module_data() {
function _system_rebuild_module_data() {
// Find modules
$modules = drupal_system_listing('/\.module$/', 'modules', 'name', 0);
......@@ -1903,13 +1926,13 @@ function _system_get_module_data() {
}
/**
* Collect data about all currently available modules.
* Rebuild, save, and return data about all currently available modules.
*
* @return
* Array of all available modules and their data.
*/
function system_get_module_data() {
$modules = _system_get_module_data();
function system_rebuild_module_data() {
$modules = _system_rebuild_module_data();
ksort($modules);
system_get_files_database($modules, 'module');
system_update_files_database($modules, 'module');
......@@ -1939,7 +1962,7 @@ function system_get_module_data() {
* @return
* An associative array of themes information.
*/
function _system_get_theme_data() {
function _system_rebuild_theme_data() {
$themes_info = &drupal_static(__FUNCTION__, array());
if (empty($themes_info)) {
......@@ -2065,13 +2088,13 @@ function _system_get_theme_data() {
}
/**
* Collect data about all currently available themes.
* Rebuild, save, and return data about all currently available themes.
*
* @return
* Array of all available themes and their data.
*/
function system_get_theme_data() {
$themes = _system_get_theme_data();
function system_rebuild_theme_data() {
$themes = _system_rebuild_theme_data();
ksort($themes);
system_get_files_database($themes, 'theme');
system_update_files_database($themes, 'theme');
......
......@@ -36,8 +36,8 @@ function update_get_projects() {
$projects = update_project_cache('update_project_projects');
if (empty($projects)) {
// Still empty, so we have to rebuild the cache.
$module_data = system_get_module_data();
$theme_data = system_get_theme_data();
$module_data = system_rebuild_module_data();
$theme_data = system_rebuild_theme_data();
_update_process_info_list($projects, $module_data, 'module', TRUE);
_update_process_info_list($projects, $theme_data, 'theme', TRUE);
if (variable_get('update_check_disabled', FALSE)) {
......
......@@ -250,7 +250,7 @@ class UpdateTestContribCase extends UpdateTestHelper {
* "CCC Update test" project. We need to make sure that we see the "BBB"
* project before the "CCC" project, even though "CCC" includes a module
* that's processed first if you sort alphabetically by module name (which
* is the order we see things inside system_get_module_data() for example).
* is the order we see things inside system_rebuild_module_data() for example).
*/
function testUpdateContribOrder() {
// We want core to be version 7.0.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment