function styleswitcher_theme_styles in Style Switcher 7.2
Same name and namespace in other branches
- 8.2 styleswitcher.module \styleswitcher_theme_styles()
- 6.2 styleswitcher.module \styleswitcher_theme_styles()
- 3.0.x styleswitcher.module \styleswitcher_theme_styles()
Returns a list of styles provided by a theme.
Parameters
string $theme: Name of the theme to retrieve styles of.
string|null $original_theme: (optional) Name of the theme which the function was originally called with. While iterating over base themes the $theme argument changes but $original_theme keeps the same value.
Return value
array Array of styles. Keys are machine names and each element is a corresponding array of style properties: name, label and path. All properties are mandatory. See styleswitcher_style_load() for their descriptions.
See also
3 calls to styleswitcher_theme_styles()
- styleswitcher_default_style_key in ./
styleswitcher.module - Finds the default style and returns its key.
- styleswitcher_styles_settings in ./
styleswitcher.module - Returns a list of styles with theme-specific settings.
- styleswitcher_style_load_multiple in ./
styleswitcher.module - Returns a list of styles.
File
- ./
styleswitcher.module, line 504 - Module's hooks implementations and helper functions.
Code
function styleswitcher_theme_styles($theme, $original_theme = NULL) {
$styles =& drupal_static(__FUNCTION__, array());
// Theme can be an empty string if custom style is loading.
if (!$theme) {
return array();
}
if (isset($styles[$theme])) {
return $styles[$theme];
}
$theme_styles = array();
$theme_path = drupal_get_path('theme', $theme);
// Do not use system_get_info() because it skips disabled base themes.
$themes = list_themes();
$theme_info = $themes[$theme]->info;
if (!isset($original_theme)) {
$original_theme = $theme;
}
// Search base themes for styleswitcher info.
if (isset($theme_info['base theme'])) {
$theme_styles = styleswitcher_theme_styles($theme_info['base theme'], $original_theme);
}
if (!empty($theme_info['styleswitcher'])) {
$info = $theme_info['styleswitcher'];
// Array of alternatives.
if (!empty($info['css'])) {
foreach ($info['css'] as $label => $path) {
$name = 'theme/' . _styleswitcher_style_name($label);
$theme_styles[$name] = array(
'name' => $name,
'label' => $label,
'path' => url_is_external($path) ? $path : $theme_path . '/' . $path,
);
}
}
// Default style.
if (isset($info['default'])) {
$default = $info['default'];
}
elseif (isset($info['css']['default'])) {
$default = $info['css']['default'];
unset($theme_styles['theme/default']);
}
if (isset($default)) {
$default_in_existing = FALSE;
// Check if Default points to one of existing alternatives.
foreach ($theme_styles as $name => $style) {
if ($default == $style['label'] || $default == $style['path'] || $theme_path . '/' . $default == $style['path']) {
styleswitcher_theme_default_style_key($original_theme, $name);
$default_in_existing = TRUE;
break;
}
}
// Default is a path not mentioned in css array.
if (!$default_in_existing) {
$defaults['theme/default'] = array(
'name' => 'theme/default',
'label' => 'Default',
'path' => url_is_external($default) ? $default : $theme_path . '/' . $default,
);
// Place default style above others.
$theme_styles = $defaults + $theme_styles;
styleswitcher_theme_default_style_key($original_theme, 'theme/default');
}
}
}
// Do not inflate the memory.
if ($theme == $original_theme) {
$styles[$theme] = $theme_styles;
}
return $theme_styles;
}