From 88ed5dced2f4a5dd252b0b1667efa18710a9523f Mon Sep 17 00:00:00 2001
From: Angie Byron <webchick@24967.no-reply.drupal.org>
Date: Fri, 24 Oct 2008 07:02:54 +0000
Subject: [PATCH] #258089 by merlinofchaos and dvessel: Allow themes to have
 preprocess functions without a corresponding .tpl.php file.

---
 includes/theme.inc | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/includes/theme.inc b/includes/theme.inc
index b76a1b4bc3dc..ee6eea387850 100644
--- a/includes/theme.inc
+++ b/includes/theme.inc
@@ -279,6 +279,7 @@ function drupal_theme_rebuild() {
  * over how and when the preprocess functions are run.
  */
 function _theme_process_registry(&$cache, $name, $type, $theme, $path) {
+  $result = array();
   $function = $name . '_theme';
   if (function_exists($function)) {
     $result = $function($cache, $type, $theme, $path);
@@ -368,6 +369,26 @@ function _theme_process_registry(&$cache, $name, $type, $theme, $path) {
     // Merge the newly created theme hooks into the existing cache.
     $cache = array_merge($cache, $result);
   }
+
+  // Let themes have preprocess functions even if they didn't register a template.
+  if ($type == 'theme' || $type == 'base_theme') {
+    foreach ($cache as $hook => $info) {
+      // Check only if it's a template and not registered by the theme or engine
+      if (!empty($info['template']) && empty($result[$hook])) {
+        if (!isset($info['preprocess functions'])) {
+          $cache[$hook]['preprocess functions'] = array();
+        }
+        if (function_exists($name . '_preprocess')) {
+          $cache[$hook]['preprocess functions'][] = $name . '_preprocess';
+        }
+        if (function_exists($name . '_preprocess_' . $hook)) {
+          $cache[$hook]['preprocess functions'][] = $name . '_preprocess_' . $hook;
+        }
+        // Ensure uniqueness.
+        $cache[$hook]['preprocess functions'] = array_unique($cache[$hook]['preprocess functions']);
+      }
+    }
+  }
 }
 
 /**
-- 
GitLab