--- /dev/null
+<?php
+/**
+ * Copyright 2003, Paul James
+ * Copyright (c) 2005 The SquirrelMail Project Team
+ * Licensed under the GNU GPL. For full terms see the file COPYING.
+ *
+ * This file contains some methods from the Smarty templating engine version
+ * 2.5.0 by Monte Ohrt <monte@ispi.net> and Andrei Zmievski <andrei@php.net>.
+ *
+ * @version $Id$
+ */
+
+/**
+ * The SquirrelMail (Foowd) template implementation.
+ * Derived from the foowd template implementation and adapted
+ * for squirrelmail
+ * @package SquirrelMail
+ */
+
+/**
+ * The SquirrelMail (Foowd) template class.
+ *
+ * Basic template class for capturing values and pluging them into a template.
+ * This class uses a similar API to Smarty.
+ *
+ * @author Paul James
+ * @author Monte Ohrt <monte@ispi.net>
+ * @author Andrei Zmievski <andrei@php.net>
+ * @package SquirrelMail
+ */
+class Template
+{
+ /**
+ * The templates values array
+ *
+ * @var array
+ */
+ var $values = array();
+
+ /**
+ * The template directory to use
+ *
+ * @var string
+ */
+ var $template_dir = 'templates\default';
+
+ /**
+ * Constructor
+ *
+ * @param string $sTplDir where the template set is located
+ */
+ function Template($sTplDir = 'templates\default') {
+ $this->template_dir = $sTplDir;
+ }
+
+
+ /**
+ * Assigns values to template variables
+ *
+ * @param array|string $tpl_var the template variable name(s)
+ * @param mixed $value the value to assign
+ */
+ function assign($tpl_var, $value = NULL) {
+ if (is_array($tpl_var))
+ {
+ foreach ($tpl_var as $key => $val)
+ {
+ if ($key != '')
+ $this->values[$key] = $val;
+ }
+ }
+ else
+ {
+ if ($tpl_var != '')
+ $this->values[$tpl_var] = $value;
+ }
+ }
+
+ /**
+ * Assigns values to template variables by reference
+ *
+ * @param string $tpl_var the template variable name
+ * @param mixed $value the referenced value to assign
+ */
+ function assign_by_ref($tpl_var, &$value)
+ {
+ if ($tpl_var != '')
+ $this->values[$tpl_var] = &$value;
+ }
+
+ /**
+ * Appends values to template variables
+ *
+ * @param array|string $tpl_var the template variable name(s)
+ * @param mixed $value the value to append
+ */
+ function append($tpl_var, $value = NULL, $merge = FALSE)
+ {
+ if (is_array($tpl_var))
+ {
+ foreach ($tpl_var as $_key => $_val)
+ {
+ if ($_key != '')
+ {
+ if(isset($this->values[$_key]) && !is_array($this->values[$_key]))
+ settype($this->values[$_key],'array');
+
+ if($merge && is_array($_val))
+ {
+ foreach($_val as $_mkey => $_mval)
+ $this->values[$_key][$_mkey] = $_mval;
+ }
+ else
+ $this->values[$_key][] = $_val;
+ }
+ }
+ }
+ else
+ {
+ if ($tpl_var != '' && isset($value))
+ {
+ if(isset($this->values[$tpl_var]) && !is_array($this->values[$tpl_var]))
+ settype($this->values[$tpl_var],'array');
+
+ if($merge && is_array($value))
+ {
+ foreach($value as $_mkey => $_mval)
+ $this->values[$tpl_var][$_mkey] = $_mval;
+ }
+ else
+ $this->values[$tpl_var][] = $value;
+ }
+ }
+ }
+
+ /**
+ * Appends values to template variables by reference
+ *
+ * @param string $tpl_var the template variable name
+ * @param mixed $value the referenced value to append
+ */
+ function append_by_ref($tpl_var, &$value, $merge = FALSE)
+ {
+ if ($tpl_var != '' && isset($value))
+ {
+ if(!@is_array($this->values[$tpl_var]))
+ settype($this->values[$tpl_var],'array');
+
+ if ($merge && is_array($value))
+ {
+ foreach($value as $_key => $_val)
+ $this->values[$tpl_var][$_key] = &$value[$_key];
+ }
+ else
+ $this->values[$tpl_var][] = &$value;
+ }
+ }
+
+ /**
+ * Display the template
+ *
+ * @param string $file The template file to use
+ */
+ function display($file)
+ {
+ $t = &$this->values; // place values array directly in scope
+ ob_start();
+ include($this->template_dir.$file);
+ ob_end_flush();
+ }
+
+ /**
+ * Return the results of applying a template.
+ *
+ * @param string $file The template file to use
+ * @return string A string of the results
+ */
+ function fetch($file)
+ {
+ ob_start();
+ $t = &$this->values; // place values array directly in scope
+ include($this->template_dir.$file);
+ $contents = ob_get_contents();
+ ob_end_clean();
+ return $contents;
+ }
+
+}
+
+?>