You are here

function ctools_find_base_themes in Chaos Tool Suite (ctools) 7

Same name and namespace in other branches
  1. 6 includes/plugins.inc \ctools_find_base_themes()

Find all the base themes for the specified theme.

Themes can inherit templates and function implementations from earlier themes.

NOTE: this is a verbatim copy of system_find_base_themes(), which was not implemented until 6.14. It is included here only as a fallback for outdated versions of drupal core.

Parameters

$themes: An array of available themes.

$key: The name of the theme whose base we are looking for.

$used_keys: A recursion parameter preventing endless loops.

Return value

array Returns an array of all of the theme's ancestors; the first element's value will be NULL if an error occurred. (Note: this is NOT $arr[0]).

1 call to ctools_find_base_themes()
_ctools_list_themes in includes/plugins.inc
Helper to build a ctools-friendly list of themes capable of providing plugins.

File

includes/plugins.inc, line 608
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_find_base_themes($themes, $key, $used_keys = array()) {
  $base_key = $themes[$key]->info['base theme'];

  // Does the base theme exist?
  if (!isset($themes[$base_key])) {
    return array(
      $base_key => NULL,
    );
  }
  $current_base_theme = array(
    $base_key => $themes[$base_key]->info['name'],
  );

  // Is the base theme itself a child of another theme?
  if (isset($themes[$base_key]->info['base theme'])) {

    // Do we already know the base themes of this theme?
    if (isset($themes[$base_key]->base_themes)) {
      return $themes[$base_key]->base_themes + $current_base_theme;
    }

    // Prevent loops.
    if (!empty($used_keys[$base_key])) {
      return array(
        $base_key => NULL,
      );
    }
    $used_keys[$base_key] = TRUE;
    return ctools_find_base_themes($themes, $base_key, $used_keys) + $current_base_theme;
  }

  // If we get here, then this is our parent theme.
  return $current_base_theme;
}