diff --git a/core/includes/theme.inc b/core/includes/theme.inc index 6cd1712..d139476 100644 --- a/core/includes/theme.inc +++ b/core/includes/theme.inc @@ -667,6 +667,8 @@ function theme($hook, $variables = array()) { } // Send prepare arguments to invoke hooks with $variables passed by reference. + // @todo Change this to hook_menu() style where you need to return $variables + // instead of altering by reference. $prepare_args = array(&$variables, $base_theme_hook); // Invokes hook_theme_prepare(), hook_theme_prepare_THEME_HOOK() for enabled @@ -680,14 +682,6 @@ function theme($hook, $variables = array()) { } } - // Invokes hook_theme_prepare(), hook_theme_prepare_THEME_HOOK() for the active - // theme, which takes precedence over modules. - // @todo Replace with Drupal::themeHandler()->invoke() once implemented. - // @see https://drupal.org/node/2029819 - foreach ($prepare_hooks as $prepare_hook) { - theme_invoke($prepare_hook, $prepare_args); - } - // Invokes hook_preprocess() and hook_preprocess_HOOK() implementations. This // phase is deprecated and is run in between hook_theme_prepare[_THEME_HOOK]() // and hook_theme_prepare[_THEME_HOOK]_alter(). @@ -701,8 +695,6 @@ function theme($hook, $variables = array()) { // Invokes hook_theme_prepare_alter(), hook_theme_prepare_THEME_ID_alter() // for enabled modules. - // @todo Add Drupal::themeHandler()->alter() invocations once implemented. - // @see https://drupal.org/node/2029819 foreach ($prepare_hooks as $prepare_hook) { Drupal::moduleHandler()->alter($prepare_hook, $variables, $base_theme_hook); } @@ -1139,39 +1131,6 @@ function theme_disable($theme_list) { } /** - * Rudimentary and temporary method for invoking theme hooks. - * - * @param string $hook - * The hook name to invoke. - * @param array $args - * The array of arguments to pass to hook invocation (by reference). - * - * @return mixed - * The value returned varies on which hook is invoked. - * - * @todo Remove once a proper Drupal::themeHandler() is created. - * @see https://drupal.org/node/2029819 - */ -function theme_invoke($hook, &$args = array()) { - // Allow the active theme to invoke hooks after the theme system has been - // initialized. - global $theme, $base_theme_info; - if (isset($theme)) { - $theme_keys = array(); - foreach ($base_theme_info as $base) { - $theme_keys[] = $base->name; - } - $theme_keys[] = $theme; - foreach ($theme_keys as $theme_key) { - $function = $theme_key . '_' . $hook; - if (function_exists($function)) { - call_user_func_array($function, $args); - } - } - } -} - -/** * @addtogroup themeable * @{ */ diff --git a/core/modules/system/lib/Drupal/system/Tests/Theme/ThemePrepareTest.php b/core/modules/system/lib/Drupal/system/Tests/Theme/ThemePrepareTest.php index 5ca1d0f..fa6c486 100644 --- a/core/modules/system/lib/Drupal/system/Tests/Theme/ThemePrepareTest.php +++ b/core/modules/system/lib/Drupal/system/Tests/Theme/ThemePrepareTest.php @@ -44,31 +44,22 @@ public function testThemePrepare() { $this->drupalGet('theme-test/prepare'); $this->assertRaw('

moduleVariable1: Drupal\theme_test\ThemeTestController::prepare
-test_theme_theme_prepare
-test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
test_theme_theme_prepare_alter
test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

moduleVariable2: Drupal\theme_test\ThemeTestController::prepare
-test_theme_theme_prepare
-test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
test_theme_theme_prepare_alter
test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

moduleVariableSuggestion1: Drupal\theme_test\ThemeTestController::prepare
-test_theme_theme_prepare
-test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
test_theme_theme_prepare_alter
test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

moduleVariableSuggestion2: Drupal\theme_test\ThemeTestController::prepare
theme_test_theme_prepare_theme_test_prepare__implemented
-test_theme_theme_prepare
-test_theme_theme_prepare_theme_test_prepare
-test_theme_theme_prepare_theme_test_prepare__implemented
theme_test_theme_prepare_alter
test_theme_theme_prepare_alter
test_theme_theme_prepare_theme_test_prepare_alter
@@ -77,9 +68,6 @@ public function testThemePrepare() { $this->assertRaw('

moduleVariableSuggestion3: Drupal\theme_test\ThemeTestController::prepare
theme_test_theme_prepare_theme_test_prepare__implemented__extended
-test_theme_theme_prepare
-test_theme_theme_prepare_theme_test_prepare
-test_theme_theme_prepare_theme_test_prepare__implemented__extended
theme_test_theme_prepare_alter
test_theme_theme_prepare_alter
test_theme_theme_prepare_theme_test_prepare_alter
@@ -87,141 +75,41 @@ public function testThemePrepare() { test_theme_theme_prepare_theme_test_prepare__implemented__extended_alter

'); $this->assertRaw('

moduleElement1: Drupal\theme_test\ThemeTestController::prepare
-test_theme_theme_prepare
-test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
test_theme_theme_prepare_alter
test_theme_theme_prepare_theme_test_prepare_alter

'); - $this->assertRaw('

moduleInjectedVariable1: theme_test_theme_prepare
-test_theme_theme_prepare
-test_theme_theme_prepare_theme_test_prepare
+ $this->assertRaw('

moduleInjectedVariable1: Variable added in: theme_test_theme_prepare
theme_test_theme_prepare_alter
test_theme_theme_prepare_alter
test_theme_theme_prepare_theme_test_prepare_alter

'); - $this->assertRaw('

moduleInjectedVariable2: theme_test_theme_prepare_theme_test_prepare_element
-test_theme_theme_prepare
-test_theme_theme_prepare_theme_test_prepare
+ $this->assertRaw('

moduleInjectedVariable2: Variable added in: theme_test_theme_prepare_theme_test_prepare_element
theme_test_theme_prepare_alter
test_theme_theme_prepare_alter
test_theme_theme_prepare_theme_test_prepare_alter

'); - $this->assertRaw('

themeInjectedVariable1: test_theme_theme_prepare
-test_theme_theme_prepare
-test_theme_theme_prepare_theme_test_prepare
+ $this->assertRaw('

moduleInjectedVariable3: Variable added in: theme_test_theme_prepare_theme_test_prepare_element_alter
theme_test_theme_prepare_alter
test_theme_theme_prepare_alter
test_theme_theme_prepare_theme_test_prepare_alter

'); - $this->assertRaw('

moduleInjectedVariable3: theme_test_theme_prepare_theme_test_prepare_element_alter
-test_theme_theme_prepare
-test_theme_theme_prepare_theme_test_prepare
+ $this->assertRaw('

themeInjectedVariable1: Variable added in: test_theme_theme_prepare_theme_test_prepare_element_alter
theme_test_theme_prepare_alter
test_theme_theme_prepare_alter
test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

moduleElementSuggestion1: Drupal\theme_test\ThemeTestController::prepare
-test_theme_theme_prepare
-test_theme_theme_prepare_theme_test_prepare
-theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter
-test_theme_theme_prepare_theme_test_prepare_alter

'); - - $this->assertRaw('

moduleInjectedVariable1: theme_test_theme_prepare
-test_theme_theme_prepare
-test_theme_theme_prepare_theme_test_prepare
-theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter
-test_theme_theme_prepare_theme_test_prepare_alter

'); - - $this->assertRaw('

moduleInjectedVariable2: theme_test_theme_prepare_theme_test_prepare_element
-test_theme_theme_prepare
-test_theme_theme_prepare_theme_test_prepare
-theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter
-test_theme_theme_prepare_theme_test_prepare_alter

'); - - $this->assertRaw('

themeInjectedVariable1: test_theme_theme_prepare
-test_theme_theme_prepare
-test_theme_theme_prepare_theme_test_prepare
-theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter
-test_theme_theme_prepare_theme_test_prepare_alter

'); - - $this->assertRaw('

moduleInjectedVariable3: theme_test_theme_prepare_theme_test_prepare_element_alter
-test_theme_theme_prepare
-test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
test_theme_theme_prepare_alter
test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

moduleElementSuggestion2: Drupal\theme_test\ThemeTestController::prepare
-test_theme_theme_prepare
-test_theme_theme_prepare_theme_test_prepare
-theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter
-test_theme_theme_prepare_theme_test_prepare_alter

'); - - $this->assertRaw('

moduleInjectedVariable1: theme_test_theme_prepare
-test_theme_theme_prepare
-test_theme_theme_prepare_theme_test_prepare
-theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter
-test_theme_theme_prepare_theme_test_prepare_alter

'); - - $this->assertRaw('

moduleInjectedVariable2: theme_test_theme_prepare_theme_test_prepare_element
-test_theme_theme_prepare
-test_theme_theme_prepare_theme_test_prepare
-theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter
-test_theme_theme_prepare_theme_test_prepare_alter

'); - - $this->assertRaw('

themeInjectedVariable1: test_theme_theme_prepare
-test_theme_theme_prepare
-test_theme_theme_prepare_theme_test_prepare
-theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter
-test_theme_theme_prepare_theme_test_prepare_alter

'); - - $this->assertRaw('

moduleInjectedVariable3: theme_test_theme_prepare_theme_test_prepare_element_alter
-test_theme_theme_prepare
-test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
test_theme_theme_prepare_alter
test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

moduleElementSuggestion3: Drupal\theme_test\ThemeTestController::prepare
-test_theme_theme_prepare
-test_theme_theme_prepare_theme_test_prepare
-theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter
-test_theme_theme_prepare_theme_test_prepare_alter

'); - - $this->assertRaw('

moduleInjectedVariable1: theme_test_theme_prepare
-test_theme_theme_prepare
-test_theme_theme_prepare_theme_test_prepare
-theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter
-test_theme_theme_prepare_theme_test_prepare_alter

'); - - $this->assertRaw('

moduleInjectedVariable2: theme_test_theme_prepare_theme_test_prepare_element
-test_theme_theme_prepare
-test_theme_theme_prepare_theme_test_prepare
-theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter
-test_theme_theme_prepare_theme_test_prepare_alter

'); - - $this->assertRaw('

themeInjectedVariable1: test_theme_theme_prepare
-test_theme_theme_prepare
-test_theme_theme_prepare_theme_test_prepare
-theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter
-test_theme_theme_prepare_theme_test_prepare_alter

'); - - $this->assertRaw('

moduleInjectedVariable3: theme_test_theme_prepare_theme_test_prepare_element_alter
-test_theme_theme_prepare
-test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
test_theme_theme_prepare_alter
test_theme_theme_prepare_theme_test_prepare_alter

'); @@ -237,18 +125,12 @@ function testThemePrepareSubtheme() { $this->drupalGet('theme-test/prepare-subtheme'); $this->assertRaw('

subThemePrepare: Drupal\theme_test\ThemeTestController::prepareSubtheme
-test_basetheme_theme_prepare_theme_test_prepare
-test_subtheme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
test_basetheme_theme_prepare_theme_test_prepare_alter
test_subtheme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

subThemePrepareSuggestion: Drupal\theme_test\ThemeTestController::prepareSubtheme
theme_test_theme_prepare_theme_test_prepare__implemented
-test_basetheme_theme_prepare_theme_test_prepare
-test_subtheme_theme_prepare_theme_test_prepare
-test_basetheme_theme_prepare_theme_test_prepare__implemented
-test_subtheme_theme_prepare_theme_test_prepare__implemented
theme_test_theme_prepare_alter
test_basetheme_theme_prepare_theme_test_prepare_alter
test_subtheme_theme_prepare_theme_test_prepare_alter
diff --git a/core/modules/system/tests/modules/theme_test/theme_test.module b/core/modules/system/tests/modules/theme_test/theme_test.module index dd2f508..8c300ed 100644 --- a/core/modules/system/tests/modules/theme_test/theme_test.module +++ b/core/modules/system/tests/modules/theme_test/theme_test.module @@ -207,7 +207,7 @@ function theme_test_theme_prepare(&$variables, $hook) { $variables['element']['moduleInjectedVariable1'] = array( '#theme' => 'theme_test_prepare__element', '#title' => 'moduleInjectedVariable1', - '#value' => __FUNCTION__, + '#value' => 'Variable added in: ' . __FUNCTION__, ); } } @@ -256,7 +256,7 @@ function theme_test_theme_prepare_theme_test_prepare_element(&$variables) { $variables['element']['moduleInjectedVariable2'] = array( '#theme' => 'theme_test_prepare__element', '#title' => 'moduleInjectedVariable2', - '#value' => __FUNCTION__, + '#value' => 'Variable added in: ' . __FUNCTION__, ); } @@ -267,6 +267,6 @@ function theme_test_theme_prepare_theme_test_prepare_element_alter(&$variables) $variables['element']['moduleInjectedVariable3'] = array( '#theme' => 'theme_test_prepare__element', '#title' => 'moduleInjectedVariable3', - '#value' => __FUNCTION__, + '#value' => 'Variable added in: ' . __FUNCTION__, ); } diff --git a/core/modules/system/tests/themes/test_basetheme/test_basetheme.theme b/core/modules/system/tests/themes/test_basetheme/test_basetheme.theme index 7def511..473e289 100644 --- a/core/modules/system/tests/themes/test_basetheme/test_basetheme.theme +++ b/core/modules/system/tests/themes/test_basetheme/test_basetheme.theme @@ -6,13 +6,6 @@ */ /** - * Implements hook_theme_prepare_THEME_HOOK(). - */ -function test_basetheme_theme_prepare_theme_test_prepare(&$variables) { - $variables['value'] .= "
\n" . __FUNCTION__; -} - -/** * Implements hook_theme_prepare_THEME_HOOK_alter(). */ function test_basetheme_theme_prepare_theme_test_prepare_alter(&$variables) { @@ -20,13 +13,6 @@ function test_basetheme_theme_prepare_theme_test_prepare_alter(&$variables) { } /** - * Implements hook_theme_prepare_THEME_HOOK__SUGGESTION(). - */ -function test_basetheme_theme_prepare_theme_test_prepare__implemented(&$variables) { - $variables['value'] .= "
\n" . __FUNCTION__; -} - -/** * Implements hook_theme_prepare_THEME_HOOK__SUGGESTION_alter(). */ function test_basetheme_theme_prepare_theme_test_prepare__implemented_alter(&$variables) { diff --git a/core/modules/system/tests/themes/test_subtheme/test_subtheme.theme b/core/modules/system/tests/themes/test_subtheme/test_subtheme.theme index affb5fb..6ba3eb6 100644 --- a/core/modules/system/tests/themes/test_subtheme/test_subtheme.theme +++ b/core/modules/system/tests/themes/test_subtheme/test_subtheme.theme @@ -6,13 +6,6 @@ */ /** - * Implements hook_theme_prepare_THEME_HOOK(). - */ -function test_subtheme_theme_prepare_theme_test_prepare(&$variables) { - $variables['value'] .= "
\n" . __FUNCTION__; -} - -/** * Implements hook_theme_prepare_THEME_HOOK_alter(). */ function test_subtheme_theme_prepare_theme_test_prepare_alter(&$variables) { @@ -20,13 +13,6 @@ function test_subtheme_theme_prepare_theme_test_prepare_alter(&$variables) { } /** - * Implements hook_theme_prepare_THEME_HOOK__SUGGESTION(). - */ -function test_subtheme_theme_prepare_theme_test_prepare__implemented(&$variables) { - $variables['value'] .= "
\n" . __FUNCTION__; -} - -/** * Implements hook_theme_prepare_THEME_HOOK__SUGGESTION_alter(). */ function test_subtheme_theme_prepare_theme_test_prepare__implemented_alter(&$variables) { diff --git a/core/modules/system/tests/themes/test_theme/test_theme.theme b/core/modules/system/tests/themes/test_theme/test_theme.theme index 6cc73f0..01f47b9 100644 --- a/core/modules/system/tests/themes/test_theme/test_theme.theme +++ b/core/modules/system/tests/themes/test_theme/test_theme.theme @@ -86,22 +86,6 @@ function test_theme_theme_test_function_suggestions__module_override($variables) } /** - * Implements hook_theme_prepare(). - */ -function test_theme_theme_prepare(&$variables, $hook) { - if ($hook === 'theme_test_prepare') { - $variables['value'] .= "
\n" . __FUNCTION__; - } - elseif ($hook === 'theme_test_prepare_element') { - $variables['element']['themeInjectedVariable1'] = array( - '#theme' => 'theme_test_prepare__element', - '#title' => 'themeInjectedVariable1', - '#value' => __FUNCTION__, - ); - } -} - -/** * Implements hook_theme_prepare_alter(). */ function test_theme_theme_prepare_alter(&$variables, $hook) { @@ -111,10 +95,14 @@ function test_theme_theme_prepare_alter(&$variables, $hook) { } /** - * Implements hook_theme_prepare_THEME_HOOK(). + * Implements hook_theme_prepare_THEME_HOOK_alter(). */ -function test_theme_theme_prepare_theme_test_prepare(&$variables) { - $variables['value'] .= "
\n" . __FUNCTION__; +function test_theme_theme_prepare_theme_test_prepare_element_alter(&$variables) { + $variables['element']['themeInjectedVariable1'] = array( + '#theme' => 'theme_test_prepare__element', + '#title' => 'themeInjectedVariable1', + '#value' => 'Variable added in: ' . __FUNCTION__, + ); } /** @@ -125,13 +113,6 @@ function test_theme_theme_prepare_theme_test_prepare_alter(&$variables) { } /** - * Implements hook_theme_prepare_THEME_HOOK__SUGGESTION(). - */ -function test_theme_theme_prepare_theme_test_prepare__implemented(&$variables) { - $variables['value'] .= "
\n" . __FUNCTION__; -} - -/** * Implements hook_theme_prepare_THEME_HOOK__SUGGESTION_alter(). */ function test_theme_theme_prepare_theme_test_prepare__implemented_alter(&$variables) { @@ -139,13 +120,6 @@ function test_theme_theme_prepare_theme_test_prepare__implemented_alter(&$variab } /** - * Implements hook_theme_prepare_THEME_HOOK__SUGGESTION(). - */ -function test_theme_theme_prepare_theme_test_prepare__implemented__extended(&$variables) { - $variables['value'] .= "
\n" . __FUNCTION__; -} - -/** * Implements hook_theme_prepare_THEME_HOOK__SUGGESTION_alter(). */ function test_theme_theme_prepare_theme_test_prepare__implemented__extended_alter(&$variables) { diff --git a/core/modules/system/theme.api.php b/core/modules/system/theme.api.php index eff8315..10c7d61 100644 --- a/core/modules/system/theme.api.php +++ b/core/modules/system/theme.api.php @@ -172,7 +172,7 @@ function hook_preprocess_HOOK(&$variables) { /** * Prepares variables for theme functions and templates. * - * This hook allows any module or theme to prepare variables for any theme hook. + * This hook allows any module to prepare variables for any theme hook. * hook_theme_prepare_THEME_HOOK() can be used to prepare variables for a * specific theme hook. * @@ -250,8 +250,8 @@ function hook_theme_prepare_alter(&$variables, $hook) { /** * Prepares variables for a specific theme hook or theme hook suggestion. * - * This hook allow any module or theme to prepare theme variables for a specific - * theme hook or theme hook suggestion. + * This hook allows any module to prepare theme variables for a specific theme + * hook or theme hook suggestion. * * THEME_HOOK can be either the base theme hook or a more specific suggestion * using the double-underscore ('__') notation. @@ -261,7 +261,6 @@ function hook_theme_prepare_alter(&$variables, $hook) { * @param array $variables * The associative array of variables, passed by reference (modify in place). * - * @see rdf_preprocess_image() * @see hook_theme_prepare_THEME_HOOK_alter() * @see hook_theme_prepare_alter() * @see hook_theme_prepare()