summaryrefslogtreecommitdiff
path: root/modules/simpletest/tests/theme_test.module
blob: 61a12bb704ac8a21bd225bba3dd9c08074e601e9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<?php

/**
 * Implements hook_theme().
 */
function theme_test_theme($existing, $type, $theme, $path) {
  $items['theme_test'] = array(
    'file' => 'theme_test.inc',
    'variables' => array('foo' => ''),
  );
  $items['theme_test_template_test'] = array(
    'template' => 'theme_test.template_test',
  );
  $items['theme_test_template_test_2'] = array(
    'template' => 'theme_test.template_test',
  );
  $items['theme_test_foo'] = array(
    'variables' => array('foo' => NULL),
  );
  return $items;
}

/**
 * Implements hook_system_theme_info().
 */
function theme_test_system_theme_info() {
  $themes['test_theme'] = drupal_get_path('module', 'theme_test') . '/themes/test_theme/test_theme.info';
  $themes['test_basetheme'] = drupal_get_path('module', 'theme_test') . '/themes/test_basetheme/test_basetheme.info';
  $themes['test_subtheme'] = drupal_get_path('module', 'theme_test') . '/themes/test_subtheme/test_subtheme.info';
  return $themes;
}

/**
 * Implements hook_menu().
 */
function theme_test_menu() {
  $items['theme-test/suggestion'] = array(
    'title' => 'Suggestion',
    'page callback' => '_theme_test_suggestion',
    'access arguments' => array('access content'),
    'theme callback' => '_theme_custom_theme',
    'type' => MENU_CALLBACK,
  );
  $items['theme-test/alter'] = array(
    'title' => 'Suggestion',
    'page callback' => '_theme_test_alter',
    'access arguments' => array('access content'),
    'theme callback' => '_theme_custom_theme',
    'type' => MENU_CALLBACK,
  );
  $items['theme-test/hook-init'] = array(
    'page callback' => 'theme_test_hook_init_page_callback',
    'access callback' => TRUE,
    'type' => MENU_CALLBACK,
  );
  return $items;
}

/**
 * Implements hook_init().
 */
function theme_test_init() {
  if (arg(0) == 'theme-test' && arg(1) == 'hook-init') {
    // First, force the theme registry to be rebuilt on this page request. This
    // allows us to test a full initialization of the theme system in the code
    // below.
    drupal_theme_rebuild();
    // Next, initialize the theme system by storing themed text in a global
    // variable. We will use this later in theme_test_hook_init_page_callback()
    // to test that even when the theme system is initialized this early, it is
    // still capable of returning output and theming the page as a whole.
    $GLOBALS['theme_test_output'] = theme('more_link', array('url' => 'user', 'title' => 'Themed output generated in hook_init()'));
  }
}

/**
 * Implements hook_exit().
 */
function theme_test_exit() {
  if (arg(0) == 'user') {
    // Register a fake registry loading callback. If it gets called by
    // theme_get_registry(), the registry has not been initialized yet.
    _theme_registry_callback('_theme_test_load_registry', array());
    print theme_get_registry() ? 'registry initialized' : 'registry not initialized';
  }
}

/**
 * Fake registry loading callback.
 */
function _theme_test_load_registry() {
  return array();
}

/**
 * Menu callback for testing themed output generated in hook_init().
 */
function theme_test_hook_init_page_callback() {
  return $GLOBALS['theme_test_output'];
}

/**
 * Custom theme callback.
 */
function _theme_custom_theme() {
  return 'test_theme';
}

/**
 * Page callback, calls drupal_alter().
 *
 * This is for testing that the theme can have hook_*_alter() implementations
 * that run during page callback execution, even before theme() is called for
 * the first time.
 */
function _theme_test_alter() {
  $data = 'foo';
  drupal_alter('theme_test_alter', $data);
  return "The altered data is $data.";
}

/**
 * Page callback, calls a theme hook suggestion.
 */
function _theme_test_suggestion() {
  return theme(array('theme_test__suggestion', 'theme_test'), array());
}

/**
 * Theme function for testing theme('theme_test_foo').
 */
function theme_theme_test_foo($variables) {
  return $variables['foo'];
}