669cf937949aa13b2a962729afcc083172adb7e0
[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    *   'image_dir' => '/path/to/image/directory',
39    *   'compile_dir' => '/path/to/compile/directory',
40    *   'debug' => True,
41    *   'debug_smarty' => True
42    * ) 
43    *
44    **/
45   private static $config = array (
46     'smarty_path' => 'smarty/libs/Smarty.class.php',
47     'template_dir' => 'templates',
48     'image_dir' => 'images',
49     'compile_dir' => 'tmp',
50     'debug' => False,
51     'debug_smarty' => False
52   );
53
54   // Smarty object
55   public static $_smarty = NULL;
56   
57   // Smarty version
58   private static $_smarty_version = NULL;
59
60   // Array of directories
61   private static $directories = array(
62                                   'local',
63                                   LS_THEME
64                                 );
65
66  /**
67   * Start LStemplate
68   *
69   * Set configuration from parameter $config and initialize
70   * Smarty object.
71   *
72   * @param[in] $config array LStemplate configuration
73   *
74   * @retval boolean True on success, False instead
75   **/
76   public static function start($config) {
77     foreach ($config as $key => $value) {
78       self :: $config[$key] = $value;
79     }
80
81     if (LSsession :: includeFile(self :: $config['smarty_path'])) {
82       self :: $_smarty = new Smarty();
83       self :: $_smarty -> template_dir = self :: $config['template_dir'];
84
85       if ( ! is_writable(self :: $config['compile_dir']) ) {
86         die(_('LStemplate : compile directory is not writable (dir : '.self :: $config['compile_dir'].')'));
87       }
88       self :: $_smarty -> compile_dir = self :: $config['compile_dir'];
89
90       if (self :: $config['debug']) {
91         self :: $_smarty -> caching = 0;
92         // cache files are always regenerated
93         self :: $_smarty -> force_compile = TRUE;
94         // recompile template if it is changed
95         self :: $_smarty -> compile_check = TRUE;
96         if (self :: $config['debug_smarty']) {
97           // debug smarty
98           self :: $_smarty -> debugging = true;
99         }
100       }
101
102       if (method_exists(self :: $_smarty,'register_function')) {
103         self :: $_smarty_version=2;
104         if (!LSsession :: loadLSclass('LStemplate_smarty2_support')) {
105           die(_("LStemplate : Can't load Smarty 2 support file"));
106         }
107
108       }
109       elseif (method_exists(self :: $_smarty,'registerPlugin')) {
110         self :: $_smarty_version=3;
111         if (!LSsession :: loadLSclass('LStemplate_smarty3_support')) {
112           die(_("LStemplate : Can't load Smarty 3 support file"));
113         }
114       }
115       else {
116         die(_("LStemplate : Smarty version not recognized."));
117       }
118
119       self :: $_smarty -> assign('LS_CSS_DIR',LS_CSS_DIR);
120
121       return True;
122     }
123     else {
124       die(_("LStemplate : Can't load Smarty."));
125       return False;
126     }
127   }
128
129  /**
130   * Return the path of the file to use
131   *
132   * @param[in] string $name The file name (eg: mail.png)
133   * @param[in] string $root_dir The root directory (eg: images)
134   * @param[in] string $default_dir The default directory (eg: default)
135   *
136   * @retval string The path of the file
137   **/
138   public static function getFilePath($file,$root_dir,$default_dir='default') {
139     foreach(self :: $directories as $dir) {
140       if (file_exists($root_dir.'/'.$dir.'/'.$file)) {
141         return $root_dir.'/'.$dir.'/'.$file;
142       }
143     }
144     if (!$default_dir) {
145       return;
146     }
147     return $root_dir.'/'.$default_dir.'/'.$file;
148   }
149
150  /**
151   * Return the path of the image file to use
152   *
153   * @param[in] string $image The image name (eg: mail)
154   *
155   * @retval string The path of the image file
156   **/
157   public static function getImagePath($image) {
158     $exts=array('png','gif','jpg');
159     foreach($exts as $ext) {
160       $path=self :: getFilePath("$image.$ext",self :: $config['image_dir'],False);
161       if ($path) return $path;
162     }
163     return self :: $config['image_dir']."/default/$image.png";
164   }
165
166
167  /**
168   * Return the path of the Smarty template file to use
169   *
170   * @param[in] string $template The template name (eg: top.tpl)
171   *
172   * @retval string The path of the Smarty template file
173   **/
174   public static function getTemplatePath($template) {
175     return self :: getFilePath($template,self :: $config['template_dir']);
176   }
177
178  /**
179   * Return the content of a Smarty template file.
180   *
181   * @param[in] string $template The template name (eg: top.tpl)
182   *
183   * @retval string The content of the Smarty template file
184   **/
185   public static function getTemplateSource($template) {
186     $tpl_path=self :: getTemplatePath($template);
187     if (!is_readable($tpl_path)) {
188       $tpl_path=self :: getTemplatePath('empty.tpl');
189       LSerror::addErrorCode('LStemplate_01',$template);
190     }
191     return implode('',file($tpl_path));
192   }
193
194  /**
195   * Return the timestamp of the last change of a Smarty
196   * template file.
197   *
198   * @param[in] string $template The template name (eg: top.tpl)
199   *
200   * @retval string The timestamp of the last change of the Smarty template file
201   **/
202   public static function getTemplateTimestamp($template) {
203     $tpl_path=self :: getTemplatePath($template);
204     if (is_file($tpl_path)) {
205       $time=filemtime($tpl_path);
206       if ($time)
207         return $time;
208     }
209     return NULL;
210   }
211
212  /**
213   * Assign template variable
214   *
215   * @param[in] string $name The variable name
216   * @param[in] mixed $value The variable value
217   *
218   * @retval void
219   **/
220   public static function assign($name,$value) {
221     return self :: $_smarty -> assign($name,$value);
222   }
223
224  /**
225   * Display a template
226   *
227   * @param[in] string $template The template name (eg: empty.tpl)
228   *
229   * @retval void
230   **/
231   public static function display($template) {
232     return self :: $_smarty -> display("ls:$template");
233   }
234
235  /**
236   * Fetch a template
237   *
238   * @param[in] string $template The template name (eg: empty.tpl)
239   *
240   * @retval string The template compiled
241   **/
242   public static function fetch($template) {
243     return self :: $_smarty -> fetch("ls:$template");
244   }
245
246 }
247
248 function LStemplate_smarty_getFData($params) {
249     extract($params);
250     echo getFData($format,$data,$meth=NULL);
251 }
252
253 function LStemplate_smarty_tr($params) {
254   extract($params);
255   echo __($msg);
256 }
257
258 function LStemplate_smarty_img($params) {
259   extract($params);
260   echo "image.php?i=$name";
261 }
262
263 // Errors
264 LSerror :: defineError('LStemplate_01',
265 _("LStemplate : Template %{file} not found.")
266 );