function system_find_base_themes

7.x system.module system_find_base_themes($themes, $key, $used_keys = array())
6.x system.module system_find_base_themes($themes, $key, $used_keys = array())

Find all the base themes for the specified theme.

Themes can inherit templates and function implementations from earlier themes.

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

Returns an array of all of the theme's ancestors; the first element's value will be NULL if an error occurred.

1 call to system_find_base_themes()
_system_theme_data in drupal-6.x/modules/system/system.module
Helper function to scan and collect theme .info data and their engines.

File

drupal-6.x/modules/system/system.module, line 976
Configuration system that lets administrators modify the workings of the site.

Code

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