function _ctools_list_themes in Chaos Tool Suite (ctools) 6
Same name and namespace in other branches
- 7 includes/plugins.inc \_ctools_list_themes()
Helper function to build a ctools-friendly list of themes capable of providing plugins.
Return value
array $themes 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 427 - 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) {
$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;
}