diff options
author | webchick <webchick@24967.no-reply.drupal.org> | 2012-02-28 10:22:59 -0800 |
---|---|---|
committer | webchick <webchick@24967.no-reply.drupal.org> | 2012-02-28 10:22:59 -0800 |
commit | 447d6a628bde3891a4be70a3d9131023214d00f3 (patch) | |
tree | a209c0e5047eb9a8b7e1bfd9cff4cd989a5a1162 | |
parent | 22135d9c0c7751ac45596c947b4918041a79eeb5 (diff) | |
download | brdo-447d6a628bde3891a4be70a3d9131023214d00f3.tar.gz brdo-447d6a628bde3891a4be70a3d9131023214d00f3.tar.bz2 |
Issue #1430300 by mradcliffe, xjm, effulgentsia, NROTC_Webmaster: Fixed Preprocess functions in an include file fail to get called when the theme implements a suggestion override.
-rw-r--r-- | includes/theme.inc | 7 | ||||
-rw-r--r-- | modules/simpletest/tests/theme.test | 16 | ||||
-rw-r--r-- | modules/simpletest/tests/theme_test.inc | 15 | ||||
-rw-r--r-- | modules/simpletest/tests/theme_test.module | 16 | ||||
-rw-r--r-- | modules/simpletest/tests/themes/test_theme/template.php | 6 |
5 files changed, 41 insertions, 19 deletions
diff --git a/includes/theme.inc b/includes/theme.inc index da4200e56..0712f8797 100644 --- a/includes/theme.inc +++ b/includes/theme.inc @@ -991,6 +991,13 @@ function theme($hook, $variables = array()) { if (isset($info['base hook'])) { $base_hook = $info['base hook']; $base_hook_info = $hooks[$base_hook]; + // Include files required by the base hook, since its variable processors + // might reside there. + if (!empty($base_hook_info['includes'])) { + foreach ($base_hook_info['includes'] as $include_file) { + include_once DRUPAL_ROOT . '/' . $include_file; + } + } if (isset($base_hook_info['preprocess functions']) || isset($base_hook_info['process functions'])) { $variables['theme_hook_suggestion'] = $hook; $hook = $base_hook; diff --git a/modules/simpletest/tests/theme.test b/modules/simpletest/tests/theme.test index af1141124..19775a7f8 100644 --- a/modules/simpletest/tests/theme.test +++ b/modules/simpletest/tests/theme.test @@ -52,11 +52,19 @@ class ThemeUnitTest extends DrupalWebTestCase { } /** - * Preprocess functions for the base hook should run even for suggestion implementations. - */ + * Ensures preprocess functions run even for suggestion implementations. + * + * The theme hook used by this test has its base preprocess function in a + * separate file, so this test also ensures that that file is correctly loaded + * when needed. + */ function testPreprocessForSuggestions() { - $this->drupalGet('theme-test/suggestion'); - $this->assertText('test_theme_breadcrumb__suggestion: 1', t('Theme hook suggestion ran with data available from a preprocess function for the base hook.')); + // Test with both an unprimed and primed theme registry. + drupal_theme_rebuild(); + for ($i = 0; $i < 2; $i++) { + $this->drupalGet('theme-test/suggestion'); + $this->assertText('Theme hook implementor=test_theme_theme_test__suggestion(). Foo=template_preprocess_theme_test', 'Theme hook suggestion ran with data available from a preprocess function for the base hook.'); + } } /** diff --git a/modules/simpletest/tests/theme_test.inc b/modules/simpletest/tests/theme_test.inc new file mode 100644 index 000000000..6cde68384 --- /dev/null +++ b/modules/simpletest/tests/theme_test.inc @@ -0,0 +1,15 @@ +<?php + +/** + * Returns HTML for the 'theme_test' theme hook used by tests. + */ +function theme_theme_test($variables) { + return 'Theme hook implementor=theme_theme_test(). Foo=' . $variables['foo']; +} + +/** + * Preprocesses variables for theme_theme_test(). + */ +function template_preprocess_theme_test(&$variables) { + $variables['foo'] = 'template_preprocess_theme_test'; +} diff --git a/modules/simpletest/tests/theme_test.module b/modules/simpletest/tests/theme_test.module index 48e2e83c6..cce7b8093 100644 --- a/modules/simpletest/tests/theme_test.module +++ b/modules/simpletest/tests/theme_test.module @@ -4,13 +4,16 @@ * 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', ); - return $items; } @@ -115,14 +118,5 @@ function _theme_test_alter() { * Page callback, calls a theme hook suggestion. */ function _theme_test_suggestion() { - return theme(array('breadcrumb__suggestion', 'breadcrumb'), array()); -} - -/** - * Implements hook_preprocess_breadcrumb(). - * - * Set a variable that can later be tested to see if this function ran. - */ -function theme_test_preprocess_breadcrumb(&$variables) { - $variables['theme_test_preprocess_breadcrumb'] = 1; + return theme(array('theme_test__suggestion', 'theme_test'), array()); } diff --git a/modules/simpletest/tests/themes/test_theme/template.php b/modules/simpletest/tests/themes/test_theme/template.php index ef8118a6d..8275818e4 100644 --- a/modules/simpletest/tests/themes/test_theme/template.php +++ b/modules/simpletest/tests/themes/test_theme/template.php @@ -3,10 +3,8 @@ /** * Tests a theme overriding a suggestion of a base theme hook. */ -function test_theme_breadcrumb__suggestion($variables) { - // Tests that preprocess functions for the base theme hook get called even - // when the suggestion has an implementation. - return 'test_theme_breadcrumb__suggestion: ' . $variables['theme_test_preprocess_breadcrumb']; +function test_theme_theme_test__suggestion($variables) { + return 'Theme hook implementor=test_theme_theme_test__suggestion(). Foo=' . $variables['foo']; } /** |