function themekey_custom_theme in ThemeKey 7
Same name and namespace in other branches
- 7.3 themekey.module \themekey_custom_theme()
- 7.2 themekey.module \themekey_custom_theme()
Implements hook_custom_theme().
This is where all of ThemeKey's magic happens. ThemeKey detects if any Theme Switching Rule matches the current request and returns a custom theme.
6 string references to 'themekey_custom_theme'
- themekey_compat_dummy2theme in ./
themekey_compat.module - This function implements the interface of a ThemeKey mapping function but doesn't set a ThemeKey property's value. It sets the Drupal static themekey_custom_theme which will cause ThemeKey to use this theme.
- themekey_debug_init in ./
themekey_debug.module - Implements hook_init().
- themekey_match_condition in ./
themekey_base.inc - Detects if a ThemeKey rule matches to the current page request.
- themekey_ui_author2theme in ./
themekey_ui.module - This function implements the interface of a ThemeKey mapping function but doesn't set a ThemeKey property's value. It sets the Drupal static themekey_custom_theme which will cause ThemeKey to use this theme.
- themekey_ui_nid2theme in ./
themekey_ui.module - This function implements the interface of a ThemeKey mapping function, but doesn't set a ThemeKey property's value. It sets the Drupal static themekey_custom_theme which will cause ThemeKey to use this theme.
File
- ./
themekey.module, line 114 - ThemeKey is designed as a generic theme-switching module.
Code
function themekey_custom_theme() {
$custom_theme =& drupal_static('themekey_custom_theme', '');
// don't change theme when ...
if ((in_array('system', variable_get('themekey_compat_modules_enabled', array())) || !(variable_get('admin_theme', '0') && path_is_admin($_GET['q']))) && strpos($_GET['q'], 'admin/structure/block/demo') !== 0 && strpos($_SERVER['SCRIPT_FILENAME'], 'cron.php') === FALSE && strpos($_SERVER['SCRIPT_FILENAME'], 'drush.php') === FALSE && (!defined('MAINTENANCE_MODE') || MAINTENANCE_MODE != 'install' && MAINTENANCE_MODE != 'update')) {
$custom_theme_called =& drupal_static('themekey_custom_theme_called', FALSE);
$custom_theme_called = TRUE;
if (!$custom_theme) {
require_once DRUPAL_ROOT . '/' . drupal_get_path('module', 'themekey') . '/themekey_base.inc';
$theme_candidate = themekey_match_rules();
// If no theme has been triggered but a theme
// is in the user's session, use that theme.
if (!$theme_candidate && !empty($_SESSION['themekey_theme']) && (!$custom_theme || $custom_theme == variable_get('theme_default', 'bartik'))) {
$theme_candidate = $_SESSION['themekey_theme'];
if (variable_get('themekey_debug_trace_rule_switching', FALSE)) {
themekey_set_debug_message('ThemeKey Debug: No rule triggered a different theme. Reusing last theme from user\'s session: %custom_theme', array(
'%custom_theme' => $theme_candidate,
));
}
}
// We have a theme, apply it
if (!empty($theme_candidate) && $theme_candidate != 'default') {
if (user_is_logged_in() && variable_get('themekey_theme_maintain', 0) || !user_is_logged_in() && variable_get('themekey_theme_maintain_anonymous', 0)) {
$_SESSION['themekey_theme'] = $theme_candidate;
}
elseif (!empty($_SESSION['themekey_theme'])) {
unset($_SESSION['themekey_theme']);
}
$custom_theme = $theme_candidate;
if (variable_get('themekey_debug_trace_rule_switching', FALSE)) {
themekey_set_debug_message('Switching theme to %custom_theme.', array(
'%custom_theme' => $custom_theme,
));
}
}
elseif (variable_get('themekey_debug_trace_rule_switching', FALSE)) {
if ($custom_theme) {
// REVIEW
// static rules set $theme_candidate to 'default and $custom_theme directly
themekey_set_debug_message('$custom_theme has been set to %custom_theme during rule matching.', array(
'%custom_theme' => $custom_theme,
));
}
else {
themekey_set_debug_message('Using default theme.');
}
}
}
}
elseif (variable_get('themekey_debug_trace_rule_switching', FALSE)) {
if (strpos($_GET['q'], 'admin/structure/block/demo') === 0) {
themekey_set_debug_message('Rule checking disabled on block demo.');
}
}
if (variable_get('themekey_debug_show_property_values', FALSE) && module_exists('themekey_debug')) {
themekey_debug_properties();
}
return $custom_theme;
}