]> git.llucax.com Git - software/bife/bife-all.git/blob - hit/HTML/Template/HIT.php
Moved back to a clean bife directory. Each subdirectory has a module
[software/bife/bife-all.git] / hit / 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      */
179     function getBuffer($name) // ~X2C
180     {
181         return @$this->buffer["{$this->group}/$name"];
182     }
183     // -X2C
184
185     // +X2C Operation 146
186     /**
187      * Gets a parsed buffer and removes it.
188      *
189      * @param  string $name Name of the buffer to flush.
190      *
191      * @return void
192      * @access public
193      */
194     function popBuffer($name) // ~X2C
195     {
196         $return = @$this->buffer["{$this->group}/$name"];
197         unset($this->buffer["{$this->group}/$name"]);
198         return $return;
199     }
200     // -X2C
201
202     // +X2C Operation 139
203     /**
204      * Sets the group to use and add it to the groups stack.
205      *
206      * @param  string $group Group to use.
207      *
208      * @return void
209      * @access public
210      */
211     function pushGroup($group = '') // ~X2C
212     {
213         $this->group[] = $group;
214     }
215     // -X2C
216
217     // +X2C Operation 140
218     /**
219      * Removes the group from the groups stack and returns to the previous used group.
220      *
221      * @return string
222      * @access public
223      */
224     function popGroup() // ~X2C
225     {
226         return array_pop($this->group);
227     }
228     // -X2C
229
230     // +X2C Operation 159
231     /**
232      * True if the template $name exists in $group (or the current group).
233      *
234      * @param  string $name Name of the template.
235      * @param  mixed $group Template's group. If it's null it uses the current group.
236      *
237      * @return bool
238      * @access public
239      */
240     function exists($name, $group = null) // ~X2C
241     {
242         $group = is_null($group) ? end($this->group) : $group;
243         if ($group) {
244             $file = "{$this->root}/$group/$name.tpl.html";
245         } else {
246             $file = "{$this->root}/$name.tpl.html";
247         }
248         if (!$this->useIncludePath) {
249             return is_readable($file);
250         } else {
251             $include_path = array_unique(preg_split('/[:;]/', ini_get('include_path')));
252             foreach ($include_path as $path) {
253                 if (is_readable("$path/$file")) {
254                     return true;
255                 }
256             }
257             return false;
258         }
259     }
260     // -X2C
261
262 } // -X2C Class :HIT
263
264 ?>