From 9ad29e527f19fe919e858141d5a7252bb6a03b3e Mon Sep 17 00:00:00 2001
From: Neil Drumm <drumm@3064.no-reply.drupal.org>
Date: Thu, 4 May 2006 10:10:19 +0000
Subject: [PATCH] #51845 by olav, avoid code duplication in phptemplate derived
 theme engines

---
 themes/engines/phptemplate/phptemplate.engine | 49 +++++++++++--------
 1 file changed, 29 insertions(+), 20 deletions(-)

diff --git a/themes/engines/phptemplate/phptemplate.engine b/themes/engines/phptemplate/phptemplate.engine
index 569e86ecdee8..63fb960a97b4 100644
--- a/themes/engines/phptemplate/phptemplate.engine
+++ b/themes/engines/phptemplate/phptemplate.engine
@@ -52,23 +52,27 @@ function phptemplate_regions() {
  *  The HTML generated by the template system.
  */
 function _phptemplate_callback($hook, $variables = array(), $file = NULL) {
+  global $theme_engine;
 
   $variables = array_merge($variables, _phptemplate_default_variables($hook, $variables));
 
   // Allow specified variables to be overridden
-  if (function_exists('_phptemplate_variables')) {
-    $variables = array_merge($variables, _phptemplate_variables($hook, $variables));
+  $variables_function = '_'. $theme_engine .'_variables';
+  if (function_exists($variables_function)) {
+    $variables = array_merge($variables, call_user_func($variables_function, $hook, $variables));
   }
 
   if (isset($variables['template_file'])) {
     $file = $variables['template_file'];
   }
 
-  if (function_exists('_phptemplate_' . $hook)) {
-    return call_user_func('_phptemplate_' . $hook, $variables, $file);
+  $hook_function = '_'. $theme_engine .'_'. $hook;
+  $default_function = '_'. $theme_engine .'_default';
+  if (function_exists($hook_function)) {
+    return call_user_func($hook_function, $variables, $file);
   }
-  elseif (function_exists('_phptemplate_default')) {
-    return call_user_func('_phptemplate_default', $hook, $variables, $file);
+  elseif (function_exists($default_function)) {
+    return call_user_func($default_function, $hook, $variables, $file);
   }
 
 }
@@ -309,35 +313,40 @@ function phptemplate_box($title, $content, $region = 'main') {
  * @param $file
  *   A suggested template file to use.
  */
-function _phptemplate_default($hook, $variables, $file = NULL) {
-  if (!empty($file) && file_exists(path_to_theme() . "/$file.tpl.php")) {
-    $file = path_to_theme() . "/$file.tpl.php";
+function _phptemplate_default($hook, $variables, $file = NULL, $extension = '.tpl.php') {
+  global $theme_engine;
+
+  if (!empty($file) && file_exists(path_to_theme() ."/$file$extension")) {
+    $file = path_to_theme() ."/$file$extension";
   }
   else {
-    if (file_exists(path_to_theme() . "/$hook.tpl.php")) {
-      $file = path_to_theme() . "/$hook.tpl.php";
+    if (file_exists(path_to_theme() ."/$hook$extension")) {
+      $file = path_to_theme() ."/$hook$extension";
     }
     else {
       if (in_array($hook, array('node', 'block', 'box', 'comment'))) {
-        $file = "themes/engines/phptemplate/$hook.tpl.php";
+        $file = "themes/engines/$theme_engine/$hook$extension";
       }
       else {
         $variables['hook'] = $hook;
-        watchdog('error', t('PHPTemplate was instructed to override the %name theme function, but no valid template file was found.', array('%name' => theme('placeholder', $hook))));
-        $file = 'themes/engines/phptemplate/default.tpl.php';
+        watchdog('error', t('%engine.engine was instructed to override the %name theme function, but no valid template file was found.', array('%engine' => $theme_engine, '%name' => theme('placeholder', $hook))));
+        $file = "themes/engines/$theme_engine/default$extension";
       }
     }
   }
 
   if (isset($file)) {
-    extract($variables, EXTR_SKIP);  // Extract the variables to a local namespace
-    ob_start();                      // Start output buffering
-    include "./$file";               // Include the file
-    $contents = ob_get_contents();   // Get the contents of the buffer
-    ob_end_clean();                  // End buffering and discard
-    return $contents;                // Return the contents
+    return call_user_func('_'. $theme_engine .'_render', $file, $variables);
   }
+}
 
+function _phptemplate_render($file, $variables) {
+  extract($variables, EXTR_SKIP);  // Extract the variables to a local namespace
+  ob_start();                      // Start output buffering
+  include "./$file";               // Include the file
+  $contents = ob_get_contents();   // Get the contents of the buffer
+  ob_end_clean();                  // End buffering and discard
+  return $contents;                // Return the contents
 }
 
 ?>
-- 
GitLab