X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;ds=sidebyside;f=class%2Ftemplate%2Ftemplate.class.php;h=84310b8dbe0a3827918ae42105ab49873543024e;hb=0606cc1075a37e8d65b22f21768fa41e1355e374;hp=f1787f85b2e7cd25b515c8b060fed68b8d9fc59f;hpb=e045ce662c5790877f9a0bafe5f76a4d050577be;p=squirrelmail.git diff --git a/class/template/template.class.php b/class/template/template.class.php index f1787f85..84310b8d 100755 --- a/class/template/template.class.php +++ b/class/template/template.class.php @@ -1,8 +1,7 @@ and Andrei Zmievski . @@ -10,6 +9,8 @@ * The SquirrelMail (Foowd) template implementation. * Derived from the foowd template implementation and adapted * for squirrelmail + * @copyright © 2005-2006 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License * @version $Id$ * @package squirrelmail */ @@ -21,8 +22,8 @@ * This class uses a similar API to Smarty. * * @author Paul James - * @author Monte Ohrt - * @author Andrei Zmievski + * @author Monte Ohrt + * @author Andrei Zmievski * @package squirrelmail */ class Template @@ -39,15 +40,63 @@ class Template * * @var string */ - var $template_dir = 'templates\default'; + var $template_dir = ''; + + /** + * The default template directory + * + * @var string + */ + var $default_template_dir = 'templates/default/'; /** - * Constructor + * Template files provided by this template set * - * @param string $sTplDir where the template set is located + * @var array */ - function Template($sTplDir = 'templates\default') { - $this->template_dir = $sTplDir; + var $templates_provided = array(); + + /** + * Javascript files required by the template + * + * @var array + */ + var $required_js_files = array(); + + /** + * Javascript files provided by the template. If a JS file is required, but + * not provided, the js file by the same name will be included from the + * default template directory. + * + * @var array + */ + var $provided_js_files = array(); + + /** + * Additional stylesheets provided by the template. This allows template + * authors to provide additional CSS sheets to templates while using the + * default template set stylesheet for other definitions. + */ + var $additional_css_sheets = array(); + + /** + * Constructor + * + * @param string $sTplDir where the template set is located + */ + function Template($sTplDir) { + $this->template_dir = $sTplDir; + + // Pull in the tempalte config file + if (!file_exists($this->template_dir . 'template.php')) { + trigger_error('No template.php could be found in the requested template directory ("'.$this->template_dir.'")', E_USER_ERROR); + } else { + include ($this->template_dir . 'template.php'); + $this->templates_provided = is_array($templates_provided) ? $templates_provided : array(); + $this->required_js_files = is_array($required_js_files) ? $required_js_files : array(); + $this->provided_js_files = is_array($provided_js_files) ? $provided_js_files: array(); + $this->additional_css_sheets = is_array($additional_css_sheets) ? $additional_css_sheets : array(); + } } @@ -90,11 +139,20 @@ class Template * * @param array|string $tpl_var the template variable name(s) * @param mixed $value the value to append + * @param boolean $merge when $value is given as an array, + * this indicates whether or not that + * array itself should be appended as + * a new template variable value or if + * that array's values should be merged + * into the existing array of template + * variable values */ function append($tpl_var, $value = NULL, $merge = FALSE) { if (is_array($tpl_var)) { + //FIXME: $tpl_var is supposed to be a list of template var names, + // so we should be looking at the values NOT the keys! foreach ($tpl_var as $_key => $_val) { if ($_key != '') @@ -102,6 +160,18 @@ class Template if(isset($this->values[$_key]) && !is_array($this->values[$_key])) settype($this->values[$_key],'array'); + //FIXME: we should be iterating the $value array here not the values of the + // list of template variable names! I think this is totally broken + // This might just be a matter of needing to clarify the method's API; + // values may have been meant to be passed in $tpl_var in the case that + // $tpl_var is an array. Ugly and non-intuitive. + // PROPOSAL: API should be as such: + // if (is_string($tpl_var)) then $values are added/merged as already done + // if (is_array($tpl_var)) then $values is required to be an array whose + // keys must match up with $tpl_var keys and + // whose values are then what is added to + // each template variable value (array or + // strings, doesn't matter) if($merge && is_array($_val)) { foreach($_val as $_mkey => $_mval) @@ -135,6 +205,13 @@ class Template * * @param string $tpl_var the template variable name * @param mixed $value the referenced value to append + * @param boolean $merge when $value is given as an array, + * this indicates whether or not that + * array itself should be appended as + * a new template variable value or if + * that array's values should be merged + * into the existing array of template + * variable values */ function append_by_ref($tpl_var, &$value, $merge = FALSE) { @@ -153,35 +230,222 @@ class Template } } + + /** + * + * Return the relative template directory path for this template set. + * + * @return string The relative path to the template directory based + * from the main SquirrelMail directory (SM_PATH). + * + */ + function get_template_file_directory() { + +//FIXME: temporarily parse off SM_PATH from the template dir class attribute until we can change the entire template subsystem such that the template dir is derived internally in this class from the template ID/name/attributes +return substr($this->template_dir, strlen(SM_PATH)); + return $this->template_dir; + + } + + + /** + * + * Return the relative template directory path for the DEFAULT template set. + * + * @return string The relative path to the default template directory based + * from the main SquirrelMail directory (SM_PATH). + * + */ + function get_default_template_file_directory() { + + return $this->default_template_dir; + + } + + + /** + * + * Find the right template file. + * + * Templates are expected to be found in the template set directory, + * for example: + * SM_PATH/templates/