]> git.llucax.com Git - software/bife/bife-all.git/blob - core/HTML/Template/HIT.php
Core and Basic modules are now much more like they should. Huge code clean:
[software/bife/bife-all.git] / core / HTML / Template / HIT.php
1 <?php
2 // vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4:
3 // +--------------------------------------------------------------------+
4 // |                       BIFE - Buil It FastEr                        |
5 // +--------------------------------------------------------------------+
6 // | This file is part of BIFE.                                         |
7 // |                                                                    |
8 // | BIFE is free software; you can redistribute it and/or modify it    |
9 // | under the terms of the GNU General Public License as published by  |
10 // | the Free Software Foundation; either version 2 of the License, or  |
11 // | (at your option) any later version.                                |
12 // |                                                                    |
13 // | BIFE is distributed in the hope that it will be useful, but        |
14 // | WITHOUT ANY WARRANTY; without even the implied warranty of         |
15 // | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU   |
16 // | General Public License for more details.                           |
17 // |                                                                    |
18 // | You should have received a copy of the GNU General Public License  |
19 // | along with Hooks; if not, write to the Free Software Foundation,   |
20 // | Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA      |
21 // +--------------------------------------------------------------------+
22 // | Created: Wed Jun 17 19:03:14 2003                                  |
23 // | Authors: Leandro Lucarella <luca@lugmen.org.ar>                    |
24 // +--------------------------------------------------------------------+
25 //
26 // $Id$
27 //
28
29 // +X2C Class 130 :HIT
30 /**
31  * Hooks vs. IT (HIT) is a simple template implementation, based on hooks and IT template systems.
32  *
33  * @access public
34  */
35 class HTML_Template_HIT {
36     /**
37      * Root directory where template files are.
38      *
39      * @var    string $root
40      * @access public
41      */
42     var $root = '.';
43
44     /**
45      * If it's true, it looks for template files in PHP's include_path.
46      *
47      * @var    bool $useIncludePath
48      * @access public
49      */
50     var $useIncludePath = false;
51
52     /**
53      * Group of templates to use (a subdirectory in root).
54      *
55      * @var    string $group
56      * @access protected
57      */
58     var $group = '';
59
60     /**
61      * Templates cache.
62      *
63      * @var    array $cache
64      * @access protected
65      */
66     var $cache = array();
67
68     /**
69      * @var    array $buffer
70      * @access protected
71      */
72     var $buffer = array();
73
74     // ~X2C
75
76     // +X2C Operation 136
77     /**
78      * Constructor.
79      *
80      * @param  string $root Root directory where template files are.
81      * @param  bool $useIncludePath If it's true, it looks for template files in PHP's include_path.
82      * @param  string $group Group of templates to use (a subdirectory in root).
83      *
84      * @return void
85      * @access public
86      */
87     function HTML_Template_HIT($root = '.', $useIncludePath = false, $group = '') // ~X2C
88     {
89         $this->__construct($root, $useIncludePath, $group);
90     }
91     // -X2C
92
93     // +X2C Operation 137
94     /**
95      * Constructor.
96      *
97      * @param  int $root Root directory where template files are.
98      * @param  false $useIncludePath If it's true, it looks for template files in PHP's include_path.
99      * @param  string $group Group of templates to use (a subdirectory in root).
100      *
101      * @return void
102      * @access public
103      */
104     function __construct($root = '.', $useIncludePath = false, $group = '') // ~X2C
105     {
106         $this->root = $root;
107         $this->useIncludePath = $useIncludePath;
108         $this->pushGroup($group);
109     }
110     // -X2C
111
112     // +X2C Operation 138
113     /**
114      * Parse a template returning the results.
115 If $vars is an array, the {[keys]} are replaced with [values] ($val is ignored). If is a string, {$vars} is replaced with $val.
116      *
117      * @param  string $name Name of template to parse.
118      * @param  mixed $vars Variables to replace in the template.
119      * @param  string $val If $vars is a string, the value to replace for $vars.
120      * @param  mixed $group Group to use to parse this template. Null to use the current group.
121      *
122      * @return string
123      * @access public
124      */
125     function parse($name, $vars = '', $val = '', $group = null) // ~X2C
126     {
127         $group = is_null($group) ? end($this->group) : $group;
128         if ($group) {
129             $file = "{$this->root}/$group/$name.tpl.html";
130         } else {
131             $file = "{$this->root}/$name.tpl.html";
132         }
133         if (!isset($this->cache[$file])) {
134             // FIXME - replace join(file()) with file_get_contents().
135             $this->cache[$file] = join('', file($file, $this->useIncludePath));
136         }
137         if ($vars) {
138             if (is_string($vars)) {
139                 $vars = array($vars => $val);
140             }
141             foreach ($vars as $key => $val) {
142                 $keys[] = '{' . $key . '}';
143                 $vals[] = $val;
144             }
145             return str_replace($keys, $vals, $this->cache[$file]);
146         } else {
147             return $this->cache[$file];
148         }
149     }
150     // -X2C
151
152     // +X2C Operation 144
153     /**
154      * Parse a template buffering the results.
155 Parse a template appending the results to an internal buffer. If $vars is an array, the {[keys]} are replaced with [values] ($val is ignored). If is a string, {$vars} is replaced with $val.
156      *
157      * @param  string $name Name of template to parse.
158      * @param  mixed $vars Variables to replace in the template.
159      * @param  string $val If $vars is a string, the value to replace for $vars.
160      *
161      * @return void
162      * @access public
163      */
164     function parseBuffered($name, $vars = '', $val = '') // ~X2C
165     {
166         @$this->buffer["{$this->group}/$name"] .= $this->parse($name, $vars, $val);
167     }
168     // -X2C
169
170     // +X2C Operation 145
171     /**
172      * Gets a parsed buffer.
173      *
174      * @param  string $name Name of the parsed template to get.
175      *
176      * @return string
177      * @access public
178      * @static
179      */
180     function getBuffer($name) // ~X2C
181     {
182         return @$this->buffer["{$this->group}/$name"];
183     }
184     // -X2C
185
186     // +X2C Operation 146
187     /**
188      * Gets a parsed buffer and removes it.
189      *
190      * @param  string $name Name of the buffer to flush.
191      *
192      * @return void
193      * @access public
194      */
195     function popBuffer($name) // ~X2C
196     {
197         $return = @$this->buffer["{$this->group}/$name"];
198         unset($this->buffer["{$this->group}/$name"]);
199         return $return;
200     }
201     // -X2C
202
203     // +X2C Operation 139
204     /**
205      * Sets the group to use and add it to the groups stack.
206      *
207      * @param  string $group Group to use.
208      *
209      * @return void
210      * @access public
211      */
212     function pushGroup($group = '') // ~X2C
213     {
214         $this->group[] = $group;
215     }
216     // -X2C
217
218     // +X2C Operation 140
219     /**
220      * Removes the group from the groups stack and returns to the previous used group.
221      *
222      * @return string
223      * @access public
224      */
225     function popGroup() // ~X2C
226     {
227         return array_pop($this->group);
228     }
229     // -X2C
230
231     // +X2C Operation 159
232     /**
233      * True if the template $name exists in $group (or the current group).
234      *
235      * @param  string $name Name of the template.
236      * @param  mixed $group Template's group. If it's null it uses the current group.
237      *
238      * @return bool
239      * @access public
240      */
241     function exists($name, $group = null) // ~X2C
242     {
243         $group = is_null($group) ? end($this->group) : $group;
244         if ($group) {
245             $file = "{$this->root}/$group/$name.tpl.html";
246         } else {
247             $file = "{$this->root}/$name.tpl.html";
248         }
249         if (!$this->useIncludePath) {
250             return is_readable($file);
251         } else {
252             $include_path = array_unique(preg_split('/[:;]/', ini_get('include_path')));
253             foreach ($include_path as $path) {
254                 if (is_readable("$path/$file")) {
255                     return true;
256                 }
257             }
258             return false;
259         }
260     }
261     // -X2C
262
263 } // -X2C Class :HIT
264
265 ?>