b252b6e3f80a8900cd5c302c492ebe565cc060f6
[ldapsaisie.git] / public_html / includes / class / class.LStemplate.php
1 <?php
2 /*******************************************************************************
3  * Copyright (C) 2007 Easter-eggs
4  * http://ldapsaisie.labs.libre-entreprise.org
5  *
6  * Author: See AUTHORS file in top-level directory.
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License version 2
10  * as published by the Free Software Foundation.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
20
21 ******************************************************************************/
22
23 /** 
24  * Manage template
25  *
26  * This class is use to manage template in LdapSaisie.
27  *
28  * @author Benjamin Renard <brenard@easter-eggs.com>
29  */
30 class LStemplate {
31
32   /**
33    * LStemplate configuration
34    *
35    * array(
36    *   'smarty_path' => '/path/to/Smarty.php',
37    *   'template_dir' => '/path/to/template/directory',
38    *   'compile_dir' => '/path/to/compile/directory',
39    *   'debug' => True,
40    *   'debug_smarty' => True
41    * ) 
42    *
43    **/
44   private static $config = NULL;
45
46   // Smarty object
47   public static $_smarty = NULL;
48   
49   // Smarty version
50   private static $_smarty_version = NULL;
51
52  /**
53   * Start LStemplate
54   *
55   * Set configuration from parameter $config and initialize
56   * Smarty object.
57   *
58   * @param[in] $config array LStemplate configuration
59   *
60   * @retval boolean True on success, False instead
61   **/
62   public static function start($config) {
63     self :: $config = $config;
64
65     if (LSsession :: includeFile($config['smarty_path'])) {
66       self :: $_smarty = new Smarty();
67       self :: $_smarty -> template_dir = $config['template_dir'];
68
69       if ( ! is_writable($config['compile_dir']) ) {
70         die(_('LStemplate : compile directory is not writable (dir : '.$config['compile_dir'].')'));
71       }
72       self :: $_smarty -> compile_dir = $config['compile_dir'];
73
74       if ($config['debug']) {
75         self :: $_smarty -> caching = 0;
76         // cache files are always regenerated
77         self :: $_smarty -> force_compile = TRUE;
78         // recompile template if it is changed
79         self :: $_smarty -> compile_check = TRUE;
80         if ($config['debug_smarty']) {
81           // debug smarty
82           self :: $_smarty -> debugging = true;
83         }
84       }
85
86       if (method_exists(self :: $_smarty,'register_function')) {
87         self :: $_smarty_version=2;
88         if (!LSsession :: loadLSclass('LStemplate_smarty2_support')) {
89           die(_("LStemplate : Can't load Smarty 2 support file"));
90         }
91
92       }
93       elseif (method_exists(self :: $_smarty,'registerPlugin')) {
94         self :: $_smarty_version=3;
95         if (!LSsession :: loadLSclass('LStemplate_smarty3_support')) {
96           die(_("LStemplate : Can't load Smarty 2 support file"));
97         }
98       }
99       else {
100         die(_("LStemplate : Smarty version not recognized."));
101       }
102
103       self :: $_smarty -> assign('LS_CSS_DIR',LS_CSS_DIR);
104       self :: $_smarty -> assign('LS_IMAGES_DIR',LS_IMAGES_DIR);
105
106       return True;
107     }
108     else {
109       die(_("LStemplate : Can't load Smarty."));
110       return False;
111     }
112   }
113
114  /**
115   * Return the path of the Smarty template file to use
116   *
117   * @param[in] string $template The template name (eg: top.tpl)
118   * 
119   * @retval string The path of the Smarty template file
120   **/
121   public static function getTemplatePath($template) {
122     $directories=array(
123       'local',
124       LS_THEME
125     );
126     foreach($directories as $dir) {
127       if (file_exists(self :: $config['template_dir'].'/'.$dir.'/'.$template)) {
128         return self :: $config['template_dir'].'/'.$dir.'/'.$template;
129       }
130     }
131     return $config['template_dir'].'/default/'.$template;
132   }
133
134  /**
135   * Return the content of a Smarty template file.
136   *
137   * @param[in] string $template The template name (eg: top.tpl)
138   * 
139   * @retval string The content of the Smarty template file
140   **/
141   public static function getTemplateSource($template) {
142     $tpl_path=self :: getTemplatePath($template);
143     if (!is_readable($tpl_path)) {
144       $tpl_path=self :: getTemplatePath('empty.tpl');
145       LSerror::addErrorCode('LStemplate_01',$template);
146     }
147     return implode('',file($tpl_path));
148   }
149
150  /**
151   * Return the timestamp of the last change of a Smarty
152   * template file.
153   *
154   * @param[in] string $template The template name (eg: top.tpl)
155   * 
156   * @retval string The timestamp of the last change of the Smarty template file
157   **/
158   public static function getTemplateTimestamp($template) {
159     $tpl_path=self :: getTemplatePath($template);
160     if (is_file($tpl_path)) {
161       $time=filemtime($tpl_path);
162       if ($time)
163         return $time;
164     }
165     return NULL;
166   }
167
168  /**
169   * Assign template variable
170   *
171   * @param[in] string $name The variable name
172   * @param[in] mixed $value The variable value
173   * 
174   * @retval void
175   **/
176   public static function assign($name,$value) {
177     return self :: $_smarty -> assign($name,$value);
178   }
179
180  /**
181   * Display a template
182   *
183   * @param[in] string $template The template name (eg: empty.tpl)
184   * 
185   * @retval void
186   **/
187   public static function display($template) {
188     return self :: $_smarty -> display("ls:$template");
189   }
190
191  /**
192   * Fetch a template
193   *
194   * @param[in] string $template The template name (eg: empty.tpl)
195   * 
196   * @retval string The template compiled
197   **/
198   public static function fetch($template) {
199     return self :: $_smarty -> fetch("ls:$template");
200   }
201
202 }
203
204 // Errors
205 LSerror :: defineError('LStemplate_01',
206 _("LStemplate : Template %{file} not found.")
207 );