Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
project
drupal
Commits
304ae842
Commit
304ae842
authored
Nov 11, 2009
by
Dries Buytaert
Browse files
- Patch
#623992
by catch: performance improvements to system_list().
parent
8e19d799
Changes
2
Hide whitespace changes
Inline
Side-by-side
includes/module.inc
View file @
304ae842
...
...
@@ -89,11 +89,9 @@ function module_list($refresh = FALSE, $bootstrap = FALSE, $sort = FALSE, $fixed
*
* @param $type
* The type of list to return:
* - module: All modules.
* - module_enabled: All enabled modules.
* - bootstrap: All enabled modules required for bootstrap.
* - theme: All themes.
* - theme_enabled: All enabled themes.
*
* @return
* An associative array of modules or themes, keyed by name, and having the
...
...
@@ -106,13 +104,31 @@ function module_list($refresh = FALSE, $bootstrap = FALSE, $sort = FALSE, $fixed
function
system_list
(
$type
)
{
$lists
=
&
drupal_static
(
__FUNCTION__
);
if
(
!
isset
(
$lists
))
{
// For bootstrap modules, attempt to fetch the list from cache if possible.
// if not fetch only the required information to fire bootstrap hooks
// in case we are going to serve the page from cache.
if
(
$type
==
'bootstrap'
)
{
if
(
$cached
=
cache_get
(
'bootstrap_modules'
,
'cache_bootstrap'
))
{
$bootstrap_list
=
$cached
->
data
;
}
else
{
$bootstrap_list
=
db_query
(
"SELECT name, filename FROM
{
system
}
WHERE status = 1 AND bootstrap = 1 AND type = 'module' ORDER BY weight ASC, name ASC"
)
->
fetchAllAssoc
(
'name'
);
cache_set
(
'bootstrap_modules'
,
$bootstrap_list
,
'cache'
);
}
foreach
(
$bootstrap_list
as
$module
)
{
// Prime the drupal_get_filename() static cache to avoid subsequent
// queries to retrieve module filename.
drupal_get_filename
(
'module'
,
$module
->
name
,
$module
->
filename
);
}
// We only return the module names here since module_list() doesn't need
// the filename itself.
$lists
[
'bootstrap'
]
=
array_keys
(
$bootstrap_list
);
}
// Otherwise build the list for enabled modules and themes.
elseif
(
!
isset
(
$lists
))
{
$lists
=
array
(
'bootstrap'
=>
array
(),
'module'
=>
array
(),
'module_enabled'
=>
array
(),
'theme'
=>
array
(),
'theme_enabled'
=>
array
(),
);
// The module name (rather than the filename) is used as the fallback
// weighting in order to guarantee consistent behavior across different
...
...
@@ -121,25 +137,13 @@ 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
)
{
// Build a list of all modules.
if
(
$record
->
type
==
'module'
)
{
$lists
[
'module'
][
$record
->
name
]
=
$record
;
if
(
$record
->
type
==
'module'
&&
$record
->
status
)
{
// Build a list of all enabled modules.
if
(
$record
->
status
)
{
$lists
[
'module_enabled'
][
$record
->
name
]
=
$record
->
name
;
// Build a separate array of modules required for bootstrap.
if
(
$record
->
bootstrap
)
{
$lists
[
'bootstrap'
][
$record
->
name
]
=
$record
->
name
;
}
}
$lists
[
'module_enabled'
][
$record
->
name
]
=
$record
->
name
;
}
// Build a list of themes.
if
(
$record
->
type
==
'theme'
)
{
$lists
[
'theme'
][
$record
->
name
]
=
$record
;
// Build a list of enabled themes.
if
(
$record
->
status
)
{
$lists
[
'theme_enabled'
][
$record
->
name
]
=
$record
;
}
}
// Additionally prime drupal_get_filename() with the filename and type
...
...
@@ -154,6 +158,14 @@ function system_list($type) {
return
$lists
[
$type
];
}
/**
* Reset all system_list() caches.
*/
function
system_list_reset
()
{
drupal_static_reset
(
'system_list'
);
cache_clear_all
(
'bootstrap_modules'
,
'cache_bootstrap'
);
}
/**
* Find dependencies any level deep and fill in required by information too.
*
...
...
@@ -293,6 +305,7 @@ function module_enable($module_list, $disable_modules_installed_hook = FALSE) {
if
(
!
empty
(
$invoke_modules
))
{
// Refresh the module list to exclude the disabled modules.
system_list_reset
();
module_list
(
TRUE
);
module_implements
(
''
,
FALSE
,
TRUE
);
// Force to regenerate the stored list of hook implementations.
...
...
@@ -353,6 +366,7 @@ function module_disable($module_list) {
if
(
!
empty
(
$invoke_modules
))
{
// Refresh the module list to exclude the disabled modules.
system_list_reset
();
module_list
(
TRUE
);
module_implements
(
''
,
FALSE
,
TRUE
);
// Invoke hook_modules_disabled before disabling modules,
...
...
modules/system/system.install
View file @
304ae842
...
...
@@ -1567,6 +1567,7 @@ function system_schema() {
),
'primary key' => array('filename'),
'indexes' => array(
'bootstrap' => array('status', 'bootstrap', 'type', 'weight', 'name'),
'system_list' => array('weight', 'name'),
'type_name' => array('type', 'name'),
),
...
...
@@ -2183,7 +2184,6 @@ function system_update_7017() {
function system_update_7018() {
db_drop_index('system', 'modules');
db_drop_index('system', 'type_name');
db_drop_index
(
'system'
,
'bootstrap'
);
db_change_field('system', 'type', 'type', array('type' => 'varchar', 'length' => 12, 'not null' => TRUE, 'default' => ''));
db_add_index('system', 'type_name', array('type', 'name'));
db_add_index('system', 'system_list', array('weight', 'name'));
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment