Index: update.php =================================================================== RCS file: /cvs/drupal/drupal/update.php,v retrieving revision 1.227 diff -u -p -r1.227 update.php --- update.php 2 Jul 2007 14:41:34 -0000 1.227 +++ update.php 3 Jul 2007 16:54:15 -0000 @@ -332,7 +332,7 @@ function update_script_selection_form() // Ensure system.module's updates appear first $form['start']['system'] = array(); - foreach (module_list() as $module) { + foreach (module_list_all() as $module) { $updates = drupal_get_schema_versions($module); if ($updates !== FALSE) { $updates = drupal_map_assoc($updates); Index: includes/bootstrap.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/bootstrap.inc,v retrieving revision 1.173 diff -u -p -r1.173 bootstrap.inc --- includes/bootstrap.inc 1 Jul 2007 19:49:19 -0000 1.173 +++ includes/bootstrap.inc 3 Jul 2007 16:54:15 -0000 @@ -501,7 +501,7 @@ function page_get_cache() { * The name of the bootstrap hook we wish to invoke. */ function bootstrap_invoke_all($hook) { - foreach (module_list(TRUE, TRUE) as $module) { + foreach (module_list_bootstrap(FALSE, TRUE) as $module) { drupal_load('module', $module); module_invoke($module, $hook); } Index: includes/install.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/install.inc,v retrieving revision 1.41 diff -u -p -r1.41 install.inc --- includes/install.inc 13 Jun 2007 19:39:04 -0000 1.41 +++ includes/install.inc 3 Jul 2007 16:54:15 -0000 @@ -22,7 +22,7 @@ define('FILE_NOT_EXECUTABLE', 128); * Initialize the update system by loading all installed module's .install files. */ function drupal_load_updates() { - foreach (module_list() as $module) { + foreach (module_list_all() as $module) { module_load_install($module); } } Index: includes/menu.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/menu.inc,v retrieving revision 1.182 diff -u -p -r1.182 menu.inc --- includes/menu.inc 2 Jul 2007 14:41:35 -0000 1.182 +++ includes/menu.inc 3 Jul 2007 16:54:15 -0000 @@ -855,7 +855,7 @@ function menu_get_active_help() { $arg = drupal_help_arg(arg(NULL)); $empty_arg = drupal_help_arg(); - foreach (module_list() as $name) { + foreach (module_list_all() as $name) { if (module_hook($name, 'help')) { // Lookup help for this path. if ($help = module_invoke($name, 'help', $router_path, $arg)) { Index: includes/module.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/module.inc,v retrieving revision 1.104 diff -u -p -r1.104 module.inc --- includes/module.inc 27 Jun 2007 21:59:33 -0000 1.104 +++ includes/module.inc 3 Jul 2007 16:54:15 -0000 @@ -10,7 +10,7 @@ * Load all the modules that have been enabled in the system table. */ function module_load_all() { - foreach (module_list(TRUE, FALSE) as $module) { + foreach (module_list_all(TRUE) as $module) { drupal_load('module', $module); } } @@ -19,64 +19,93 @@ function module_load_all() { * Call a function repeatedly with each module in turn as an argument. */ function module_iterate($function, $argument = '') { - foreach (module_list() as $name) { + foreach (module_list_all() as $name) { $function($name, $argument); } } /** - * Collect a list of all loaded modules. During the bootstrap, return only - * vital modules. See bootstrap.inc + * Collect a list of all loaded modules. * * @param $refresh * Whether to force the module list to be regenerated (such as after the * administrator has changed the system settings). - * @param $bootstrap - * Whether to return the reduced set of modules loaded in "bootstrap mode" - * for cached pages. See bootstrap.inc. * @param $sort - * By default, modules are ordered by weight and filename, settings this option - * to TRUE, module list will be ordered by module name. - * @param $fixed_list - * (Optional) Override the module list with the given modules. Stays until the - * next call with $refresh = TRUE. + * By default, modules are ordered by weight and filename, settings this + * option to TRUE, module list will be ordered by module name. * @return * An associative array whose keys and values are the names of all loaded * modules. */ -function module_list($refresh = FALSE, $bootstrap = TRUE, $sort = FALSE, $fixed_list = NULL) { - static $list, $sorted_list; +function module_list_all($refresh = FALSE, $sort = FALSE) { + static $list = array(), $sorted_list; - if ($refresh || $fixed_list) { + if ($refresh || empty($list)) { unset($sorted_list); - $list = array(); - if ($fixed_list) { - foreach ($fixed_list as $name => $module) { - drupal_get_filename('module', $name, $module['filename']); - $list[$name] = $name; + + $result = db_query("SELECT name, filename, throttle, bootstrap FROM {system} WHERE type = 'module' AND status = 1 ORDER BY weight ASC, filename ASC"); + + while ($module = db_fetch_object($result)) { + if (file_exists($module->filename)) { + // Determine the current throttle status and see if the module should be + // loaded based on server load. We have to directly access the throttle + // variables, since throttle.module may not be loaded yet. + $throttle = ($module->throttle && variable_get('throttle_level', 0) > 0); + if (!$throttle) { + drupal_get_filename('module', $module->name, $module->filename); + $list[$module->name] = $module->name; + } } } - else { - if ($bootstrap) { - $result = db_query("SELECT name, filename, throttle FROM {system} WHERE type = 'module' AND status = 1 AND bootstrap = 1 ORDER BY weight ASC, filename ASC"); - } - else { - $result = db_query("SELECT name, filename, throttle FROM {system} WHERE type = 'module' AND status = 1 ORDER BY weight ASC, filename ASC"); - } - while ($module = db_fetch_object($result)) { - if (file_exists($module->filename)) { - // Determine the current throttle status and see if the module should be - // loaded based on server load. We have to directly access the throttle - // variables, since throttle.module may not be loaded yet. - $throttle = ($module->throttle && variable_get('throttle_level', 0) > 0); - if (!$throttle) { - drupal_get_filename('module', $module->name, $module->filename); - $list[$module->name] = $module->name; - } - } + } + + if ($sort) { + if (!isset($sorted_list)) { + $sorted_list = $list; + ksort($sorted_list); + } + return $sorted_list; + } + + return $list; +} + +/** + * Collect a list of loaded modules that have been identified as needed for + * bootstrap procedures. + * + * @param $refresh + * Whether to force the module list to be regenerated (such as after the + * administrator has changed the system settings). + * @param $sort + * By default, modules are ordered by weight and filename, settings this + * option to TRUE, module list will be ordered by module name. + * @return + * An associative array whose keys and values are the names of all loaded + * modules. + */ +function module_list_bootstrap($refresh = FALSE, $sort = FALSE) { + static $list = array(), $sorted_list; + + if ($refresh || empty($list)) { + unset($sorted_list); + + $result = db_query("SELECT name, filename, throttle, bootstrap FROM {system} WHERE type = 'module' AND status = 1 AND bootstrap = 1 ORDER BY weight ASC, filename ASC"); + + while ($module = db_fetch_object($result)) { + if (file_exists($module->filename)) { + // Determine the current throttle status and see if the module should be + // loaded based on server load. We have to directly access the throttle + // variables, since throttle.module may not be loaded yet. + $throttle = ($module->throttle && variable_get('throttle_level', 0) > 0); + if (!$throttle) { + drupal_get_filename('module', $module->name, $module->filename); + $list[$module->name] = $module->name; + } } } } + if ($sort) { if (!isset($sorted_list)) { $sorted_list = $list; @@ -84,6 +113,7 @@ function module_list($refresh = FALSE, $ } return $sorted_list; } + return $list; } @@ -183,7 +213,7 @@ function _module_build_dependents($files * TRUE if the module is both installed and enabled. */ function module_exists($module) { - $list = module_list(); + $list = module_list_all(); return array_key_exists($module, $list); } @@ -227,7 +257,7 @@ function module_load_include($type, $mod * the system table. */ function module_load_all_includes($type, $name = NULL) { - $modules = module_list(); + $modules = module_list_all(); foreach ($modules as $module) { module_load_include($type, $module, $name); } @@ -253,7 +283,8 @@ function module_enable($module_list) { if (!empty($invoke_modules)) { // Refresh the module list to include the new enabled module. - module_list(TRUE, FALSE); + module_list_all(TRUE); + module_list_bootstrap(TRUE); // Force to regenerate the stored list of hook implementations. module_implements('', FALSE, TRUE); } @@ -282,7 +313,8 @@ function module_disable($module_list) { if (!empty($invoke_modules)) { // Refresh the module list to exclude the disabled modules. - module_list(TRUE, FALSE); + module_list_all(TRUE); + module_list_bootstrap(TRUE); // Force to regenerate the stored list of hook implementations. module_implements('', FALSE, TRUE); } @@ -349,7 +381,7 @@ function module_implements($hook, $sort if (!isset($implementations[$hook])) { $implementations[$hook] = array(); - $list = module_list(FALSE, TRUE, $sort); + $list = module_list_all(FALSE, $sort); foreach ($list as $module) { if (module_hook($module, $hook)) { $implementations[$hook][] = $module; Index: modules/block/block.module =================================================================== RCS file: /cvs/drupal/drupal/modules/block/block.module,v retrieving revision 1.270 diff -u -p -r1.270 block.module --- modules/block/block.module 1 Jul 2007 21:39:07 -0000 1.270 +++ modules/block/block.module 3 Jul 2007 16:54:15 -0000 @@ -165,7 +165,7 @@ function _block_rehash() { $blocks = array(); - foreach (module_list() as $module) { + foreach (module_list_all() as $module) { $module_blocks = module_invoke($module, 'block', 'list'); if ($module_blocks) { foreach ($module_blocks as $delta => $block) { Index: modules/filter/filter.module =================================================================== RCS file: /cvs/drupal/drupal/modules/filter/filter.module,v retrieving revision 1.180 diff -u -p -r1.180 filter.module --- modules/filter/filter.module 1 Jul 2007 17:41:14 -0000 1.180 +++ modules/filter/filter.module 3 Jul 2007 16:54:16 -0000 @@ -627,7 +627,7 @@ function filter_formats($index = NULL) { function filter_list_all() { $filters = array(); - foreach (module_list() as $module) { + foreach (module_list_all() as $module) { $list = module_invoke($module, 'filter', 'list'); if (isset($list) && is_array($list)) { foreach ($list as $delta => $name) { Index: modules/search/search.module =================================================================== RCS file: /cvs/drupal/drupal/modules/search/search.module,v retrieving revision 1.228 diff -u -p -r1.228 search.module --- modules/search/search.module 1 Jul 2007 17:41:16 -0000 1.228 +++ modules/search/search.module 3 Jul 2007 16:54:16 -0000 @@ -226,7 +226,7 @@ function search_admin_settings() { // Collect some stats $remaining = 0; $total = 0; - foreach (module_list() as $module) { + foreach (module_list_all() as $module) { if (module_hook($module, 'search')) { $status = module_invoke($module, 'search', 'status'); $remaining += $status['remaining']; @@ -326,7 +326,7 @@ function search_cron() { register_shutdown_function('search_update_totals'); // Update word index - foreach (module_list() as $module) { + foreach (module_list_all() as $module) { module_invoke($module, 'update_index'); } } Index: modules/system/system.install =================================================================== RCS file: /cvs/drupal/drupal/modules/system/system.install,v retrieving revision 1.126 diff -u -p -r1.126 system.install --- modules/system/system.install 2 Jul 2007 14:41:37 -0000 1.126 +++ modules/system/system.install 3 Jul 2007 16:54:16 -0000 @@ -152,7 +152,7 @@ function system_requirements($phase) { ); // Check installed modules. - foreach (module_list() as $module) { + foreach (module_list_all() as $module) { $updates = drupal_get_schema_versions($module); if ($updates !== FALSE) { $default = drupal_get_installed_schema_version($module); Index: modules/system/system.module =================================================================== RCS file: /cvs/drupal/drupal/modules/system/system.module,v retrieving revision 1.506 diff -u -p -r1.506 system.module --- modules/system/system.module 2 Jul 2007 14:41:37 -0000 1.506 +++ modules/system/system.module 3 Jul 2007 16:54:16 -0000 @@ -1819,7 +1819,7 @@ function system_modules_submit($form, &$ } } - $old_module_list = module_list(); + $old_module_list = module_list_all(); if (!empty($enable_modules)) { module_enable($enable_modules); @@ -1836,7 +1836,7 @@ function system_modules_submit($form, &$ } drupal_install_modules($new_modules); - $current_module_list = module_list(TRUE, FALSE); + $current_module_list = module_list_all(TRUE); if ($old_module_list != $current_module_list) { drupal_rebuild_theme_registry(); node_types_rebuild(); @@ -3121,4 +3121,4 @@ function system_goto_action_submit($form function system_goto_action($object, $context) { drupal_goto($context['url']); -} \ No newline at end of file +} Index: modules/user/user.module =================================================================== RCS file: /cvs/drupal/drupal/modules/user/user.module,v retrieving revision 1.816 diff -u -p -r1.816 user.module --- modules/user/user.module 2 Jul 2007 14:41:37 -0000 1.816 +++ modules/user/user.module 3 Jul 2007 16:54:17 -0000 @@ -16,7 +16,7 @@ define('EMAIL_MAX_LENGTH', 64); * be passed by reference. */ function user_module_invoke($type, &$array, &$user, $category = NULL) { - foreach (module_list() as $module) { + foreach (module_list_all() as $module) { $function = $module .'_user'; if (function_exists($function)) { $function($type, $array, $user, $category); @@ -2023,7 +2023,7 @@ function user_admin_perm($rid = NULL) { // Render role/permission overview: $options = array(); - foreach (module_list(FALSE, FALSE, TRUE) as $module) { + foreach (module_list_all(FALSE, TRUE) as $module) { if ($permissions = module_invoke($module, 'perm')) { $form['permission'][] = array( '#value' => $module, @@ -2824,7 +2824,7 @@ function user_help($path, $arg) { function _user_categories($account) { $categories = array(); - foreach (module_list() as $module) { + foreach (module_list_all() as $module) { if ($data = module_invoke($module, 'user', 'categories', NULL, $account, '')) { $categories = array_merge($data, $categories); } @@ -2846,7 +2846,7 @@ function _user_sort($a, $b) { */ function _user_forms(&$edit, $account, $category, $hook = 'form') { $groups = array(); - foreach (module_list() as $module) { + foreach (module_list_all() as $module) { if ($data = module_invoke($module, 'user', $hook, $edit, $account, $category)) { $groups = array_merge_recursive($data, $groups); } @@ -2890,7 +2890,7 @@ function user_filters() { $options = array(); $t_module = t('module'); - foreach (module_list() as $module) { + foreach (module_list_all() as $module) { if ($permissions = module_invoke($module, 'perm')) { asort($permissions); foreach ($permissions as $permission) {