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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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()