2feeae609d1b20c2fcef603661cab7770fe339f1
[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       self :: $_smarty -> assign('LS_IMAGES_DIR',self :: getDefaultImageDirPath());
121
122       return True;
123     }
124     else {
125       die(_("LStemplate : Can't load Smarty."));
126       return False;
127     }
128   }
129
130  /**
131   * Return the path of the file to use
132   *
133   * @param[in] string $name The file name (eg: mail.png)
134   * @param[in] string $root_dir The root directory (eg: images)
135   * @param[in] string $default_dir The default directory (eg: default)
136   *
137   * @retval string The path of the file
138   **/
139   public static function getFilePath($file,$root_dir,$default_dir='default') {
140     foreach(self :: $directories as $dir) {
141       if (file_exists($root_dir.'/'.$dir.'/'.$file)) {
142         return $root_dir.'/'.$dir.'/'.$file;
143       }
144     }
145     if (!$default_dir) {
146       return;
147     }
148     return $root_dir.'/'.$default_dir.'/'.$file;
149   }
150
151  /**
152   * Return the default path of images directory
153   *
154   * @retval string The path of the file
155   **/
156   public static function getDefaultImageDirPath() {
157     if (is_dir(self :: $config['image_dir'].'/'.LS_THEME)) {
158       return self :: $config['image_dir'].'/'.LS_THEME;
159     }
160     return self :: $config['image_dir'].'/default';
161   }
162
163
164  /**
165   * Return the path of the image file to use
166   *
167   * @param[in] string $image The image name (eg: mail)
168   *
169   * @retval string The path of the image file
170   **/
171   public static function getImagePath($image) {
172     $exts=array('png','gif','jpg');
173     foreach($exts as $ext) {
174       $path=self :: getFilePath("$image.$ext",self :: $config['image_dir'],False);
175       if ($path) return $path;
176     }
177     return self :: $config['image_dir']."/default/$image.png";
178   }
179
180
181  /**
182   * Return the path of the Smarty template file to use
183   *
184   * @param[in] string $template The template name (eg: top.tpl)
185   *
186   * @retval string The path of the Smarty template file
187   **/
188   public static function getTemplatePath($template) {
189     return self :: getFilePath($template,self :: $config['template_dir']);
190   }
191
192  /**
193   * Return the content of a Smarty template file.
194   *
195   * @param[in] string $template The template name (eg: top.tpl)
196   *
197   * @retval string The content of the Smarty template file
198   **/
199   public static function getTemplateSource($template) {
200     $tpl_path=self :: getTemplatePath($template);
201     if (!is_readable($tpl_path)) {
202       $tpl_path=self :: getTemplatePath('empty.tpl');
203       LSerror::addErrorCode('LStemplate_01',$template);
204     }
205     return implode('',file($tpl_path));
206   }
207
208  /**
209   * Return the timestamp of the last change of a Smarty
210   * template file.
211   *
212   * @param[in] string $template The template name (eg: top.tpl)
213   *
214   * @retval string The timestamp of the last change of the Smarty template file
215   **/
216   public static function getTemplateTimestamp($template) {
217     $tpl_path=self :: getTemplatePath($template);
218     if (is_file($tpl_path)) {
219       $time=filemtime($tpl_path);
220       if ($time)
221         return $time;
222     }
223     return NULL;
224   }
225
226  /**
227   * Assign template variable
228   *
229   * @param[in] string $name The variable name
230   * @param[in] mixed $value The variable value
231   *
232   * @retval void
233   **/
234   public static function assign($name,$value) {
235     return self :: $_smarty -> assign($name,$value);
236   }
237
238  /**
239   * Display a template
240   *
241   * @param[in] string $template The template name (eg: empty.tpl)
242   *
243   * @retval void
244   **/
245   public static function display($template) {
246     return self :: $_smarty -> display("ls:$template");
247   }
248
249  /**
250   * Fetch a template
251   *
252   * @param[in] string $template The template name (eg: empty.tpl)
253   *
254   * @retval string The template compiled
255   **/
256   public static function fetch($template) {
257     return self :: $_smarty -> fetch("ls:$template");
258   }
259
260 }
261
262 function LStemplate_smarty_getFData($params) {
263     extract($params);
264     echo getFData($format,$data,$meth=NULL);
265 }
266
267 function LStemplate_smarty_tr($params) {
268   extract($params);
269   echo __($msg);
270 }
271
272 function LStemplate_smarty_img($params) {
273   extract($params);
274   echo LStemplate :: getImagePath($name);
275 }
276
277 // Errors
278 LSerror :: defineError('LStemplate_01',
279 _("LStemplate : Template %{file} not found.")
280 );