function _ctools_list_themes in Chaos Tool Suite (ctools) 7
Same name and namespace in other branches
- 6 includes/plugins.inc \_ctools_list_themes()
Helper to build a ctools-friendly list of themes capable of providing plugins.
Return value
array A list of themes that can act as plugin providers, sorted parent-first with the active theme placed last.
2 calls to _ctools_list_themes()
- ctools_plugin_api_info in includes/
plugins.inc - Get an array of information about modules that support an API.
- ctools_plugin_get_directories in includes/
plugins.inc - Get a list of directories to search for plugins of the given type.
File
- includes/
plugins.inc, line 550 - Contains routines to organize and load plugins. It allows a special variation of the hook system so that plugins can be kept in separate .inc files, and can be either loaded all at once or loaded only when necessary.
Code
function _ctools_list_themes() {
static $themes;
if (is_null($themes)) {
$current = variable_get('theme_default', FALSE);
$themes = $active = array();
$all_themes = list_themes();
foreach ($all_themes as $name => $theme) {
// Only search from active themes.
if (empty($theme->status) && $theme->name != $current) {
continue;
}
$active[$name] = $theme;
// Prior to drupal 6.14, $theme->base_themes does not exist. Build it.
if (!isset($theme->base_themes) && !empty($theme->base_theme)) {
$active[$name]->base_themes = ctools_find_base_themes($all_themes, $name);
}
}
// Construct a parent-first list of all themes.
foreach ($active as $name => $theme) {
$base_themes = isset($theme->base_themes) ? $theme->base_themes : array();
$themes = array_merge($themes, $base_themes, array(
$name => $theme->info['name'],
));
}
// Put the actual theme info objects into the array.
foreach (array_keys($themes) as $name) {
if (isset($all_themes[$name])) {
$themes[$name] = $all_themes[$name];
}
}
// Make sure the current default theme always gets the last word.
if ($current_key = array_search($current, array_keys($themes))) {
$themes += array_splice($themes, $current_key, 1);
}
}
return $themes;
}