Adding template_construct and template_output hooks. Yikes.
authorpdontthink <pdontthink@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Thu, 21 Sep 2006 15:24:41 +0000 (15:24 +0000)
committerpdontthink <pdontthink@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Thu, 21 Sep 2006 15:24:41 +0000 (15:24 +0000)
git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@11731 7612ce4b-ef26-0410-bec9-ea0150e637f0

class/template/template.class.php

index db04cfa6306bac62d89c1a85e34e250c1d55e75d..43547114193fae488c99213d6e9a41df36751e02 100755 (executable)
@@ -378,17 +378,46 @@ return substr($this->template_dir, strlen(SM_PATH));
      */
     function display($file)
     {
-        // Pull in our config file
-        $t = &$this->values; // place values array directly in scope
 
-        // Get right template file
+        // get right template file
+        //
         $template = $this->get_template_file_path($file);
         if (empty($template)) {
-            trigger_error('The template "'.htmlspecialchars($file).'" could not be displayed!', E_USER_ERROR);
+
+            trigger_error('The template "' . htmlspecialchars($file) 
+                          . '" could not be displayed!', E_USER_ERROR);
+
         } else {
+
+            $aPluginOutput = array();
+            $aPluginOutput = do_hook_function('template_construct', 
+                                              array($aPluginOutput, $file, $this));
+            $this->assign('plugin_output', $aPluginOutput);
+
+            // pull in our config file ($t?  let's try to be more verbose please :-) )
+            //
+            $t = &$this->values; // place values array directly in scope
+
             ob_start();
             include($template);
+
+            // CAUTION: USE OF THIS HOOK IS HIGHLY DISCOURAGED AND CAN
+            // RESULT IN NOTICABLE PERFORMANCE DEGREDATION.  Plugins
+            // using this hook will probably be rejected by the 
+            // SquirrelMail team.
+            //
+            // Anyone hooking in here that wants to manipulate the output
+            // buffer has to get the buffer, clean it and then echo the 
+            // new buffer like this:
+            // $buffer = ob_get_contents(); ob_clean(); .... echo $new_buffer;
+            //
+            // Don't need to pass buffer contents ourselves
+            // do_hook_function('template_output', array(ob_get_contents()));
+            //
+            do_hook('template_output');
+
             ob_end_flush();
+
         }
     }
 
@@ -399,18 +428,48 @@ return substr($this->template_dir, strlen(SM_PATH));
      * @return string A string of the results
      */
     function fetch($file) {
-        $t = &$this->values; // place values array directly in scope
 
-        // Get right template file
+        // get right template file
+        //
         $template = $this->get_template_file_path($file);
         if (empty($template)) {
-            trigger_error('The template "'.htmlspecialchars($file).'" could not be fetched!', E_USER_ERROR);
+
+            trigger_error('The template "' . htmlspecialchars($file) 
+                          . '" could not be fetched!', E_USER_ERROR);
+
         } else {
+
+            $aPluginOutput = array();
+            $aPluginOutput = do_hook_function('template_construct', 
+                                              array($aPluginOutput, $file, $this));
+            $this->assign('plugin_output', $aPluginOutput);
+
+            // pull in our config file ($t?  let's try to be more verbose please :-) )
+            //
+            $t = &$this->values; // place values array directly in scope
+
             ob_start();
             include($template);
+
+            // CAUTION: USE OF THIS HOOK IS HIGHLY DISCOURAGED AND CAN
+            // RESULT IN NOTICABLE PERFORMANCE DEGREDATION.  Plugins
+            // using this hook will probably be rejected by the 
+            // SquirrelMail team.
+            //
+            // Anyone hooking in here that wants to manipulate the output
+            // buffer has to get the buffer, clean it and then echo the 
+            // new buffer like this:
+            // $buffer = ob_get_contents(); ob_clean(); .... echo $new_buffer;
+            //
+            // Don't need to pass buffer contents ourselves
+            // do_hook_function('template_output', array(ob_get_contents()));
+            //
+            do_hook('template_output');
+
             $contents = ob_get_contents();
             ob_end_clean();
             return $contents;
+
         }
     }