1 |
<? |
2 |
|
3 |
/* |
4 |
* Project: Smarty: the PHP compiled template engine |
5 |
* File: Smarty.addons.php |
6 |
* Author: Monte Ohrt <monte@ispi.net> |
7 |
* Andrei Zmievski <andrei@ispi.net> |
8 |
* Version: 1.2.0 |
9 |
* Copyright: 2001 ispi of Lincoln, Inc. |
10 |
* |
11 |
* This program is free software; you can redistribute it and/or |
12 |
* modify it under the terms of the GNU General Public License |
13 |
* as published by the Free Software Foundation; either version 2 |
14 |
* of the License, or (at your option) any later version. |
15 |
* |
16 |
* This program is distributed in the hope that it will be useful, |
17 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
18 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
19 |
* GNU General Public License for more details. |
20 |
* |
21 |
* You should have received a copy of the GNU General Public License |
22 |
* along with this program; if not, write to the Free Software |
23 |
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
24 |
* |
25 |
* You may contact the authors of Smarty by e-mail at: |
26 |
* monte@ispi.net |
27 |
* andrei@ispi.net |
28 |
* |
29 |
* Or, write to: |
30 |
* Monte Ohrt |
31 |
* CTO, ispi |
32 |
* 237 S. 70th suite 220 |
33 |
* Lincoln, NE 68510 |
34 |
* |
35 |
* The latest version of Smarty can be obtained from: |
36 |
* http://www.phpinsider.com |
37 |
* |
38 |
*/ |
39 |
|
40 |
/*============================================*\ |
41 |
Modifiers |
42 |
\*============================================*/ |
43 |
|
44 |
function _smarty_mod_handler() |
45 |
{ |
46 |
$args = func_get_args(); |
47 |
list($func_name, $map_array) = array_splice($args, 0, 2); |
48 |
$var = $args[0]; |
49 |
|
50 |
if ($map_array && is_array($var)) { |
51 |
foreach ($var as $key => $val) { |
52 |
$args[0] = $val; |
53 |
$var[$key] = call_user_func_array($func_name, $args); |
54 |
} |
55 |
return $var; |
56 |
} else { |
57 |
return call_user_func_array($func_name, $args); |
58 |
} |
59 |
} |
60 |
|
61 |
|
62 |
/*======================================================================*\ |
63 |
Function: smarty_mod_escape |
64 |
Purpose: Escape the string according to escapement type |
65 |
\*======================================================================*/ |
66 |
function smarty_mod_escape($string, $esc_type = 'html') |
67 |
{ |
68 |
switch ($esc_type) { |
69 |
case 'html': |
70 |
return htmlspecialchars($string); |
71 |
|
72 |
case 'url': |
73 |
return urlencode($string); |
74 |
|
75 |
default: |
76 |
return $string; |
77 |
} |
78 |
} |
79 |
|
80 |
|
81 |
/*======================================================================*\ |
82 |
Function: smarty_mod_truncate |
83 |
Purpose: Truncate a string to a certain length if necessary, |
84 |
optionally splitting in the middle of a word, and |
85 |
appending the $etc string. |
86 |
\*======================================================================*/ |
87 |
function smarty_mod_truncate($string, $length = 80, $etc = '...', $break_words = false) |
88 |
{ |
89 |
if (strlen($string) > $length) { |
90 |
$length -= strlen($etc); |
91 |
$fragment = substr($string, 0, $length+1); |
92 |
if ($break_words) |
93 |
$fragment = substr($fragment, 0, -1); |
94 |
else |
95 |
$fragment = preg_replace('/\s+(\S+)?$/', '', $fragment); |
96 |
return $fragment.$etc; |
97 |
} else |
98 |
return $string; |
99 |
} |
100 |
|
101 |
|
102 |
function smarty_mod_spacify($string, $spacify_char = ' ') |
103 |
{ |
104 |
return implode($spacify_char, preg_split('//', $string, -1, PREG_SPLIT_NO_EMPTY)); |
105 |
} |
106 |
|
107 |
|
108 |
function smarty_mod_date_format($string, $format="%b %e, %Y") |
109 |
{ |
110 |
return strftime($format, $string); |
111 |
} |
112 |
|
113 |
|
114 |
function smarty_mod_string_format($string, $format) |
115 |
{ |
116 |
return sprintf($format, $string); |
117 |
} |
118 |
|
119 |
function smarty_mod_replace($string, $search, $replace) |
120 |
{ |
121 |
return str_replace($search, $replace, $string); |
122 |
} |
123 |
|
124 |
function smarty_mod_strip_tags($string, $replace_with_space = true) |
125 |
{ |
126 |
if ($replace_with_space) |
127 |
return preg_replace('!<[^>]*?>!', ' ', $string); |
128 |
else |
129 |
return strip_tags($string); |
130 |
} |
131 |
|
132 |
function smarty_mod_default($string, $default="") |
133 |
{ |
134 |
if(empty($string)) |
135 |
return $default; |
136 |
else |
137 |
return $string; |
138 |
} |
139 |
|
140 |
/*============================================*\ |
141 |
Custom tag functions |
142 |
\*============================================*/ |
143 |
|
144 |
/*======================================================================*\ |
145 |
Function: smarty_func_html_options |
146 |
Purpose: Prints the list of <option> tags generated from |
147 |
the passed parameters |
148 |
\*======================================================================*/ |
149 |
function smarty_func_html_options() |
150 |
{ |
151 |
$print_result = true; |
152 |
|
153 |
extract(func_get_arg(0)); |
154 |
|
155 |
settype($output, 'array'); |
156 |
settype($values, 'array'); |
157 |
settype($selected, 'array'); |
158 |
|
159 |
$html_result = ""; |
160 |
|
161 |
for ($i = 0; $i < count($output); $i++) { |
162 |
/* By default, check value against $selected */ |
163 |
$sel_check = $values[$i]; |
164 |
$html_result .= "<option"; |
165 |
if ($i < count($values)) |
166 |
$html_result .= " value=\"".$values[$i]."\""; |
167 |
else |
168 |
$sel_check = $output[$i]; /* if more outputs than values, then |
169 |
check output against $selected */ |
170 |
if (in_array($sel_check, $selected)) |
171 |
$html_result .= " selected"; |
172 |
$html_result .= ">".$output[$i]."</option>\n"; |
173 |
} |
174 |
|
175 |
if ($print_result) |
176 |
print $html_result; |
177 |
else |
178 |
return $html_result; |
179 |
} |
180 |
|
181 |
|
182 |
/*======================================================================*\ |
183 |
Function: smarty_func_html_select_date |
184 |
Purpose: Prints the dropdowns for date selection. |
185 |
\*======================================================================*/ |
186 |
function smarty_func_html_select_date() |
187 |
{ |
188 |
/* Default values. */ |
189 |
$prefix = "Date_"; |
190 |
$time = time(); |
191 |
$start_year = strftime("%Y"); |
192 |
$end_year = $start_year; |
193 |
$display_days = true; |
194 |
$display_months = true; |
195 |
$display_years = true; |
196 |
$month_format = "%B"; |
197 |
$day_format = "%02d"; |
198 |
$year_as_text = false; |
199 |
|
200 |
extract(func_get_arg(0)); |
201 |
|
202 |
$html_result = ""; |
203 |
|
204 |
if ($display_months) { |
205 |
$month_names = array(); |
206 |
|
207 |
for ($i = 1; $i <= 12; $i++) |
208 |
$month_names[] = strftime($month_format, mktime(0, 0, 0, $i, 1, 2000)); |
209 |
|
210 |
$html_result .= '<select name="'.$prefix.'Month">'."\n"; |
211 |
$html_result .= smarty_func_html_options(array('output' => $month_names, |
212 |
'values' => range(1, 12), |
213 |
'selected' => strftime("%m", $time), |
214 |
'print_result' => false)); |
215 |
$html_result .= "</select>\n"; |
216 |
} |
217 |
|
218 |
if ($display_days) { |
219 |
$days = range(1, 31); |
220 |
array_walk($days, create_function('&$x', '$x = sprintf("'.$day_format.'", $x);')); |
221 |
|
222 |
$html_result .= '<select name="'.$prefix.'Day">'."\n"; |
223 |
$html_result .= smarty_func_html_options(array('output' => $days, |
224 |
'values' => range(1, 31), |
225 |
'selected' => strftime("%d", $time), |
226 |
'print_result' => false)); |
227 |
$html_result .= "</select>\n"; |
228 |
} |
229 |
|
230 |
if ($display_years) { |
231 |
if ($year_as_text) { |
232 |
$html_result .= '<input type="text" name="'.$prefix.'Year" value="'.strftime('%Y', $time).'" size="4" maxlength="4">'; |
233 |
} else { |
234 |
$years = range($start_year, $end_year); |
235 |
|
236 |
$html_result .= '<select name="'.$prefix.'Year">'."\n"; |
237 |
$html_result .= smarty_func_html_options(array('output' => $years, |
238 |
'values' => $years, |
239 |
'selected' => strftime("%Y", $time), |
240 |
'print_result' => false)); |
241 |
$html_result .= "</select>\n"; |
242 |
} |
243 |
} |
244 |
|
245 |
print $html_result; |
246 |
} |
247 |
|
248 |
//----------------------------------------- |
249 |
// Custom made by Dobrica Pavlinusic <dpavlin@rot13.org> |
250 |
|
251 |
function smarty_func_img() { |
252 |
extract(func_get_arg(0)); |
253 |
|
254 |
$f=Array(); |
255 |
|
256 |
global $img_time; |
257 |
if (!isset($img_time)) { |
258 |
$img_time=time(); |
259 |
} |
260 |
|
261 |
|
262 |
if (isset($dir)) { |
263 |
$tdir=dirname($GLOBALS[SCRIPT_FILENAME])."/$dir"; |
264 |
$h=opendir($dir); |
265 |
$pics=0; |
266 |
while ($tmp = readdir($h)) { |
267 |
if (is_file("$tdir/$tmp") && substr($tmp,0,1)!=".") { |
268 |
// print "$tdir/$tmp<br>\n"; |
269 |
$f[]=$tmp; |
270 |
$pics++; |
271 |
} |
272 |
} |
273 |
closedir($h); |
274 |
// $f=shuffle($f); |
275 |
$ord=($img_time+$nr) % $pics; |
276 |
$src="$dir/$f[$ord]"; |
277 |
} |
278 |
|
279 |
$add=""; |
280 |
if (isset($border)) { |
281 |
$add.=" border=\"$border\""; |
282 |
} |
283 |
if (isset($alt)) { |
284 |
$add.=" alt=\"$alt\""; |
285 |
} |
286 |
if (isset($align)) { |
287 |
$add.=" align=\"$align\""; |
288 |
} |
289 |
if (isset($hspace)) { |
290 |
$add.=" hspace=\"$hspace\""; |
291 |
} |
292 |
if (isset($vspace)) { |
293 |
$add.=" vspace=\"$vspace\""; |
294 |
} |
295 |
|
296 |
$size = GetImageSize(dirname($GLOBALS[SCRIPT_FILENAME])."/$src"); |
297 |
print "<img src=\"$src\" $size[3]$add>"; |
298 |
} |
299 |
|
300 |
?> |