You are here

function themekey_custom_theme in ThemeKey 7

Same name and namespace in other branches
  1. 7.3 themekey.module \themekey_custom_theme()
  2. 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.

... See full list

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