function _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

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;
}