diff --git a/core/includes/module.inc b/core/includes/module.inc index 1a52a80..a7ce934 100644 --- a/core/includes/module.inc +++ b/core/includes/module.inc @@ -187,10 +187,42 @@ function system_list($type) { } } + system_list_overrides($lists); + return $lists[$type]; } /** + * Add or remove to the enabled modules/themes as specified in the + * $conf['system_list_overrides'] variable in settings.php. + * + * @param $lists + * An array keyed by system record type (modules, themes, bootstrap). + */ +function system_list_overrides(&$lists) { + static $uno; + if ($overrides = variable_get('system_list_overrides', array())) { + foreach ($overrides as $type => $items) { + foreach ($items as $name => $status) { + if ($status) { + $type_column = ($type == 'module_enabled') ? 'module' : $type; + $results = db_query('SELECT * FROM {system} WHERE name = :name AND type = :type', array(':name' => $name, ':type' => $type_column)); + // This should be just one iteration. Use foreach instead of + // array_shift() to handle no results(i.e.: unknown module). + foreach ($results as $record) { + $lists['filepaths'][] = array('type' => $record->type, 'name' => $record->name, 'filepath' => $record->filename); + $lists[$type][$name] = $record; + } + } + else { + unset($lists[$type][$name]); + } + } + } + } +} + +/** * Reset all system_list() caches. */ function system_list_reset() { diff --git a/sites/default/default.settings.php b/sites/default/default.settings.php index 360e556..44623e8 100755 --- a/sites/default/default.settings.php +++ b/sites/default/default.settings.php @@ -510,3 +510,26 @@ $conf['404_fast_html'] = '