mirror of
https://github.com/smarty-php/smarty.git
synced 2025-08-04 02:14:26 +02:00
Implemented plugin architecture.
This commit is contained in:
1
AUTHORS
1
AUTHORS
@@ -6,4 +6,5 @@ Monte Ohrt <monte@ispi.net>
|
||||
Andrei Zmievski <andrei@php.net>
|
||||
- rewrote parser from scratch
|
||||
- maintains code base
|
||||
- plugin architecture
|
||||
- wrote Config_File class
|
||||
|
7
CREDITS
7
CREDITS
@@ -3,7 +3,8 @@ Monte Ohrt <monte@ispi.net>:
|
||||
concept" implementation, and maintains documentation & code base.
|
||||
|
||||
Andrei Zmievski <andrei@php.net>:
|
||||
Rewrote parser from scratch and maintains code base.
|
||||
Rewrote parser from scratch, developed plugin architecture, and maintains
|
||||
code base.
|
||||
|
||||
Anne Holz <anne@ispi.net>:
|
||||
Provided creative input with respect to web design.
|
||||
@@ -18,5 +19,5 @@ A special thanks goes to the members of the php-template mailing list and the
|
||||
smarty mailing list, too numerous to list, who are sharing and bringing many
|
||||
ideas to the table and contributing source code.
|
||||
|
||||
Rasmus Lerdorf <rasmus@php.net>: For starting what eventually became
|
||||
the coolest programming language ever.
|
||||
Rasmus Lerdorf <rasmus@php.net>: For starting what eventually became the
|
||||
coolest programming language ever.
|
||||
|
@@ -9,7 +9,7 @@ require_once "PEAR.php";
|
||||
* @author Andrei Zmievski <andrei@php.net>
|
||||
* @access public
|
||||
*
|
||||
* Copyright: 2001 ispi of Lincoln, Inc.
|
||||
* Copyright: 2001,2002 ispi of Lincoln, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
|
2
README
2
README
@@ -64,6 +64,6 @@ DESCRIPTION:
|
||||
* arbitrary template sources (flat files, databases, etc.)
|
||||
|
||||
COPYRIGHT:
|
||||
Copyright (c) 2001 ispi of Lincoln, Inc. All rights reserved.
|
||||
Copyright (c) 2001,2002 ispi of Lincoln, Inc. All rights reserved.
|
||||
This software is released under the GNU Lesser General Public License.
|
||||
Please read the disclaimer at the top of the Smarty.class.php file.
|
||||
|
@@ -1,891 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* Project: Smarty: the PHP compiled template engine
|
||||
* File: Smarty.addons.php
|
||||
* Author: Monte Ohrt <monte@ispi.net>
|
||||
* Andrei Zmievski <andrei@php.net>
|
||||
* Version: 1.5.2
|
||||
* Copyright: 2001 ispi of Lincoln, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* You may contact the authors of Smarty by e-mail at:
|
||||
* monte@ispi.net
|
||||
* andrei@php.net
|
||||
*
|
||||
* Or, write to:
|
||||
* Monte Ohrt
|
||||
* Directory of Technology, ispi
|
||||
* 237 S. 70th suite 220
|
||||
* Lincoln, NE 68510
|
||||
*
|
||||
* The latest version of Smarty can be obtained from:
|
||||
* http://www.phpinsider.com
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/*============================================*\
|
||||
Modifiers
|
||||
\*============================================*/
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_mod_escape
|
||||
Purpose: Escape the string according to escapement type
|
||||
\*======================================================================*/
|
||||
function smarty_mod_escape($string, $esc_type = 'html')
|
||||
{
|
||||
switch ($esc_type) {
|
||||
case 'html':
|
||||
return htmlspecialchars($string, ENT_QUOTES);
|
||||
|
||||
case 'url':
|
||||
return urlencode($string);
|
||||
|
||||
case 'quotes':
|
||||
// escape unescaped single quotes
|
||||
return preg_replace("%(?<!\\\\)'%", "\\'", $string);
|
||||
|
||||
default:
|
||||
return $string;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_mod_truncate
|
||||
Purpose: Truncate a string to a certain length if necessary,
|
||||
optionally splitting in the middle of a word, and
|
||||
appending the $etc string.
|
||||
\*======================================================================*/
|
||||
function smarty_mod_truncate($string, $length = 80, $etc = '...', $break_words = false)
|
||||
{
|
||||
if ($length == 0)
|
||||
return '';
|
||||
|
||||
if (strlen($string) > $length) {
|
||||
$length -= strlen($etc);
|
||||
$fragment = substr($string, 0, $length+1);
|
||||
if ($break_words)
|
||||
$fragment = substr($fragment, 0, -1);
|
||||
else
|
||||
$fragment = preg_replace('/\s+(\S+)?$/', '', $fragment);
|
||||
return $fragment.$etc;
|
||||
} else
|
||||
return $string;
|
||||
}
|
||||
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_mod_spacify
|
||||
Purpose: add spaces between characters in a string
|
||||
\*======================================================================*/
|
||||
function smarty_mod_spacify($string, $spacify_char = ' ')
|
||||
{
|
||||
return implode($spacify_char, preg_split('//', $string, -1, PREG_SPLIT_NO_EMPTY));
|
||||
}
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_mod_date_format
|
||||
Purpose: format datestamps via strftime
|
||||
\*======================================================================*/
|
||||
function smarty_mod_date_format($string, $format="%b %e, %Y")
|
||||
{
|
||||
return strftime($format, smarty_make_timestamp($string));
|
||||
}
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_make_timestamp
|
||||
Purpose: used by other smarty functions to make a timestamp
|
||||
from a string of characters.
|
||||
\*======================================================================*/
|
||||
function smarty_make_timestamp($string)
|
||||
{
|
||||
if(empty($string)) {
|
||||
$string = "now";
|
||||
}
|
||||
$time = strtotime($string);
|
||||
if (is_numeric($time) && $time != -1)
|
||||
return $time;
|
||||
|
||||
// is mysql timestamp format of YYYYMMDDHHMMSS?
|
||||
if (is_numeric($string) && strlen($string) == 14) {
|
||||
$time = mktime(substr($string,8,2),substr($string,10,2),substr($string,12,2),
|
||||
substr($string,4,2),substr($string,6,2),substr($string,0,4));
|
||||
|
||||
return $time;
|
||||
}
|
||||
|
||||
// can't decipher, just return it
|
||||
return $string;
|
||||
}
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_mod_string_format
|
||||
Purpose: format strings via sprintf
|
||||
\*======================================================================*/
|
||||
function smarty_mod_string_format($string, $format)
|
||||
{
|
||||
return sprintf($format, $string);
|
||||
}
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_mod_replace
|
||||
Purpose: simple search/replace
|
||||
\*======================================================================*/
|
||||
function smarty_mod_replace($string, $search, $replace)
|
||||
{
|
||||
return str_replace($search, $replace, $string);
|
||||
}
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_mod_regex_replace
|
||||
Purpose: regular epxression search/replace
|
||||
\*======================================================================*/
|
||||
function smarty_mod_regex_replace($string, $search, $replace)
|
||||
{
|
||||
return preg_replace($search, $replace, $string);
|
||||
}
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_mod_strip_tags
|
||||
Purpose: strip html tags from text
|
||||
\*======================================================================*/
|
||||
function smarty_mod_strip_tags($string, $replace_with_space = true)
|
||||
{
|
||||
if ($replace_with_space)
|
||||
return preg_replace('!<[^>]*?>!', ' ', $string);
|
||||
else
|
||||
return strip_tags($string);
|
||||
}
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_mod_default
|
||||
Purpose: designate default text for empty variables
|
||||
\*======================================================================*/
|
||||
function smarty_mod_default($string, $default="")
|
||||
{
|
||||
if (empty($string))
|
||||
return $default;
|
||||
else
|
||||
return $string;
|
||||
}
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_func_assign
|
||||
Purpose: assign a value to a template variable
|
||||
\*======================================================================*/
|
||||
function smarty_func_assign($args, &$smarty_obj)
|
||||
{
|
||||
extract($args);
|
||||
|
||||
if (empty($var)) {
|
||||
$smarty_obj->_trigger_error_msg("assign: missing 'var' parameter");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!in_array('value', array_keys($args))) {
|
||||
$smarty_obj->_trigger_error_msg("assign: missing 'value' parameter");
|
||||
return;
|
||||
}
|
||||
|
||||
$smarty_obj->assign($var, $value);
|
||||
return true;
|
||||
}
|
||||
|
||||
/*============================================*\
|
||||
Custom tag functions
|
||||
\*============================================*/
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_func_html_options
|
||||
Purpose: Prints the list of <option> tags generated from
|
||||
the passed parameters
|
||||
\*======================================================================*/
|
||||
function smarty_func_html_options()
|
||||
{
|
||||
$print_result = true;
|
||||
|
||||
extract(func_get_arg(0));
|
||||
|
||||
$html_result = "";
|
||||
|
||||
settype($selected, 'array');
|
||||
if (isset($options)) {
|
||||
settype($options, 'array');
|
||||
foreach ($options as $key => $value) {
|
||||
$html_result .= "<option value=\"$key\"";
|
||||
if (in_array($key, $selected))
|
||||
$html_result .= " selected=\"selected\"";
|
||||
$html_result .= ">$value</option>\n";
|
||||
}
|
||||
} else {
|
||||
settype($output, 'array');
|
||||
settype($values, 'array');
|
||||
for ($i = 0; $i < count($output); $i++) {
|
||||
/* By default, check value against $selected */
|
||||
$sel_check = $values[$i];
|
||||
$html_result .= "<option";
|
||||
if ($i < count($values))
|
||||
$html_result .= " value=\"".$values[$i]."\"";
|
||||
else
|
||||
$sel_check = $output[$i]; /* if more outputs than values, then
|
||||
check output against $selected */
|
||||
if (in_array($sel_check, $selected))
|
||||
$html_result .= " selected";
|
||||
$html_result .= ">".$output[$i]."</option>\n";
|
||||
}
|
||||
}
|
||||
|
||||
if ($print_result)
|
||||
print $html_result;
|
||||
else
|
||||
return $html_result;
|
||||
}
|
||||
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_func_html_select_date
|
||||
Purpose: Prints the dropdowns for date selection.
|
||||
\*======================================================================*/
|
||||
function smarty_func_html_select_date()
|
||||
{
|
||||
/* Default values. */
|
||||
$prefix = "Date_";
|
||||
$time = time();
|
||||
$start_year = strftime("%Y");
|
||||
$end_year = $start_year;
|
||||
$display_days = true;
|
||||
$display_months = true;
|
||||
$display_years = true;
|
||||
$month_format = "%B";
|
||||
$day_format = "%02d";
|
||||
$year_as_text = false;
|
||||
/* Display years in reverse order? Ie. 2000,1999,.... */
|
||||
$reverse_years = false;
|
||||
/* Should the select boxes be part of an array when returned from PHP?
|
||||
e.g. setting it to "birthday", would create "birthday[Day]",
|
||||
"birthday[Month]" & "birthday[Year]". Can be combined with prefix */
|
||||
$field_array = null;
|
||||
/* <select size>'s of the different <select> tags.
|
||||
If not set, uses default dropdown. */
|
||||
$day_size = null;
|
||||
$month_size = null;
|
||||
$year_size = null;
|
||||
/* Unparsed attributes common to *ALL* the <select>/<input> tags.
|
||||
An example might be in the template: all_extra ='class ="foo"'. */
|
||||
$all_extra = null;
|
||||
/* Separate attributes for the tags. */
|
||||
$day_extra = null;
|
||||
$month_extra = null;
|
||||
$year_extra = null;
|
||||
/* Order in which to display the fields.
|
||||
"D" -> day, "M" -> month, "Y" -> year. */
|
||||
$field_order = 'MDY';
|
||||
/* String printed between the different fields. */
|
||||
$field_separator = "\n";
|
||||
|
||||
extract(func_get_arg(0));
|
||||
|
||||
$time = smarty_make_timestamp($time);
|
||||
$field_order = strtoupper($field_order);
|
||||
|
||||
$html_result = $month_result = $day_result = $year_result = "";
|
||||
|
||||
if ($display_months) {
|
||||
$month_names = array();
|
||||
|
||||
for ($i = 1; $i <= 12; $i++)
|
||||
$month_names[] = strftime($month_format, mktime(0, 0, 0, $i, 1, 2000));
|
||||
|
||||
$month_result .= '<select name=';
|
||||
if (null !== $field_array){
|
||||
$month_result .= '"' . $field_array . '[' . $prefix . 'Month]"';
|
||||
} else {
|
||||
$month_result .= '"' . $prefix . 'Month"';
|
||||
}
|
||||
if (null !== $month_size){
|
||||
$month_result .= ' size="' . $month_size . '"';
|
||||
}
|
||||
if (null !== $month_extra){
|
||||
$month_result .= ' ' . $month_extra;
|
||||
}
|
||||
if (null !== $all_extra){
|
||||
$month_result .= ' ' . $all_extra;
|
||||
}
|
||||
$month_result .= '>'."\n";
|
||||
$month_result .= smarty_func_html_options(array('output' => $month_names,
|
||||
'values' => range(1, 12),
|
||||
'selected' => strftime("%m", $time),
|
||||
'print_result' => false));
|
||||
$month_result .= '</select>';
|
||||
}
|
||||
|
||||
if ($display_days) {
|
||||
$days = range(1, 31);
|
||||
for ($i = 0; $i < count($days); $i++)
|
||||
$days[$i] = sprintf($day_format, $days[$i]);
|
||||
|
||||
$day_result .= '<select name=';
|
||||
if (null !== $field_array){
|
||||
$day_result .= '"' . $field_array . '[' . $prefix . 'Day]"';
|
||||
} else {
|
||||
$day_result .= '"' . $prefix . 'Day"';
|
||||
}
|
||||
if (null !== $day_size){
|
||||
$day_result .= ' size="' . $day_size . '"';
|
||||
}
|
||||
if (null !== $all_extra){
|
||||
$day_result .= ' ' . $all_extra;
|
||||
}
|
||||
if (null !== $day_extra){
|
||||
$day_result .= ' ' . $day_extra;
|
||||
}
|
||||
$day_result .= '>'."\n";
|
||||
$day_result .= smarty_func_html_options(array('output' => $days,
|
||||
'values' => range(1, 31),
|
||||
'selected' => strftime("%d", $time),
|
||||
'print_result' => false));
|
||||
$day_result .= '</select>';
|
||||
}
|
||||
|
||||
if ($display_years) {
|
||||
if (null !== $field_array){
|
||||
$year_name = $field_array . '[' . $prefix . 'Year]';
|
||||
} else {
|
||||
$year_name = $prefix . 'Year';
|
||||
}
|
||||
if ($year_as_text) {
|
||||
$year_result .= '<input type="text" name="' . $year_name . '" value="'.strftime('%Y', $time).'" size="4" maxlength="4"';
|
||||
if (null !== $all_extra){
|
||||
$year_result .= ' ' . $all_extra;
|
||||
}
|
||||
if (null !== $year_extra){
|
||||
$year_result .= ' ' . $year_extra;
|
||||
}
|
||||
$year_result .= '>';
|
||||
} else {
|
||||
$years = range((int)$start_year, (int)$end_year);
|
||||
if ($reverse_years) {
|
||||
rsort($years, SORT_NUMERIC);
|
||||
}
|
||||
|
||||
$year_result .= '<select name="' . $year_name . '"';
|
||||
if (null !== $year_size){
|
||||
$year_result .= ' size="' . $year_size . '"';
|
||||
}
|
||||
if (null !== $all_extra){
|
||||
$year_result .= ' ' . $all_extra;
|
||||
}
|
||||
if (null !== $year_extra){
|
||||
$year_result .= ' ' . $year_extra;
|
||||
}
|
||||
$year_result .= '>'."\n";
|
||||
$year_result .= smarty_func_html_options(array('output' => $years,
|
||||
'values' => $years,
|
||||
'selected' => strftime("%Y", $time),
|
||||
'print_result' => false));
|
||||
$year_result .= '</select>';
|
||||
}
|
||||
}
|
||||
|
||||
// Loop thru the field_order field
|
||||
for ($i = 0; $i <= 2; $i++){
|
||||
$c = substr($field_order, $i, 1);
|
||||
switch ($c){
|
||||
case 'D':
|
||||
$html_result .= $day_result;
|
||||
break;
|
||||
|
||||
case 'M':
|
||||
$html_result .= $month_result;
|
||||
break;
|
||||
|
||||
case 'Y':
|
||||
$html_result .= $year_result;
|
||||
break;
|
||||
}
|
||||
// Add the field seperator
|
||||
$html_result .= $field_separator;
|
||||
}
|
||||
|
||||
print $html_result;
|
||||
}
|
||||
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_func_html_select_time
|
||||
Purpose: Prints the dropdowns for time selection
|
||||
\*======================================================================*/
|
||||
function smarty_func_html_select_time()
|
||||
{
|
||||
/* Default values. */
|
||||
$prefix = "Time_";
|
||||
$time = time();
|
||||
$display_hours = true;
|
||||
$display_minutes = true;
|
||||
$display_seconds = true;
|
||||
$display_meridian = true;
|
||||
$use_24_hours = true;
|
||||
$minute_interval = 1;
|
||||
$second_interval = 1;
|
||||
/* Should the select boxes be part of an array when returned from PHP?
|
||||
e.g. setting it to "birthday", would create "birthday[Hour]",
|
||||
"birthday[Minute]", "birthday[Seconds]" & "birthday[Meridian]".
|
||||
Can be combined with prefix. */
|
||||
$field_array = null;
|
||||
|
||||
extract(func_get_arg(0));
|
||||
|
||||
$time = smarty_make_timestamp($time);
|
||||
|
||||
$html_result = '';
|
||||
|
||||
if ($display_hours) {
|
||||
$hours = $use_24_hours ? range(0, 23) : range(1, 12);
|
||||
$hour_fmt = $use_24_hours ? '%H' : '%I';
|
||||
for ($i = 0; $i < count($hours); $i++)
|
||||
$hours[$i] = sprintf('%02d', $hours[$i]);
|
||||
$html_result .= '<select name=';
|
||||
if (null !== $field_array) {
|
||||
$html_result .= '"' . $field_array . '[' . $prefix . 'Hour]">'."\n";
|
||||
} else {
|
||||
$html_result .= '"' . $prefix . 'Hour">'."\n";
|
||||
}
|
||||
$html_result .= smarty_func_html_options(array('output' => $hours,
|
||||
'values' => $hours,
|
||||
'selected' => strftime($hour_fmt, $time),
|
||||
'print_result' => false));
|
||||
$html_result .= "</select>\n";
|
||||
}
|
||||
|
||||
if ($display_minutes) {
|
||||
$all_minutes = range(0, 59);
|
||||
for ($i = 0; $i < count($all_minutes); $i+= $minute_interval)
|
||||
$minutes[] = sprintf('%02d', $all_minutes[$i]);
|
||||
$selected = intval(floor(strftime('%M', $time) / $minute_interval) * $minute_interval);
|
||||
$html_result .= '<select name=';
|
||||
if (null !== $field_array) {
|
||||
$html_result .= '"' . $field_array . '[' . $prefix . 'Minute]">'."\n";
|
||||
} else {
|
||||
$html_result .= '"' . $prefix . 'Minute">'."\n";
|
||||
}
|
||||
$html_result .= smarty_func_html_options(array('output' => $minutes,
|
||||
'values' => $minutes,
|
||||
'selected' => $selected,
|
||||
'print_result' => false));
|
||||
$html_result .= "</select>\n";
|
||||
}
|
||||
|
||||
if ($display_seconds) {
|
||||
$all_seconds = range(0, 59);
|
||||
for ($i = 0; $i < count($all_seconds); $i+= $second_interval)
|
||||
$seconds[] = sprintf('%02d', $all_seconds[$i]);
|
||||
$selected = intval(floor(strftime('%S', $time) / $second_interval) * $second_interval);
|
||||
$html_result .= '<select name=';
|
||||
if (null !== $field_array) {
|
||||
$html_result .= '"' . $field_array . '[' . $prefix . 'Second]">'."\n";
|
||||
} else {
|
||||
$html_result .= '"' . $prefix . 'Second">'."\n";
|
||||
}
|
||||
$html_result .= smarty_func_html_options(array('output' => $seconds,
|
||||
'values' => $seconds,
|
||||
'selected' => $selected,
|
||||
'print_result' => false));
|
||||
$html_result .= "</select>\n";
|
||||
}
|
||||
|
||||
if ($display_meridian && !$use_24_hours) {
|
||||
$html_result .= '<select name=';
|
||||
if (null !== $field_array) {
|
||||
$html_result .= '"' . $field_array . '[' . $prefix . 'Meridian]">'."\n";
|
||||
} else {
|
||||
$html_result .= '"' . $prefix . 'Meridian">'."\n";
|
||||
}
|
||||
$html_result .= smarty_func_html_options(array('output' => array('AM', 'PM'),
|
||||
'values' => array('am', 'pm'),
|
||||
'selected' => strtolower(strftime('%p', $time)),
|
||||
'print_result' => false));
|
||||
$html_result .= "</select>\n";
|
||||
}
|
||||
|
||||
print $html_result;
|
||||
}
|
||||
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_func_math
|
||||
Purpose: allow math computations in template
|
||||
\*======================================================================*/
|
||||
function smarty_func_math($args, &$smarty_obj) {
|
||||
// be sure equation parameter is present
|
||||
if (empty($args["equation"])) {
|
||||
$smarty_obj->_trigger_error_msg("math: missing equation parameter");
|
||||
return;
|
||||
}
|
||||
|
||||
$equation = $args["equation"];
|
||||
|
||||
// make sure parenthesis are balanced
|
||||
if (substr_count($equation,"(") != substr_count($equation,")")) {
|
||||
$smarty_obj->_trigger_error_msg("math: unbalanced parenthesis");
|
||||
return;
|
||||
}
|
||||
|
||||
// match all vars in equation, make sure all are passed
|
||||
preg_match_all("![a-zA-Z][a-zA-Z0-9]*!",$equation, $match);
|
||||
$allowed_funcs = array('int','abs','ceil','cos','exp','floor','log','log10',
|
||||
'max','min','pi','pow','rand','round','sin','sqrt','srand','tan');
|
||||
|
||||
foreach($match[0] as $curr_var) {
|
||||
if (!in_array($curr_var,array_keys($args)) && !in_array($curr_var, $allowed_funcs)) {
|
||||
$smarty_obj->_trigger_error_msg("math: parameter $curr_var not passed as argument");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
foreach($args as $key => $val) {
|
||||
if ($key != "equation" && $key != "format" && $key != "assign") {
|
||||
// make sure value is not empty
|
||||
if (strlen($val)==0) {
|
||||
$smarty_obj->_trigger_error_msg("math: parameter $key is empty");
|
||||
return;
|
||||
}
|
||||
if (!is_numeric($val)) {
|
||||
$smarty_obj->_trigger_error_msg("math: parameter $key: is not numeric");
|
||||
return;
|
||||
}
|
||||
$equation = preg_replace("/\b$key\b/",$val, $equation);
|
||||
}
|
||||
}
|
||||
|
||||
eval("\$smarty_math_result = ".$equation.";");
|
||||
|
||||
if (empty($args["format"])) {
|
||||
if (empty($args["assign"])) {
|
||||
echo $smarty_math_result;
|
||||
} else {
|
||||
$smarty_obj->assign($args["assign"],$smarty_math_result);
|
||||
}
|
||||
} else {
|
||||
if (empty($args["assign"])){
|
||||
printf($args["format"],$smarty_math_result);
|
||||
} else {
|
||||
$smarty_obj->assign($assign,sprintf($args["format"],$smarty_math_result));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_func_fetch
|
||||
Purpose: fetch file, web or ftp data and display results
|
||||
\*======================================================================*/
|
||||
function smarty_func_fetch($args, &$smarty_obj) {
|
||||
extract($args);
|
||||
|
||||
if (empty($file)) {
|
||||
$smarty_obj->_trigger_error_msg("parameter 'file' cannot be empty");
|
||||
return;
|
||||
}
|
||||
|
||||
if ($smarty_obj->security && !preg_match('!^(http|ftp)://!', $file)) {
|
||||
// make sure fetched file comes from secure directory
|
||||
foreach ($smarty_obj->secure_dir as $curr_dir) {
|
||||
if (substr(realpath($file), 0, strlen(realpath($curr_dir))) == realpath($curr_dir)) {
|
||||
$resource_is_secure = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$resource_is_secure) {
|
||||
$smarty_obj->_trigger_error_msg("(secure mode) fetch '$file' is not allowed");
|
||||
return;
|
||||
}
|
||||
if (!@is_readable($file)) {
|
||||
$smarty_obj->_trigger_error_msg("fetch cannot read file '$file'");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!empty($assign)) {
|
||||
ob_start();
|
||||
readfile($file);
|
||||
$smarty_obj->assign($assign,ob_get_contents());
|
||||
ob_end_clean();
|
||||
} else {
|
||||
readfile($file);
|
||||
}
|
||||
}
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_mod_count_characters
|
||||
Purpose: count the number of characters in a text
|
||||
\*======================================================================*/
|
||||
function smarty_mod_count_characters($string, $include_spaces=false) {
|
||||
|
||||
if ($include_spaces)
|
||||
return(strlen($string));
|
||||
|
||||
return preg_match_all("/[^\s]/",$string, $match);
|
||||
}
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_mod_count_words
|
||||
Purpose: count the number of words in a text
|
||||
\*======================================================================*/
|
||||
function smarty_mod_count_words($string) {
|
||||
|
||||
// split text by ' ',\r,\n,\f,\t
|
||||
$split_array = preg_split("/\s+/",$string);
|
||||
// count matches that contain alphanumerics
|
||||
$word_count = preg_grep("/[a-zA-Z0-9]/",$split_array);
|
||||
|
||||
return count($word_count);
|
||||
}
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_mod_count_sentences
|
||||
Purpose: count the number of sentences in a text
|
||||
\*======================================================================*/
|
||||
function smarty_mod_count_sentences($string, $include_spaces=false) {
|
||||
|
||||
// find periods with a word before but not after.
|
||||
return preg_match_all("/[^\s]\.(?!\w)/",$string, $match);
|
||||
|
||||
}
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_mod_count_paragraphs
|
||||
Purpose: count the number of sentences in a text
|
||||
\*======================================================================*/
|
||||
function smarty_mod_count_paragraphs($string, $include_spaces=false) {
|
||||
|
||||
// count \r or \n characters
|
||||
return count( preg_split("/[\r\n]+/",$string) );
|
||||
}
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_func_counter
|
||||
Purpose: print out a counter value
|
||||
\*======================================================================*/
|
||||
function smarty_func_counter($args, &$smarty_obj) {
|
||||
|
||||
static $count = array();
|
||||
static $skipval = array();
|
||||
static $dir = array();
|
||||
static $id = "default";
|
||||
static $printval = array();
|
||||
static $assign = "";
|
||||
|
||||
extract($args);
|
||||
|
||||
if (!isset($id))
|
||||
$id = "default";
|
||||
|
||||
if (isset($start))
|
||||
$count[$id] = $start;
|
||||
else if (!isset($count[$id]))
|
||||
$count[$id]=1;
|
||||
|
||||
if (!isset($print))
|
||||
$printval[$id]=true;
|
||||
else
|
||||
$printval[$id]=$print;
|
||||
|
||||
if (!empty($assign)) {
|
||||
$printval[$id] = false;
|
||||
$smarty_obj->assign($assign, $count[$id]);
|
||||
}
|
||||
|
||||
if ($printval[$id])
|
||||
echo $count[$id];
|
||||
|
||||
if (isset($skip))
|
||||
$skipval[$id] = $skip;
|
||||
else if (empty($skipval[$id]))
|
||||
$skipval[$id] = 1;
|
||||
|
||||
if (isset($direction))
|
||||
$dir[$id] = $direction;
|
||||
else if (!isset($dir[$id]))
|
||||
$dir[$id] = "up";
|
||||
|
||||
if ($dir[$id] == "down")
|
||||
$count[$id] -= $skipval[$id];
|
||||
else
|
||||
$count[$id] += $skipval[$id];
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_func_assign_debug_info
|
||||
Purpose: assign debug info to the template
|
||||
\*======================================================================*/
|
||||
function smarty_func_assign_debug_info($args, &$smarty_obj) {
|
||||
$assigned_vars = $smarty_obj->_tpl_vars;
|
||||
ksort($assigned_vars);
|
||||
if (is_array($smarty_obj->_config[0])) {
|
||||
$config_vars = $smarty_obj->_config[0];
|
||||
ksort($config_vars);
|
||||
$smarty_obj->assign("_debug_config_keys", array_keys($config_vars));
|
||||
$smarty_obj->assign("_debug_config_vals", array_values($config_vars));
|
||||
}
|
||||
|
||||
$included_templates = $smarty_obj->_smarty_debug_info;
|
||||
|
||||
$smarty_obj->assign("_debug_keys", array_keys($assigned_vars));
|
||||
$smarty_obj->assign("_debug_vals", array_values($assigned_vars));
|
||||
|
||||
$smarty_obj->assign("_debug_tpls", $included_templates);
|
||||
return true;
|
||||
}
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_func_debug_print_var
|
||||
Purpose: prints variable (or array) contents to the console
|
||||
\*======================================================================*/
|
||||
function smarty_mod_debug_print_var($var, $depth=0, $length=40) {
|
||||
if (is_array($var)) {
|
||||
$results = "<b>Array (".count($var).")</b>";
|
||||
foreach ($var as $curr_key => $curr_val) {
|
||||
$return = smarty_mod_debug_print_var($curr_val, $depth+1);
|
||||
$results .= '<br>\r'.str_repeat(' ', $depth*2)."<b>$curr_key</b> => $return";
|
||||
}
|
||||
return $results;
|
||||
} else {
|
||||
if (empty($var)) {
|
||||
return '<i>empty</i>';
|
||||
}
|
||||
if (strlen($var) > $length ) {
|
||||
$results = substr($var, 0, $length-3).'...';
|
||||
} else {
|
||||
$results = $var;
|
||||
}
|
||||
$results = preg_replace("![\r\t\n]!", " ", $results);
|
||||
$results = htmlspecialchars(htmlspecialchars($results));
|
||||
return $results;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_func_overlib_init
|
||||
Purpose: initialize use of overlib
|
||||
\*======================================================================*/
|
||||
function smarty_func_overlib_init($args, &$smarty_obj) {
|
||||
// be sure to place overlib.js where Smarty can locate it.
|
||||
// overlib.js came with the distribution of Smarty.
|
||||
echo '<DIV ID="overDiv" STYLE="position:absolute; visibility:hidden; z-index:1000;"></DIV>'."\n".'<SCRIPT LANGUAGE=javascript>'."\n".'<!--'."\n";
|
||||
readfile(SMARTY_DIR."overlib.js",1);
|
||||
echo '// -->'."\n".'</SCRIPT>'."\n";
|
||||
return;
|
||||
}
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_func_overlib
|
||||
Purpose: make text pop up in windows via overlib
|
||||
\*======================================================================*/
|
||||
function smarty_func_overlib($args, &$smarty_obj) {
|
||||
extract($args);
|
||||
if (empty($text) && !isset($inarray) && empty($function)) {
|
||||
$smarty_obj->_trigger_error_msg("overlib: attribute 'text' or 'inarray' or 'function' required");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (empty($trigger)) { $trigger = "onMouseOver"; }
|
||||
|
||||
echo $trigger.'="return overlib(\''.str_replace("'","\'",$text).'\'';
|
||||
if ($sticky) { echo ",STICKY"; }
|
||||
if (!empty($caption)) { echo ",CAPTION,'".str_replace("'","\'",$caption)."'"; }
|
||||
if (!empty($fgcolor)) { echo ",FGCOLOR,'$fgcolor'"; }
|
||||
if (!empty($bgcolor)) { echo ",BGCOLOR,'$bgcolor'"; }
|
||||
if (!empty($textcolor)) { echo ",TEXTCOLOR,'$textcolor'"; }
|
||||
if (!empty($capcolor)) { echo ",CAPCOLOR,'$capcolor'"; }
|
||||
if (!empty($closecolor)) { echo ",CLOSECOLOR,'$closecolor'"; }
|
||||
if (!empty($textfont)) { echo ",TEXTFONT,'$textfont'"; }
|
||||
if (!empty($captionfont)) { echo ",CAPTIONFONT,'$captionfont'"; }
|
||||
if (!empty($closefont)) { echo ",CLOSEFONT,'$closefont'"; }
|
||||
if (!empty($textsize)) { echo ",TEXTSIZE,$textsize"; }
|
||||
if (!empty($captionsize)) { echo ",CAPTIONSIZE,$captionsize"; }
|
||||
if (!empty($closesize)) { echo ",CLOSESIZE,$closesize"; }
|
||||
if (!empty($width)) { echo ",WIDTH,$width"; }
|
||||
if (!empty($height)) { echo ",HEIGHT,$height"; }
|
||||
if (!empty($left)) { echo ",LEFT"; }
|
||||
if (!empty($right)) { echo ",RIGHT"; }
|
||||
if (!empty($center)) { echo ",CENTER"; }
|
||||
if (!empty($above)) { echo ",ABOVE"; }
|
||||
if (!empty($below)) { echo ",BELOW"; }
|
||||
if (isset($border)) { echo ",BORDER,$border"; }
|
||||
if (isset($offsetx)) { echo ",OFFSETX,$offsetx"; }
|
||||
if (isset($offsety)) { echo ",OFFSETY,$offsety"; }
|
||||
if (!empty($fgbackground)) { echo ",FGBACKGROUND,'$fgbackground'"; }
|
||||
if (!empty($bgbackground)) { echo ",BGBACKGROUND,'$bgbackground'"; }
|
||||
if (!empty($closetext)) { echo ",CLOSETEXT,'".str_replace("'","\'",$closetext)."'"; }
|
||||
if (!empty($noclose)) { echo ",NOCLOSE"; }
|
||||
if (!empty($status)) { echo ",STATUS,'".str_replace("'","\'",$status)."'"; }
|
||||
if (!empty($autostatus)) { echo ",AUTOSTATUS"; }
|
||||
if (!empty($autostatuscap)) { echo ",AUTOSTATUSCAP"; }
|
||||
if (isset($inarray)) { echo ",INARRAY,'$inarray'"; }
|
||||
if (isset($caparray)) { echo ",CAPARRAY,'$caparray'"; }
|
||||
if (!empty($capicon)) { echo ",CAPICON,'$capicon'"; }
|
||||
if (!empty($snapx)) { echo ",SNAPX,$snapx"; }
|
||||
if (!empty($snapy)) { echo ",SNAPY,$snapy"; }
|
||||
if (isset($fixx)) { echo ",FIXX,$fixx"; }
|
||||
if (isset($fixy)) { echo ",FIXY,$fixy"; }
|
||||
if (!empty($background)) { echo ",BACKGROUND,'$background'"; }
|
||||
if (!empty($padx)) { echo ",PADX,$padx"; }
|
||||
if (!empty($pady)) { echo ",PADY,$pady"; }
|
||||
if (!empty($fullhtml)) { echo ",FULLHTML"; }
|
||||
if (!empty($frame)) { echo ",FRAME,'$frame'"; }
|
||||
if (isset($timeout)) { echo ",TIMEOUT,$timeout"; }
|
||||
if (!empty($function)) { echo ",FUNCTION,'$function'"; }
|
||||
if (isset($delay)) { echo ",DELAY,$delay"; }
|
||||
if (!empty($hauto)) { echo ",HAUTO"; }
|
||||
if (!empty($vauto)) { echo ",VAUTO"; }
|
||||
echo ');" onMouseOut="nd();"';
|
||||
return;
|
||||
}
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_mod_wordwrap
|
||||
Purpose: wrap words to a specific column width
|
||||
Input: $string - string of text to wrap
|
||||
$width - column width to wrap to
|
||||
$cut - whether or not to cut a word on the boundary
|
||||
\*======================================================================*/
|
||||
function smarty_mod_wordwrap($string, $width=80, $break="\n",$cut=false) {
|
||||
|
||||
return wordwrap($string,$width,$break,$cut);
|
||||
|
||||
}
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_mod_indent
|
||||
Purpose: indent each line a specific number of characters
|
||||
Input: $string - string of text to indent
|
||||
$width - number of chars to indent
|
||||
$indent_char - character to indent with (can be a tab \t)
|
||||
\*======================================================================*/
|
||||
function smarty_mod_indent($string, $width=4, $indent_char=' ') {
|
||||
|
||||
return preg_replace("/(^|\n)/","\\1".str_repeat($indent_char,$width),$string);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
818
Smarty.class.php
818
Smarty.class.php
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@
|
||||
* Andrei Zmievski <andrei@php.net>
|
||||
*
|
||||
* Version: 1.5.2
|
||||
* Copyright: 2001 ispi of Lincoln, Inc.
|
||||
* Copyright: 2001,2002 ispi of Lincoln, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
@@ -48,6 +48,8 @@ class Smarty_Compiler extends Smarty {
|
||||
var $_current_file = null; // the current template being compiled
|
||||
var $_current_line_no = 1; // line number for error messages
|
||||
var $_capture_stack = array(); // keeps track of nested capture buffers
|
||||
var $_plugin_info = array(); // keeps track of plugins to load
|
||||
var $_filters_loaded = false;
|
||||
|
||||
|
||||
/*======================================================================*\
|
||||
@@ -64,13 +66,19 @@ class Smarty_Compiler extends Smarty {
|
||||
}
|
||||
}
|
||||
|
||||
if (!$this->_filters_loaded) {
|
||||
$this->_load_filters();
|
||||
$this->_filters_loaded = true;
|
||||
}
|
||||
|
||||
// run template source through prefilter functions
|
||||
if (is_array($this->prefilter_funcs) && count($this->prefilter_funcs) > 0) {
|
||||
foreach ($this->prefilter_funcs as $prefilter) {
|
||||
if (function_exists($prefilter)) {
|
||||
$template_source = $prefilter($template_source, $this);
|
||||
if (count($this->_plugins['prefilter']) > 0) {
|
||||
foreach ($this->_plugins['prefilter'] as $filter_name => $prefilter) {
|
||||
if ($prefilter[3] || function_exists($prefilter[0])) {
|
||||
$template_source = $prefilter[0]($template_source, $this);
|
||||
$this->_plugins['prefilter'][$filter_name][3] = true;
|
||||
} else {
|
||||
$this->_trigger_error_msg("prefilter function $prefilter does not exist.");
|
||||
$this->_trigger_plugin_error("Smarty plugin error: prefilter '$filter_name' is not implemented");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -170,16 +178,30 @@ class Smarty_Compiler extends Smarty {
|
||||
}
|
||||
|
||||
// run compiled template through postfilter functions
|
||||
if (is_array($this->postfilter_funcs) && count($this->postfilter_funcs) > 0) {
|
||||
foreach ($this->postfilter_funcs as $postfilter) {
|
||||
if (function_exists($postfilter)) {
|
||||
$template_compiled = $postfilter($template_compiled, $this);
|
||||
if (count($this->_plugins['postfilter']) > 0) {
|
||||
foreach ($this->_plugins['postfilter'] as $filter_name => $postfilter) {
|
||||
if ($postfilter[3] || function_exists($postfilter[0])) {
|
||||
$template_compiled = $postfilter[0]($template_compiled, $this);
|
||||
$this->_plugins['postfilter'][$filter_name][3] = true;
|
||||
} else {
|
||||
$this->_trigger_error_msg("postfilter function $postfilter does not exist.");
|
||||
$this->_trigger_plugin_error("Smarty plugin error: postfilter '$filter_name' is not implemented");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Emit code to load needed plugins. */
|
||||
if (count($this->_plugin_info)) {
|
||||
$plugins_code = '<?php $this->_load_plugins(array(';
|
||||
foreach ($this->_plugin_info as $plugin_type => $plugins) {
|
||||
foreach ($plugins as $plugin_name => $plugin_info) {
|
||||
$plugins_code .= "\narray('$plugin_type', '$plugin_name', '$plugin_info[0]', $plugin_info[1]),";
|
||||
}
|
||||
}
|
||||
$plugins_code .= ")); ?>";
|
||||
$template_compiled = $plugins_code . $template_compiled;
|
||||
$this->_plugin_info = array();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -300,13 +322,10 @@ class Smarty_Compiler extends Smarty {
|
||||
return $this->_compile_insert_tag($tag_args);
|
||||
|
||||
default:
|
||||
if (isset($this->compiler_funcs[$tag_command])) {
|
||||
return $this->_compile_compiler_tag($tag_command, $tag_args);
|
||||
} else if (isset($this->custom_funcs[$tag_command])) {
|
||||
return $this->_compile_custom_tag($tag_command, $tag_args);
|
||||
if ($this->_compile_compiler_tag($tag_command, $tag_args, $output)) {
|
||||
return $output;
|
||||
} else {
|
||||
$this->_syntax_error("unknown tag - '$tag_command'", E_USER_WARNING);
|
||||
return;
|
||||
return $this->_compile_custom_tag($tag_command, $tag_args);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -316,16 +335,62 @@ class Smarty_Compiler extends Smarty {
|
||||
Function: _compile_compiler_tag
|
||||
Purpose: compile the custom compiler tag
|
||||
\*======================================================================*/
|
||||
function _compile_compiler_tag($tag_command, $tag_args)
|
||||
function _compile_compiler_tag($tag_command, $tag_args, &$output)
|
||||
{
|
||||
$function = $this->compiler_funcs[$tag_command];
|
||||
$found = false;
|
||||
$have_function = true;
|
||||
|
||||
if (!function_exists($function)) {
|
||||
$this->_syntax_error("compiler function '$tag_command' is not implemented", E_USER_WARNING);
|
||||
return;
|
||||
$plugin_file = $this->plugins_dir .
|
||||
'/compiler.' .
|
||||
$tag_command .
|
||||
'.php';
|
||||
|
||||
/*
|
||||
* First we check if the compiler function has already been registered
|
||||
* or loaded from a plugin file.
|
||||
*/
|
||||
if (isset($this->_plugins['compiler'][$tag_command])) {
|
||||
$found = true;
|
||||
$plugin_func = $this->_plugins['compiler'][$tag_command][0];
|
||||
if (!function_exists($plugin_func)) {
|
||||
$message = "compiler function '$tag_command' is not implemented";
|
||||
$have_function = false;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Otherwise we need to load plugin file and look for the function
|
||||
* inside it.
|
||||
*/
|
||||
else if (file_exists($plugin_file) && is_readable($plugin_file)) {
|
||||
$found = true;
|
||||
|
||||
include_once $plugin_file;
|
||||
|
||||
$plugin_func = 'smarty_compiler_' . $tag_command;
|
||||
if (!function_exists($plugin_func)) {
|
||||
$message = "plugin function $plugin_func() not found in $plugin_file\n";
|
||||
$have_function = false;
|
||||
} else {
|
||||
$this->_plugins['compiler'][$tag_command] = array($plugin_func, null, null);
|
||||
}
|
||||
}
|
||||
|
||||
return '<?php ' . $function($tag_args, $this) . ' ?>';
|
||||
/*
|
||||
* True return value means that we either found a plugin or a
|
||||
* dynamically registered function. False means that we didn't and the
|
||||
* compiler should now emit code to load custom function plugin for this
|
||||
* tag.
|
||||
*/
|
||||
if ($found) {
|
||||
if ($have_function) {
|
||||
$output = '<?php ' . $plugin_func($tag_args, $this) . ' ?>';
|
||||
} else {
|
||||
$this->_syntax_error($message, E_USER_WARNING);
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -335,12 +400,10 @@ class Smarty_Compiler extends Smarty {
|
||||
\*======================================================================*/
|
||||
function _compile_custom_tag($tag_command, $tag_args)
|
||||
{
|
||||
$function = $this->custom_funcs[$tag_command];
|
||||
|
||||
if (!function_exists($function)) {
|
||||
$this->_syntax_error("custom function '$tag_command' is not implemented", E_USER_WARNING);
|
||||
return;
|
||||
}
|
||||
$this->_add_plugin('function',
|
||||
$tag_command,
|
||||
$this->_current_file,
|
||||
$this->_current_line_no);
|
||||
|
||||
$arg_list = array();
|
||||
$attrs = $this->_parse_attrs($tag_args);
|
||||
@@ -350,7 +413,7 @@ class Smarty_Compiler extends Smarty {
|
||||
$arg_list[] = "'$arg_name' => $arg_value";
|
||||
}
|
||||
|
||||
return "<?php $function(array(".implode(',', (array)$arg_list)."), \$this); if(\$this->_extract) { extract(\$this->_tpl_vars); \$this->_extract=false; } ?>";
|
||||
return "<?php \$this->_plugins['function']['$tag_command'][0](array(".implode(',', (array)$arg_list)."), \$this); if(\$this->_extract) { extract(\$this->_tpl_vars); \$this->_extract=false; } ?>";
|
||||
}
|
||||
|
||||
|
||||
@@ -361,7 +424,7 @@ class Smarty_Compiler extends Smarty {
|
||||
function _compile_insert_tag($tag_args)
|
||||
{
|
||||
$attrs = $this->_parse_attrs($tag_args);
|
||||
$name = substr($attrs['name'], 1, -1);
|
||||
$name = $this->_dequote($attrs['name']);
|
||||
|
||||
if (empty($name)) {
|
||||
$this->_syntax_error("missing insert name");
|
||||
@@ -373,6 +436,8 @@ class Smarty_Compiler extends Smarty {
|
||||
$arg_list[] = "'$arg_name' => $arg_value";
|
||||
}
|
||||
|
||||
$this->_add_plugin('insert', $name);
|
||||
|
||||
return "<?php echo \$this->_run_insert_handler(array(".implode(', ', (array)$arg_list).")); ?>\n";
|
||||
}
|
||||
|
||||
@@ -471,28 +536,25 @@ class Smarty_Compiler extends Smarty {
|
||||
|
||||
if (empty($attrs['file'])) {
|
||||
$this->_syntax_error("missing 'file' attribute in include_php tag");
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->_parse_file_path($this->trusted_dir, $this->_dequote($attrs['file']), $resource_type, $resource_name);
|
||||
|
||||
if ($this->security) {
|
||||
if( $resource_type != 'file' || !@is_file($resource_name)) {
|
||||
$this->_syntax_error("include_php: $resource_type: $resource_name is not readable");
|
||||
return false;
|
||||
}
|
||||
if (!$this->_is_trusted($resource_type, $resource_name)) {
|
||||
$this->_syntax_error("include_php: $resource_type: $resource_name is not trusted");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
$this->_get_php_resource($this->_dequote($attrs['file']),
|
||||
$resource_type, $php_resource);
|
||||
|
||||
if (!empty($attrs['assign'])) {
|
||||
$output = "<?php ob_start();\n";
|
||||
$output .= 'include("' . $resource_name . '");'."\n";
|
||||
$output .= "\$this->assign(" . $this->_dequote($attrs['assign']).", ob_get_contents()); ob_end_clean();\n?>";
|
||||
if ($resource_type == 'file') {
|
||||
$output .= 'include("' . $php_resource . '");'."\n";
|
||||
} else {
|
||||
$output .= $php_resource;
|
||||
}
|
||||
$output .= "\$this->assign(" . $attrs['assign'] . ", ob_get_contents()); ob_end_clean();\n?>";
|
||||
} else {
|
||||
$output = '<?php include("' . $resource_name . '"); ?>';
|
||||
if ($resource_type == 'file') {
|
||||
$output = '<?php include("' . $php_resource . '"); ?>';
|
||||
} else {
|
||||
$output = '<?php ' . $php_resource . ' ?>';
|
||||
}
|
||||
}
|
||||
|
||||
return $output;
|
||||
@@ -1083,32 +1145,11 @@ class Smarty_Compiler extends Smarty {
|
||||
if ($modifier_name{0} == '@') {
|
||||
$map_array = 'false';
|
||||
$modifier_name = substr($modifier_name, 1);
|
||||
} else
|
||||
} else {
|
||||
$map_array = 'true';
|
||||
|
||||
/*
|
||||
* First we lookup the modifier function name in the registered
|
||||
* modifiers table.
|
||||
*/
|
||||
@$mod_func_name = $this->custom_mods[$modifier_name];
|
||||
|
||||
/*
|
||||
* If we don't find that modifier there, we assume it's just a PHP
|
||||
* function name.
|
||||
*/
|
||||
if (!isset($mod_func_name)) {
|
||||
if ($this->security && !in_array($modifier_name, $this->security_settings['MODIFIER_FUNCS'])) {
|
||||
$this->_syntax_error("(secure mode) modifier '$modifier_name' is not allowed", E_USER_WARNING);
|
||||
continue;
|
||||
} else {
|
||||
$mod_func_name = $modifier_name;
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists($mod_func_name)) {
|
||||
$this->_syntax_error("modifier '$modifier_name' is not implemented", E_USER_WARNING);
|
||||
continue;
|
||||
}
|
||||
$this->_add_plugin('modifier', $modifier_name);
|
||||
|
||||
$this->_parse_vars_props($modifier_args);
|
||||
|
||||
@@ -1117,7 +1158,23 @@ class Smarty_Compiler extends Smarty {
|
||||
else
|
||||
$modifier_args = '';
|
||||
|
||||
$output = "\$this->_run_mod_handler('$mod_func_name', $map_array, $output$modifier_args)";
|
||||
$output = "\$this->_run_mod_handler('$modifier_name', $map_array, $output$modifier_args)";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*======================================================================*\
|
||||
Function: _add_plugin
|
||||
Purpose:
|
||||
\*======================================================================*/
|
||||
function _add_plugin($type, $name)
|
||||
{
|
||||
if (!isset($this->_plugin_info[$type])) {
|
||||
$this->_plugin_info[$type] = array();
|
||||
}
|
||||
if (!isset($this->_plugin_info[$type][$name])) {
|
||||
$this->_plugin_info[$type][$name] = array($this->_current_file,
|
||||
$this->_current_line_no);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1172,6 +1229,38 @@ class Smarty_Compiler extends Smarty {
|
||||
return $compiled_ref;
|
||||
}
|
||||
|
||||
/*======================================================================*\
|
||||
Function: _load_filters
|
||||
Purpose: load pre- and post-filters
|
||||
\*======================================================================*/
|
||||
function _load_filters()
|
||||
{
|
||||
$plugins_dir = $this->plugins_dir;
|
||||
$handle = opendir($plugins_dir);
|
||||
while ($entry = readdir($handle)) {
|
||||
$parts = explode('.', $entry, 3);
|
||||
if ($entry == '.' ||
|
||||
$entry == '..' ||
|
||||
count($parts) < 3 ||
|
||||
$parts[2] != 'php' ||
|
||||
($parts[0] != 'prefilter' &&
|
||||
$parts[0] != 'postfilter') ||
|
||||
isset($this->_plugins[$parts[0]][$parts[1]]))
|
||||
continue;
|
||||
|
||||
$plugin_file = $plugins_dir . '/' . $entry;
|
||||
include_once $plugin_file;
|
||||
$plugin_func = 'smarty_' . $parts[0] . '_' . $parts[1];
|
||||
if (!function_exists($plugin_func)) {
|
||||
$this->_trigger_plugin_error("Smarty plugin error: plugin function $plugin_func() not found in $plugin_file");
|
||||
} else {
|
||||
$this->_plugins[$parts[0]][$parts[1]] = array($plugin_func, null, null, true);
|
||||
}
|
||||
}
|
||||
closedir($handle);
|
||||
}
|
||||
|
||||
|
||||
/*======================================================================*\
|
||||
Function: _syntax_error
|
||||
Purpose: display Smarty syntax error
|
||||
|
6
TODO
6
TODO
@@ -1,6 +1,4 @@
|
||||
* Ability to load multiple sections in one {config_load ...}
|
||||
* do away with Smarty.addons.php and make drop-in plugin directory for
|
||||
functions and modifiers
|
||||
* handle asp style tags in $php_handler
|
||||
* correctly capture nested php tag syntax in templates:
|
||||
<?php echo "<?php exit(); ?>"; ?>
|
||||
@@ -8,8 +6,10 @@
|
||||
default=$foo}, then using $bar in included template, instead of $foo.bar
|
||||
* support implementations of prefiltes, mods, and others as class methods.
|
||||
* possibly implement default modifiers that apply to variables upon display
|
||||
* possibly implement undefined template tags custom handling
|
||||
* think about possibility of supporting something like {$data[foo].$key[bar]}
|
||||
* allow {custom} .. {/custom} style of custom functions
|
||||
* ability to concatenate values/strings together
|
||||
* fix all E_NOTICE warnings
|
||||
* make simple math easier
|
||||
* 'eval' modifier
|
||||
* caching all but parts of the template
|
||||
|
@@ -1,5 +1,5 @@
|
||||
{config_load file=test.conf section="setup"}
|
||||
{include file=header.tpl title=foo}
|
||||
{include file="header.tpl" title=foo}
|
||||
|
||||
<PRE>
|
||||
|
||||
|
@@ -9,7 +9,7 @@ require_once "PEAR.php";
|
||||
* @author Andrei Zmievski <andrei@php.net>
|
||||
* @access public
|
||||
*
|
||||
* Copyright: 2001 ispi of Lincoln, Inc.
|
||||
* Copyright: 2001,2002 ispi of Lincoln, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@
|
||||
* Andrei Zmievski <andrei@php.net>
|
||||
*
|
||||
* Version: 1.5.2
|
||||
* Copyright: 2001 ispi of Lincoln, Inc.
|
||||
* Copyright: 2001,2002 ispi of Lincoln, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
@@ -48,6 +48,8 @@ class Smarty_Compiler extends Smarty {
|
||||
var $_current_file = null; // the current template being compiled
|
||||
var $_current_line_no = 1; // line number for error messages
|
||||
var $_capture_stack = array(); // keeps track of nested capture buffers
|
||||
var $_plugin_info = array(); // keeps track of plugins to load
|
||||
var $_filters_loaded = false;
|
||||
|
||||
|
||||
/*======================================================================*\
|
||||
@@ -64,13 +66,19 @@ class Smarty_Compiler extends Smarty {
|
||||
}
|
||||
}
|
||||
|
||||
if (!$this->_filters_loaded) {
|
||||
$this->_load_filters();
|
||||
$this->_filters_loaded = true;
|
||||
}
|
||||
|
||||
// run template source through prefilter functions
|
||||
if (is_array($this->prefilter_funcs) && count($this->prefilter_funcs) > 0) {
|
||||
foreach ($this->prefilter_funcs as $prefilter) {
|
||||
if (function_exists($prefilter)) {
|
||||
$template_source = $prefilter($template_source, $this);
|
||||
if (count($this->_plugins['prefilter']) > 0) {
|
||||
foreach ($this->_plugins['prefilter'] as $filter_name => $prefilter) {
|
||||
if ($prefilter[3] || function_exists($prefilter[0])) {
|
||||
$template_source = $prefilter[0]($template_source, $this);
|
||||
$this->_plugins['prefilter'][$filter_name][3] = true;
|
||||
} else {
|
||||
$this->_trigger_error_msg("prefilter function $prefilter does not exist.");
|
||||
$this->_trigger_plugin_error("Smarty plugin error: prefilter '$filter_name' is not implemented");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -170,16 +178,30 @@ class Smarty_Compiler extends Smarty {
|
||||
}
|
||||
|
||||
// run compiled template through postfilter functions
|
||||
if (is_array($this->postfilter_funcs) && count($this->postfilter_funcs) > 0) {
|
||||
foreach ($this->postfilter_funcs as $postfilter) {
|
||||
if (function_exists($postfilter)) {
|
||||
$template_compiled = $postfilter($template_compiled, $this);
|
||||
if (count($this->_plugins['postfilter']) > 0) {
|
||||
foreach ($this->_plugins['postfilter'] as $filter_name => $postfilter) {
|
||||
if ($postfilter[3] || function_exists($postfilter[0])) {
|
||||
$template_compiled = $postfilter[0]($template_compiled, $this);
|
||||
$this->_plugins['postfilter'][$filter_name][3] = true;
|
||||
} else {
|
||||
$this->_trigger_error_msg("postfilter function $postfilter does not exist.");
|
||||
$this->_trigger_plugin_error("Smarty plugin error: postfilter '$filter_name' is not implemented");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Emit code to load needed plugins. */
|
||||
if (count($this->_plugin_info)) {
|
||||
$plugins_code = '<?php $this->_load_plugins(array(';
|
||||
foreach ($this->_plugin_info as $plugin_type => $plugins) {
|
||||
foreach ($plugins as $plugin_name => $plugin_info) {
|
||||
$plugins_code .= "\narray('$plugin_type', '$plugin_name', '$plugin_info[0]', $plugin_info[1]),";
|
||||
}
|
||||
}
|
||||
$plugins_code .= ")); ?>";
|
||||
$template_compiled = $plugins_code . $template_compiled;
|
||||
$this->_plugin_info = array();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -300,13 +322,10 @@ class Smarty_Compiler extends Smarty {
|
||||
return $this->_compile_insert_tag($tag_args);
|
||||
|
||||
default:
|
||||
if (isset($this->compiler_funcs[$tag_command])) {
|
||||
return $this->_compile_compiler_tag($tag_command, $tag_args);
|
||||
} else if (isset($this->custom_funcs[$tag_command])) {
|
||||
return $this->_compile_custom_tag($tag_command, $tag_args);
|
||||
if ($this->_compile_compiler_tag($tag_command, $tag_args, $output)) {
|
||||
return $output;
|
||||
} else {
|
||||
$this->_syntax_error("unknown tag - '$tag_command'", E_USER_WARNING);
|
||||
return;
|
||||
return $this->_compile_custom_tag($tag_command, $tag_args);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -316,16 +335,62 @@ class Smarty_Compiler extends Smarty {
|
||||
Function: _compile_compiler_tag
|
||||
Purpose: compile the custom compiler tag
|
||||
\*======================================================================*/
|
||||
function _compile_compiler_tag($tag_command, $tag_args)
|
||||
function _compile_compiler_tag($tag_command, $tag_args, &$output)
|
||||
{
|
||||
$function = $this->compiler_funcs[$tag_command];
|
||||
$found = false;
|
||||
$have_function = true;
|
||||
|
||||
if (!function_exists($function)) {
|
||||
$this->_syntax_error("compiler function '$tag_command' is not implemented", E_USER_WARNING);
|
||||
return;
|
||||
$plugin_file = $this->plugins_dir .
|
||||
'/compiler.' .
|
||||
$tag_command .
|
||||
'.php';
|
||||
|
||||
/*
|
||||
* First we check if the compiler function has already been registered
|
||||
* or loaded from a plugin file.
|
||||
*/
|
||||
if (isset($this->_plugins['compiler'][$tag_command])) {
|
||||
$found = true;
|
||||
$plugin_func = $this->_plugins['compiler'][$tag_command][0];
|
||||
if (!function_exists($plugin_func)) {
|
||||
$message = "compiler function '$tag_command' is not implemented";
|
||||
$have_function = false;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Otherwise we need to load plugin file and look for the function
|
||||
* inside it.
|
||||
*/
|
||||
else if (file_exists($plugin_file) && is_readable($plugin_file)) {
|
||||
$found = true;
|
||||
|
||||
include_once $plugin_file;
|
||||
|
||||
$plugin_func = 'smarty_compiler_' . $tag_command;
|
||||
if (!function_exists($plugin_func)) {
|
||||
$message = "plugin function $plugin_func() not found in $plugin_file\n";
|
||||
$have_function = false;
|
||||
} else {
|
||||
$this->_plugins['compiler'][$tag_command] = array($plugin_func, null, null);
|
||||
}
|
||||
}
|
||||
|
||||
return '<?php ' . $function($tag_args, $this) . ' ?>';
|
||||
/*
|
||||
* True return value means that we either found a plugin or a
|
||||
* dynamically registered function. False means that we didn't and the
|
||||
* compiler should now emit code to load custom function plugin for this
|
||||
* tag.
|
||||
*/
|
||||
if ($found) {
|
||||
if ($have_function) {
|
||||
$output = '<?php ' . $plugin_func($tag_args, $this) . ' ?>';
|
||||
} else {
|
||||
$this->_syntax_error($message, E_USER_WARNING);
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -335,12 +400,10 @@ class Smarty_Compiler extends Smarty {
|
||||
\*======================================================================*/
|
||||
function _compile_custom_tag($tag_command, $tag_args)
|
||||
{
|
||||
$function = $this->custom_funcs[$tag_command];
|
||||
|
||||
if (!function_exists($function)) {
|
||||
$this->_syntax_error("custom function '$tag_command' is not implemented", E_USER_WARNING);
|
||||
return;
|
||||
}
|
||||
$this->_add_plugin('function',
|
||||
$tag_command,
|
||||
$this->_current_file,
|
||||
$this->_current_line_no);
|
||||
|
||||
$arg_list = array();
|
||||
$attrs = $this->_parse_attrs($tag_args);
|
||||
@@ -350,7 +413,7 @@ class Smarty_Compiler extends Smarty {
|
||||
$arg_list[] = "'$arg_name' => $arg_value";
|
||||
}
|
||||
|
||||
return "<?php $function(array(".implode(',', (array)$arg_list)."), \$this); if(\$this->_extract) { extract(\$this->_tpl_vars); \$this->_extract=false; } ?>";
|
||||
return "<?php \$this->_plugins['function']['$tag_command'][0](array(".implode(',', (array)$arg_list)."), \$this); if(\$this->_extract) { extract(\$this->_tpl_vars); \$this->_extract=false; } ?>";
|
||||
}
|
||||
|
||||
|
||||
@@ -361,7 +424,7 @@ class Smarty_Compiler extends Smarty {
|
||||
function _compile_insert_tag($tag_args)
|
||||
{
|
||||
$attrs = $this->_parse_attrs($tag_args);
|
||||
$name = substr($attrs['name'], 1, -1);
|
||||
$name = $this->_dequote($attrs['name']);
|
||||
|
||||
if (empty($name)) {
|
||||
$this->_syntax_error("missing insert name");
|
||||
@@ -373,6 +436,8 @@ class Smarty_Compiler extends Smarty {
|
||||
$arg_list[] = "'$arg_name' => $arg_value";
|
||||
}
|
||||
|
||||
$this->_add_plugin('insert', $name);
|
||||
|
||||
return "<?php echo \$this->_run_insert_handler(array(".implode(', ', (array)$arg_list).")); ?>\n";
|
||||
}
|
||||
|
||||
@@ -471,28 +536,25 @@ class Smarty_Compiler extends Smarty {
|
||||
|
||||
if (empty($attrs['file'])) {
|
||||
$this->_syntax_error("missing 'file' attribute in include_php tag");
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->_parse_file_path($this->trusted_dir, $this->_dequote($attrs['file']), $resource_type, $resource_name);
|
||||
|
||||
if ($this->security) {
|
||||
if( $resource_type != 'file' || !@is_file($resource_name)) {
|
||||
$this->_syntax_error("include_php: $resource_type: $resource_name is not readable");
|
||||
return false;
|
||||
}
|
||||
if (!$this->_is_trusted($resource_type, $resource_name)) {
|
||||
$this->_syntax_error("include_php: $resource_type: $resource_name is not trusted");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
$this->_get_php_resource($this->_dequote($attrs['file']),
|
||||
$resource_type, $php_resource);
|
||||
|
||||
if (!empty($attrs['assign'])) {
|
||||
$output = "<?php ob_start();\n";
|
||||
$output .= 'include("' . $resource_name . '");'."\n";
|
||||
$output .= "\$this->assign(" . $this->_dequote($attrs['assign']).", ob_get_contents()); ob_end_clean();\n?>";
|
||||
if ($resource_type == 'file') {
|
||||
$output .= 'include("' . $php_resource . '");'."\n";
|
||||
} else {
|
||||
$output .= $php_resource;
|
||||
}
|
||||
$output .= "\$this->assign(" . $attrs['assign'] . ", ob_get_contents()); ob_end_clean();\n?>";
|
||||
} else {
|
||||
$output = '<?php include("' . $resource_name . '"); ?>';
|
||||
if ($resource_type == 'file') {
|
||||
$output = '<?php include("' . $php_resource . '"); ?>';
|
||||
} else {
|
||||
$output = '<?php ' . $php_resource . ' ?>';
|
||||
}
|
||||
}
|
||||
|
||||
return $output;
|
||||
@@ -1083,32 +1145,11 @@ class Smarty_Compiler extends Smarty {
|
||||
if ($modifier_name{0} == '@') {
|
||||
$map_array = 'false';
|
||||
$modifier_name = substr($modifier_name, 1);
|
||||
} else
|
||||
} else {
|
||||
$map_array = 'true';
|
||||
|
||||
/*
|
||||
* First we lookup the modifier function name in the registered
|
||||
* modifiers table.
|
||||
*/
|
||||
@$mod_func_name = $this->custom_mods[$modifier_name];
|
||||
|
||||
/*
|
||||
* If we don't find that modifier there, we assume it's just a PHP
|
||||
* function name.
|
||||
*/
|
||||
if (!isset($mod_func_name)) {
|
||||
if ($this->security && !in_array($modifier_name, $this->security_settings['MODIFIER_FUNCS'])) {
|
||||
$this->_syntax_error("(secure mode) modifier '$modifier_name' is not allowed", E_USER_WARNING);
|
||||
continue;
|
||||
} else {
|
||||
$mod_func_name = $modifier_name;
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists($mod_func_name)) {
|
||||
$this->_syntax_error("modifier '$modifier_name' is not implemented", E_USER_WARNING);
|
||||
continue;
|
||||
}
|
||||
$this->_add_plugin('modifier', $modifier_name);
|
||||
|
||||
$this->_parse_vars_props($modifier_args);
|
||||
|
||||
@@ -1117,7 +1158,23 @@ class Smarty_Compiler extends Smarty {
|
||||
else
|
||||
$modifier_args = '';
|
||||
|
||||
$output = "\$this->_run_mod_handler('$mod_func_name', $map_array, $output$modifier_args)";
|
||||
$output = "\$this->_run_mod_handler('$modifier_name', $map_array, $output$modifier_args)";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*======================================================================*\
|
||||
Function: _add_plugin
|
||||
Purpose:
|
||||
\*======================================================================*/
|
||||
function _add_plugin($type, $name)
|
||||
{
|
||||
if (!isset($this->_plugin_info[$type])) {
|
||||
$this->_plugin_info[$type] = array();
|
||||
}
|
||||
if (!isset($this->_plugin_info[$type][$name])) {
|
||||
$this->_plugin_info[$type][$name] = array($this->_current_file,
|
||||
$this->_current_line_no);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1172,6 +1229,38 @@ class Smarty_Compiler extends Smarty {
|
||||
return $compiled_ref;
|
||||
}
|
||||
|
||||
/*======================================================================*\
|
||||
Function: _load_filters
|
||||
Purpose: load pre- and post-filters
|
||||
\*======================================================================*/
|
||||
function _load_filters()
|
||||
{
|
||||
$plugins_dir = $this->plugins_dir;
|
||||
$handle = opendir($plugins_dir);
|
||||
while ($entry = readdir($handle)) {
|
||||
$parts = explode('.', $entry, 3);
|
||||
if ($entry == '.' ||
|
||||
$entry == '..' ||
|
||||
count($parts) < 3 ||
|
||||
$parts[2] != 'php' ||
|
||||
($parts[0] != 'prefilter' &&
|
||||
$parts[0] != 'postfilter') ||
|
||||
isset($this->_plugins[$parts[0]][$parts[1]]))
|
||||
continue;
|
||||
|
||||
$plugin_file = $plugins_dir . '/' . $entry;
|
||||
include_once $plugin_file;
|
||||
$plugin_func = 'smarty_' . $parts[0] . '_' . $parts[1];
|
||||
if (!function_exists($plugin_func)) {
|
||||
$this->_trigger_plugin_error("Smarty plugin error: plugin function $plugin_func() not found in $plugin_file");
|
||||
} else {
|
||||
$this->_plugins[$parts[0]][$parts[1]] = array($plugin_func, null, null, true);
|
||||
}
|
||||
}
|
||||
closedir($handle);
|
||||
}
|
||||
|
||||
|
||||
/*======================================================================*\
|
||||
Function: _syntax_error
|
||||
Purpose: display Smarty syntax error
|
||||
|
31
libs/plugins/function.assign.php
Normal file
31
libs/plugins/function.assign.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: function
|
||||
* Name: assign
|
||||
* Purpose: assign a value to a template variable
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_function_assign($args, &$smarty_obj)
|
||||
{
|
||||
extract($args);
|
||||
|
||||
if (empty($var)) {
|
||||
$smarty_obj->_trigger_error_msg("assign: missing 'var' parameter");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!in_array('value', array_keys($args))) {
|
||||
$smarty_obj->_trigger_error_msg("assign: missing 'value' parameter");
|
||||
return;
|
||||
}
|
||||
|
||||
$smarty_obj->assign($var, $value);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
32
libs/plugins/function.assign_debug_info.php
Normal file
32
libs/plugins/function.assign_debug_info.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: function
|
||||
* Name: assign_debug_info
|
||||
* Purpose: assign debug info to the template
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_function_assign_debug_info($args, &$smarty_obj)
|
||||
{
|
||||
$assigned_vars = $smarty_obj->_tpl_vars;
|
||||
ksort($assigned_vars);
|
||||
if (is_array($smarty_obj->_config[0])) {
|
||||
$config_vars = $smarty_obj->_config[0];
|
||||
ksort($config_vars);
|
||||
$smarty_obj->assign("_debug_config_keys", array_keys($config_vars));
|
||||
$smarty_obj->assign("_debug_config_vals", array_values($config_vars));
|
||||
}
|
||||
|
||||
$included_templates = $smarty_obj->_smarty_debug_info;
|
||||
|
||||
$smarty_obj->assign("_debug_keys", array_keys($assigned_vars));
|
||||
$smarty_obj->assign("_debug_vals", array_values($assigned_vars));
|
||||
|
||||
$smarty_obj->assign("_debug_tpls", $included_templates);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
63
libs/plugins/function.counter.php
Normal file
63
libs/plugins/function.counter.php
Normal file
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: function
|
||||
* Name: counter
|
||||
* Purpose: print out a counter value
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_function_counter($args, &$smarty_obj)
|
||||
{
|
||||
static $count = array();
|
||||
static $skipval = array();
|
||||
static $dir = array();
|
||||
static $id = "default";
|
||||
static $printval = array();
|
||||
static $assign = "";
|
||||
|
||||
extract($args);
|
||||
|
||||
if (!isset($id))
|
||||
$id = "default";
|
||||
|
||||
if (isset($start))
|
||||
$count[$id] = $start;
|
||||
else if (!isset($count[$id]))
|
||||
$count[$id]=1;
|
||||
|
||||
if (!isset($print))
|
||||
$printval[$id]=true;
|
||||
else
|
||||
$printval[$id]=$print;
|
||||
|
||||
if (!empty($assign)) {
|
||||
$printval[$id] = false;
|
||||
$smarty_obj->assign($assign, $count[$id]);
|
||||
}
|
||||
|
||||
if ($printval[$id])
|
||||
echo $count[$id];
|
||||
|
||||
if (isset($skip))
|
||||
$skipval[$id] = $skip;
|
||||
else if (empty($skipval[$id]))
|
||||
$skipval[$id] = 1;
|
||||
|
||||
if (isset($direction))
|
||||
$dir[$id] = $direction;
|
||||
else if (!isset($dir[$id]))
|
||||
$dir[$id] = "up";
|
||||
|
||||
if ($dir[$id] == "down")
|
||||
$count[$id] -= $skipval[$id];
|
||||
else
|
||||
$count[$id] += $skipval[$id];
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
51
libs/plugins/function.fetch.php
Normal file
51
libs/plugins/function.fetch.php
Normal file
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: function
|
||||
* Name: fetch
|
||||
* Purpose: fetch file, web or ftp data and display results
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_function_fetch($args, &$smarty_obj)
|
||||
{
|
||||
extract($args);
|
||||
|
||||
if (empty($file)) {
|
||||
$smarty_obj->_trigger_error_msg("parameter 'file' cannot be empty");
|
||||
return;
|
||||
}
|
||||
|
||||
if ($smarty_obj->security && !preg_match('!^(http|ftp)://!', $file)) {
|
||||
// make sure fetched file comes from secure directory
|
||||
foreach ($smarty_obj->secure_dir as $curr_dir) {
|
||||
if (substr(realpath($file), 0, strlen(realpath($curr_dir))) == realpath($curr_dir)) {
|
||||
$resource_is_secure = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$resource_is_secure) {
|
||||
$smarty_obj->_trigger_error_msg("(secure mode) fetch '$file' is not allowed");
|
||||
return;
|
||||
}
|
||||
if (!@is_readable($file)) {
|
||||
$smarty_obj->_trigger_error_msg("fetch cannot read file '$file'");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!empty($assign)) {
|
||||
ob_start();
|
||||
readfile($file);
|
||||
$smarty_obj->assign($assign,ob_get_contents());
|
||||
ob_end_clean();
|
||||
} else {
|
||||
readfile($file);
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
55
libs/plugins/function.html_options.php
Normal file
55
libs/plugins/function.html_options.php
Normal file
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: function
|
||||
* Name: html_options
|
||||
* Purpose: Prints the list of <option> tags generated from
|
||||
* the passed parameters
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_function_html_options($params, &$smarty)
|
||||
{
|
||||
$print_result = true;
|
||||
|
||||
extract($params);
|
||||
|
||||
$html_result = '';
|
||||
|
||||
settype($selected, 'array');
|
||||
if (isset($options)) {
|
||||
settype($options, 'array');
|
||||
foreach ($options as $key => $value) {
|
||||
$html_result .= "<option value=\"$key\"";
|
||||
if (in_array($key, $selected))
|
||||
$html_result .= " selected=\"selected\"";
|
||||
$html_result .= ">$value</option>\n";
|
||||
}
|
||||
} else {
|
||||
settype($output, 'array');
|
||||
settype($values, 'array');
|
||||
for ($i = 0; $i < count($output); $i++) {
|
||||
/* By default, check value against $selected */
|
||||
$sel_check = $values[$i];
|
||||
$html_result .= "<option";
|
||||
if ($i < count($values))
|
||||
$html_result .= " value=\"".$values[$i]."\"";
|
||||
else
|
||||
$sel_check = $output[$i]; /* if more outputs than values, then
|
||||
check output against $selected */
|
||||
if (in_array($sel_check, $selected))
|
||||
$html_result .= " selected";
|
||||
$html_result .= ">".$output[$i]."</option>\n";
|
||||
}
|
||||
}
|
||||
|
||||
if ($print_result)
|
||||
print $html_result;
|
||||
else
|
||||
return $html_result;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
182
libs/plugins/function.html_select_date.php
Normal file
182
libs/plugins/function.html_select_date.php
Normal file
@@ -0,0 +1,182 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: function
|
||||
* Name: html_select_date
|
||||
* Purpose: Prints the dropdowns for date selection.
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
include_once dirname(__FILE__) . '/.make_timestamp.php';
|
||||
include_once dirname(__FILE__) . '/function.html_options.php';
|
||||
function smarty_function_html_select_date($params, &$smarty)
|
||||
{
|
||||
/* Default values. */
|
||||
$prefix = "Date_";
|
||||
$time = time();
|
||||
$start_year = strftime("%Y");
|
||||
$end_year = $start_year;
|
||||
$display_days = true;
|
||||
$display_months = true;
|
||||
$display_years = true;
|
||||
$month_format = "%B";
|
||||
$day_format = "%02d";
|
||||
$year_as_text = false;
|
||||
/* Display years in reverse order? Ie. 2000,1999,.... */
|
||||
$reverse_years = false;
|
||||
/* Should the select boxes be part of an array when returned from PHP?
|
||||
e.g. setting it to "birthday", would create "birthday[Day]",
|
||||
"birthday[Month]" & "birthday[Year]". Can be combined with prefix */
|
||||
$field_array = null;
|
||||
/* <select size>'s of the different <select> tags.
|
||||
If not set, uses default dropdown. */
|
||||
$day_size = null;
|
||||
$month_size = null;
|
||||
$year_size = null;
|
||||
/* Unparsed attributes common to *ALL* the <select>/<input> tags.
|
||||
An example might be in the template: all_extra ='class ="foo"'. */
|
||||
$all_extra = null;
|
||||
/* Separate attributes for the tags. */
|
||||
$day_extra = null;
|
||||
$month_extra = null;
|
||||
$year_extra = null;
|
||||
/* Order in which to display the fields.
|
||||
"D" -> day, "M" -> month, "Y" -> year. */
|
||||
$field_order = 'MDY';
|
||||
/* String printed between the different fields. */
|
||||
$field_separator = "\n";
|
||||
|
||||
extract($params);
|
||||
|
||||
$time = smarty_make_timestamp($time);
|
||||
$field_order = strtoupper($field_order);
|
||||
|
||||
$html_result = $month_result = $day_result = $year_result = "";
|
||||
|
||||
if ($display_months) {
|
||||
$month_names = array();
|
||||
|
||||
for ($i = 1; $i <= 12; $i++)
|
||||
$month_names[] = strftime($month_format, mktime(0, 0, 0, $i, 1, 2000));
|
||||
|
||||
$month_result .= '<select name=';
|
||||
if (null !== $field_array){
|
||||
$month_result .= '"' . $field_array . '[' . $prefix . 'Month]"';
|
||||
} else {
|
||||
$month_result .= '"' . $prefix . 'Month"';
|
||||
}
|
||||
if (null !== $month_size){
|
||||
$month_result .= ' size="' . $month_size . '"';
|
||||
}
|
||||
if (null !== $month_extra){
|
||||
$month_result .= ' ' . $month_extra;
|
||||
}
|
||||
if (null !== $all_extra){
|
||||
$month_result .= ' ' . $all_extra;
|
||||
}
|
||||
$month_result .= '>'."\n";
|
||||
$month_result .= smarty_function_html_options(array('output' => $month_names,
|
||||
'values' => range(1, 12),
|
||||
'selected' => strftime("%m", $time),
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$month_result .= '</select>';
|
||||
}
|
||||
|
||||
if ($display_days) {
|
||||
$days = range(1, 31);
|
||||
for ($i = 0; $i < count($days); $i++)
|
||||
$days[$i] = sprintf($day_format, $days[$i]);
|
||||
|
||||
$day_result .= '<select name=';
|
||||
if (null !== $field_array){
|
||||
$day_result .= '"' . $field_array . '[' . $prefix . 'Day]"';
|
||||
} else {
|
||||
$day_result .= '"' . $prefix . 'Day"';
|
||||
}
|
||||
if (null !== $day_size){
|
||||
$day_result .= ' size="' . $day_size . '"';
|
||||
}
|
||||
if (null !== $all_extra){
|
||||
$day_result .= ' ' . $all_extra;
|
||||
}
|
||||
if (null !== $day_extra){
|
||||
$day_result .= ' ' . $day_extra;
|
||||
}
|
||||
$day_result .= '>'."\n";
|
||||
$day_result .= smarty_function_html_options(array('output' => $days,
|
||||
'values' => range(1, 31),
|
||||
'selected' => strftime("%d", $time),
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$day_result .= '</select>';
|
||||
}
|
||||
|
||||
if ($display_years) {
|
||||
if (null !== $field_array){
|
||||
$year_name = $field_array . '[' . $prefix . 'Year]';
|
||||
} else {
|
||||
$year_name = $prefix . 'Year';
|
||||
}
|
||||
if ($year_as_text) {
|
||||
$year_result .= '<input type="text" name="' . $year_name . '" value="'.strftime('%Y', $time).'" size="4" maxlength="4"';
|
||||
if (null !== $all_extra){
|
||||
$year_result .= ' ' . $all_extra;
|
||||
}
|
||||
if (null !== $year_extra){
|
||||
$year_result .= ' ' . $year_extra;
|
||||
}
|
||||
$year_result .= '>';
|
||||
} else {
|
||||
$years = range((int)$start_year, (int)$end_year);
|
||||
if ($reverse_years) {
|
||||
rsort($years, SORT_NUMERIC);
|
||||
}
|
||||
|
||||
$year_result .= '<select name="' . $year_name . '"';
|
||||
if (null !== $year_size){
|
||||
$year_result .= ' size="' . $year_size . '"';
|
||||
}
|
||||
if (null !== $all_extra){
|
||||
$year_result .= ' ' . $all_extra;
|
||||
}
|
||||
if (null !== $year_extra){
|
||||
$year_result .= ' ' . $year_extra;
|
||||
}
|
||||
$year_result .= '>'."\n";
|
||||
$year_result .= smarty_function_html_options(array('output' => $years,
|
||||
'values' => $years,
|
||||
'selected' => strftime("%Y", $time),
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$year_result .= '</select>';
|
||||
}
|
||||
}
|
||||
|
||||
// Loop thru the field_order field
|
||||
for ($i = 0; $i <= 2; $i++){
|
||||
$c = substr($field_order, $i, 1);
|
||||
switch ($c){
|
||||
case 'D':
|
||||
$html_result .= $day_result;
|
||||
break;
|
||||
|
||||
case 'M':
|
||||
$html_result .= $month_result;
|
||||
break;
|
||||
|
||||
case 'Y':
|
||||
$html_result .= $year_result;
|
||||
break;
|
||||
}
|
||||
// Add the field seperator
|
||||
$html_result .= $field_separator;
|
||||
}
|
||||
|
||||
print $html_result;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
114
libs/plugins/function.html_select_time.php
Normal file
114
libs/plugins/function.html_select_time.php
Normal file
@@ -0,0 +1,114 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: function
|
||||
* Name: html_select_time
|
||||
* Purpose: Prints the dropdowns for time selection
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
include_once dirname(__FILE__) . '/.make_timestamp.php';
|
||||
include_once dirname(__FILE__) . '/function.html_options.php';
|
||||
function smarty_function_html_select_time($params, &$smarty)
|
||||
{
|
||||
/* Default values. */
|
||||
$prefix = "Time_";
|
||||
$time = time();
|
||||
$display_hours = true;
|
||||
$display_minutes = true;
|
||||
$display_seconds = true;
|
||||
$display_meridian = true;
|
||||
$use_24_hours = true;
|
||||
$minute_interval = 1;
|
||||
$second_interval = 1;
|
||||
/* Should the select boxes be part of an array when returned from PHP?
|
||||
e.g. setting it to "birthday", would create "birthday[Hour]",
|
||||
"birthday[Minute]", "birthday[Seconds]" & "birthday[Meridian]".
|
||||
Can be combined with prefix. */
|
||||
$field_array = null;
|
||||
|
||||
extract($params);
|
||||
|
||||
$time = smarty_make_timestamp($time);
|
||||
|
||||
$html_result = '';
|
||||
|
||||
if ($display_hours) {
|
||||
$hours = $use_24_hours ? range(0, 23) : range(1, 12);
|
||||
$hour_fmt = $use_24_hours ? '%H' : '%I';
|
||||
for ($i = 0; $i < count($hours); $i++)
|
||||
$hours[$i] = sprintf('%02d', $hours[$i]);
|
||||
$html_result .= '<select name=';
|
||||
if (null !== $field_array) {
|
||||
$html_result .= '"' . $field_array . '[' . $prefix . 'Hour]">'."\n";
|
||||
} else {
|
||||
$html_result .= '"' . $prefix . 'Hour">'."\n";
|
||||
}
|
||||
$html_result .= smarty_function_html_options(array('output' => $hours,
|
||||
'values' => $hours,
|
||||
'selected' => strftime($hour_fmt, $time),
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$html_result .= "</select>\n";
|
||||
}
|
||||
|
||||
if ($display_minutes) {
|
||||
$all_minutes = range(0, 59);
|
||||
for ($i = 0; $i < count($all_minutes); $i+= $minute_interval)
|
||||
$minutes[] = sprintf('%02d', $all_minutes[$i]);
|
||||
$selected = intval(floor(strftime('%M', $time) / $minute_interval) * $minute_interval);
|
||||
$html_result .= '<select name=';
|
||||
if (null !== $field_array) {
|
||||
$html_result .= '"' . $field_array . '[' . $prefix . 'Minute]">'."\n";
|
||||
} else {
|
||||
$html_result .= '"' . $prefix . 'Minute">'."\n";
|
||||
}
|
||||
$html_result .= smarty_function_html_options(array('output' => $minutes,
|
||||
'values' => $minutes,
|
||||
'selected' => $selected,
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$html_result .= "</select>\n";
|
||||
}
|
||||
|
||||
if ($display_seconds) {
|
||||
$all_seconds = range(0, 59);
|
||||
for ($i = 0; $i < count($all_seconds); $i+= $second_interval)
|
||||
$seconds[] = sprintf('%02d', $all_seconds[$i]);
|
||||
$selected = intval(floor(strftime('%S', $time) / $second_interval) * $second_interval);
|
||||
$html_result .= '<select name=';
|
||||
if (null !== $field_array) {
|
||||
$html_result .= '"' . $field_array . '[' . $prefix . 'Second]">'."\n";
|
||||
} else {
|
||||
$html_result .= '"' . $prefix . 'Second">'."\n";
|
||||
}
|
||||
$html_result .= smarty_function_html_options(array('output' => $seconds,
|
||||
'values' => $seconds,
|
||||
'selected' => $selected,
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$html_result .= "</select>\n";
|
||||
}
|
||||
|
||||
if ($display_meridian && !$use_24_hours) {
|
||||
$html_result .= '<select name=';
|
||||
if (null !== $field_array) {
|
||||
$html_result .= '"' . $field_array . '[' . $prefix . 'Meridian]">'."\n";
|
||||
} else {
|
||||
$html_result .= '"' . $prefix . 'Meridian">'."\n";
|
||||
}
|
||||
$html_result .= smarty_function_html_options(array('output' => array('AM', 'PM'),
|
||||
'values' => array('am', 'pm'),
|
||||
'selected' => strtolower(strftime('%p', $time)),
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$html_result .= "</select>\n";
|
||||
}
|
||||
|
||||
print $html_result;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
73
libs/plugins/function.math.php
Normal file
73
libs/plugins/function.math.php
Normal file
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: function
|
||||
* Name: math
|
||||
* Purpose: handle math computations in template
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_function_math($args, &$smarty_obj)
|
||||
{
|
||||
// be sure equation parameter is present
|
||||
if (empty($args["equation"])) {
|
||||
$smarty_obj->_trigger_error_msg("math: missing equation parameter");
|
||||
return;
|
||||
}
|
||||
|
||||
$equation = $args["equation"];
|
||||
|
||||
// make sure parenthesis are balanced
|
||||
if (substr_count($equation,"(") != substr_count($equation,")")) {
|
||||
$smarty_obj->_trigger_error_msg("math: unbalanced parenthesis");
|
||||
return;
|
||||
}
|
||||
|
||||
// match all vars in equation, make sure all are passed
|
||||
preg_match_all("![a-zA-Z][a-zA-Z0-9]*!",$equation, $match);
|
||||
$allowed_funcs = array('int','abs','ceil','cos','exp','floor','log','log10',
|
||||
'max','min','pi','pow','rand','round','sin','sqrt','srand','tan');
|
||||
|
||||
foreach($match[0] as $curr_var) {
|
||||
if (!in_array($curr_var,array_keys($args)) && !in_array($curr_var, $allowed_funcs)) {
|
||||
$smarty_obj->_trigger_error_msg("math: parameter $curr_var not passed as argument");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
foreach($args as $key => $val) {
|
||||
if ($key != "equation" && $key != "format" && $key != "assign") {
|
||||
// make sure value is not empty
|
||||
if (strlen($val)==0) {
|
||||
$smarty_obj->_trigger_error_msg("math: parameter $key is empty");
|
||||
return;
|
||||
}
|
||||
if (!is_numeric($val)) {
|
||||
$smarty_obj->_trigger_error_msg("math: parameter $key: is not numeric");
|
||||
return;
|
||||
}
|
||||
$equation = preg_replace("/\b$key\b/",$val, $equation);
|
||||
}
|
||||
}
|
||||
|
||||
eval("\$smarty_math_result = ".$equation.";");
|
||||
|
||||
if (empty($args["format"])) {
|
||||
if (empty($args["assign"])) {
|
||||
echo $smarty_math_result;
|
||||
} else {
|
||||
$smarty_obj->assign($args["assign"],$smarty_math_result);
|
||||
}
|
||||
} else {
|
||||
if (empty($args["assign"])){
|
||||
printf($args["format"],$smarty_math_result);
|
||||
} else {
|
||||
$smarty_obj->assign($assign,sprintf($args["format"],$smarty_math_result));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
76
libs/plugins/function.popup.php
Normal file
76
libs/plugins/function.popup.php
Normal file
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: function
|
||||
* Name: popup
|
||||
* Purpose: make text pop up in windows via overlib
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_function_popup($args, &$smarty_obj)
|
||||
{
|
||||
extract($args);
|
||||
|
||||
if (empty($text) && !isset($inarray) && empty($function)) {
|
||||
$smarty_obj->_trigger_error_msg("overlib: attribute 'text' or 'inarray' or 'function' required");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (empty($trigger)) { $trigger = "onMouseOver"; }
|
||||
|
||||
echo $trigger.'="return overlib(\''.str_replace("'","\'",$text).'\'';
|
||||
if ($sticky) { echo ",STICKY"; }
|
||||
if (!empty($caption)) { echo ",CAPTION,'".str_replace("'","\'",$caption)."'"; }
|
||||
if (!empty($fgcolor)) { echo ",FGCOLOR,'$fgcolor'"; }
|
||||
if (!empty($bgcolor)) { echo ",BGCOLOR,'$bgcolor'"; }
|
||||
if (!empty($textcolor)) { echo ",TEXTCOLOR,'$textcolor'"; }
|
||||
if (!empty($capcolor)) { echo ",CAPCOLOR,'$capcolor'"; }
|
||||
if (!empty($closecolor)) { echo ",CLOSECOLOR,'$closecolor'"; }
|
||||
if (!empty($textfont)) { echo ",TEXTFONT,'$textfont'"; }
|
||||
if (!empty($captionfont)) { echo ",CAPTIONFONT,'$captionfont'"; }
|
||||
if (!empty($closefont)) { echo ",CLOSEFONT,'$closefont'"; }
|
||||
if (!empty($textsize)) { echo ",TEXTSIZE,$textsize"; }
|
||||
if (!empty($captionsize)) { echo ",CAPTIONSIZE,$captionsize"; }
|
||||
if (!empty($closesize)) { echo ",CLOSESIZE,$closesize"; }
|
||||
if (!empty($width)) { echo ",WIDTH,$width"; }
|
||||
if (!empty($height)) { echo ",HEIGHT,$height"; }
|
||||
if (!empty($left)) { echo ",LEFT"; }
|
||||
if (!empty($right)) { echo ",RIGHT"; }
|
||||
if (!empty($center)) { echo ",CENTER"; }
|
||||
if (!empty($above)) { echo ",ABOVE"; }
|
||||
if (!empty($below)) { echo ",BELOW"; }
|
||||
if (isset($border)) { echo ",BORDER,$border"; }
|
||||
if (isset($offsetx)) { echo ",OFFSETX,$offsetx"; }
|
||||
if (isset($offsety)) { echo ",OFFSETY,$offsety"; }
|
||||
if (!empty($fgbackground)) { echo ",FGBACKGROUND,'$fgbackground'"; }
|
||||
if (!empty($bgbackground)) { echo ",BGBACKGROUND,'$bgbackground'"; }
|
||||
if (!empty($closetext)) { echo ",CLOSETEXT,'".str_replace("'","\'",$closetext)."'"; }
|
||||
if (!empty($noclose)) { echo ",NOCLOSE"; }
|
||||
if (!empty($status)) { echo ",STATUS,'".str_replace("'","\'",$status)."'"; }
|
||||
if (!empty($autostatus)) { echo ",AUTOSTATUS"; }
|
||||
if (!empty($autostatuscap)) { echo ",AUTOSTATUSCAP"; }
|
||||
if (isset($inarray)) { echo ",INARRAY,'$inarray'"; }
|
||||
if (isset($caparray)) { echo ",CAPARRAY,'$caparray'"; }
|
||||
if (!empty($capicon)) { echo ",CAPICON,'$capicon'"; }
|
||||
if (!empty($snapx)) { echo ",SNAPX,$snapx"; }
|
||||
if (!empty($snapy)) { echo ",SNAPY,$snapy"; }
|
||||
if (isset($fixx)) { echo ",FIXX,$fixx"; }
|
||||
if (isset($fixy)) { echo ",FIXY,$fixy"; }
|
||||
if (!empty($background)) { echo ",BACKGROUND,'$background'"; }
|
||||
if (!empty($padx)) { echo ",PADX,$padx"; }
|
||||
if (!empty($pady)) { echo ",PADY,$pady"; }
|
||||
if (!empty($fullhtml)) { echo ",FULLHTML"; }
|
||||
if (!empty($frame)) { echo ",FRAME,'$frame'"; }
|
||||
if (isset($timeout)) { echo ",TIMEOUT,$timeout"; }
|
||||
if (!empty($function)) { echo ",FUNCTION,'$function'"; }
|
||||
if (isset($delay)) { echo ",DELAY,$delay"; }
|
||||
if (!empty($hauto)) { echo ",HAUTO"; }
|
||||
if (!empty($vauto)) { echo ",VAUTO"; }
|
||||
echo ');" onMouseOut="nd();"';
|
||||
return;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
23
libs/plugins/function.popup_init.php
Normal file
23
libs/plugins/function.popup_init.php
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: function
|
||||
* Name: popup_init
|
||||
* Purpose: initialize overlib
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_function_popup_init($args, &$smarty_obj)
|
||||
{
|
||||
// be sure to place overlib.js where Smarty can locate it.
|
||||
// overlib.js came with the distribution of Smarty.
|
||||
echo '<DIV ID="overDiv" STYLE="position:absolute; visibility:hidden; z-index:1000;"></DIV>'."\n".'<SCRIPT LANGUAGE=javascript>'."\n".'<!--'."\n";
|
||||
readfile(SMARTY_DIR."overlib.js",1);
|
||||
echo '// -->'."\n".'</SCRIPT>'."\n";
|
||||
return;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
16
libs/plugins/modifier.capitalize.php
Normal file
16
libs/plugins/modifier.capitalize.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: capitalize
|
||||
* Purpose: capitalize words in the string
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_capitalize($string)
|
||||
{
|
||||
return ucwords($string);
|
||||
}
|
||||
|
||||
?>
|
21
libs/plugins/modifier.count_characters.php
Normal file
21
libs/plugins/modifier.count_characters.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: count_characteres
|
||||
* Purpose: count the number of characters in a text
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_count_characters($string, $include_spaces = false)
|
||||
{
|
||||
if ($include_spaces)
|
||||
return(strlen($string));
|
||||
|
||||
return preg_match_all("/[^\s]/",$string, $match);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
19
libs/plugins/modifier.count_paragraphs.php
Normal file
19
libs/plugins/modifier.count_paragraphs.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: count_paragraphs
|
||||
* Purpose: count the number of paragraphs in a text
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_count_paragraphs($string)
|
||||
{
|
||||
// count \r or \n characters
|
||||
return count(preg_split('/[\r\n]+/', $string));
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
19
libs/plugins/modifier.count_sentences.php
Normal file
19
libs/plugins/modifier.count_sentences.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: count_sentences
|
||||
* Purpose: count the number of sentences in a text
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_count_sentences($string)
|
||||
{
|
||||
// find periods with a word before but not after.
|
||||
return preg_match_all('/[^\s]\.(?!\w)/', $string, $match);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
23
libs/plugins/modifier.count_words.php
Normal file
23
libs/plugins/modifier.count_words.php
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: count_words
|
||||
* Purpose: count the number of words in a text
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_count_words($string)
|
||||
{
|
||||
// split text by ' ',\r,\n,\f,\t
|
||||
$split_array = preg_split('/\s+/',$string);
|
||||
// count matches that contain alphanumerics
|
||||
$word_count = preg_grep('/[a-zA-Z0-9]/', $split_array);
|
||||
|
||||
return count($word_count);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
18
libs/plugins/modifier.date_format.php
Normal file
18
libs/plugins/modifier.date_format.php
Normal file
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: date_format
|
||||
* Purpose: format datestamps via strftime
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_date_format($string, $format="%b %e, %Y")
|
||||
{
|
||||
return strftime($format, smarty_make_timestamp($string));
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
37
libs/plugins/modifier.debug_print_var.php
Normal file
37
libs/plugins/modifier.debug_print_var.php
Normal file
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: debug_print_var
|
||||
* Purpose: formats variable contents for display in the console
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_debug_print_var($var, $depth = 0, $length = 40)
|
||||
{
|
||||
if (is_array($var)) {
|
||||
$results = "<b>Array (".count($var).")</b>";
|
||||
foreach ($var as $curr_key => $curr_val) {
|
||||
$return = smarty_modifier_debug_print_var($curr_val, $depth+1);
|
||||
$results .= '<br>\r'.str_repeat(' ', $depth*2)."<b>$curr_key</b> => $return";
|
||||
}
|
||||
return $results;
|
||||
} else {
|
||||
if (empty($var)) {
|
||||
return '<i>empty</i>';
|
||||
}
|
||||
if (strlen($var) > $length ) {
|
||||
$results = substr($var, 0, $length-3).'...';
|
||||
} else {
|
||||
$results = $var;
|
||||
}
|
||||
$results = preg_replace("![\r\t\n]!", " ", $results);
|
||||
$results = htmlspecialchars(htmlspecialchars($results));
|
||||
return $results;
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
21
libs/plugins/modifier.default.php
Normal file
21
libs/plugins/modifier.default.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: default
|
||||
* Purpose: designate default value for empty variables
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_default($string, $default = '')
|
||||
{
|
||||
if (empty($string))
|
||||
return $default;
|
||||
else
|
||||
return $string;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
31
libs/plugins/modifier.escape.php
Normal file
31
libs/plugins/modifier.escape.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* ------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: escape
|
||||
* Purpose: Escape the string according to escapement type
|
||||
* ------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_escape($string, $esc_type = 'html')
|
||||
{
|
||||
switch ($esc_type) {
|
||||
case 'html':
|
||||
return htmlspecialchars($string, ENT_QUOTES);
|
||||
|
||||
case 'url':
|
||||
return urlencode($string);
|
||||
|
||||
case 'quotes':
|
||||
// escape unescaped single quotes
|
||||
return preg_replace("%(?<!\\\\)'%", "\\'", $string);
|
||||
|
||||
default:
|
||||
return $string;
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
16
libs/plugins/modifier.lower.php
Normal file
16
libs/plugins/modifier.lower.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: lower
|
||||
* Purpose: convert string to lowercase
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_lower($string)
|
||||
{
|
||||
return strtolower($string);
|
||||
}
|
||||
|
||||
?>
|
18
libs/plugins/modifier.regex_replace.php
Normal file
18
libs/plugins/modifier.regex_replace.php
Normal file
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: regex_replace
|
||||
* Purpose: regular epxression search/replace
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_regex_replace($string, $search, $replace)
|
||||
{
|
||||
return preg_replace($search, $replace, $string);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
18
libs/plugins/modifier.replace.php
Normal file
18
libs/plugins/modifier.replace.php
Normal file
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: replace
|
||||
* Purpose: simple search/replace
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_replace($string, $search, $replace)
|
||||
{
|
||||
return str_replace($search, $replace, $string);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
19
libs/plugins/modifier.spacify.php
Normal file
19
libs/plugins/modifier.spacify.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: spacify
|
||||
* Purpose: add spaces between characters in a string
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_spacify($string, $spacify_char = ' ')
|
||||
{
|
||||
return implode($spacify_char,
|
||||
preg_split('//', $string, -1, PREG_SPLIT_NO_EMPTY));
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
18
libs/plugins/modifier.string_format.php
Normal file
18
libs/plugins/modifier.string_format.php
Normal file
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: string_format
|
||||
* Purpose: format strings via sprintf
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_string_format($string, $format)
|
||||
{
|
||||
return sprintf($format, $string);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
21
libs/plugins/modifier.strip_tags.php
Normal file
21
libs/plugins/modifier.strip_tags.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: strip_tags
|
||||
* Purpose: strip html tags from text
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_strip_tags($string, $replace_with_space = true)
|
||||
{
|
||||
if ($replace_with_space)
|
||||
return preg_replace('!<[^>]*?>!', ' ', $string);
|
||||
else
|
||||
return strip_tags($string);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
33
libs/plugins/modifier.truncate.php
Normal file
33
libs/plugins/modifier.truncate.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: truncate
|
||||
* Purpose: Truncate a string to a certain length if necessary,
|
||||
* optionally splitting in the middle of a word, and
|
||||
* appending the $etc string.
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_truncate($string, $length = 80, $etc = '...',
|
||||
$break_words = false)
|
||||
{
|
||||
if ($length == 0)
|
||||
return '';
|
||||
|
||||
if (strlen($string) > $length) {
|
||||
$length -= strlen($etc);
|
||||
$fragment = substr($string, 0, $length+1);
|
||||
if ($break_words)
|
||||
$fragment = substr($fragment, 0, -1);
|
||||
else
|
||||
$fragment = preg_replace('/\s+(\S+)?$/', '', $fragment);
|
||||
return $fragment.$etc;
|
||||
} else
|
||||
return $string;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
16
libs/plugins/modifier.upper.php
Normal file
16
libs/plugins/modifier.upper.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: upper
|
||||
* Purpose: convert string to uppercase
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_upper($string)
|
||||
{
|
||||
return strtoupper($string);
|
||||
}
|
||||
|
||||
?>
|
31
libs/plugins/shared.make_timestamp.php
Normal file
31
libs/plugins/shared.make_timestamp.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_make_timestamp
|
||||
Purpose: used by other smarty functions to make a timestamp
|
||||
from a string.
|
||||
\*======================================================================*/
|
||||
function smarty_make_timestamp($string)
|
||||
{
|
||||
if(empty($string)) {
|
||||
$string = "now";
|
||||
}
|
||||
$time = strtotime($string);
|
||||
if (is_numeric($time) && $time != -1)
|
||||
return $time;
|
||||
|
||||
// is mysql timestamp format of YYYYMMDDHHMMSS?
|
||||
if (is_numeric($string) && strlen($string) == 14) {
|
||||
$time = mktime(substr($string,8,2),substr($string,10,2),substr($string,12,2),
|
||||
substr($string,4,2),substr($string,6,2),substr($string,0,4));
|
||||
|
||||
return $time;
|
||||
}
|
||||
|
||||
// can't decipher, just return it
|
||||
return $string;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
31
plugins/function.assign.php
Normal file
31
plugins/function.assign.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: function
|
||||
* Name: assign
|
||||
* Purpose: assign a value to a template variable
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_function_assign($args, &$smarty_obj)
|
||||
{
|
||||
extract($args);
|
||||
|
||||
if (empty($var)) {
|
||||
$smarty_obj->_trigger_error_msg("assign: missing 'var' parameter");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!in_array('value', array_keys($args))) {
|
||||
$smarty_obj->_trigger_error_msg("assign: missing 'value' parameter");
|
||||
return;
|
||||
}
|
||||
|
||||
$smarty_obj->assign($var, $value);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
32
plugins/function.assign_debug_info.php
Normal file
32
plugins/function.assign_debug_info.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: function
|
||||
* Name: assign_debug_info
|
||||
* Purpose: assign debug info to the template
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_function_assign_debug_info($args, &$smarty_obj)
|
||||
{
|
||||
$assigned_vars = $smarty_obj->_tpl_vars;
|
||||
ksort($assigned_vars);
|
||||
if (is_array($smarty_obj->_config[0])) {
|
||||
$config_vars = $smarty_obj->_config[0];
|
||||
ksort($config_vars);
|
||||
$smarty_obj->assign("_debug_config_keys", array_keys($config_vars));
|
||||
$smarty_obj->assign("_debug_config_vals", array_values($config_vars));
|
||||
}
|
||||
|
||||
$included_templates = $smarty_obj->_smarty_debug_info;
|
||||
|
||||
$smarty_obj->assign("_debug_keys", array_keys($assigned_vars));
|
||||
$smarty_obj->assign("_debug_vals", array_values($assigned_vars));
|
||||
|
||||
$smarty_obj->assign("_debug_tpls", $included_templates);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
63
plugins/function.counter.php
Normal file
63
plugins/function.counter.php
Normal file
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: function
|
||||
* Name: counter
|
||||
* Purpose: print out a counter value
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_function_counter($args, &$smarty_obj)
|
||||
{
|
||||
static $count = array();
|
||||
static $skipval = array();
|
||||
static $dir = array();
|
||||
static $id = "default";
|
||||
static $printval = array();
|
||||
static $assign = "";
|
||||
|
||||
extract($args);
|
||||
|
||||
if (!isset($id))
|
||||
$id = "default";
|
||||
|
||||
if (isset($start))
|
||||
$count[$id] = $start;
|
||||
else if (!isset($count[$id]))
|
||||
$count[$id]=1;
|
||||
|
||||
if (!isset($print))
|
||||
$printval[$id]=true;
|
||||
else
|
||||
$printval[$id]=$print;
|
||||
|
||||
if (!empty($assign)) {
|
||||
$printval[$id] = false;
|
||||
$smarty_obj->assign($assign, $count[$id]);
|
||||
}
|
||||
|
||||
if ($printval[$id])
|
||||
echo $count[$id];
|
||||
|
||||
if (isset($skip))
|
||||
$skipval[$id] = $skip;
|
||||
else if (empty($skipval[$id]))
|
||||
$skipval[$id] = 1;
|
||||
|
||||
if (isset($direction))
|
||||
$dir[$id] = $direction;
|
||||
else if (!isset($dir[$id]))
|
||||
$dir[$id] = "up";
|
||||
|
||||
if ($dir[$id] == "down")
|
||||
$count[$id] -= $skipval[$id];
|
||||
else
|
||||
$count[$id] += $skipval[$id];
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
51
plugins/function.fetch.php
Normal file
51
plugins/function.fetch.php
Normal file
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: function
|
||||
* Name: fetch
|
||||
* Purpose: fetch file, web or ftp data and display results
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_function_fetch($args, &$smarty_obj)
|
||||
{
|
||||
extract($args);
|
||||
|
||||
if (empty($file)) {
|
||||
$smarty_obj->_trigger_error_msg("parameter 'file' cannot be empty");
|
||||
return;
|
||||
}
|
||||
|
||||
if ($smarty_obj->security && !preg_match('!^(http|ftp)://!', $file)) {
|
||||
// make sure fetched file comes from secure directory
|
||||
foreach ($smarty_obj->secure_dir as $curr_dir) {
|
||||
if (substr(realpath($file), 0, strlen(realpath($curr_dir))) == realpath($curr_dir)) {
|
||||
$resource_is_secure = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$resource_is_secure) {
|
||||
$smarty_obj->_trigger_error_msg("(secure mode) fetch '$file' is not allowed");
|
||||
return;
|
||||
}
|
||||
if (!@is_readable($file)) {
|
||||
$smarty_obj->_trigger_error_msg("fetch cannot read file '$file'");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!empty($assign)) {
|
||||
ob_start();
|
||||
readfile($file);
|
||||
$smarty_obj->assign($assign,ob_get_contents());
|
||||
ob_end_clean();
|
||||
} else {
|
||||
readfile($file);
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
55
plugins/function.html_options.php
Normal file
55
plugins/function.html_options.php
Normal file
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: function
|
||||
* Name: html_options
|
||||
* Purpose: Prints the list of <option> tags generated from
|
||||
* the passed parameters
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_function_html_options($params, &$smarty)
|
||||
{
|
||||
$print_result = true;
|
||||
|
||||
extract($params);
|
||||
|
||||
$html_result = '';
|
||||
|
||||
settype($selected, 'array');
|
||||
if (isset($options)) {
|
||||
settype($options, 'array');
|
||||
foreach ($options as $key => $value) {
|
||||
$html_result .= "<option value=\"$key\"";
|
||||
if (in_array($key, $selected))
|
||||
$html_result .= " selected=\"selected\"";
|
||||
$html_result .= ">$value</option>\n";
|
||||
}
|
||||
} else {
|
||||
settype($output, 'array');
|
||||
settype($values, 'array');
|
||||
for ($i = 0; $i < count($output); $i++) {
|
||||
/* By default, check value against $selected */
|
||||
$sel_check = $values[$i];
|
||||
$html_result .= "<option";
|
||||
if ($i < count($values))
|
||||
$html_result .= " value=\"".$values[$i]."\"";
|
||||
else
|
||||
$sel_check = $output[$i]; /* if more outputs than values, then
|
||||
check output against $selected */
|
||||
if (in_array($sel_check, $selected))
|
||||
$html_result .= " selected";
|
||||
$html_result .= ">".$output[$i]."</option>\n";
|
||||
}
|
||||
}
|
||||
|
||||
if ($print_result)
|
||||
print $html_result;
|
||||
else
|
||||
return $html_result;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
182
plugins/function.html_select_date.php
Normal file
182
plugins/function.html_select_date.php
Normal file
@@ -0,0 +1,182 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: function
|
||||
* Name: html_select_date
|
||||
* Purpose: Prints the dropdowns for date selection.
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
include_once dirname(__FILE__) . '/.make_timestamp.php';
|
||||
include_once dirname(__FILE__) . '/function.html_options.php';
|
||||
function smarty_function_html_select_date($params, &$smarty)
|
||||
{
|
||||
/* Default values. */
|
||||
$prefix = "Date_";
|
||||
$time = time();
|
||||
$start_year = strftime("%Y");
|
||||
$end_year = $start_year;
|
||||
$display_days = true;
|
||||
$display_months = true;
|
||||
$display_years = true;
|
||||
$month_format = "%B";
|
||||
$day_format = "%02d";
|
||||
$year_as_text = false;
|
||||
/* Display years in reverse order? Ie. 2000,1999,.... */
|
||||
$reverse_years = false;
|
||||
/* Should the select boxes be part of an array when returned from PHP?
|
||||
e.g. setting it to "birthday", would create "birthday[Day]",
|
||||
"birthday[Month]" & "birthday[Year]". Can be combined with prefix */
|
||||
$field_array = null;
|
||||
/* <select size>'s of the different <select> tags.
|
||||
If not set, uses default dropdown. */
|
||||
$day_size = null;
|
||||
$month_size = null;
|
||||
$year_size = null;
|
||||
/* Unparsed attributes common to *ALL* the <select>/<input> tags.
|
||||
An example might be in the template: all_extra ='class ="foo"'. */
|
||||
$all_extra = null;
|
||||
/* Separate attributes for the tags. */
|
||||
$day_extra = null;
|
||||
$month_extra = null;
|
||||
$year_extra = null;
|
||||
/* Order in which to display the fields.
|
||||
"D" -> day, "M" -> month, "Y" -> year. */
|
||||
$field_order = 'MDY';
|
||||
/* String printed between the different fields. */
|
||||
$field_separator = "\n";
|
||||
|
||||
extract($params);
|
||||
|
||||
$time = smarty_make_timestamp($time);
|
||||
$field_order = strtoupper($field_order);
|
||||
|
||||
$html_result = $month_result = $day_result = $year_result = "";
|
||||
|
||||
if ($display_months) {
|
||||
$month_names = array();
|
||||
|
||||
for ($i = 1; $i <= 12; $i++)
|
||||
$month_names[] = strftime($month_format, mktime(0, 0, 0, $i, 1, 2000));
|
||||
|
||||
$month_result .= '<select name=';
|
||||
if (null !== $field_array){
|
||||
$month_result .= '"' . $field_array . '[' . $prefix . 'Month]"';
|
||||
} else {
|
||||
$month_result .= '"' . $prefix . 'Month"';
|
||||
}
|
||||
if (null !== $month_size){
|
||||
$month_result .= ' size="' . $month_size . '"';
|
||||
}
|
||||
if (null !== $month_extra){
|
||||
$month_result .= ' ' . $month_extra;
|
||||
}
|
||||
if (null !== $all_extra){
|
||||
$month_result .= ' ' . $all_extra;
|
||||
}
|
||||
$month_result .= '>'."\n";
|
||||
$month_result .= smarty_function_html_options(array('output' => $month_names,
|
||||
'values' => range(1, 12),
|
||||
'selected' => strftime("%m", $time),
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$month_result .= '</select>';
|
||||
}
|
||||
|
||||
if ($display_days) {
|
||||
$days = range(1, 31);
|
||||
for ($i = 0; $i < count($days); $i++)
|
||||
$days[$i] = sprintf($day_format, $days[$i]);
|
||||
|
||||
$day_result .= '<select name=';
|
||||
if (null !== $field_array){
|
||||
$day_result .= '"' . $field_array . '[' . $prefix . 'Day]"';
|
||||
} else {
|
||||
$day_result .= '"' . $prefix . 'Day"';
|
||||
}
|
||||
if (null !== $day_size){
|
||||
$day_result .= ' size="' . $day_size . '"';
|
||||
}
|
||||
if (null !== $all_extra){
|
||||
$day_result .= ' ' . $all_extra;
|
||||
}
|
||||
if (null !== $day_extra){
|
||||
$day_result .= ' ' . $day_extra;
|
||||
}
|
||||
$day_result .= '>'."\n";
|
||||
$day_result .= smarty_function_html_options(array('output' => $days,
|
||||
'values' => range(1, 31),
|
||||
'selected' => strftime("%d", $time),
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$day_result .= '</select>';
|
||||
}
|
||||
|
||||
if ($display_years) {
|
||||
if (null !== $field_array){
|
||||
$year_name = $field_array . '[' . $prefix . 'Year]';
|
||||
} else {
|
||||
$year_name = $prefix . 'Year';
|
||||
}
|
||||
if ($year_as_text) {
|
||||
$year_result .= '<input type="text" name="' . $year_name . '" value="'.strftime('%Y', $time).'" size="4" maxlength="4"';
|
||||
if (null !== $all_extra){
|
||||
$year_result .= ' ' . $all_extra;
|
||||
}
|
||||
if (null !== $year_extra){
|
||||
$year_result .= ' ' . $year_extra;
|
||||
}
|
||||
$year_result .= '>';
|
||||
} else {
|
||||
$years = range((int)$start_year, (int)$end_year);
|
||||
if ($reverse_years) {
|
||||
rsort($years, SORT_NUMERIC);
|
||||
}
|
||||
|
||||
$year_result .= '<select name="' . $year_name . '"';
|
||||
if (null !== $year_size){
|
||||
$year_result .= ' size="' . $year_size . '"';
|
||||
}
|
||||
if (null !== $all_extra){
|
||||
$year_result .= ' ' . $all_extra;
|
||||
}
|
||||
if (null !== $year_extra){
|
||||
$year_result .= ' ' . $year_extra;
|
||||
}
|
||||
$year_result .= '>'."\n";
|
||||
$year_result .= smarty_function_html_options(array('output' => $years,
|
||||
'values' => $years,
|
||||
'selected' => strftime("%Y", $time),
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$year_result .= '</select>';
|
||||
}
|
||||
}
|
||||
|
||||
// Loop thru the field_order field
|
||||
for ($i = 0; $i <= 2; $i++){
|
||||
$c = substr($field_order, $i, 1);
|
||||
switch ($c){
|
||||
case 'D':
|
||||
$html_result .= $day_result;
|
||||
break;
|
||||
|
||||
case 'M':
|
||||
$html_result .= $month_result;
|
||||
break;
|
||||
|
||||
case 'Y':
|
||||
$html_result .= $year_result;
|
||||
break;
|
||||
}
|
||||
// Add the field seperator
|
||||
$html_result .= $field_separator;
|
||||
}
|
||||
|
||||
print $html_result;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
114
plugins/function.html_select_time.php
Normal file
114
plugins/function.html_select_time.php
Normal file
@@ -0,0 +1,114 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: function
|
||||
* Name: html_select_time
|
||||
* Purpose: Prints the dropdowns for time selection
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
include_once dirname(__FILE__) . '/.make_timestamp.php';
|
||||
include_once dirname(__FILE__) . '/function.html_options.php';
|
||||
function smarty_function_html_select_time($params, &$smarty)
|
||||
{
|
||||
/* Default values. */
|
||||
$prefix = "Time_";
|
||||
$time = time();
|
||||
$display_hours = true;
|
||||
$display_minutes = true;
|
||||
$display_seconds = true;
|
||||
$display_meridian = true;
|
||||
$use_24_hours = true;
|
||||
$minute_interval = 1;
|
||||
$second_interval = 1;
|
||||
/* Should the select boxes be part of an array when returned from PHP?
|
||||
e.g. setting it to "birthday", would create "birthday[Hour]",
|
||||
"birthday[Minute]", "birthday[Seconds]" & "birthday[Meridian]".
|
||||
Can be combined with prefix. */
|
||||
$field_array = null;
|
||||
|
||||
extract($params);
|
||||
|
||||
$time = smarty_make_timestamp($time);
|
||||
|
||||
$html_result = '';
|
||||
|
||||
if ($display_hours) {
|
||||
$hours = $use_24_hours ? range(0, 23) : range(1, 12);
|
||||
$hour_fmt = $use_24_hours ? '%H' : '%I';
|
||||
for ($i = 0; $i < count($hours); $i++)
|
||||
$hours[$i] = sprintf('%02d', $hours[$i]);
|
||||
$html_result .= '<select name=';
|
||||
if (null !== $field_array) {
|
||||
$html_result .= '"' . $field_array . '[' . $prefix . 'Hour]">'."\n";
|
||||
} else {
|
||||
$html_result .= '"' . $prefix . 'Hour">'."\n";
|
||||
}
|
||||
$html_result .= smarty_function_html_options(array('output' => $hours,
|
||||
'values' => $hours,
|
||||
'selected' => strftime($hour_fmt, $time),
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$html_result .= "</select>\n";
|
||||
}
|
||||
|
||||
if ($display_minutes) {
|
||||
$all_minutes = range(0, 59);
|
||||
for ($i = 0; $i < count($all_minutes); $i+= $minute_interval)
|
||||
$minutes[] = sprintf('%02d', $all_minutes[$i]);
|
||||
$selected = intval(floor(strftime('%M', $time) / $minute_interval) * $minute_interval);
|
||||
$html_result .= '<select name=';
|
||||
if (null !== $field_array) {
|
||||
$html_result .= '"' . $field_array . '[' . $prefix . 'Minute]">'."\n";
|
||||
} else {
|
||||
$html_result .= '"' . $prefix . 'Minute">'."\n";
|
||||
}
|
||||
$html_result .= smarty_function_html_options(array('output' => $minutes,
|
||||
'values' => $minutes,
|
||||
'selected' => $selected,
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$html_result .= "</select>\n";
|
||||
}
|
||||
|
||||
if ($display_seconds) {
|
||||
$all_seconds = range(0, 59);
|
||||
for ($i = 0; $i < count($all_seconds); $i+= $second_interval)
|
||||
$seconds[] = sprintf('%02d', $all_seconds[$i]);
|
||||
$selected = intval(floor(strftime('%S', $time) / $second_interval) * $second_interval);
|
||||
$html_result .= '<select name=';
|
||||
if (null !== $field_array) {
|
||||
$html_result .= '"' . $field_array . '[' . $prefix . 'Second]">'."\n";
|
||||
} else {
|
||||
$html_result .= '"' . $prefix . 'Second">'."\n";
|
||||
}
|
||||
$html_result .= smarty_function_html_options(array('output' => $seconds,
|
||||
'values' => $seconds,
|
||||
'selected' => $selected,
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$html_result .= "</select>\n";
|
||||
}
|
||||
|
||||
if ($display_meridian && !$use_24_hours) {
|
||||
$html_result .= '<select name=';
|
||||
if (null !== $field_array) {
|
||||
$html_result .= '"' . $field_array . '[' . $prefix . 'Meridian]">'."\n";
|
||||
} else {
|
||||
$html_result .= '"' . $prefix . 'Meridian">'."\n";
|
||||
}
|
||||
$html_result .= smarty_function_html_options(array('output' => array('AM', 'PM'),
|
||||
'values' => array('am', 'pm'),
|
||||
'selected' => strtolower(strftime('%p', $time)),
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$html_result .= "</select>\n";
|
||||
}
|
||||
|
||||
print $html_result;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
73
plugins/function.math.php
Normal file
73
plugins/function.math.php
Normal file
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: function
|
||||
* Name: math
|
||||
* Purpose: handle math computations in template
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_function_math($args, &$smarty_obj)
|
||||
{
|
||||
// be sure equation parameter is present
|
||||
if (empty($args["equation"])) {
|
||||
$smarty_obj->_trigger_error_msg("math: missing equation parameter");
|
||||
return;
|
||||
}
|
||||
|
||||
$equation = $args["equation"];
|
||||
|
||||
// make sure parenthesis are balanced
|
||||
if (substr_count($equation,"(") != substr_count($equation,")")) {
|
||||
$smarty_obj->_trigger_error_msg("math: unbalanced parenthesis");
|
||||
return;
|
||||
}
|
||||
|
||||
// match all vars in equation, make sure all are passed
|
||||
preg_match_all("![a-zA-Z][a-zA-Z0-9]*!",$equation, $match);
|
||||
$allowed_funcs = array('int','abs','ceil','cos','exp','floor','log','log10',
|
||||
'max','min','pi','pow','rand','round','sin','sqrt','srand','tan');
|
||||
|
||||
foreach($match[0] as $curr_var) {
|
||||
if (!in_array($curr_var,array_keys($args)) && !in_array($curr_var, $allowed_funcs)) {
|
||||
$smarty_obj->_trigger_error_msg("math: parameter $curr_var not passed as argument");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
foreach($args as $key => $val) {
|
||||
if ($key != "equation" && $key != "format" && $key != "assign") {
|
||||
// make sure value is not empty
|
||||
if (strlen($val)==0) {
|
||||
$smarty_obj->_trigger_error_msg("math: parameter $key is empty");
|
||||
return;
|
||||
}
|
||||
if (!is_numeric($val)) {
|
||||
$smarty_obj->_trigger_error_msg("math: parameter $key: is not numeric");
|
||||
return;
|
||||
}
|
||||
$equation = preg_replace("/\b$key\b/",$val, $equation);
|
||||
}
|
||||
}
|
||||
|
||||
eval("\$smarty_math_result = ".$equation.";");
|
||||
|
||||
if (empty($args["format"])) {
|
||||
if (empty($args["assign"])) {
|
||||
echo $smarty_math_result;
|
||||
} else {
|
||||
$smarty_obj->assign($args["assign"],$smarty_math_result);
|
||||
}
|
||||
} else {
|
||||
if (empty($args["assign"])){
|
||||
printf($args["format"],$smarty_math_result);
|
||||
} else {
|
||||
$smarty_obj->assign($assign,sprintf($args["format"],$smarty_math_result));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
76
plugins/function.popup.php
Normal file
76
plugins/function.popup.php
Normal file
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: function
|
||||
* Name: popup
|
||||
* Purpose: make text pop up in windows via overlib
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_function_popup($args, &$smarty_obj)
|
||||
{
|
||||
extract($args);
|
||||
|
||||
if (empty($text) && !isset($inarray) && empty($function)) {
|
||||
$smarty_obj->_trigger_error_msg("overlib: attribute 'text' or 'inarray' or 'function' required");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (empty($trigger)) { $trigger = "onMouseOver"; }
|
||||
|
||||
echo $trigger.'="return overlib(\''.str_replace("'","\'",$text).'\'';
|
||||
if ($sticky) { echo ",STICKY"; }
|
||||
if (!empty($caption)) { echo ",CAPTION,'".str_replace("'","\'",$caption)."'"; }
|
||||
if (!empty($fgcolor)) { echo ",FGCOLOR,'$fgcolor'"; }
|
||||
if (!empty($bgcolor)) { echo ",BGCOLOR,'$bgcolor'"; }
|
||||
if (!empty($textcolor)) { echo ",TEXTCOLOR,'$textcolor'"; }
|
||||
if (!empty($capcolor)) { echo ",CAPCOLOR,'$capcolor'"; }
|
||||
if (!empty($closecolor)) { echo ",CLOSECOLOR,'$closecolor'"; }
|
||||
if (!empty($textfont)) { echo ",TEXTFONT,'$textfont'"; }
|
||||
if (!empty($captionfont)) { echo ",CAPTIONFONT,'$captionfont'"; }
|
||||
if (!empty($closefont)) { echo ",CLOSEFONT,'$closefont'"; }
|
||||
if (!empty($textsize)) { echo ",TEXTSIZE,$textsize"; }
|
||||
if (!empty($captionsize)) { echo ",CAPTIONSIZE,$captionsize"; }
|
||||
if (!empty($closesize)) { echo ",CLOSESIZE,$closesize"; }
|
||||
if (!empty($width)) { echo ",WIDTH,$width"; }
|
||||
if (!empty($height)) { echo ",HEIGHT,$height"; }
|
||||
if (!empty($left)) { echo ",LEFT"; }
|
||||
if (!empty($right)) { echo ",RIGHT"; }
|
||||
if (!empty($center)) { echo ",CENTER"; }
|
||||
if (!empty($above)) { echo ",ABOVE"; }
|
||||
if (!empty($below)) { echo ",BELOW"; }
|
||||
if (isset($border)) { echo ",BORDER,$border"; }
|
||||
if (isset($offsetx)) { echo ",OFFSETX,$offsetx"; }
|
||||
if (isset($offsety)) { echo ",OFFSETY,$offsety"; }
|
||||
if (!empty($fgbackground)) { echo ",FGBACKGROUND,'$fgbackground'"; }
|
||||
if (!empty($bgbackground)) { echo ",BGBACKGROUND,'$bgbackground'"; }
|
||||
if (!empty($closetext)) { echo ",CLOSETEXT,'".str_replace("'","\'",$closetext)."'"; }
|
||||
if (!empty($noclose)) { echo ",NOCLOSE"; }
|
||||
if (!empty($status)) { echo ",STATUS,'".str_replace("'","\'",$status)."'"; }
|
||||
if (!empty($autostatus)) { echo ",AUTOSTATUS"; }
|
||||
if (!empty($autostatuscap)) { echo ",AUTOSTATUSCAP"; }
|
||||
if (isset($inarray)) { echo ",INARRAY,'$inarray'"; }
|
||||
if (isset($caparray)) { echo ",CAPARRAY,'$caparray'"; }
|
||||
if (!empty($capicon)) { echo ",CAPICON,'$capicon'"; }
|
||||
if (!empty($snapx)) { echo ",SNAPX,$snapx"; }
|
||||
if (!empty($snapy)) { echo ",SNAPY,$snapy"; }
|
||||
if (isset($fixx)) { echo ",FIXX,$fixx"; }
|
||||
if (isset($fixy)) { echo ",FIXY,$fixy"; }
|
||||
if (!empty($background)) { echo ",BACKGROUND,'$background'"; }
|
||||
if (!empty($padx)) { echo ",PADX,$padx"; }
|
||||
if (!empty($pady)) { echo ",PADY,$pady"; }
|
||||
if (!empty($fullhtml)) { echo ",FULLHTML"; }
|
||||
if (!empty($frame)) { echo ",FRAME,'$frame'"; }
|
||||
if (isset($timeout)) { echo ",TIMEOUT,$timeout"; }
|
||||
if (!empty($function)) { echo ",FUNCTION,'$function'"; }
|
||||
if (isset($delay)) { echo ",DELAY,$delay"; }
|
||||
if (!empty($hauto)) { echo ",HAUTO"; }
|
||||
if (!empty($vauto)) { echo ",VAUTO"; }
|
||||
echo ');" onMouseOut="nd();"';
|
||||
return;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
23
plugins/function.popup_init.php
Normal file
23
plugins/function.popup_init.php
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: function
|
||||
* Name: popup_init
|
||||
* Purpose: initialize overlib
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_function_popup_init($args, &$smarty_obj)
|
||||
{
|
||||
// be sure to place overlib.js where Smarty can locate it.
|
||||
// overlib.js came with the distribution of Smarty.
|
||||
echo '<DIV ID="overDiv" STYLE="position:absolute; visibility:hidden; z-index:1000;"></DIV>'."\n".'<SCRIPT LANGUAGE=javascript>'."\n".'<!--'."\n";
|
||||
readfile(SMARTY_DIR."overlib.js",1);
|
||||
echo '// -->'."\n".'</SCRIPT>'."\n";
|
||||
return;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
16
plugins/modifier.capitalize.php
Normal file
16
plugins/modifier.capitalize.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: capitalize
|
||||
* Purpose: capitalize words in the string
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_capitalize($string)
|
||||
{
|
||||
return ucwords($string);
|
||||
}
|
||||
|
||||
?>
|
21
plugins/modifier.count_characters.php
Normal file
21
plugins/modifier.count_characters.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: count_characteres
|
||||
* Purpose: count the number of characters in a text
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_count_characters($string, $include_spaces = false)
|
||||
{
|
||||
if ($include_spaces)
|
||||
return(strlen($string));
|
||||
|
||||
return preg_match_all("/[^\s]/",$string, $match);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
19
plugins/modifier.count_paragraphs.php
Normal file
19
plugins/modifier.count_paragraphs.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: count_paragraphs
|
||||
* Purpose: count the number of paragraphs in a text
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_count_paragraphs($string)
|
||||
{
|
||||
// count \r or \n characters
|
||||
return count(preg_split('/[\r\n]+/', $string));
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
19
plugins/modifier.count_sentences.php
Normal file
19
plugins/modifier.count_sentences.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: count_sentences
|
||||
* Purpose: count the number of sentences in a text
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_count_sentences($string)
|
||||
{
|
||||
// find periods with a word before but not after.
|
||||
return preg_match_all('/[^\s]\.(?!\w)/', $string, $match);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
23
plugins/modifier.count_words.php
Normal file
23
plugins/modifier.count_words.php
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: count_words
|
||||
* Purpose: count the number of words in a text
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_count_words($string)
|
||||
{
|
||||
// split text by ' ',\r,\n,\f,\t
|
||||
$split_array = preg_split('/\s+/',$string);
|
||||
// count matches that contain alphanumerics
|
||||
$word_count = preg_grep('/[a-zA-Z0-9]/', $split_array);
|
||||
|
||||
return count($word_count);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
18
plugins/modifier.date_format.php
Normal file
18
plugins/modifier.date_format.php
Normal file
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: date_format
|
||||
* Purpose: format datestamps via strftime
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_date_format($string, $format="%b %e, %Y")
|
||||
{
|
||||
return strftime($format, smarty_make_timestamp($string));
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
37
plugins/modifier.debug_print_var.php
Normal file
37
plugins/modifier.debug_print_var.php
Normal file
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: debug_print_var
|
||||
* Purpose: formats variable contents for display in the console
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_debug_print_var($var, $depth = 0, $length = 40)
|
||||
{
|
||||
if (is_array($var)) {
|
||||
$results = "<b>Array (".count($var).")</b>";
|
||||
foreach ($var as $curr_key => $curr_val) {
|
||||
$return = smarty_modifier_debug_print_var($curr_val, $depth+1);
|
||||
$results .= '<br>\r'.str_repeat(' ', $depth*2)."<b>$curr_key</b> => $return";
|
||||
}
|
||||
return $results;
|
||||
} else {
|
||||
if (empty($var)) {
|
||||
return '<i>empty</i>';
|
||||
}
|
||||
if (strlen($var) > $length ) {
|
||||
$results = substr($var, 0, $length-3).'...';
|
||||
} else {
|
||||
$results = $var;
|
||||
}
|
||||
$results = preg_replace("![\r\t\n]!", " ", $results);
|
||||
$results = htmlspecialchars(htmlspecialchars($results));
|
||||
return $results;
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
21
plugins/modifier.default.php
Normal file
21
plugins/modifier.default.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: default
|
||||
* Purpose: designate default value for empty variables
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_default($string, $default = '')
|
||||
{
|
||||
if (empty($string))
|
||||
return $default;
|
||||
else
|
||||
return $string;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
31
plugins/modifier.escape.php
Normal file
31
plugins/modifier.escape.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* ------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: escape
|
||||
* Purpose: Escape the string according to escapement type
|
||||
* ------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_escape($string, $esc_type = 'html')
|
||||
{
|
||||
switch ($esc_type) {
|
||||
case 'html':
|
||||
return htmlspecialchars($string, ENT_QUOTES);
|
||||
|
||||
case 'url':
|
||||
return urlencode($string);
|
||||
|
||||
case 'quotes':
|
||||
// escape unescaped single quotes
|
||||
return preg_replace("%(?<!\\\\)'%", "\\'", $string);
|
||||
|
||||
default:
|
||||
return $string;
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
16
plugins/modifier.lower.php
Normal file
16
plugins/modifier.lower.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: lower
|
||||
* Purpose: convert string to lowercase
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_lower($string)
|
||||
{
|
||||
return strtolower($string);
|
||||
}
|
||||
|
||||
?>
|
18
plugins/modifier.regex_replace.php
Normal file
18
plugins/modifier.regex_replace.php
Normal file
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: regex_replace
|
||||
* Purpose: regular epxression search/replace
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_regex_replace($string, $search, $replace)
|
||||
{
|
||||
return preg_replace($search, $replace, $string);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
18
plugins/modifier.replace.php
Normal file
18
plugins/modifier.replace.php
Normal file
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: replace
|
||||
* Purpose: simple search/replace
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_replace($string, $search, $replace)
|
||||
{
|
||||
return str_replace($search, $replace, $string);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
19
plugins/modifier.spacify.php
Normal file
19
plugins/modifier.spacify.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: spacify
|
||||
* Purpose: add spaces between characters in a string
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_spacify($string, $spacify_char = ' ')
|
||||
{
|
||||
return implode($spacify_char,
|
||||
preg_split('//', $string, -1, PREG_SPLIT_NO_EMPTY));
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
18
plugins/modifier.string_format.php
Normal file
18
plugins/modifier.string_format.php
Normal file
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: string_format
|
||||
* Purpose: format strings via sprintf
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_string_format($string, $format)
|
||||
{
|
||||
return sprintf($format, $string);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
21
plugins/modifier.strip_tags.php
Normal file
21
plugins/modifier.strip_tags.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: strip_tags
|
||||
* Purpose: strip html tags from text
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_strip_tags($string, $replace_with_space = true)
|
||||
{
|
||||
if ($replace_with_space)
|
||||
return preg_replace('!<[^>]*?>!', ' ', $string);
|
||||
else
|
||||
return strip_tags($string);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
33
plugins/modifier.truncate.php
Normal file
33
plugins/modifier.truncate.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: truncate
|
||||
* Purpose: Truncate a string to a certain length if necessary,
|
||||
* optionally splitting in the middle of a word, and
|
||||
* appending the $etc string.
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_truncate($string, $length = 80, $etc = '...',
|
||||
$break_words = false)
|
||||
{
|
||||
if ($length == 0)
|
||||
return '';
|
||||
|
||||
if (strlen($string) > $length) {
|
||||
$length -= strlen($etc);
|
||||
$fragment = substr($string, 0, $length+1);
|
||||
if ($break_words)
|
||||
$fragment = substr($fragment, 0, -1);
|
||||
else
|
||||
$fragment = preg_replace('/\s+(\S+)?$/', '', $fragment);
|
||||
return $fragment.$etc;
|
||||
} else
|
||||
return $string;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
16
plugins/modifier.upper.php
Normal file
16
plugins/modifier.upper.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* Type: modifier
|
||||
* Name: upper
|
||||
* Purpose: convert string to uppercase
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_upper($string)
|
||||
{
|
||||
return strtoupper($string);
|
||||
}
|
||||
|
||||
?>
|
31
plugins/shared.make_timestamp.php
Normal file
31
plugins/shared.make_timestamp.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
/*======================================================================*\
|
||||
Function: smarty_make_timestamp
|
||||
Purpose: used by other smarty functions to make a timestamp
|
||||
from a string.
|
||||
\*======================================================================*/
|
||||
function smarty_make_timestamp($string)
|
||||
{
|
||||
if(empty($string)) {
|
||||
$string = "now";
|
||||
}
|
||||
$time = strtotime($string);
|
||||
if (is_numeric($time) && $time != -1)
|
||||
return $time;
|
||||
|
||||
// is mysql timestamp format of YYYYMMDDHHMMSS?
|
||||
if (is_numeric($string) && strlen($string) == 14) {
|
||||
$time = mktime(substr($string,8,2),substr($string,10,2),substr($string,12,2),
|
||||
substr($string,4,2),substr($string,6,2),substr($string,0,4));
|
||||
|
||||
return $time;
|
||||
}
|
||||
|
||||
// can't decipher, just return it
|
||||
return $string;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
@@ -1,5 +1,5 @@
|
||||
{config_load file=test.conf section="setup"}
|
||||
{include file=header.tpl title=foo}
|
||||
{include file="header.tpl" title=foo}
|
||||
|
||||
<PRE>
|
||||
|
||||
|
Reference in New Issue
Block a user