Compare commits

...

39 Commits

Author SHA1 Message Date
Clemens Schwaighofer
799cff4e00 Update config base files 2016-07-12 17:55:10 +09:00
Clemens Schwaighofer
72ef4a24c5 Check in neutral config.inc file before we set it to update ignore 2016-07-12 17:42:54 +09:00
Clemens Schwaighofer
0f44aaf3e4 Update config.inc file 2016-07-12 17:37:58 +09:00
Clemens Schwaighofer
795f69050a Update edit user base, config template, class basic
Class.Basic
add general 8 char hash wrapper function (for adler32, fnv, jooa)

Edit Users
add first/last name to the basic user info

Config template
Update config template from current working template
2016-07-12 10:44:53 +09:00
Clemens Schwaighofer
1c5bb8aebe Make db debug var public 2016-06-14 13:22:08 +09:00
Clemens Schwaighofer
36f19e64d0 Add new correct mobile email detect 2016-05-17 12:22:36 +09:00
Clemens Schwaighofer
19a1081197 Add missing mobile domains, fixup pc naming
PC type is now pc_html
pc is only for simple
2016-05-16 15:46:26 +09:00
Clemens Schwaighofer
45974a9e30 Set detailed japanese mobile phone carrier types 2016-05-12 14:20:51 +09:00
Clemens Schwaighofer
f1247efd34 Fix class declarations
old class declarations for constructors replaced with correct
"__construct" part.
2016-03-14 11:59:42 +09:00
Clemens Schwaighofer
c38346b97c Comment update 2016-02-22 11:03:09 +09:00
Clemens Schwaighofer
3c26adb493 Smarty 3.1 fix for options html 2016-01-25 16:16:36 +09:00
Clemens Schwaighofer
4458f366f9 Bug fixes for data insert with interval fields in form generate
- if interval is emtpy set NULL
- do some clean up for pk return data from the form/db array io part
2016-01-07 13:06:47 +09:00
Clemens Schwaighofer
805330638a Bug fix in DB IO for setting _db_error public
_db_error method was private, but was called in DB.Array.IO, so it had
to be set public again.

removed debug message from Form Generate class
2016-01-07 12:44:05 +09:00
Clemens Schwaighofer
86cd04f862 Fix bug in regex check in form generate 2016-01-07 12:40:05 +09:00
Clemens Schwaighofer
a182834985 Remove old SVN $id from edit new template 2016-01-06 11:19:05 +09:00
Clemens Schwaighofer
0ce1432513 Bug fix for spl autoload table array part
arrays cannot be loaded with the auto load method, fallback to old load
method
2016-01-05 18:36:26 +09:00
Clemens Schwaighofer
a447fc2ef6 Update auto set for HTML title, PHP 7.0 class fixes
Auto append current page file name to the HTML auto title.

Fix class declaration in gettext reader for PHP 7.0
2015-12-16 11:08:51 +09:00
Clemens Schwaighofer
8160d05d25 Add HTML print date+time method
Function prints out HTML date time method with auto javacsript adjust
for leap years, month day length, etc.
2015-11-16 10:17:55 +09:00
Clemens Schwaighofer
647dd52c92 Remove all include/require parts from classes and use autoload function
Any include or require call is removed and now we use only _spl_autoload
in any class external file include call.
There are three new _DIR vars: LIBDIR, SMARTYDIR, TABLEARRAYDIR that are
based on the __DIR__ and not current working directory.
2015-11-11 14:19:25 +09:00
Clemens Schwaighofer
b2fdbc0571 Better autoload for required files
Add autoload function to main config file.
Add better DIR declarations in config file based on __DIR__ for libs &
smarty classes.
Load all class files with the new autoload function in header & direct
file calls.
2015-11-11 14:14:06 +09:00
Clemens Schwaighofer
5a1c9f87c2 Update core class include style and smarty test page
All libs/classes have an loop to find the needed previous class file.
Smarty test page included.
2015-11-11 11:08:41 +09:00
Clemens Schwaighofer
aa73634d95 Update Smarty to 3.1.27 2015-11-09 18:22:56 +09:00
Clemens Schwaighofer
b831924f58 Add override string for sha1 short function to use sha1 instead of crc32b wrapper 2015-11-06 16:53:55 +09:00
Clemens Schwaighofer
ae1ef182ef Update Core libs to avoid notice errors, add debug override switch
$DEBUG_ALL_OVERRIDE added to not override the set
$DEBUG_ALL/$PRINT_ALL/etc switches on one script.

Fix various notice bugs on very strict PHP setups.
2015-11-06 11:43:01 +09:00
Clemens Schwaighofer
d67a4231c3 Add README file 2015-10-29 18:18:32 +09:00
Clemens Schwaighofer
64dbe31898 TimeString function: remove leading 0 for microseconds 2015-10-28 18:41:12 +09:00
Clemens Schwaighofer
75c809381a TimeString format: Return micro time if all other data is emtpy
If micro time is off, but we have no other data, then return the micro
time or 0 ms if none
2015-10-21 16:26:31 +09:00
Clemens Schwaighofer
6e81dc5f33 Add soba.tokyo.tequila.jp as db connect host 2015-09-18 10:41:19 +09:00
Clemens Schwaighofer
c4c3b68ec7 Update core SQL tables with correct default time
now() has been replaced with clock_timestamp() to get accurarte create
date and update date on multiple updates
2015-09-09 13:52:50 +09:00
Clemens Schwaighofer
b4d9b061af Check that db execute data is in array format
For prepared query, check that the data is in array format
2015-06-16 13:44:05 +09:00
Clemens Schwaighofer
947497767d Update to debug javascript
Set debug javascript flag in header inc and then set the variable in the
main body templates
2015-04-24 11:06:16 +09:00
Clemens Schwaighofer
57fb0b808d Add debug and firebug javascript to all main templates
debug has flag to turn off all console.* methods
firebug has override if console.* are missing
2015-04-24 10:16:48 +09:00
Clemens Schwaighofer
2f27bd1537 Add proper sync file template 2015-03-26 11:34:01 +09:00
Clemens Schwaighofer
474d6810f4 JQuery library update, class test update
Add test for time to string and string to time convert functions
2015-03-26 11:26:39 +09:00
Clemens Schwaighofer
54521c0e2d Add missing documentation for new string to time method 2015-03-12 10:32:17 +09:00
Clemens Schwaighofer
0dc53ee214 Add reverse time string convert method
StringTime converts a TimeStringFormat string back to a timestamp
2015-03-12 10:30:15 +09:00
Clemens Schwaighofer
c1dca67176 Update to core classes, see detail below
- config.inc: add define for show/not show all errors when parsning
  through Error.Handling.inc with SHOW_ALL_ERRORS
- Error.Handling.inc: check php error level and do not show ones that
  are not flagged unless SHOW_ALL_ERRORS is set to true
- db_pgsql.inc for fetch array, call the internal wrapper method, not
  the pg method directly
- db_pgsql_pdo.inc: test insert for alternative with pdo lib instead of
  php internal postgresql interface
- Class.DB.IO.inc: on prepared check if cursor exist before returing
  inserted id in INSERT queries. fail if no insert id could be aquired
  if there was no cursor (or other error)
- Class.Basic.inc: rewrite Time to string method for speed up and
  removal of old php microtime format
2015-03-05 16:59:05 +09:00
Clemens Schwaighofer
49835eedfb Update Smarty to 3.1.21
- add missing block.tphp, block.textformat.php, function.popup.php,
  function.popup_init.php
- update function in function.html_checkboxes.php,
  function.html_options.php
2014-12-11 13:06:30 +09:00
Clemens Schwaighofer
79e3c052e2 Update pChart to 2.1.4, fix small bug in Basic class
For the host name set, if there is no data in the HTTP_HOST var, then
set it to NA instead. Also default set to port 80 if no port info could
be found.
2014-12-11 11:56:18 +09:00
363 changed files with 53114 additions and 23273 deletions

View File

@@ -4,10 +4,10 @@
CREATE OR REPLACE FUNCTION set_generic() RETURNS TRIGGER AS ' CREATE OR REPLACE FUNCTION set_generic() RETURNS TRIGGER AS '
BEGIN BEGIN
IF TG_OP = ''INSERT'' THEN IF TG_OP = ''INSERT'' THEN
NEW.date_created := ''now''; NEW.date_created := clock_timestamp();
NEW.user_created := current_user; NEW.user_created := current_user;
ELSIF TG_OP = ''UPDATE'' THEN ELSIF TG_OP = ''UPDATE'' THEN
NEW.date_updated := ''now''; NEW.date_updated := clock_timestamp();
NEW.user_updated := current_user; NEW.user_updated := current_user;
END IF; END IF;
RETURN NEW; RETURN NEW;

View File

@@ -9,7 +9,7 @@
-- DROP TABLE edit_generic; -- DROP TABLE edit_generic;
CREATE TABLE edit_generic ( CREATE TABLE edit_generic (
eg_status INT, eg_status INT,
date_created TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP, date_created TIMESTAMP WITHOUT TIME ZONE DEFAULT clock_timestamp(),
date_updated TIMESTAMP WITHOUT TIME ZONE, date_updated TIMESTAMP WITHOUT TIME ZONE,
user_created VARCHAR(25) DEFAULT CURRENT_USER, user_created VARCHAR(25) DEFAULT CURRENT_USER,
user_updated VARCHAR(25) user_updated VARCHAR(25)

View File

@@ -9,7 +9,7 @@
-- DROP TABLE edit_generic; -- DROP TABLE edit_generic;
CREATE TABLE generic ( CREATE TABLE generic (
row_status INT, row_status INT,
date_created TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP, date_created TIMESTAMP WITHOUT TIME ZONE DEFAULT clock_timestamp(),
date_updated TIMESTAMP WITHOUT TIME ZONE, date_updated TIMESTAMP WITHOUT TIME ZONE,
user_created VARCHAR(25) DEFAULT CURRENT_USER, user_created VARCHAR(25) DEFAULT CURRENT_USER,
user_updated VARCHAR(25) user_updated VARCHAR(25)

54
4dev/sync/sync_template.sh Executable file
View File

@@ -0,0 +1,54 @@
#!/bin/bash
# create path
path=`pwd`"/"$0;
LOCAL_BASE_DIR="";
LOCAL_DIR=$LOCAL_BASE_DIR"";
REMOTE_WEB="";
TARGET_HOST_WEB="developer@10.76.32.25";
TMP_DIR=$LOCAL_BASE_DIR"/4dev/";
tmpf_web=$TMP_DIR"tmp.web";
# for web (ika)
rm -f $tmpf_web;
echo ".*.swp" >> $tmpf_web;
echo "._*" >> $tmpf_web;
echo ".DS_Store" >> $tmpf_web;
echo ".svn" >> $tmpf_web;
echo ".svnignore" >> $tmpf_web;
echo ".git" >> $tmpf_web;
echo ".gitignore" >> $tmpf_web;
echo ".htaccess" >> $tmpf_web;
echo "tmp/*" >> $tmpf_web;
echo "templates_c/*" >> $tmpf_web;
echo "cache/*" >> $tmpf_web;
echo "statistics/*" >> $tmpf_web;
echo "media/uploads/*" >> $tmpf_web;
echo "media/csv/*" >> $tmpf_web;
echo "4dev/*" >> $tmpf_web;
echo "log/*" >> $tmpf_web;
echo "Exclude List:"
echo "WEB:";
cat $tmpf_web;
echo "($1) Syncing from $LOCAL_DIR/* to $TARGET_HOST_WEB:$REMOTE_WEB";
echo "You hav 5 seconds to abort (<ctrl> + c)";
#c=0;until [ $c -eq 10 ];do echo -n "#"; sleep 1; c=`expr $c + 1`;done;
for ((i=5;i>=1;i--));
do
echo -n $i" ";
sleep 1;
done;
if [ "$1" = "live" ];
then
# ika sync
rsync -Plzvrupt --stats --include ".htaccess" --exclude-from=$tmpf_web --delete -e ssh $LOCAL_DIR/* $TARGET_HOST_WEB:$REMOTE_WEB
else
# ika sync
rsync -n -Plzvrupt --stats --include ".htaccess" --exclude-from=$tmpf_web --delete -e ssh $LOCAL_DIR/* $TARGET_HOST_WEB:$REMOTE_WEB
fi;
# END

View File

@@ -1,21 +0,0 @@
#!/bin/bash
# $Id: sync_web.sh 3158 2010-09-02 02:49:00Z gullevek $
exit 0;
# create path
path=`pwd`"/"$0;
LOCAL_DIR="/home/developer/html/adidas/20060912_shoplocator/";
REMOTE_DIR="/var/www/adidas/shoplocator/";
echo "Syncing from '$LOCAL_DIR' to '$REMOTE_DIR'";
echo "You hav 5 seconds to abort (<ctrl> + c)";
for ((i=5;i>=1;i--));
do
echo -n $i" ";
sleep 1;
done;
# see man rsync for flag explenation
rsync -Plzvrpt --stats --include ".htaccess" --exclude ".*.swp" --exclude "._*" --exclude ".DS_Store" --exclude ".svn" --exclude ".svnignore" --exclude "tmp/*" --exclude "cache/*" --exclude "templates_c/*" --exclude "media/*" --delete -e ssh $LOCAL_DIR/ developer@somen.tokyo.tequila.jp:/$REMOTE_DIR/

View File

@@ -0,0 +1,9 @@
The following files need to be copied:
block.t.php
block.textform.php
function.popup.php
function.popup_init.php
The following files need in code update/or copy:
function.html_checkboxes.php
function.html_options.php

10
README Normal file
View File

@@ -0,0 +1,10 @@
PHP Core Library
================
Base PHP class files to setup any project
* login
* database wrapper
* basic helper class for debugging and other features
* admin/frontend split
* domain controlled database/settings split
* dynamic layout groups

6
www/SMARTY_UPDATE Normal file
View File

@@ -0,0 +1,6 @@
* copy
plugins/block.t.php
plugins/function.popup*.php
* check & copy
plugins/function.html_checkboxes.php
plugins/function.html_options.php

View File

@@ -1 +1 @@
Smarty-3.1.15/ smarty-3.1.27/

View File

@@ -1,133 +0,0 @@
{capture name='_smarty_debug' assign=debug_output}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Smarty Debug Console</title>
<style type="text/css">
{literal}
body, h1, h2, td, th, p {
font-family: sans-serif;
font-weight: normal;
font-size: 0.9em;
margin: 1px;
padding: 0;
}
h1 {
margin: 0;
text-align: left;
padding: 2px;
background-color: #f0c040;
color: black;
font-weight: bold;
font-size: 1.2em;
}
h2 {
background-color: #9B410E;
color: white;
text-align: left;
font-weight: bold;
padding: 2px;
border-top: 1px solid black;
}
body {
background: black;
}
p, table, div {
background: #f0ead8;
}
p {
margin: 0;
font-style: italic;
text-align: center;
}
table {
width: 100%;
}
th, td {
font-family: monospace;
vertical-align: top;
text-align: left;
width: 50%;
}
td {
color: green;
}
.odd {
background-color: #eeeeee;
}
.even {
background-color: #fafafa;
}
.exectime {
font-size: 0.8em;
font-style: italic;
}
#table_assigned_vars th {
color: blue;
}
#table_config_vars th {
color: maroon;
}
{/literal}
</style>
</head>
<body>
<h1>Smarty Debug Console - {if isset($template_name)}{$template_name|debug_print_var nofilter}{else}Total Time {$execution_time|string_format:"%.5f"}{/if}</h1>
{if !empty($template_data)}
<h2>included templates &amp; config files (load time in seconds)</h2>
<div>
{foreach $template_data as $template}
<font color=brown>{$template.name}</font>
<span class="exectime">
(compile {$template['compile_time']|string_format:"%.5f"}) (render {$template['render_time']|string_format:"%.5f"}) (cache {$template['cache_time']|string_format:"%.5f"})
</span>
<br>
{/foreach}
</div>
{/if}
<h2>assigned template variables</h2>
<table id="table_assigned_vars">
{foreach $assigned_vars as $vars}
<tr class="{if $vars@iteration % 2 eq 0}odd{else}even{/if}">
<th>${$vars@key|escape:'html'}</th>
<td>{$vars|debug_print_var nofilter}</td></tr>
{/foreach}
</table>
<h2>assigned config file variables (outer template scope)</h2>
<table id="table_config_vars">
{foreach $config_vars as $vars}
<tr class="{if $vars@iteration % 2 eq 0}odd{else}even{/if}">
<th>{$vars@key|escape:'html'}</th>
<td>{$vars|debug_print_var nofilter}</td></tr>
{/foreach}
</table>
</body>
</html>
{/capture}
<script type="text/javascript">
{$id = $template_name|default:''|md5}
_smarty_console = window.open("","console{$id}","width=680,height=600,resizable,scrollbars=yes");
_smarty_console.document.write("{$debug_output|escape:'javascript' nofilter}");
_smarty_console.document.close();
</script>

View File

@@ -1,277 +0,0 @@
<?php
/**
* Smarty Internal Plugin CacheResource File
*
* @package Smarty
* @subpackage Cacher
* @author Uwe Tews
* @author Rodney Rehm
*/
/**
* This class does contain all necessary methods for the HTML cache on file system
*
* Implements the file system as resource for the HTML cache Version ussing nocache inserts.
*
* @package Smarty
* @subpackage Cacher
*/
class Smarty_Internal_CacheResource_File extends Smarty_CacheResource
{
/**
* populate Cached Object with meta data from Resource
*
* @param Smarty_Template_Cached $cached cached object
* @param Smarty_Internal_Template $_template template object
* @return void
*/
public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template)
{
$_source_file_path = str_replace(':', '.', $_template->source->filepath);
$_cache_id = isset($_template->cache_id) ? preg_replace('![^\w\|]+!', '_', $_template->cache_id) : null;
$_compile_id = isset($_template->compile_id) ? preg_replace('![^\w\|]+!', '_', $_template->compile_id) : null;
$_filepath = $_template->source->uid;
// if use_sub_dirs, break file into directories
if ($_template->smarty->use_sub_dirs) {
$_filepath = substr($_filepath, 0, 2) . DS
. substr($_filepath, 2, 2) . DS
. substr($_filepath, 4, 2) . DS
. $_filepath;
}
$_compile_dir_sep = $_template->smarty->use_sub_dirs ? DS : '^';
if (isset($_cache_id)) {
$_cache_id = str_replace('|', $_compile_dir_sep, $_cache_id) . $_compile_dir_sep;
} else {
$_cache_id = '';
}
if (isset($_compile_id)) {
$_compile_id = $_compile_id . $_compile_dir_sep;
} else {
$_compile_id = '';
}
$_cache_dir = $_template->smarty->getCacheDir();
if ($_template->smarty->cache_locking) {
// create locking file name
// relative file name?
if (!preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_cache_dir)) {
$_lock_dir = rtrim(getcwd(), '/\\') . DS . $_cache_dir;
} else {
$_lock_dir = $_cache_dir;
}
$cached->lock_id = $_lock_dir.sha1($_cache_id.$_compile_id.$_template->source->uid).'.lock';
}
$cached->filepath = $_cache_dir . $_cache_id . $_compile_id . $_filepath . '.' . basename($_source_file_path) . '.php';
$cached->timestamp = @filemtime($cached->filepath);
$cached->exists = !!$cached->timestamp;
}
/**
* populate Cached Object with timestamp and exists from Resource
*
* @param Smarty_Template_Cached $cached cached object
* @return void
*/
public function populateTimestamp(Smarty_Template_Cached $cached)
{
$cached->timestamp = @filemtime($cached->filepath);
$cached->exists = !!$cached->timestamp;
}
/**
* Read the cached template and process its header
*
* @param Smarty_Internal_Template $_template template object
* @param Smarty_Template_Cached $cached cached object
* @return booelan true or false if the cached content does not exist
*/
public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached=null)
{
$_smarty_tpl = $_template;
return @include $_template->cached->filepath;
}
/**
* Write the rendered template output to cache
*
* @param Smarty_Internal_Template $_template template object
* @param string $content content to cache
* @return boolean success
*/
public function writeCachedContent(Smarty_Internal_Template $_template, $content)
{
if (Smarty_Internal_Write_File::writeFile($_template->cached->filepath, $content, $_template->smarty) === true) {
$_template->cached->timestamp = @filemtime($_template->cached->filepath);
$_template->cached->exists = !!$_template->cached->timestamp;
if ($_template->cached->exists) {
return true;
}
}
return false;
}
/**
* Empty cache
*
* @param Smarty_Internal_Template $_template template object
* @param integer $exp_time expiration time (number of seconds, not timestamp)
* @return integer number of cache files deleted
*/
public function clearAll(Smarty $smarty, $exp_time = null)
{
return $this->clear($smarty, null, null, null, $exp_time);
}
/**
* Empty cache for a specific template
*
* @param Smarty $_template template object
* @param string $resource_name template name
* @param string $cache_id cache id
* @param string $compile_id compile id
* @param integer $exp_time expiration time (number of seconds, not timestamp)
* @return integer number of cache files deleted
*/
public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time)
{
$_cache_id = isset($cache_id) ? preg_replace('![^\w\|]+!', '_', $cache_id) : null;
$_compile_id = isset($compile_id) ? preg_replace('![^\w\|]+!', '_', $compile_id) : null;
$_dir_sep = $smarty->use_sub_dirs ? '/' : '^';
$_compile_id_offset = $smarty->use_sub_dirs ? 3 : 0;
$_dir = $smarty->getCacheDir();
$_dir_length = strlen($_dir);
if (isset($_cache_id)) {
$_cache_id_parts = explode('|', $_cache_id);
$_cache_id_parts_count = count($_cache_id_parts);
if ($smarty->use_sub_dirs) {
foreach ($_cache_id_parts as $id_part) {
$_dir .= $id_part . DS;
}
}
}
if (isset($resource_name)) {
$_save_stat = $smarty->caching;
$smarty->caching = true;
$tpl = new $smarty->template_class($resource_name, $smarty);
$smarty->caching = $_save_stat;
// remove from template cache
$tpl->source; // have the template registered before unset()
if ($smarty->allow_ambiguous_resources) {
$_templateId = $tpl->source->unique_resource . $tpl->cache_id . $tpl->compile_id;
} else {
$_templateId = $smarty->joined_template_dir . '#' . $resource_name . $tpl->cache_id . $tpl->compile_id;
}
if (isset($_templateId[150])) {
$_templateId = sha1($_templateId);
}
unset($smarty->template_objects[$_templateId]);
if ($tpl->source->exists) {
$_resourcename_parts = basename(str_replace('^', '/', $tpl->cached->filepath));
} else {
return 0;
}
}
$_count = 0;
$_time = time();
if (file_exists($_dir)) {
$_cacheDirs = new RecursiveDirectoryIterator($_dir);
$_cache = new RecursiveIteratorIterator($_cacheDirs, RecursiveIteratorIterator::CHILD_FIRST);
foreach ($_cache as $_file) {
if (substr(basename($_file->getPathname()),0,1) == '.' || strpos($_file, '.svn') !== false) continue;
// directory ?
if ($_file->isDir()) {
if (!$_cache->isDot()) {
// delete folder if empty
@rmdir($_file->getPathname());
}
} else {
$_parts = explode($_dir_sep, str_replace('\\', '/', substr((string) $_file, $_dir_length)));
$_parts_count = count($_parts);
// check name
if (isset($resource_name)) {
if ($_parts[$_parts_count-1] != $_resourcename_parts) {
continue;
}
}
// check compile id
if (isset($_compile_id) && (!isset($_parts[$_parts_count-2 - $_compile_id_offset]) || $_parts[$_parts_count-2 - $_compile_id_offset] != $_compile_id)) {
continue;
}
// check cache id
if (isset($_cache_id)) {
// count of cache id parts
$_parts_count = (isset($_compile_id)) ? $_parts_count - 2 - $_compile_id_offset : $_parts_count - 1 - $_compile_id_offset;
if ($_parts_count < $_cache_id_parts_count) {
continue;
}
for ($i = 0; $i < $_cache_id_parts_count; $i++) {
if ($_parts[$i] != $_cache_id_parts[$i]) continue 2;
}
}
// expired ?
if (isset($exp_time)) {
if ($exp_time < 0) {
preg_match('#\'cache_lifetime\' =>\s*(\d*)#', file_get_contents($_file), $match);
if ($_time < (@filemtime($_file) + $match[1])) {
continue;
}
} else {
if ($_time - @filemtime($_file) < $exp_time) {
continue;
}
}
}
$_count += @unlink((string) $_file) ? 1 : 0;
}
}
}
return $_count;
}
/**
* Check is cache is locked for this template
*
* @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object
* @return booelan true or false if cache is locked
*/
public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
clearstatcache(true, $cached->lock_id);
} else {
clearstatcache();
}
$t = @filemtime($cached->lock_id);
return $t && (time() - $t < $smarty->locking_timeout);
}
/**
* Lock cache for this template
*
* @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object
*/
public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
$cached->is_locked = true;
touch($cached->lock_id);
}
/**
* Unlock cache for this template
*
* @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object
*/
public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
$cached->is_locked = false;
@unlink($cached->lock_id);
}
}

View File

@@ -1,80 +0,0 @@
<?php
/**
* Smarty Internal Plugin Resource Stream
*
* Implements the streams as resource for Smarty template
*
* @package Smarty
* @subpackage TemplateResources
* @author Uwe Tews
* @author Rodney Rehm
*/
/**
* Smarty Internal Plugin Resource Stream
*
* Implements the streams as resource for Smarty template
*
* @link http://php.net/streams
* @package Smarty
* @subpackage TemplateResources
*/
class Smarty_Internal_Resource_Stream extends Smarty_Resource_Recompiled
{
/**
* populate Source Object with meta data from Resource
*
* @param Smarty_Template_Source $source source object
* @param Smarty_Internal_Template $_template template object
* @return void
*/
public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
{
if (strpos($source->resource, '://') !== false) {
$source->filepath = $source->resource;
} else {
$source->filepath = str_replace(':', '://', $source->resource);
}
$source->uid = false;
$source->content = $this->getContent($source);
$source->timestamp = false;
$source->exists = !!$source->content;
}
/**
* Load template's source from stream into current template object
*
* @param Smarty_Template_Source $source source object
* @return string template source
* @throws SmartyException if source cannot be loaded
*/
public function getContent(Smarty_Template_Source $source)
{
$t = '';
// the availability of the stream has already been checked in Smarty_Resource::fetch()
$fp = fopen($source->filepath, 'r+');
if ($fp) {
while (!feof($fp) && ($current_line = fgets($fp)) !== false) {
$t .= $current_line;
}
fclose($fp);
return $t;
} else {
return false;
}
}
/**
* modify resource_name according to resource handlers specifications
*
* @param Smarty $smarty Smarty instance
* @param string $resource_name resource_name to make unique
* @param boolean $is_config flag for config resource
* @return string unique resource name
*/
protected function buildUniqueResourceName(Smarty $smarty, $resource_name, $is_config = false)
{
return get_class($this) . '#' . $resource_name;
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -2,37 +2,33 @@
/** /**
* Project: Smarty: the PHP compiling template engine * Project: Smarty: the PHP compiling template engine
* File: SmartyBC.class.php * File: SmartyBC.class.php
* SVN: $Id: SmartyBC.class.php 4737 2013-12-11 06:29:51Z gullevek $ * SVN: $Id: $
*
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either * License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version. * 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, * This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details. * Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public * You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software * License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* For questions, help, comments, discussion, etc., please join the * For questions, help, comments, discussion, etc., please join the
* Smarty mailing list. Send a blank e-mail to * Smarty mailing list. Send a blank e-mail to
* smarty-discussion-subscribe@googlegroups.com * smarty-discussion-subscribe@googlegroups.com
* *
* @link http://www.smarty.net/ * @link http://www.smarty.net/
* @copyright 2008 New Digital Group, Inc. * @copyright 2008 New Digital Group, Inc.
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
* @author Uwe Tews * @author Uwe Tews
* @author Rodney Rehm * @author Rodney Rehm
* @package Smarty * @package Smarty
*/ */
/** /**
* @ignore * @ignore
*/ */
require(dirname(__FILE__) . '/Smarty.class.php'); require_once(dirname(__FILE__) . '/Smarty.class.php');
/** /**
* Smarty Backward Compatability Wrapper Class * Smarty Backward Compatability Wrapper Class
@@ -43,6 +39,7 @@ class SmartyBC extends Smarty
{ {
/** /**
* Smarty 2 BC * Smarty 2 BC
*
* @var string * @var string
*/ */
public $_version = self::SMARTY_VERSION; public $_version = self::SMARTY_VERSION;
@@ -52,7 +49,7 @@ class SmartyBC extends Smarty
* *
* @param array $options options to set during initialization, e.g. array( 'forceCompile' => false ) * @param array $options options to set during initialization, e.g. array( 'forceCompile' => false )
*/ */
public function __construct(array $options=array()) public function __construct(array $options = array())
{ {
parent::__construct($options); parent::__construct($options);
// register {php} tag // register {php} tag
@@ -100,7 +97,7 @@ class SmartyBC extends Smarty
* @param bool $cacheable * @param bool $cacheable
* @param mixed $cache_attrs * @param mixed $cache_attrs
*/ */
public function register_function($function, $function_impl, $cacheable=true, $cache_attrs=null) public function register_function($function, $function_impl, $cacheable = true, $cache_attrs = null)
{ {
$this->registerPlugin('function', $function, $function_impl, $cacheable, $cache_attrs); $this->registerPlugin('function', $function, $function_impl, $cacheable, $cache_attrs);
} }
@@ -118,11 +115,14 @@ class SmartyBC extends Smarty
/** /**
* Registers object to be used in templates * Registers object to be used in templates
* *
* @param string $object name of template object * @param string $object name of template object
* @param object $object_impl the referenced PHP object to register * @param object $object_impl the referenced PHP object to register
* @param array $allowed list of allowed methods (empty = all) * @param array $allowed list of allowed methods (empty = all)
* @param boolean $smarty_args smarty argument format, else traditional * @param boolean $smarty_args smarty argument format, else traditional
* @param array $block_functs list of methods that are block format * @param array $block_methods list of methods that are block format
*
* @throws SmartyException
* @internal param array $block_functs list of methods that are block format
*/ */
public function register_object($object, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array()) public function register_object($object, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array())
{ {
@@ -144,12 +144,12 @@ class SmartyBC extends Smarty
/** /**
* Registers block function to be used in templates * Registers block function to be used in templates
* *
* @param string $block name of template block * @param string $block name of template block
* @param string $block_impl PHP function to register * @param string $block_impl PHP function to register
* @param bool $cacheable * @param bool $cacheable
* @param mixed $cache_attrs * @param mixed $cache_attrs
*/ */
public function register_block($block, $block_impl, $cacheable=true, $cache_attrs=null) public function register_block($block, $block_impl, $cacheable = true, $cache_attrs = null)
{ {
$this->registerPlugin('block', $block, $block_impl, $cacheable, $cache_attrs); $this->registerPlugin('block', $block, $block_impl, $cacheable, $cache_attrs);
} }
@@ -171,7 +171,7 @@ class SmartyBC extends Smarty
* @param string $function_impl name of PHP function to register * @param string $function_impl name of PHP function to register
* @param bool $cacheable * @param bool $cacheable
*/ */
public function register_compiler_function($function, $function_impl, $cacheable=true) public function register_compiler_function($function, $function_impl, $cacheable = true)
{ {
$this->registerPlugin('compiler', $function, $function_impl, $cacheable); $this->registerPlugin('compiler', $function, $function_impl, $cacheable);
} }
@@ -305,10 +305,11 @@ class SmartyBC extends Smarty
/** /**
* clear cached content for the given template and cache id * clear cached content for the given template and cache id
* *
* @param string $tpl_file name of template file * @param string $tpl_file name of template file
* @param string $cache_id name of cache_id * @param string $cache_id name of cache_id
* @param string $compile_id name of compile_id * @param string $compile_id name of compile_id
* @param string $exp_time expiration time * @param string $exp_time expiration time
*
* @return boolean * @return boolean
*/ */
public function clear_cache($tpl_file = null, $cache_id = null, $compile_id = null, $exp_time = null) public function clear_cache($tpl_file = null, $cache_id = null, $compile_id = null, $exp_time = null)
@@ -319,7 +320,8 @@ class SmartyBC extends Smarty
/** /**
* clear the entire contents of cache (all templates) * clear the entire contents of cache (all templates)
* *
* @param string $exp_time expire time * @param string $exp_time expire time
*
* @return boolean * @return boolean
*/ */
public function clear_all_cache($exp_time = null) public function clear_all_cache($exp_time = null)
@@ -330,9 +332,10 @@ class SmartyBC extends Smarty
/** /**
* test to see if valid cache exists for this template * test to see if valid cache exists for this template
* *
* @param string $tpl_file name of template file * @param string $tpl_file name of template file
* @param string $cache_id * @param string $cache_id
* @param string $compile_id * @param string $compile_id
*
* @return boolean * @return boolean
*/ */
public function is_cached($tpl_file, $cache_id = null, $compile_id = null) public function is_cached($tpl_file, $cache_id = null, $compile_id = null)
@@ -353,9 +356,10 @@ class SmartyBC extends Smarty
* or all compiled template files if one is not specified. * or all compiled template files if one is not specified.
* This function is for advanced use only, not normally needed. * This function is for advanced use only, not normally needed.
* *
* @param string $tpl_file * @param string $tpl_file
* @param string $compile_id * @param string $compile_id
* @param string $exp_time * @param string $exp_time
*
* @return boolean results of {@link smarty_core_rm_auto()} * @return boolean results of {@link smarty_core_rm_auto()}
*/ */
public function clear_compiled_tpl($tpl_file = null, $compile_id = null, $exp_time = null) public function clear_compiled_tpl($tpl_file = null, $compile_id = null, $exp_time = null)
@@ -366,7 +370,8 @@ class SmartyBC extends Smarty
/** /**
* Checks whether requested template exists. * Checks whether requested template exists.
* *
* @param string $tpl_file * @param string $tpl_file
*
* @return boolean * @return boolean
*/ */
public function template_exists($tpl_file) public function template_exists($tpl_file)
@@ -378,9 +383,10 @@ class SmartyBC extends Smarty
* Returns an array containing template variables * Returns an array containing template variables
* *
* @param string $name * @param string $name
*
* @return array * @return array
*/ */
public function get_template_vars($name=null) public function get_template_vars($name = null)
{ {
return $this->getTemplateVars($name); return $this->getTemplateVars($name);
} }
@@ -389,9 +395,10 @@ class SmartyBC extends Smarty
* Returns an array containing config variables * Returns an array containing config variables
* *
* @param string $name * @param string $name
*
* @return array * @return array
*/ */
public function get_config_vars($name=null) public function get_config_vars($name = null)
{ {
return $this->getConfigVars($name); return $this->getConfigVars($name);
} }
@@ -412,6 +419,7 @@ class SmartyBC extends Smarty
* return a reference to a registered object * return a reference to a registered object
* *
* @param string $name * @param string $name
*
* @return object * @return object
*/ */
public function get_registered_object($name) public function get_registered_object($name)
@@ -439,7 +447,6 @@ class SmartyBC extends Smarty
{ {
trigger_error("Smarty error: $error_msg", $error_type); trigger_error("Smarty error: $error_msg", $error_type);
} }
} }
/** /**
@@ -449,6 +456,7 @@ class SmartyBC extends Smarty
* @param string $content contents of the block * @param string $content contents of the block
* @param object $template template object * @param object $template template object
* @param boolean &$repeat repeat flag * @param boolean &$repeat repeat flag
*
* @return string content re-formatted * @return string content re-formatted
*/ */
function smarty_php_tag($params, $content, $template, &$repeat) function smarty_php_tag($params, $content, $template, &$repeat)
@@ -457,5 +465,3 @@ function smarty_php_tag($params, $content, $template, &$repeat)
return ''; return '';
} }
?>

137
www/Smarty-3.1.21/debug.tpl Normal file
View File

@@ -0,0 +1,137 @@
{capture name='_smarty_debug' assign=debug_output}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Smarty Debug Console</title>
<style type="text/css">
{literal}
body, h1, h2, td, th, p {
font-family: sans-serif;
font-weight: normal;
font-size: 0.9em;
margin: 1px;
padding: 0;
}
h1 {
margin: 0;
text-align: left;
padding: 2px;
background-color: #f0c040;
color: black;
font-weight: bold;
font-size: 1.2em;
}
h2 {
background-color: #9B410E;
color: white;
text-align: left;
font-weight: bold;
padding: 2px;
border-top: 1px solid black;
}
body {
background: black;
}
p, table, div {
background: #f0ead8;
}
p {
margin: 0;
font-style: italic;
text-align: center;
}
table {
width: 100%;
}
th, td {
font-family: monospace;
vertical-align: top;
text-align: left;
width: 50%;
}
td {
color: green;
}
.odd {
background-color: #eeeeee;
}
.even {
background-color: #fafafa;
}
.exectime {
font-size: 0.8em;
font-style: italic;
}
#table_assigned_vars th {
color: blue;
}
#table_config_vars th {
color: maroon;
}
{/literal}
</style>
</head>
<body>
<h1>Smarty Debug Console
- {if isset($template_name)}{$template_name|debug_print_var nofilter}{else}Total Time {$execution_time|string_format:"%.5f"}{/if}</h1>
{if !empty($template_data)}
<h2>included templates &amp; config files (load time in seconds)</h2>
<div>
{foreach $template_data as $template}
<font color=brown>{$template.name}</font>
<span class="exectime">
(compile {$template['compile_time']|string_format:"%.5f"}) (render {$template['render_time']|string_format:"%.5f"}) (cache {$template['cache_time']|string_format:"%.5f"}
)
</span>
<br>
{/foreach}
</div>
{/if}
<h2>assigned template variables</h2>
<table id="table_assigned_vars">
{foreach $assigned_vars as $vars}
<tr class="{if $vars@iteration % 2 eq 0}odd{else}even{/if}">
<th>${$vars@key|escape:'html'}</th>
<td>{$vars|debug_print_var nofilter}</td>
</tr>
{/foreach}
</table>
<h2>assigned config file variables (outer template scope)</h2>
<table id="table_config_vars">
{foreach $config_vars as $vars}
<tr class="{if $vars@iteration % 2 eq 0}odd{else}even{/if}">
<th>{$vars@key|escape:'html'}</th>
<td>{$vars|debug_print_var nofilter}</td>
</tr>
{/foreach}
</table>
</body>
</html>
{/capture}
<script type="text/javascript">
{$id = $template_name|default:''|md5}
_smarty_console = window.open("", "console{$id}", "width=680,height=600,resizable,scrollbars=yes");
_smarty_console.document.write("{$debug_output|escape:'javascript' nofilter}");
_smarty_console.document.close();
</script>

View File

@@ -2,13 +2,12 @@
/** /**
* Smarty plugin to format text blocks * Smarty plugin to format text blocks
* *
* @package Smarty * @package Smarty
* @subpackage PluginsBlock * @subpackage PluginsBlock
*/ */
/** /**
* Smarty {textformat}{/textformat} block plugin * Smarty {textformat}{/textformat} block plugin
*
* Type: block function<br> * Type: block function<br>
* Name: textformat<br> * Name: textformat<br>
* Purpose: format text a certain way with preset styles * Purpose: format text a certain way with preset styles
@@ -23,12 +22,14 @@
* - wrap_boundary - boolean (true) * - wrap_boundary - boolean (true)
* </pre> * </pre>
* *
* @link http://www.smarty.net/manual/en/language.function.textformat.php {textformat} * @link http://www.smarty.net/manual/en/language.function.textformat.php {textformat}
* (Smarty online manual) * (Smarty online manual)
*
* @param array $params parameters * @param array $params parameters
* @param string $content contents of the block * @param string $content contents of the block
* @param Smarty_Internal_Template $template template object * @param Smarty_Internal_Template $template template object
* @param boolean &$repeat repeat flag * @param boolean &$repeat repeat flag
*
* @return string content re-formatted * @return string content re-formatted
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
*/ */
@@ -76,7 +77,6 @@ function smarty_block_textformat($params, $content, $template, &$repeat)
} }
// split into paragraphs // split into paragraphs
$_paragraphs = preg_split('![\r\n]{2}!', $content); $_paragraphs = preg_split('![\r\n]{2}!', $content);
$_output = '';
foreach ($_paragraphs as &$_paragraph) { foreach ($_paragraphs as &$_paragraph) {
if (!$_paragraph) { if (!$_paragraph) {

View File

@@ -1,22 +1,24 @@
<?php <?php
/** /**
* Smarty plugin * Smarty plugin
* @package Smarty *
* @package Smarty
* @subpackage PluginsFunction * @subpackage PluginsFunction
*/ */
/** /**
* Smarty {counter} function plugin * Smarty {counter} function plugin
*
* Type: function<br> * Type: function<br>
* Name: counter<br> * Name: counter<br>
* Purpose: print out a counter value * Purpose: print out a counter value
* *
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
* @link http://www.smarty.net/manual/en/language.function.counter.php {counter} * @link http://www.smarty.net/manual/en/language.function.counter.php {counter}
* (Smarty online manual) * (Smarty online manual)
*
* @param array $params parameters * @param array $params parameters
* @param Smarty_Internal_Template $template template object * @param Smarty_Internal_Template $template template object
*
* @return string|null * @return string|null
*/ */
function smarty_function_counter($params, $template) function smarty_function_counter($params, $template)
@@ -26,11 +28,11 @@ function smarty_function_counter($params, $template)
$name = (isset($params['name'])) ? $params['name'] : 'default'; $name = (isset($params['name'])) ? $params['name'] : 'default';
if (!isset($counters[$name])) { if (!isset($counters[$name])) {
$counters[$name] = array( $counters[$name] = array(
'start'=>1, 'start' => 1,
'skip'=>1, 'skip' => 1,
'direction'=>'up', 'direction' => 'up',
'count'=>1 'count' => 1
); );
} }
$counter =& $counters[$name]; $counter =& $counters[$name];
@@ -66,11 +68,11 @@ function smarty_function_counter($params, $template)
$counter['direction'] = $params['direction']; $counter['direction'] = $params['direction'];
} }
if ($counter['direction'] == "down") if ($counter['direction'] == "down") {
$counter['count'] -= $counter['skip']; $counter['count'] -= $counter['skip'];
else } else {
$counter['count'] += $counter['skip']; $counter['count'] += $counter['skip'];
}
return $retval; return $retval;
} }

View File

@@ -2,13 +2,12 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsFunction * @subpackage PluginsFunction
*/ */
/** /**
* Smarty {cycle} function plugin * Smarty {cycle} function plugin
*
* Type: function<br> * Type: function<br>
* Name: cycle<br> * Name: cycle<br>
* Date: May 3, 2002<br> * Date: May 3, 2002<br>
@@ -31,15 +30,17 @@
* {cycle name=row} * {cycle name=row}
* </pre> * </pre>
* *
* @link http://www.smarty.net/manual/en/language.function.cycle.php {cycle} * @link http://www.smarty.net/manual/en/language.function.cycle.php {cycle}
* (Smarty online manual) * (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
* @author credit to Mark Priatel <mpriatel@rogers.com> * @author credit to Mark Priatel <mpriatel@rogers.com>
* @author credit to Gerard <gerard@interfold.com> * @author credit to Gerard <gerard@interfold.com>
* @author credit to Jason Sweat <jsweat_php@yahoo.com> * @author credit to Jason Sweat <jsweat_php@yahoo.com>
* @version 1.3 * @version 1.3
*
* @param array $params parameters * @param array $params parameters
* @param Smarty_Internal_Template $template template object * @param Smarty_Internal_Template $template template object
*
* @return string|null * @return string|null
*/ */
@@ -59,8 +60,9 @@ function smarty_function_cycle($params, $template)
return; return;
} }
} else { } else {
if(isset($cycle_vars[$name]['values']) if (isset($cycle_vars[$name]['values'])
&& $cycle_vars[$name]['values'] != $params['values'] ) { && $cycle_vars[$name]['values'] != $params['values']
) {
$cycle_vars[$name]['index'] = 0; $cycle_vars[$name]['index'] = 0;
} }
$cycle_vars[$name]['values'] = $params['values']; $cycle_vars[$name]['values'] = $params['values'];
@@ -75,10 +77,10 @@ function smarty_function_cycle($params, $template)
if (is_array($cycle_vars[$name]['values'])) { if (is_array($cycle_vars[$name]['values'])) {
$cycle_array = $cycle_vars[$name]['values']; $cycle_array = $cycle_vars[$name]['values'];
} else { } else {
$cycle_array = explode($cycle_vars[$name]['delimiter'],$cycle_vars[$name]['values']); $cycle_array = explode($cycle_vars[$name]['delimiter'], $cycle_vars[$name]['values']);
} }
if (!isset($cycle_vars[$name]['index']) || $reset ) { if (!isset($cycle_vars[$name]['index']) || $reset) {
$cycle_vars[$name]['index'] = 0; $cycle_vars[$name]['index'] = 0;
} }
@@ -94,10 +96,10 @@ function smarty_function_cycle($params, $template)
} }
if ($advance) { if ($advance) {
if ( $cycle_vars[$name]['index'] >= count($cycle_array) -1 ) { if ($cycle_vars[$name]['index'] >= count($cycle_array) - 1) {
$cycle_vars[$name]['index'] = 0; $cycle_vars[$name]['index'] = 0;
} else { } else {
$cycle_vars[$name]['index']++; $cycle_vars[$name]['index'] ++;
} }
} }

View File

@@ -2,28 +2,30 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsFunction * @subpackage PluginsFunction
*/ */
/** /**
* Smarty {fetch} plugin * Smarty {fetch} plugin
*
* Type: function<br> * Type: function<br>
* Name: fetch<br> * Name: fetch<br>
* Purpose: fetch file, web or ftp data and display results * Purpose: fetch file, web or ftp data and display results
* *
* @link http://www.smarty.net/manual/en/language.function.fetch.php {fetch} * @link http://www.smarty.net/manual/en/language.function.fetch.php {fetch}
* (Smarty online manual) * (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
*
* @param array $params parameters * @param array $params parameters
* @param Smarty_Internal_Template $template template object * @param Smarty_Internal_Template $template template object
*
* @throws SmartyException
* @return string|null if the assign parameter is passed, Smarty assigns the result to a template variable * @return string|null if the assign parameter is passed, Smarty assigns the result to a template variable
*/ */
function smarty_function_fetch($params, $template) function smarty_function_fetch($params, $template)
{ {
if (empty($params['file'])) { if (empty($params['file'])) {
trigger_error("[plugin] fetch parameter 'file' cannot be empty",E_USER_NOTICE); trigger_error("[plugin] fetch parameter 'file' cannot be empty", E_USER_NOTICE);
return; return;
} }
@@ -60,7 +62,7 @@ function smarty_function_fetch($params, $template)
$host = $server_name = $uri_parts['host']; $host = $server_name = $uri_parts['host'];
$timeout = 30; $timeout = 30;
$accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*"; $accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*";
$agent = "Smarty Template Engine ". Smarty::SMARTY_VERSION; $agent = "Smarty Template Engine " . Smarty::SMARTY_VERSION;
$referer = ""; $referer = "";
$uri = !empty($uri_parts['path']) ? $uri_parts['path'] : '/'; $uri = !empty($uri_parts['path']) ? $uri_parts['path'] : '/';
$uri .= !empty($uri_parts['query']) ? '?' . $uri_parts['query'] : ''; $uri .= !empty($uri_parts['query']) ? '?' . $uri_parts['query'] : '';
@@ -100,8 +102,8 @@ function smarty_function_fetch($params, $template)
break; break;
case "header": case "header":
if (!empty($param_value)) { if (!empty($param_value)) {
if (!preg_match('![\w\d-]+: .+!',$param_value)) { if (!preg_match('![\w\d-]+: .+!', $param_value)) {
trigger_error("[plugin] invalid header format '".$param_value."'",E_USER_NOTICE); trigger_error("[plugin] invalid header format '" . $param_value . "'", E_USER_NOTICE);
return; return;
} else { } else {
@@ -118,7 +120,7 @@ function smarty_function_fetch($params, $template)
if (!preg_match('!\D!', $param_value)) { if (!preg_match('!\D!', $param_value)) {
$proxy_port = (int) $param_value; $proxy_port = (int) $param_value;
} else { } else {
trigger_error("[plugin] invalid value for attribute '".$param_key."'",E_USER_NOTICE); trigger_error("[plugin] invalid value for attribute '" . $param_key . "'", E_USER_NOTICE);
return; return;
} }
@@ -137,26 +139,26 @@ function smarty_function_fetch($params, $template)
if (!preg_match('!\D!', $param_value)) { if (!preg_match('!\D!', $param_value)) {
$timeout = (int) $param_value; $timeout = (int) $param_value;
} else { } else {
trigger_error("[plugin] invalid value for attribute '".$param_key."'",E_USER_NOTICE); trigger_error("[plugin] invalid value for attribute '" . $param_key . "'", E_USER_NOTICE);
return; return;
} }
break; break;
default: default:
trigger_error("[plugin] unrecognized attribute '".$param_key."'",E_USER_NOTICE); trigger_error("[plugin] unrecognized attribute '" . $param_key . "'", E_USER_NOTICE);
return; return;
} }
} }
if (!empty($proxy_host) && !empty($proxy_port)) { if (!empty($proxy_host) && !empty($proxy_port)) {
$_is_proxy = true; $_is_proxy = true;
$fp = fsockopen($proxy_host,$proxy_port,$errno,$errstr,$timeout); $fp = fsockopen($proxy_host, $proxy_port, $errno, $errstr, $timeout);
} else { } else {
$fp = fsockopen($server_name,$port,$errno,$errstr,$timeout); $fp = fsockopen($server_name, $port, $errno, $errstr, $timeout);
} }
if (!$fp) { if (!$fp) {
trigger_error("[plugin] unable to fetch: $errstr ($errno)",E_USER_NOTICE); trigger_error("[plugin] unable to fetch: $errstr ($errno)", E_USER_NOTICE);
return; return;
} else { } else {
@@ -179,35 +181,35 @@ function smarty_function_fetch($params, $template)
} }
if (isset($extra_headers) && is_array($extra_headers)) { if (isset($extra_headers) && is_array($extra_headers)) {
foreach ($extra_headers as $curr_header) { foreach ($extra_headers as $curr_header) {
fputs($fp, $curr_header."\r\n"); fputs($fp, $curr_header . "\r\n");
} }
} }
if (!empty($user) && !empty($pass)) { if (!empty($user) && !empty($pass)) {
fputs($fp, "Authorization: BASIC ".base64_encode("$user:$pass")."\r\n"); fputs($fp, "Authorization: BASIC " . base64_encode("$user:$pass") . "\r\n");
} }
fputs($fp, "\r\n"); fputs($fp, "\r\n");
while (!feof($fp)) { while (!feof($fp)) {
$content .= fgets($fp,4096); $content .= fgets($fp, 4096);
} }
fclose($fp); fclose($fp);
$csplit = preg_split("!\r\n\r\n!",$content,2); $csplit = preg_split("!\r\n\r\n!", $content, 2);
$content = $csplit[1]; $content = $csplit[1];
if (!empty($params['assign_headers'])) { if (!empty($params['assign_headers'])) {
$template->assign($params['assign_headers'],preg_split("!\r\n!",$csplit[0])); $template->assign($params['assign_headers'], preg_split("!\r\n!", $csplit[0]));
} }
} }
} else { } else {
trigger_error("[plugin fetch] unable to parse URL, check syntax",E_USER_NOTICE); trigger_error("[plugin fetch] unable to parse URL, check syntax", E_USER_NOTICE);
return; return;
} }
} else { } else {
$content = @file_get_contents($params['file']); $content = @file_get_contents($params['file']);
if ($content === false) { if ($content === false) {
throw new SmartyException("{fetch} cannot read resource '" . $params['file'] ."'"); throw new SmartyException("{fetch} cannot read resource '" . $params['file'] . "'");
} }
} }

View File

@@ -2,13 +2,12 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsFunction * @subpackage PluginsFunction
*/ */
/** /**
* Smarty {html_checkboxes} function plugin * Smarty {html_checkboxes} function plugin
*
* File: function.html_checkboxes.php<br> * File: function.html_checkboxes.php<br>
* Type: function<br> * Type: function<br>
* Name: html_checkboxes<br> * Name: html_checkboxes<br>
@@ -32,15 +31,17 @@
* - escape (optional) - escape the content (not value), defaults to true * - escape (optional) - escape the content (not value), defaults to true
* </pre> * </pre>
* *
* @link http://www.smarty.net/manual/en/language.function.html.checkboxes.php {html_checkboxes} * @link http://www.smarty.net/manual/en/language.function.html.checkboxes.php {html_checkboxes}
* (Smarty online manual) * (Smarty online manual)
* @author Christopher Kvarme <christopher.kvarme@flashjab.com> * @author Christopher Kvarme <christopher.kvarme@flashjab.com>
* @author credits to Monte Ohrt <monte at ohrt dot com> * @author credits to Monte Ohrt <monte at ohrt dot com>
* @version 1.0 * @version 1.0
* @param array $params parameters *
* @param array $params parameters
* @param object $template template object * @param object $template template object
*
* @return string * @return string
* @uses smarty_function_escape_special_chars() * @uses smarty_function_escape_special_chars()
*/ */
function smarty_function_html_checkboxes($params, $template) function smarty_function_html_checkboxes($params, $template)
{ {
@@ -55,12 +56,12 @@ function smarty_function_html_checkboxes($params, $template)
$labels = true; $labels = true;
$label_ids = false; $label_ids = false;
$output = null; $output = null;
$pos = null; $pos = null;
$extra = ''; $extra = '';
foreach($params as $_key => $_val) { foreach ($params as $_key => $_val) {
switch($_key) { switch ($_key) {
case 'name': case 'name':
case 'separator': case 'separator':
$$_key = (string) $_val; $$_key = (string) $_val;
@@ -90,7 +91,7 @@ function smarty_function_html_checkboxes($params, $template)
if (method_exists($_sel, "__toString")) { if (method_exists($_sel, "__toString")) {
$_sel = smarty_function_escape_special_chars((string) $_sel->__toString()); $_sel = smarty_function_escape_special_chars((string) $_sel->__toString());
} else { } else {
trigger_error("html_checkboxes: selected attribute contains an object of class '". get_class($_sel) ."' without __toString() method", E_USER_NOTICE); trigger_error("html_checkboxes: selected attribute contains an object of class '" . get_class($_sel) . "' without __toString() method", E_USER_NOTICE);
continue; continue;
} }
} else { } else {
@@ -102,7 +103,7 @@ function smarty_function_html_checkboxes($params, $template)
if (method_exists($_val, "__toString")) { if (method_exists($_val, "__toString")) {
$selected = smarty_function_escape_special_chars((string) $_val->__toString()); $selected = smarty_function_escape_special_chars((string) $_val->__toString());
} else { } else {
trigger_error("html_checkboxes: selected attribute is an object of class '". get_class($_val) ."' without __toString() method", E_USER_NOTICE); trigger_error("html_checkboxes: selected attribute is an object of class '" . get_class($_val) . "' without __toString() method", E_USER_NOTICE);
} }
} else { } else {
$selected = smarty_function_escape_special_chars((string) $_val); $selected = smarty_function_escape_special_chars((string) $_val);
@@ -117,11 +118,12 @@ function smarty_function_html_checkboxes($params, $template)
case 'assign': case 'assign':
break; break;
case 'pos': case 'pos':
$$_key = array_values((array)$_val); $$_key = array_values((array)$_val);
break; break;
case 'strict': break; case 'strict':
break;
case 'disabled': case 'disabled':
case 'readonly': case 'readonly':
@@ -139,8 +141,8 @@ function smarty_function_html_checkboxes($params, $template)
// omit break; to fall through! // omit break; to fall through!
default: default:
if(!is_array($_val)) { if (!is_array($_val)) {
$extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"'; $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
} else { } else {
trigger_error("html_checkboxes: extra attribute '$_key' cannot be an array", E_USER_NOTICE); trigger_error("html_checkboxes: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
} }
@@ -148,78 +150,81 @@ function smarty_function_html_checkboxes($params, $template)
} }
} }
if (!isset($options) && !isset($values)) if (!isset($options) && !isset($values)) {
return ''; /* raise error here? */ return '';
} /* raise error here? */
$_html_result = array(); $_html_result = array();
if (isset($options)) { if (isset($options)) {
foreach ($options as $_key=>$_val) { foreach ($options as $_key => $_val) {
$_pos = isset($pos[$_key]) ? $pos[$_key] : ''; $_pos = isset($pos[$_key]) ? $pos[$_key] : '';
$_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $_pos, $escape); $_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $_pos, $escape);
} }
} else { } else {
foreach ($values as $_i=>$_key) { foreach ($values as $_i => $_key) {
$_val = isset($output[$_i]) ? $output[$_i] : ''; $_val = isset($output[$_i]) ? $output[$_i] : '';
$_pos = isset($pos[$_i]) ? $pos[$_i] : ''; $_pos = isset($pos[$_i]) ? $pos[$_i] : '';
$_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $_pos, $escape); $_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $_pos, $escape);
} }
} }
if(!empty($params['assign'])) { if (!empty($params['assign'])) {
$template->assign($params['assign'], $_html_result); $template->assign($params['assign'], $_html_result);
} else { } else {
return implode("\n", $_html_result); return implode("\n", $_html_result);
} }
} }
function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids, $pos, $escape=true) { function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids, $pos, $escape = true)
{
$_output = ''; $_output = '';
if (is_object($value)) { if (is_object($value)) {
if (method_exists($value, "__toString")) { if (method_exists($value, "__toString")) {
$value = (string) $value->__toString(); $value = (string) $value->__toString();
} else { } else {
trigger_error("html_options: value is an object of class '". get_class($value) ."' without __toString() method", E_USER_NOTICE); trigger_error("html_options: value is an object of class '" . get_class($value) . "' without __toString() method", E_USER_NOTICE);
return ''; return '';
} }
} else { } else {
$value = (string) $value; $value = (string) $value;
} }
if (is_object($output)) { if (is_object($output)) {
if (method_exists($output, "__toString")) { if (method_exists($output, "__toString")) {
$output = (string) $output->__toString(); $output = (string) $output->__toString();
} else { } else {
trigger_error("html_options: output is an object of class '". get_class($output) ."' without __toString() method", E_USER_NOTICE); trigger_error("html_options: output is an object of class '" . get_class($output) . "' without __toString() method", E_USER_NOTICE);
return ''; return '';
} }
} else { } else {
$output = (string) $output; $output = (string) $output;
} }
if ($labels) { if ($labels) {
if ($label_ids) { if ($label_ids) {
$_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER, '_', $name . '_' . $value)); $_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER, '_', $name . '_' . $value));
$_output .= '<label for="' . $_id . '">'; $_output .= '<label for="' . $_id . '">';
} else { } else {
$_output .= '<label>'; $_output .= '<label>';
} }
} }
$name = smarty_function_escape_special_chars($name); $name = smarty_function_escape_special_chars($name);
$value = smarty_function_escape_special_chars($value); $value = smarty_function_escape_special_chars($value);
if ($escape) { if ($escape) {
$output = smarty_function_escape_special_chars($output); $output = smarty_function_escape_special_chars($output);
} }
$_output .= '<input type="checkbox" name="' . $name . '[' . $pos . ']" value="' . $value . '"'; $_output .= '<input type="checkbox" name="' . $name . '[' . $pos . ']" value="' . $value . '"';
if ($labels && $label_ids) { if ($labels && $label_ids) {
$_output .= ' id="' . $_id . '"'; $_output .= ' id="' . $_id . '"';
} }
if (is_array($selected)) { if (is_array($selected)) {
if (isset($selected[$value])) { if (isset($selected[$value])) {
$_output .= ' checked="checked"'; $_output .= ' checked="checked"';
@@ -227,14 +232,13 @@ function smarty_function_html_checkboxes_output($name, $value, $output, $selecte
} elseif ($value === $selected) { } elseif ($value === $selected) {
$_output .= ' checked="checked"'; $_output .= ' checked="checked"';
} }
$_output .= $extra . ' />' . $output; $_output .= $extra . ' />' . $output;
if ($labels) { if ($labels) {
$_output .= '</label>'; $_output .= '</label>';
} }
$_output .= $separator; $_output .= $separator;
return $_output; return $_output;
} }
?>

View File

@@ -2,13 +2,12 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsFunction * @subpackage PluginsFunction
*/ */
/** /**
* Smarty {html_image} function plugin * Smarty {html_image} function plugin
*
* Type: function<br> * Type: function<br>
* Name: html_image<br> * Name: html_image<br>
* Date: Feb 24, 2003<br> * Date: Feb 24, 2003<br>
@@ -24,15 +23,18 @@
* - path_prefix - prefix for path output (optional, default empty) * - path_prefix - prefix for path output (optional, default empty)
* </pre> * </pre>
* *
* @link http://www.smarty.net/manual/en/language.function.html.image.php {html_image} * @link http://www.smarty.net/manual/en/language.function.html.image.php {html_image}
* (Smarty online manual) * (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
* @author credits to Duda <duda@big.hu> * @author credits to Duda <duda@big.hu>
* @version 1.0 * @version 1.0
*
* @param array $params parameters * @param array $params parameters
* @param Smarty_Internal_Template $template template object * @param Smarty_Internal_Template $template template object
*
* @throws SmartyException
* @return string * @return string
* @uses smarty_function_escape_special_chars() * @uses smarty_function_escape_special_chars()
*/ */
function smarty_function_html_image($params, $template) function smarty_function_html_image($params, $template)
{ {
@@ -112,7 +114,7 @@ function smarty_function_html_image($params, $template)
} }
} else { } else {
// local file // local file
if (!$template->smarty->security_policy->isTrustedResourceDir($params['file'])) { if (!$template->smarty->security_policy->isTrustedResourceDir($_image_path)) {
return; return;
} }
} }

View File

@@ -1,14 +1,13 @@
<?php <?php
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsFunction * @subpackage PluginsFunction
*/ */
/** /**
* Smarty {html_options} function plugin * Smarty {html_options} function plugin
*
* Type: function<br> * Type: function<br>
* Name: html_options<br> * Name: html_options<br>
* Purpose: Prints the list of <option> tags generated from * Purpose: Prints the list of <option> tags generated from
@@ -23,17 +22,18 @@
* - id (optional) - string default not set * - id (optional) - string default not set
* - class (optional) - string default not set * - class (optional) - string default not set
* </pre> * </pre>
* *
* @link http://www.smarty.net/manual/en/language.function.html.options.php {html_image} * @link http://www.smarty.net/manual/en/language.function.html.options.php {html_image}
* (Smarty online manual) * (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
* @author Ralf Strehle (minor optimization) <ralf dot strehle at yahoo dot de> * @author Ralf Strehle (minor optimization) <ralf dot strehle at yahoo dot de>
* @param array $params parameters *
* @param Smarty_Internal_Template $template template object * @param array $params parameters
* @return string *
* @uses smarty_function_escape_special_chars() * @return string
* @uses smarty_function_escape_special_chars()
*/ */
function smarty_function_html_options($params, $template) function smarty_function_html_options($params)
{ {
require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php');
@@ -44,7 +44,7 @@ function smarty_function_html_options($params, $template)
$output = null; $output = null;
$id = null; $id = null;
$class = null; $class = null;
$label = true; $label = true;
$extra = ''; $extra = '';
@@ -73,7 +73,7 @@ function smarty_function_html_options($params, $template)
if (method_exists($_sel, "__toString")) { if (method_exists($_sel, "__toString")) {
$_sel = smarty_function_escape_special_chars((string) $_sel->__toString()); $_sel = smarty_function_escape_special_chars((string) $_sel->__toString());
} else { } else {
trigger_error("html_options: selected attribute contains an object of class '". get_class($_sel) ."' without __toString() method", E_USER_NOTICE); trigger_error("html_options: selected attribute contains an object of class '" . get_class($_sel) . "' without __toString() method", E_USER_NOTICE);
continue; continue;
} }
} else { } else {
@@ -85,47 +85,49 @@ function smarty_function_html_options($params, $template)
if (method_exists($_val, "__toString")) { if (method_exists($_val, "__toString")) {
$selected = smarty_function_escape_special_chars((string) $_val->__toString()); $selected = smarty_function_escape_special_chars((string) $_val->__toString());
} else { } else {
trigger_error("html_options: selected attribute is an object of class '". get_class($_val) ."' without __toString() method", E_USER_NOTICE); trigger_error("html_options: selected attribute is an object of class '" . get_class($_val) . "' without __toString() method", E_USER_NOTICE);
} }
} else { } else {
$selected = smarty_function_escape_special_chars((string) $_val); $selected = smarty_function_escape_special_chars((string) $_val);
} }
break; break;
case 'label': case 'label':
if ($_val == 'true' || $_val == 'false') if ($_val == 'true' || $_val == 'false')
$$_key = (string)$_val; $$_key = (string)$_val;
break; break;
case 'strict':
break;
case 'strict': break;
case 'disabled': case 'disabled':
case 'readonly': case 'readonly':
if (!empty($params['strict'])) { if (!empty($params['strict'])) {
if (!is_scalar($_val)) { if (!is_scalar($_val)) {
trigger_error("html_options: $_key attribute must be a scalar, only boolean true or string '$_key' will actually add the attribute", E_USER_NOTICE); trigger_error("html_options: $_key attribute must be a scalar, only boolean true or string '$_key' will actually add the attribute", E_USER_NOTICE);
} }
if ($_val === true || $_val === $_key) { if ($_val === true || $_val === $_key) {
$extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_key) . '"'; $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_key) . '"';
} }
break; break;
} }
// omit break; to fall through! // omit break; to fall through!
default: default:
if (!is_array($_val)) { if (!is_array($_val)) {
$extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"'; $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
} else { } else {
trigger_error("html_options: extra attribute '$_key' cannot be an array", E_USER_NOTICE); trigger_error("html_options: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
} }
break; break;
} }
} }
if (!isset($options) && !isset($values)) { if (!isset($options) && !isset($values)) {
/* raise error here? */ /* raise error here? */
return ''; return '';
} }
@@ -140,14 +142,14 @@ function smarty_function_html_options($params, $template)
foreach ($values as $_i => $_key) { foreach ($values as $_i => $_key) {
$_val = isset($output[$_i]) ? $output[$_i] : ''; $_val = isset($output[$_i]) ? $output[$_i] : '';
$_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected, $id, $class, $label, $_idx); $_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected, $id, $class, $label, $_idx);
} }
} }
if (!empty($name)) { if (!empty($name)) {
$_html_class = !empty($class) ? ' class="'.$class.'"' : ''; $_html_class = !empty($class) ? ' class="' . $class . '"' : '';
$_html_id = !empty($id) ? ' id="'.$id.'"' : ''; $_html_id = !empty($id) ? ' id="' . $id . '"' : '';
$_html_result = '<select name="' . $name . '"' . $_html_class . $_html_id . $extra . '>' . "\n" . $_html_result . '</select>' . "\n"; $_html_result = '<select name="' . $name . '"' . $_html_class . $_html_id . $extra . '>' . "\n" . $_html_result . '</select>' . "\n";
} }
return $_html_result; return $_html_result;
} }
@@ -156,7 +158,7 @@ function smarty_function_html_options_optoutput($key, $value, $selected, $id, $c
{ {
if (!is_array($value)) { if (!is_array($value)) {
$_key = smarty_function_escape_special_chars($key); $_key = smarty_function_escape_special_chars($key);
$_html_result = '<option ' . (($label == 'true') ? ' label="' . smarty_function_escape_special_chars($value) . '"' : '') . ' value="' . $_key . '"'; $_html_result = '<option' . (($label == 'true') ? ' label="' . smarty_function_escape_special_chars($value) . '"' : '') . ' value="' . $_key . '"';
if (is_array($selected)) { if (is_array($selected)) {
if (isset($selected[$_key])) { if (isset($selected[$_key])) {
$_html_result .= ' selected="selected"'; $_html_result .= ' selected="selected"';
@@ -164,36 +166,37 @@ function smarty_function_html_options_optoutput($key, $value, $selected, $id, $c
} elseif ($_key === $selected) { } elseif ($_key === $selected) {
$_html_result .= ' selected="selected"'; $_html_result .= ' selected="selected"';
} }
$_html_class = !empty($class) ? ' class="'.$class.' option"' : ''; $_html_class = !empty($class) ? ' class="' . $class . ' option"' : '';
$_html_id = !empty($id) ? ' id="'.$id.'-'.$idx.'"' : ''; $_html_id = !empty($id) ? ' id="' . $id . '-' . $idx . '"' : '';
if (is_object($value)) { if (is_object($value)) {
if (method_exists($value, "__toString")) { if (method_exists($value, "__toString")) {
$value = smarty_function_escape_special_chars((string) $value->__toString()); $value = smarty_function_escape_special_chars((string) $value->__toString());
} else { } else {
trigger_error("html_options: value is an object of class '". get_class($value) ."' without __toString() method", E_USER_NOTICE); trigger_error("html_options: value is an object of class '" . get_class($value) . "' without __toString() method", E_USER_NOTICE);
return ''; return '';
} }
} else { } else {
$value = smarty_function_escape_special_chars((string) $value); $value = smarty_function_escape_special_chars((string) $value);
} }
$_html_result .= $_html_class . $_html_id . '>' . $value . '</option>' . "\n"; $_html_result .= $_html_class . $_html_id . '>' . $value . '</option>' . "\n";
$idx++; $idx ++;
} else { } else {
$_idx = 0; $_idx = 0;
$_html_result = smarty_function_html_options_optgroup($key, $value, $selected, !empty($id) ? ($id.'-'.$idx) : null, $class, $label, $_idx); $_html_result = smarty_function_html_options_optgroup($key, $value, $selected, !empty($id) ? ($id . '-' . $idx) : null, $class, $_idx);
$idx++; $idx ++;
} }
return $_html_result; return $_html_result;
} }
function smarty_function_html_options_optgroup($key, $values, $selected, $id, $class, $label, &$idx) function smarty_function_html_options_optgroup($key, $values, $selected, $id, $class, $label, &$idx)
{ {
$optgroup_html = '<optgroup label="' . smarty_function_escape_special_chars($key) . '">' . "\n"; $optgroup_html = '<optgroup label="' . smarty_function_escape_special_chars($key) . '">' . "\n";
foreach ($values as $key => $value) { foreach ($values as $key => $value) {
$optgroup_html .= smarty_function_html_options_optoutput($key, $value, $selected, $id, $class, $label, $idx); $optgroup_html .= smarty_function_html_options_optoutput($key, $value, $selected, $id, $class, $label, $idx);
} }
$optgroup_html .= "</optgroup>\n"; $optgroup_html .= "</optgroup>\n";
return $optgroup_html;
}
?> return $optgroup_html;
}

View File

@@ -2,13 +2,12 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsFunction * @subpackage PluginsFunction
*/ */
/** /**
* Smarty {html_radios} function plugin * Smarty {html_radios} function plugin
*
* File: function.html_radios.php<br> * File: function.html_radios.php<br>
* Type: function<br> * Type: function<br>
* Name: html_radios<br> * Name: html_radios<br>
@@ -32,15 +31,17 @@
* {html_radios values=$ids checked=$checked separator='<br>' output=$names} * {html_radios values=$ids checked=$checked separator='<br>' output=$names}
* </pre> * </pre>
* *
* @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios} * @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios}
* (Smarty online manual) * (Smarty online manual)
* @author Christopher Kvarme <christopher.kvarme@flashjab.com> * @author Christopher Kvarme <christopher.kvarme@flashjab.com>
* @author credits to Monte Ohrt <monte at ohrt dot com> * @author credits to Monte Ohrt <monte at ohrt dot com>
* @version 1.0 * @version 1.0
*
* @param array $params parameters * @param array $params parameters
* @param Smarty_Internal_Template $template template object * @param Smarty_Internal_Template $template template object
*
* @return string * @return string
* @uses smarty_function_escape_special_chars() * @uses smarty_function_escape_special_chars()
*/ */
function smarty_function_html_radios($params, $template) function smarty_function_html_radios($params, $template)
{ {
@@ -72,7 +73,7 @@ function smarty_function_html_radios($params, $template)
if (method_exists($_val, "__toString")) { if (method_exists($_val, "__toString")) {
$selected = smarty_function_escape_special_chars((string) $_val->__toString()); $selected = smarty_function_escape_special_chars((string) $_val->__toString());
} else { } else {
trigger_error("html_radios: selected attribute is an object of class '". get_class($_val) ."' without __toString() method", E_USER_NOTICE); trigger_error("html_radios: selected attribute is an object of class '" . get_class($_val) . "' without __toString() method", E_USER_NOTICE);
} }
} else { } else {
$selected = (string) $_val; $selected = (string) $_val;
@@ -102,7 +103,8 @@ function smarty_function_html_radios($params, $template)
case 'assign': case 'assign':
break; break;
case 'strict': break; case 'strict':
break;
case 'disabled': case 'disabled':
case 'readonly': case 'readonly':
@@ -117,7 +119,7 @@ function smarty_function_html_radios($params, $template)
break; break;
} }
// omit break; to fall through! // omit break; to fall through!
default: default:
if (!is_array($_val)) { if (!is_array($_val)) {
@@ -163,7 +165,7 @@ function smarty_function_html_radios_output($name, $value, $output, $selected, $
if (method_exists($value, "__toString")) { if (method_exists($value, "__toString")) {
$value = (string) $value->__toString(); $value = (string) $value->__toString();
} else { } else {
trigger_error("html_options: value is an object of class '". get_class($value) ."' without __toString() method", E_USER_NOTICE); trigger_error("html_options: value is an object of class '" . get_class($value) . "' without __toString() method", E_USER_NOTICE);
return ''; return '';
} }
@@ -175,7 +177,7 @@ function smarty_function_html_radios_output($name, $value, $output, $selected, $
if (method_exists($output, "__toString")) { if (method_exists($output, "__toString")) {
$output = (string) $output->__toString(); $output = (string) $output->__toString();
} else { } else {
trigger_error("html_options: output is an object of class '". get_class($output) ."' without __toString() method", E_USER_NOTICE); trigger_error("html_options: output is an object of class '" . get_class($output) . "' without __toString() method", E_USER_NOTICE);
return ''; return '';
} }

View File

@@ -2,7 +2,7 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsFunction * @subpackage PluginsFunction
*/ */
@@ -17,11 +17,9 @@ require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
/** /**
* Smarty {html_select_date} plugin * Smarty {html_select_date} plugin
*
* Type: function<br> * Type: function<br>
* Name: html_select_date<br> * Name: html_select_date<br>
* Purpose: Prints the dropdowns for date selection. * Purpose: Prints the dropdowns for date selection.
*
* ChangeLog: * ChangeLog:
* <pre> * <pre>
* - 1.0 initial release * - 1.0 initial release
@@ -41,17 +39,18 @@ require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
* added attributes month_names, *_id * added attributes month_names, *_id
* </pre> * </pre>
* *
* @link http://www.smarty.net/manual/en/language.function.html.select.date.php {html_select_date} * @link http://www.smarty.net/manual/en/language.function.html.select.date.php {html_select_date}
* (Smarty online manual) * (Smarty online manual)
* @version 2.0 * @version 2.0
* @author Andrei Zmievski * @author Andrei Zmievski
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
* @author Rodney Rehm * @author Rodney Rehm
* @param array $params parameters *
* @param Smarty_Internal_Template $template template object * @param array $params parameters
*
* @return string * @return string
*/ */
function smarty_function_html_select_date($params, $template) function smarty_function_html_select_date($params)
{ {
// generate timestamps used for month names only // generate timestamps used for month names only
static $_month_timestamps = null; static $_month_timestamps = null;
@@ -59,7 +58,7 @@ function smarty_function_html_select_date($params, $template)
if ($_month_timestamps === null) { if ($_month_timestamps === null) {
$_current_year = date('Y'); $_current_year = date('Y');
$_month_timestamps = array(); $_month_timestamps = array();
for ($i = 1; $i <= 12; $i++) { for ($i = 1; $i <= 12; $i ++) {
$_month_timestamps[$i] = mktime(0, 0, 0, $i, 1, 2000); $_month_timestamps[$i] = mktime(0, 0, 0, $i, 1, 2000);
} }
} }
@@ -181,22 +180,20 @@ function smarty_function_html_select_date($params, $template)
if (isset($params['time']) && is_array($params['time'])) { if (isset($params['time']) && is_array($params['time'])) {
if (isset($params['time'][$prefix . 'Year'])) { if (isset($params['time'][$prefix . 'Year'])) {
// $_REQUEST[$field_array] given // $_REQUEST[$field_array] given
foreach (array('Y' => 'Year', 'm' => 'Month', 'd' => 'Day') as $_elementKey => $_elementName) { foreach (array('Y' => 'Year', 'm' => 'Month', 'd' => 'Day') as $_elementKey => $_elementName) {
$_variableName = '_' . strtolower($_elementName); $_variableName = '_' . strtolower($_elementName);
$$_variableName = isset($params['time'][$prefix . $_elementName]) $$_variableName = isset($params['time'][$prefix . $_elementName])
? $params['time'][$prefix . $_elementName] ? $params['time'][$prefix . $_elementName]
: date($_elementKey); : date($_elementKey);
} }
$time = mktime(0, 0, 0, $_month, $_day, $_year);
} elseif (isset($params['time'][$field_array][$prefix . 'Year'])) { } elseif (isset($params['time'][$field_array][$prefix . 'Year'])) {
// $_REQUEST given // $_REQUEST given
foreach (array('Y' => 'Year', 'm' => 'Month', 'd' => 'Day') as $_elementKey => $_elementName) { foreach (array('Y' => 'Year', 'm' => 'Month', 'd' => 'Day') as $_elementKey => $_elementName) {
$_variableName = '_' . strtolower($_elementName); $_variableName = '_' . strtolower($_elementName);
$$_variableName = isset($params['time'][$field_array][$prefix . $_elementName]) $$_variableName = isset($params['time'][$field_array][$prefix . $_elementName])
? $params['time'][$field_array][$prefix . $_elementName] ? $params['time'][$field_array][$prefix . $_elementName]
: date($_elementKey); : date($_elementKey);
} }
$time = mktime(0, 0, 0, $_month, $_day, $_year);
} else { } else {
// no date found, use NOW // no date found, use NOW
list($_year, $_month, $_day) = $time = explode('-', date('Y-m-d')); list($_year, $_month, $_day) = $time = explode('-', date('Y-m-d'));
@@ -219,9 +216,9 @@ function smarty_function_html_select_date($params, $template)
if ($t === null) { if ($t === null) {
$$key = (int) $_current_year; $$key = (int) $_current_year;
} elseif ($t[0] == '+') { } elseif ($t[0] == '+') {
$$key = (int) ($_current_year + trim(substr($t, 1))); $$key = (int) ($_current_year + (int)trim(substr($t, 1)));
} elseif ($t[0] == '-') { } elseif ($t[0] == '-') {
$$key = (int) ($_current_year - trim(substr($t, 1))); $$key = (int) ($_current_year - (int)trim(substr($t, 1)));
} else { } else {
$$key = (int) $$key; $$key = (int) $$key;
} }
@@ -236,7 +233,6 @@ function smarty_function_html_select_date($params, $template)
// generate year <select> or <input> // generate year <select> or <input>
if ($display_years) { if ($display_years) {
$_html_years = '';
$_extra = ''; $_extra = '';
$_name = $field_array ? ($field_array . '[' . $prefix . 'Year]') : ($prefix . 'Year'); $_name = $field_array ? ($field_array . '[' . $prefix . 'Year]') : ($prefix . 'Year');
if ($all_extra) { if ($all_extra) {
@@ -252,8 +248,8 @@ function smarty_function_html_select_date($params, $template)
$_html_years = '<select name="' . $_name . '"'; $_html_years = '<select name="' . $_name . '"';
if ($year_id !== null || $all_id !== null) { if ($year_id !== null || $all_id !== null) {
$_html_years .= ' id="' . smarty_function_escape_special_chars( $_html_years .= ' id="' . smarty_function_escape_special_chars(
$year_id !== null ? ( $year_id ? $year_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name ) $year_id !== null ? ($year_id ? $year_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
) . '"'; ) . '"';
} }
if ($year_size) { if ($year_size) {
$_html_years .= ' size="' . $year_size . '"'; $_html_years .= ' size="' . $year_size . '"';
@@ -261,11 +257,11 @@ function smarty_function_html_select_date($params, $template)
$_html_years .= $_extra . $extra_attrs . '>' . $option_separator; $_html_years .= $_extra . $extra_attrs . '>' . $option_separator;
if (isset($year_empty) || isset($all_empty)) { if (isset($year_empty) || isset($all_empty)) {
$_html_years .= '<option value="">' . ( isset($year_empty) ? $year_empty : $all_empty ) . '</option>' . $option_separator; $_html_years .= '<option value="">' . (isset($year_empty) ? $year_empty : $all_empty) . '</option>' . $option_separator;
} }
$op = $start_year > $end_year ? -1 : 1; $op = $start_year > $end_year ? - 1 : 1;
for ($i=$start_year; $op > 0 ? $i <= $end_year : $i >= $end_year; $i += $op) { for ($i = $start_year; $op > 0 ? $i <= $end_year : $i >= $end_year; $i += $op) {
$_html_years .= '<option value="' . $i . '"' $_html_years .= '<option value="' . $i . '"'
. ($_year == $i ? ' selected="selected"' : '') . ($_year == $i ? ' selected="selected"' : '')
. '>' . $i . '</option>' . $option_separator; . '>' . $i . '</option>' . $option_separator;
@@ -277,7 +273,6 @@ function smarty_function_html_select_date($params, $template)
// generate month <select> or <input> // generate month <select> or <input>
if ($display_months) { if ($display_months) {
$_html_month = '';
$_extra = ''; $_extra = '';
$_name = $field_array ? ($field_array . '[' . $prefix . 'Month]') : ($prefix . 'Month'); $_name = $field_array ? ($field_array . '[' . $prefix . 'Month]') : ($prefix . 'Month');
if ($all_extra) { if ($all_extra) {
@@ -290,8 +285,8 @@ function smarty_function_html_select_date($params, $template)
$_html_months = '<select name="' . $_name . '"'; $_html_months = '<select name="' . $_name . '"';
if ($month_id !== null || $all_id !== null) { if ($month_id !== null || $all_id !== null) {
$_html_months .= ' id="' . smarty_function_escape_special_chars( $_html_months .= ' id="' . smarty_function_escape_special_chars(
$month_id !== null ? ( $month_id ? $month_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name ) $month_id !== null ? ($month_id ? $month_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
) . '"'; ) . '"';
} }
if ($month_size) { if ($month_size) {
$_html_months .= ' size="' . $month_size . '"'; $_html_months .= ' size="' . $month_size . '"';
@@ -299,10 +294,10 @@ function smarty_function_html_select_date($params, $template)
$_html_months .= $_extra . $extra_attrs . '>' . $option_separator; $_html_months .= $_extra . $extra_attrs . '>' . $option_separator;
if (isset($month_empty) || isset($all_empty)) { if (isset($month_empty) || isset($all_empty)) {
$_html_months .= '<option value="">' . ( isset($month_empty) ? $month_empty : $all_empty ) . '</option>' . $option_separator; $_html_months .= '<option value="">' . (isset($month_empty) ? $month_empty : $all_empty) . '</option>' . $option_separator;
} }
for ($i = 1; $i <= 12; $i++) { for ($i = 1; $i <= 12; $i ++) {
$_val = sprintf('%02d', $i); $_val = sprintf('%02d', $i);
$_text = isset($month_names) ? smarty_function_escape_special_chars($month_names[$i]) : ($month_format == "%m" ? $_val : strftime($month_format, $_month_timestamps[$i])); $_text = isset($month_names) ? smarty_function_escape_special_chars($month_names[$i]) : ($month_format == "%m" ? $_val : strftime($month_format, $_month_timestamps[$i]));
$_value = $month_value_format == "%m" ? $_val : strftime($month_value_format, $_month_timestamps[$i]); $_value = $month_value_format == "%m" ? $_val : strftime($month_value_format, $_month_timestamps[$i]);
@@ -316,7 +311,6 @@ function smarty_function_html_select_date($params, $template)
// generate day <select> or <input> // generate day <select> or <input>
if ($display_days) { if ($display_days) {
$_html_day = '';
$_extra = ''; $_extra = '';
$_name = $field_array ? ($field_array . '[' . $prefix . 'Day]') : ($prefix . 'Day'); $_name = $field_array ? ($field_array . '[' . $prefix . 'Day]') : ($prefix . 'Day');
if ($all_extra) { if ($all_extra) {
@@ -329,8 +323,8 @@ function smarty_function_html_select_date($params, $template)
$_html_days = '<select name="' . $_name . '"'; $_html_days = '<select name="' . $_name . '"';
if ($day_id !== null || $all_id !== null) { if ($day_id !== null || $all_id !== null) {
$_html_days .= ' id="' . smarty_function_escape_special_chars( $_html_days .= ' id="' . smarty_function_escape_special_chars(
$day_id !== null ? ( $day_id ? $day_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name ) $day_id !== null ? ($day_id ? $day_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
) . '"'; ) . '"';
} }
if ($day_size) { if ($day_size) {
$_html_days .= ' size="' . $day_size . '"'; $_html_days .= ' size="' . $day_size . '"';
@@ -338,13 +332,13 @@ function smarty_function_html_select_date($params, $template)
$_html_days .= $_extra . $extra_attrs . '>' . $option_separator; $_html_days .= $_extra . $extra_attrs . '>' . $option_separator;
if (isset($day_empty) || isset($all_empty)) { if (isset($day_empty) || isset($all_empty)) {
$_html_days .= '<option value="">' . ( isset($day_empty) ? $day_empty : $all_empty ) . '</option>' . $option_separator; $_html_days .= '<option value="">' . (isset($day_empty) ? $day_empty : $all_empty) . '</option>' . $option_separator;
} }
for ($i = 1; $i <= 31; $i++) { for ($i = 1; $i <= 31; $i ++) {
$_val = sprintf('%02d', $i); $_val = sprintf('%02d', $i);
$_text = $day_format == '%02d' ? $_val : sprintf($day_format, $i); $_text = $day_format == '%02d' ? $_val : sprintf($day_format, $i);
$_value = $day_value_format == '%02d' ? $_val : sprintf($day_value_format, $i); $_value = $day_value_format == '%02d' ? $_val : sprintf($day_value_format, $i);
$_html_days .= '<option value="' . $_value . '"' $_html_days .= '<option value="' . $_value . '"'
. ($_val == $_day ? ' selected="selected"' : '') . ($_val == $_day ? ' selected="selected"' : '')
. '>' . $_text . '</option>' . $option_separator; . '>' . $_text . '</option>' . $option_separator;
@@ -355,7 +349,7 @@ function smarty_function_html_select_date($params, $template)
// order the fields for output // order the fields for output
$_html = ''; $_html = '';
for ($i=0; $i <= 2; $i++) { for ($i = 0; $i <= 2; $i ++) {
switch ($field_order[$i]) { switch ($field_order[$i]) {
case 'Y': case 'Y':
case 'y': case 'y':
@@ -365,7 +359,7 @@ function smarty_function_html_select_date($params, $template)
} }
$_html .= $_html_years; $_html .= $_html_years;
} }
break; break;
case 'm': case 'm':
case 'M': case 'M':
@@ -375,7 +369,7 @@ function smarty_function_html_select_date($params, $template)
} }
$_html .= $_html_months; $_html .= $_html_months;
} }
break; break;
case 'd': case 'd':
case 'D': case 'D':
@@ -385,7 +379,7 @@ function smarty_function_html_select_date($params, $template)
} }
$_html .= $_html_days; $_html .= $_html_days;
} }
break; break;
} }
} }

View File

@@ -2,7 +2,7 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsFunction * @subpackage PluginsFunction
*/ */
@@ -17,21 +17,21 @@ require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
/** /**
* Smarty {html_select_time} function plugin * Smarty {html_select_time} function plugin
*
* Type: function<br> * Type: function<br>
* Name: html_select_time<br> * Name: html_select_time<br>
* Purpose: Prints the dropdowns for time selection * Purpose: Prints the dropdowns for time selection
* *
* @link http://www.smarty.net/manual/en/language.function.html.select.time.php {html_select_time} * @link http://www.smarty.net/manual/en/language.function.html.select.time.php {html_select_time}
* (Smarty online manual) * (Smarty online manual)
* @author Roberto Berto <roberto@berto.net> * @author Roberto Berto <roberto@berto.net>
* @author Monte Ohrt <monte AT ohrt DOT com> * @author Monte Ohrt <monte AT ohrt DOT com>
* @param array $params parameters *
* @param Smarty_Internal_Template $template template object * @param array $params parameters
*
* @return string * @return string
* @uses smarty_make_timestamp() * @uses smarty_make_timestamp()
*/ */
function smarty_function_html_select_time($params, $template) function smarty_function_html_select_time($params)
{ {
$prefix = "Time_"; $prefix = "Time_";
$field_array = null; $field_array = null;
@@ -151,7 +151,7 @@ function smarty_function_html_select_time($params, $template)
if (isset($params['time']) && is_array($params['time'])) { if (isset($params['time']) && is_array($params['time'])) {
if (isset($params['time'][$prefix . 'Hour'])) { if (isset($params['time'][$prefix . 'Hour'])) {
// $_REQUEST[$field_array] given // $_REQUEST[$field_array] given
foreach (array('H' => 'Hour', 'i' => 'Minute', 's' => 'Second') as $_elementKey => $_elementName) { foreach (array('H' => 'Hour', 'i' => 'Minute', 's' => 'Second') as $_elementKey => $_elementName) {
$_variableName = '_' . strtolower($_elementName); $_variableName = '_' . strtolower($_elementName);
$$_variableName = isset($params['time'][$prefix . $_elementName]) $$_variableName = isset($params['time'][$prefix . $_elementName])
? $params['time'][$prefix . $_elementName] ? $params['time'][$prefix . $_elementName]
@@ -160,11 +160,11 @@ function smarty_function_html_select_time($params, $template)
$_meridian = isset($params['time'][$prefix . 'Meridian']) $_meridian = isset($params['time'][$prefix . 'Meridian'])
? (' ' . $params['time'][$prefix . 'Meridian']) ? (' ' . $params['time'][$prefix . 'Meridian'])
: ''; : '';
$time = strtotime( $_hour . ':' . $_minute . ':' . $_second . $_meridian ); $time = strtotime($_hour . ':' . $_minute . ':' . $_second . $_meridian);
list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time)); list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time));
} elseif (isset($params['time'][$field_array][$prefix . 'Hour'])) { } elseif (isset($params['time'][$field_array][$prefix . 'Hour'])) {
// $_REQUEST given // $_REQUEST given
foreach (array('H' => 'Hour', 'i' => 'Minute', 's' => 'Second') as $_elementKey => $_elementName) { foreach (array('H' => 'Hour', 'i' => 'Minute', 's' => 'Second') as $_elementKey => $_elementName) {
$_variableName = '_' . strtolower($_elementName); $_variableName = '_' . strtolower($_elementName);
$$_variableName = isset($params['time'][$field_array][$prefix . $_elementName]) $$_variableName = isset($params['time'][$field_array][$prefix . $_elementName])
? $params['time'][$field_array][$prefix . $_elementName] ? $params['time'][$field_array][$prefix . $_elementName]
@@ -173,7 +173,7 @@ function smarty_function_html_select_time($params, $template)
$_meridian = isset($params['time'][$field_array][$prefix . 'Meridian']) $_meridian = isset($params['time'][$field_array][$prefix . 'Meridian'])
? (' ' . $params['time'][$field_array][$prefix . 'Meridian']) ? (' ' . $params['time'][$field_array][$prefix . 'Meridian'])
: ''; : '';
$time = strtotime( $_hour . ':' . $_minute . ':' . $_second . $_meridian ); $time = strtotime($_hour . ':' . $_minute . ':' . $_second . $_meridian);
list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time)); list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time));
} else { } else {
// no date found, use NOW // no date found, use NOW
@@ -204,8 +204,8 @@ function smarty_function_html_select_time($params, $template)
$_html_hours = '<select name="' . $_name . '"'; $_html_hours = '<select name="' . $_name . '"';
if ($hour_id !== null || $all_id !== null) { if ($hour_id !== null || $all_id !== null) {
$_html_hours .= ' id="' . smarty_function_escape_special_chars( $_html_hours .= ' id="' . smarty_function_escape_special_chars(
$hour_id !== null ? ( $hour_id ? $hour_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name ) $hour_id !== null ? ($hour_id ? $hour_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
) . '"'; ) . '"';
} }
if ($hour_size) { if ($hour_size) {
$_html_hours .= ' size="' . $hour_size . '"'; $_html_hours .= ' size="' . $hour_size . '"';
@@ -213,12 +213,12 @@ function smarty_function_html_select_time($params, $template)
$_html_hours .= $_extra . $extra_attrs . '>' . $option_separator; $_html_hours .= $_extra . $extra_attrs . '>' . $option_separator;
if (isset($hour_empty) || isset($all_empty)) { if (isset($hour_empty) || isset($all_empty)) {
$_html_hours .= '<option value="">' . ( isset($hour_empty) ? $hour_empty : $all_empty ) . '</option>' . $option_separator; $_html_hours .= '<option value="">' . (isset($hour_empty) ? $hour_empty : $all_empty) . '</option>' . $option_separator;
} }
$start = $use_24_hours ? 0 : 1; $start = $use_24_hours ? 0 : 1;
$end = $use_24_hours ? 23 : 12; $end = $use_24_hours ? 23 : 12;
for ($i=$start; $i <= $end; $i++) { for ($i = $start; $i <= $end; $i ++) {
$_val = sprintf('%02d', $i); $_val = sprintf('%02d', $i);
$_text = $hour_format == '%02d' ? $_val : sprintf($hour_format, $i); $_text = $hour_format == '%02d' ? $_val : sprintf($hour_format, $i);
$_value = $hour_value_format == '%02d' ? $_val : sprintf($hour_value_format, $i); $_value = $hour_value_format == '%02d' ? $_val : sprintf($hour_value_format, $i);
@@ -226,7 +226,7 @@ function smarty_function_html_select_time($params, $template)
if (!$use_24_hours) { if (!$use_24_hours) {
$_hour12 = $_hour == 0 $_hour12 = $_hour == 0
? 12 ? 12
: ($_hour <= 12 ? $_hour : $_hour -12); : ($_hour <= 12 ? $_hour : $_hour - 12);
} }
$selected = $_hour !== null ? ($use_24_hours ? $_hour == $_val : $_hour12 == $_val) : null; $selected = $_hour !== null ? ($use_24_hours ? $_hour == $_val : $_hour12 == $_val) : null;
@@ -253,8 +253,8 @@ function smarty_function_html_select_time($params, $template)
$_html_minutes = '<select name="' . $_name . '"'; $_html_minutes = '<select name="' . $_name . '"';
if ($minute_id !== null || $all_id !== null) { if ($minute_id !== null || $all_id !== null) {
$_html_minutes .= ' id="' . smarty_function_escape_special_chars( $_html_minutes .= ' id="' . smarty_function_escape_special_chars(
$minute_id !== null ? ( $minute_id ? $minute_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name ) $minute_id !== null ? ($minute_id ? $minute_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
) . '"'; ) . '"';
} }
if ($minute_size) { if ($minute_size) {
$_html_minutes .= ' size="' . $minute_size . '"'; $_html_minutes .= ' size="' . $minute_size . '"';
@@ -262,11 +262,11 @@ function smarty_function_html_select_time($params, $template)
$_html_minutes .= $_extra . $extra_attrs . '>' . $option_separator; $_html_minutes .= $_extra . $extra_attrs . '>' . $option_separator;
if (isset($minute_empty) || isset($all_empty)) { if (isset($minute_empty) || isset($all_empty)) {
$_html_minutes .= '<option value="">' . ( isset($minute_empty) ? $minute_empty : $all_empty ) . '</option>' . $option_separator; $_html_minutes .= '<option value="">' . (isset($minute_empty) ? $minute_empty : $all_empty) . '</option>' . $option_separator;
} }
$selected = $_minute !== null ? ($_minute - $_minute % $minute_interval) : null; $selected = $_minute !== null ? ($_minute - $_minute % $minute_interval) : null;
for ($i=0; $i <= 59; $i += $minute_interval) { for ($i = 0; $i <= 59; $i += $minute_interval) {
$_val = sprintf('%02d', $i); $_val = sprintf('%02d', $i);
$_text = $minute_format == '%02d' ? $_val : sprintf($minute_format, $i); $_text = $minute_format == '%02d' ? $_val : sprintf($minute_format, $i);
$_value = $minute_value_format == '%02d' ? $_val : sprintf($minute_value_format, $i); $_value = $minute_value_format == '%02d' ? $_val : sprintf($minute_value_format, $i);
@@ -293,8 +293,8 @@ function smarty_function_html_select_time($params, $template)
$_html_seconds = '<select name="' . $_name . '"'; $_html_seconds = '<select name="' . $_name . '"';
if ($second_id !== null || $all_id !== null) { if ($second_id !== null || $all_id !== null) {
$_html_seconds .= ' id="' . smarty_function_escape_special_chars( $_html_seconds .= ' id="' . smarty_function_escape_special_chars(
$second_id !== null ? ( $second_id ? $second_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name ) $second_id !== null ? ($second_id ? $second_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
) . '"'; ) . '"';
} }
if ($second_size) { if ($second_size) {
$_html_seconds .= ' size="' . $second_size . '"'; $_html_seconds .= ' size="' . $second_size . '"';
@@ -302,11 +302,11 @@ function smarty_function_html_select_time($params, $template)
$_html_seconds .= $_extra . $extra_attrs . '>' . $option_separator; $_html_seconds .= $_extra . $extra_attrs . '>' . $option_separator;
if (isset($second_empty) || isset($all_empty)) { if (isset($second_empty) || isset($all_empty)) {
$_html_seconds .= '<option value="">' . ( isset($second_empty) ? $second_empty : $all_empty ) . '</option>' . $option_separator; $_html_seconds .= '<option value="">' . (isset($second_empty) ? $second_empty : $all_empty) . '</option>' . $option_separator;
} }
$selected = $_second !== null ? ($_second - $_second % $second_interval) : null; $selected = $_second !== null ? ($_second - $_second % $second_interval) : null;
for ($i=0; $i <= 59; $i += $second_interval) { for ($i = 0; $i <= 59; $i += $second_interval) {
$_val = sprintf('%02d', $i); $_val = sprintf('%02d', $i);
$_text = $second_format == '%02d' ? $_val : sprintf($second_format, $i); $_text = $second_format == '%02d' ? $_val : sprintf($second_format, $i);
$_value = $second_value_format == '%02d' ? $_val : sprintf($second_value_format, $i); $_value = $second_value_format == '%02d' ? $_val : sprintf($second_value_format, $i);
@@ -333,8 +333,8 @@ function smarty_function_html_select_time($params, $template)
$_html_meridian = '<select name="' . $_name . '"'; $_html_meridian = '<select name="' . $_name . '"';
if ($meridian_id !== null || $all_id !== null) { if ($meridian_id !== null || $all_id !== null) {
$_html_meridian .= ' id="' . smarty_function_escape_special_chars( $_html_meridian .= ' id="' . smarty_function_escape_special_chars(
$meridian_id !== null ? ( $meridian_id ? $meridian_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name ) $meridian_id !== null ? ($meridian_id ? $meridian_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
) . '"'; ) . '"';
} }
if ($meridian_size) { if ($meridian_size) {
$_html_meridian .= ' size="' . $meridian_size . '"'; $_html_meridian .= ' size="' . $meridian_size . '"';
@@ -342,11 +342,11 @@ function smarty_function_html_select_time($params, $template)
$_html_meridian .= $_extra . $extra_attrs . '>' . $option_separator; $_html_meridian .= $_extra . $extra_attrs . '>' . $option_separator;
if (isset($meridian_empty) || isset($all_empty)) { if (isset($meridian_empty) || isset($all_empty)) {
$_html_meridian .= '<option value="">' . ( isset($meridian_empty) ? $meridian_empty : $all_empty ) . '</option>' . $option_separator; $_html_meridian .= '<option value="">' . (isset($meridian_empty) ? $meridian_empty : $all_empty) . '</option>' . $option_separator;
} }
$_html_meridian .= '<option value="am"'. ($_hour > 0 && $_hour < 12 ? ' selected="selected"' : '') .'>AM</option>' . $option_separator $_html_meridian .= '<option value="am"' . ($_hour > 0 && $_hour < 12 ? ' selected="selected"' : '') . '>AM</option>' . $option_separator
. '<option value="pm"'. ($_hour < 12 ? '' : ' selected="selected"') .'>PM</option>' . $option_separator . '<option value="pm"' . ($_hour < 12 ? '' : ' selected="selected"') . '>PM</option>' . $option_separator
. '</select>'; . '</select>';
} }

View File

@@ -2,13 +2,12 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsFunction * @subpackage PluginsFunction
*/ */
/** /**
* Smarty {html_table} function plugin * Smarty {html_table} function plugin
*
* Type: function<br> * Type: function<br>
* Name: html_table<br> * Name: html_table<br>
* Date: Feb 17, 2003<br> * Date: Feb 17, 2003<br>
@@ -37,17 +36,18 @@
* {table loop=$data cols="first,second,third" tr_attr=$colors} * {table loop=$data cols="first,second,third" tr_attr=$colors}
* </pre> * </pre>
* *
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
* @author credit to Messju Mohr <messju at lammfellpuschen dot de> * @author credit to Messju Mohr <messju at lammfellpuschen dot de>
* @author credit to boots <boots dot smarty at yahoo dot com> * @author credit to boots <boots dot smarty at yahoo dot com>
* @version 1.1 * @version 1.1
* @link http://www.smarty.net/manual/en/language.function.html.table.php {html_table} * @link http://www.smarty.net/manual/en/language.function.html.table.php {html_table}
* (Smarty online manual) * (Smarty online manual)
* @param array $params parameters *
* @param Smarty_Internal_Template $template template object * @param array $params parameters
*
* @return string * @return string
*/ */
function smarty_function_html_table($params, $template) function smarty_function_html_table($params)
{ {
$table_attr = 'border="1"'; $table_attr = 'border="1"';
$tr_attr = ''; $tr_attr = '';
@@ -63,7 +63,7 @@ function smarty_function_html_table($params, $template)
$loop = null; $loop = null;
if (!isset($params['loop'])) { if (!isset($params['loop'])) {
trigger_error("html_table: missing 'loop' parameter",E_USER_WARNING); trigger_error("html_table: missing 'loop' parameter", E_USER_WARNING);
return; return;
} }
@@ -130,7 +130,7 @@ function smarty_function_html_table($params, $template)
$cols = ($hdir == 'right') ? $cols : array_reverse($cols); $cols = ($hdir == 'right') ? $cols : array_reverse($cols);
$output .= "<thead><tr>\n"; $output .= "<thead><tr>\n";
for ($r = 0; $r < $cols_count; $r++) { for ($r = 0; $r < $cols_count; $r ++) {
$output .= '<th' . smarty_function_html_table_cycle('th', $th_attr, $r) . '>'; $output .= '<th' . smarty_function_html_table_cycle('th', $th_attr, $r) . '>';
$output .= $cols[$r]; $output .= $cols[$r];
$output .= "</th>\n"; $output .= "</th>\n";
@@ -139,12 +139,12 @@ function smarty_function_html_table($params, $template)
} }
$output .= "<tbody>\n"; $output .= "<tbody>\n";
for ($r = 0; $r < $rows; $r++) { for ($r = 0; $r < $rows; $r ++) {
$output .= "<tr" . smarty_function_html_table_cycle('tr', $tr_attr, $r) . ">\n"; $output .= "<tr" . smarty_function_html_table_cycle('tr', $tr_attr, $r) . ">\n";
$rx = ($vdir == 'down') ? $r * $cols_count : ($rows-1 - $r) * $cols_count; $rx = ($vdir == 'down') ? $r * $cols_count : ($rows - 1 - $r) * $cols_count;
for ($c = 0; $c < $cols_count; $c++) { for ($c = 0; $c < $cols_count; $c ++) {
$x = ($hdir == 'right') ? $rx + $c : $rx + $cols_count-1 - $c; $x = ($hdir == 'right') ? $rx + $c : $rx + $cols_count - 1 - $c;
if ($inner != 'cols') { if ($inner != 'cols') {
/* shuffle x to loop over rows*/ /* shuffle x to loop over rows*/
$x = floor($x / $cols_count) + ($x % $cols_count) * $rows; $x = floor($x / $cols_count) + ($x % $cols_count) * $rows;

View File

@@ -2,13 +2,12 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsFunction * @subpackage PluginsFunction
*/ */
/** /**
* Smarty {mailto} function plugin * Smarty {mailto} function plugin
*
* Type: function<br> * Type: function<br>
* Name: mailto<br> * Name: mailto<br>
* Date: May 21, 2002 * Date: May 21, 2002
@@ -39,22 +38,23 @@
* {mailto address="me@domain.com" extra='class="mailto"'} * {mailto address="me@domain.com" extra='class="mailto"'}
* </pre> * </pre>
* *
* @link http://www.smarty.net/manual/en/language.function.mailto.php {mailto} * @link http://www.smarty.net/manual/en/language.function.mailto.php {mailto}
* (Smarty online manual) * (Smarty online manual)
* @version 1.2 * @version 1.2
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
* @author credits to Jason Sweat (added cc, bcc and subject functionality) * @author credits to Jason Sweat (added cc, bcc and subject functionality)
* @param array $params parameters *
* @param Smarty_Internal_Template $template template object * @param array $params parameters
*
* @return string * @return string
*/ */
function smarty_function_mailto($params, $template) function smarty_function_mailto($params)
{ {
static $_allowed_encoding = array('javascript' => true, 'javascript_charcode' => true, 'hex' => true, 'none' => true); static $_allowed_encoding = array('javascript' => true, 'javascript_charcode' => true, 'hex' => true, 'none' => true);
$extra = ''; $extra = '';
if (empty($params['address'])) { if (empty($params['address'])) {
trigger_error("mailto: missing 'address' parameter",E_USER_WARNING); trigger_error("mailto: missing 'address' parameter", E_USER_WARNING);
return; return;
} else { } else {
@@ -72,8 +72,9 @@ function smarty_function_mailto($params, $template)
case 'cc': case 'cc':
case 'bcc': case 'bcc':
case 'followupto': case 'followupto':
if (!empty($value)) if (!empty($value)) {
$mail_parms[] = $var . '=' . str_replace($search, $replace, rawurlencode($value)); $mail_parms[] = $var . '=' . str_replace($search, $replace, rawurlencode($value));
}
break; break;
case 'subject': case 'subject':
@@ -104,7 +105,7 @@ function smarty_function_mailto($params, $template)
$string = 'document.write(\'<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>\');'; $string = 'document.write(\'<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>\');';
$js_encode = ''; $js_encode = '';
for ($x = 0, $_length = strlen($string); $x < $_length; $x++) { for ($x = 0, $_length = strlen($string); $x < $_length; $x ++) {
$js_encode .= '%' . bin2hex($string[$x]); $js_encode .= '%' . bin2hex($string[$x]);
} }
@@ -112,7 +113,7 @@ function smarty_function_mailto($params, $template)
} elseif ($encode == 'javascript_charcode') { } elseif ($encode == 'javascript_charcode') {
$string = '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>'; $string = '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>';
for ($x = 0, $y = strlen($string); $x < $y; $x++) { for ($x = 0, $y = strlen($string); $x < $y; $x ++) {
$ord[] = ord($string[$x]); $ord[] = ord($string[$x]);
} }
@@ -127,12 +128,12 @@ function smarty_function_mailto($params, $template)
} elseif ($encode == 'hex') { } elseif ($encode == 'hex') {
preg_match('!^(.*)(\?.*)$!', $address, $match); preg_match('!^(.*)(\?.*)$!', $address, $match);
if (!empty($match[2])) { if (!empty($match[2])) {
trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.",E_USER_WARNING); trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.", E_USER_WARNING);
return; return;
} }
$address_encode = ''; $address_encode = '';
for ($x = 0, $_length = strlen($address); $x < $_length; $x++) { for ($x = 0, $_length = strlen($address); $x < $_length; $x ++) {
if (preg_match('!\w!' . Smarty::$_UTF8_MODIFIER, $address[$x])) { if (preg_match('!\w!' . Smarty::$_UTF8_MODIFIER, $address[$x])) {
$address_encode .= '%' . bin2hex($address[$x]); $address_encode .= '%' . bin2hex($address[$x]);
} else { } else {
@@ -140,7 +141,7 @@ function smarty_function_mailto($params, $template)
} }
} }
$text_encode = ''; $text_encode = '';
for ($x = 0, $_length = strlen($text); $x < $_length; $x++) { for ($x = 0, $_length = strlen($text); $x < $_length; $x ++) {
$text_encode .= '&#x' . bin2hex($text[$x]) . ';'; $text_encode .= '&#x' . bin2hex($text[$x]) . ';';
} }

View File

@@ -1,36 +1,37 @@
<?php <?php
/** /**
* Smarty plugin * Smarty plugin
*
* This plugin is only for Smarty2 BC * This plugin is only for Smarty2 BC
* @package Smarty *
* @package Smarty
* @subpackage PluginsFunction * @subpackage PluginsFunction
*/ */
/** /**
* Smarty {math} function plugin * Smarty {math} function plugin
*
* Type: function<br> * Type: function<br>
* Name: math<br> * Name: math<br>
* Purpose: handle math computations in template * Purpose: handle math computations in template
* *
* @link http://www.smarty.net/manual/en/language.function.math.php {math} * @link http://www.smarty.net/manual/en/language.function.math.php {math}
* (Smarty online manual) * (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
*
* @param array $params parameters * @param array $params parameters
* @param Smarty_Internal_Template $template template object * @param Smarty_Internal_Template $template template object
*
* @return string|null * @return string|null
*/ */
function smarty_function_math($params, $template) function smarty_function_math($params, $template)
{ {
static $_allowed_funcs = array( static $_allowed_funcs = array(
'int' => true, 'abs' => true, 'ceil' => true, 'cos' => true, 'exp' => true, 'floor' => true, 'int' => true, 'abs' => true, 'ceil' => true, 'cos' => true, 'exp' => true, 'floor' => true,
'log' => true, 'log10' => true, 'max' => true, 'min' => true, 'pi' => true, 'pow' => true, 'log' => true, 'log10' => true, 'max' => true, 'min' => true, 'pi' => true, 'pow' => true,
'rand' => true, 'round' => true, 'sin' => true, 'sqrt' => true, 'srand' => true ,'tan' => true 'rand' => true, 'round' => true, 'sin' => true, 'sqrt' => true, 'srand' => true, 'tan' => true
); );
// be sure equation parameter is present // be sure equation parameter is present
if (empty($params['equation'])) { if (empty($params['equation'])) {
trigger_error("math: missing equation parameter",E_USER_WARNING); trigger_error("math: missing equation parameter", E_USER_WARNING);
return; return;
} }
@@ -38,18 +39,18 @@ function smarty_function_math($params, $template)
$equation = $params['equation']; $equation = $params['equation'];
// make sure parenthesis are balanced // make sure parenthesis are balanced
if (substr_count($equation,"(") != substr_count($equation,")")) { if (substr_count($equation, "(") != substr_count($equation, ")")) {
trigger_error("math: unbalanced parenthesis",E_USER_WARNING); trigger_error("math: unbalanced parenthesis", E_USER_WARNING);
return; return;
} }
// match all vars in equation, make sure all are passed // match all vars in equation, make sure all are passed
preg_match_all("!(?:0x[a-fA-F0-9]+)|([a-zA-Z][a-zA-Z0-9_]*)!",$equation, $match); preg_match_all("!(?:0x[a-fA-F0-9]+)|([a-zA-Z][a-zA-Z0-9_]*)!", $equation, $match);
foreach ($match[1] as $curr_var) { foreach ($match[1] as $curr_var) {
if ($curr_var && !isset($params[$curr_var]) && !isset($_allowed_funcs[$curr_var])) { if ($curr_var && !isset($params[$curr_var]) && !isset($_allowed_funcs[$curr_var])) {
trigger_error("math: function call $curr_var not allowed",E_USER_WARNING); trigger_error("math: function call $curr_var not allowed", E_USER_WARNING);
return; return;
} }
@@ -58,13 +59,13 @@ function smarty_function_math($params, $template)
foreach ($params as $key => $val) { foreach ($params as $key => $val) {
if ($key != "equation" && $key != "format" && $key != "assign") { if ($key != "equation" && $key != "format" && $key != "assign") {
// make sure value is not empty // make sure value is not empty
if (strlen($val)==0) { if (strlen($val) == 0) {
trigger_error("math: parameter $key is empty",E_USER_WARNING); trigger_error("math: parameter $key is empty", E_USER_WARNING);
return; return;
} }
if (!is_numeric($val)) { if (!is_numeric($val)) {
trigger_error("math: parameter $key: is not numeric",E_USER_WARNING); trigger_error("math: parameter $key: is not numeric", E_USER_WARNING);
return; return;
} }
@@ -72,19 +73,19 @@ function smarty_function_math($params, $template)
} }
} }
$smarty_math_result = null; $smarty_math_result = null;
eval("\$smarty_math_result = ".$equation.";"); eval("\$smarty_math_result = " . $equation . ";");
if (empty($params['format'])) { if (empty($params['format'])) {
if (empty($params['assign'])) { if (empty($params['assign'])) {
return $smarty_math_result; return $smarty_math_result;
} else { } else {
$template->assign($params['assign'],$smarty_math_result); $template->assign($params['assign'], $smarty_math_result);
} }
} else { } else {
if (empty($params['assign'])) { if (empty($params['assign'])) {
printf($params['format'],$smarty_math_result); printf($params['format'], $smarty_math_result);
} else { } else {
$template->assign($params['assign'],sprintf($params['format'],$smarty_math_result)); $template->assign($params['assign'], sprintf($params['format'], $smarty_math_result));
} }
} }
} }

View File

@@ -2,22 +2,21 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsModifier * @subpackage PluginsModifier
*/ */
/** /**
* Smarty capitalize modifier plugin * Smarty capitalize modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: capitalize<br> * Name: capitalize<br>
* Purpose: capitalize words in the string * Purpose: capitalize words in the string
*
* {@internal {$string|capitalize:true:true} is the fastest option for MBString enabled systems }} * {@internal {$string|capitalize:true:true} is the fastest option for MBString enabled systems }}
* *
* @param string $string string to capitalize * @param string $string string to capitalize
* @param boolean $uc_digits also capitalize "x123" to "X123" * @param boolean $uc_digits also capitalize "x123" to "X123"
* @param boolean $lc_rest capitalize first letters, lowercase all following letters "aAa" to "Aaa" * @param boolean $lc_rest capitalize first letters, lowercase all following letters "aAa" to "Aaa"
*
* @return string capitalized string * @return string capitalized string
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
* @author Rodney Rehm * @author Rodney Rehm
@@ -27,10 +26,10 @@ function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = fals
if (Smarty::$_MBSTRING) { if (Smarty::$_MBSTRING) {
if ($lc_rest) { if ($lc_rest) {
// uppercase (including hyphenated words) // uppercase (including hyphenated words)
$upper_string = mb_convert_case( $string, MB_CASE_TITLE, Smarty::$_CHARSET ); $upper_string = mb_convert_case($string, MB_CASE_TITLE, Smarty::$_CHARSET);
} else { } else {
// uppercase word breaks // uppercase word breaks
$upper_string = preg_replace_callback("!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER, create_function ('$matches', 'return stripslashes($matches[1]).mb_convert_case(stripslashes($matches[2]),MB_CASE_UPPER, "' . addslashes(Smarty::$_CHARSET) . '");'), $string); $upper_string = preg_replace_callback("!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_mbconvert_cb', $string);
} }
// check uc_digits case // check uc_digits case
if (!$uc_digits) { if (!$uc_digits) {
@@ -40,8 +39,7 @@ function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = fals
} }
} }
} }
$upper_string = preg_replace_callback("!((^|\s)['\"])(\w)!" . Smarty::$_UTF8_MODIFIER, create_function ('$matches', 'return stripslashes($matches[1]).mb_convert_case(stripslashes($matches[3]),MB_CASE_UPPER, "' . addslashes(Smarty::$_CHARSET) . '");'), $upper_string); $upper_string = preg_replace_callback("!((^|\s)['\"])(\w)!" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_mbconvert2_cb', $upper_string);
return $upper_string; return $upper_string;
} }
@@ -50,7 +48,7 @@ function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = fals
$string = strtolower($string); $string = strtolower($string);
} }
// uppercase (including hyphenated words) // uppercase (including hyphenated words)
$upper_string = preg_replace_callback("!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER, create_function ('$matches', 'return stripslashes($matches[1]).ucfirst(stripslashes($matches[2]));'), $string); $upper_string = preg_replace_callback("!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_ucfirst_cb', $string);
// check uc_digits case // check uc_digits case
if (!$uc_digits) { if (!$uc_digits) {
if (preg_match_all("!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!" . Smarty::$_UTF8_MODIFIER, $string, $matches, PREG_OFFSET_CAPTURE)) { if (preg_match_all("!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!" . Smarty::$_UTF8_MODIFIER, $string, $matches, PREG_OFFSET_CAPTURE)) {
@@ -59,7 +57,34 @@ function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = fals
} }
} }
} }
$upper_string = preg_replace_callback("!((^|\s)['\"])(\w)!" . Smarty::$_UTF8_MODIFIER, create_function ('$matches', 'return stripslashes($matches[1]).ucfirst(stripslashes($matches[3]));'), $upper_string); $upper_string = preg_replace_callback("!((^|\s)['\"])(\w)!" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_ucfirst2_cb', $upper_string);
return $upper_string; return $upper_string;
} }
/*
*
* Bug: create_function() use exhausts memory when used in long loops
* Fix: use declared functions for callbacks instead of using create_function()
* Note: This can be fixed using anonymous functions instead, but that requires PHP >= 5.3
*
* @author Kyle Renfrow
*/
function smarty_mod_cap_mbconvert_cb($matches)
{
return stripslashes($matches[1]) . mb_convert_case(stripslashes($matches[2]), MB_CASE_UPPER, Smarty::$_CHARSET);
}
function smarty_mod_cap_mbconvert2_cb($matches)
{
return stripslashes($matches[1]) . mb_convert_case(stripslashes($matches[3]), MB_CASE_UPPER, Smarty::$_CHARSET);
}
function smarty_mod_cap_ucfirst_cb($matches)
{
return stripslashes($matches[1]) . ucfirst(stripslashes($matches[2]));
}
function smarty_mod_cap_ucfirst2_cb($matches)
{
return stripslashes($matches[1]) . ucfirst(stripslashes($matches[3]));
}

View File

@@ -2,13 +2,12 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsModifier * @subpackage PluginsModifier
*/ */
/** /**
* Smarty date_format modifier plugin * Smarty date_format modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: date_format<br> * Name: date_format<br>
* Purpose: format datestamps via strftime<br> * Purpose: format datestamps via strftime<br>
@@ -17,23 +16,25 @@
* - format: strftime format for output * - format: strftime format for output
* - default_date: default date if $string is empty * - default_date: default date if $string is empty
* *
* @link http://www.smarty.net/manual/en/language.modifier.date.format.php date_format (Smarty online manual) * @link http://www.smarty.net/manual/en/language.modifier.date.format.php date_format (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
*
* @param string $string input date string * @param string $string input date string
* @param string $format strftime format for output * @param string $format strftime format for output
* @param string $default_date default date if $string is empty * @param string $default_date default date if $string is empty
* @param string $formatter either 'strftime' or 'auto' * @param string $formatter either 'strftime' or 'auto'
*
* @return string |void * @return string |void
* @uses smarty_make_timestamp() * @uses smarty_make_timestamp()
*/ */
function smarty_modifier_date_format($string, $format=null, $default_date='', $formatter='auto') function smarty_modifier_date_format($string, $format = null, $default_date = '', $formatter = 'auto')
{ {
if ($format === null) { if ($format === null) {
$format = Smarty::$_DATE_FORMAT; $format = Smarty::$_DATE_FORMAT;
} }
/** /**
* Include the {@link shared.make_timestamp.php} plugin * Include the {@link shared.make_timestamp.php} plugin
*/ */
require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php'); require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
if ($string != '' && $string != '0000-00-00' && $string != '0000-00-00 00:00:00') { if ($string != '' && $string != '0000-00-00' && $string != '0000-00-00 00:00:00') {
$timestamp = smarty_make_timestamp($string); $timestamp = smarty_make_timestamp($string);
@@ -42,7 +43,7 @@ function smarty_modifier_date_format($string, $format=null, $default_date='', $f
} else { } else {
return; return;
} }
if ($formatter=='strftime'||($formatter=='auto'&&strpos($format,'%')!==false)) { if ($formatter == 'strftime' || ($formatter == 'auto' && strpos($format, '%') !== false)) {
if (DS == '\\') { if (DS == '\\') {
$_win_from = array('%D', '%h', '%n', '%r', '%R', '%t', '%T'); $_win_from = array('%D', '%h', '%n', '%r', '%R', '%t', '%T');
$_win_to = array('%m/%d/%y', '%b', "\n", '%I:%M:%S %p', '%H:%M', "\t", '%H:%M:%S'); $_win_to = array('%m/%d/%y', '%b', "\n", '%I:%M:%S %p', '%H:%M', "\t", '%H:%M:%S');

View File

@@ -2,38 +2,39 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage Debug * @subpackage Debug
*/ */
/** /**
* Smarty debug_print_var modifier plugin * Smarty debug_print_var modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: debug_print_var<br> * Name: debug_print_var<br>
* Purpose: formats variable contents for display in the console * Purpose: formats variable contents for display in the console
* *
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
* @param array|object $var variable to be formatted *
* @param integer $depth maximum recursion depth if $var is an array * @param array|object $var variable to be formatted
* @param integer $length maximum string length if $var is a string * @param integer $depth maximum recursion depth if $var is an array
* @param integer $length maximum string length if $var is a string
*
* @return string * @return string
*/ */
function smarty_modifier_debug_print_var ($var, $depth = 0, $length = 40) function smarty_modifier_debug_print_var($var, $depth = 0, $length = 40)
{ {
$_replace = array("\n" => '<i>\n</i>', $_replace = array("\n" => '<i>\n</i>',
"\r" => '<i>\r</i>', "\r" => '<i>\r</i>',
"\t" => '<i>\t</i>' "\t" => '<i>\t</i>'
); );
switch (gettype($var)) { switch (gettype($var)) {
case 'array' : case 'array' :
$results = '<b>Array (' . count($var) . ')</b>'; $results = '<b>Array (' . count($var) . ')</b>';
foreach ($var as $curr_key => $curr_val) { foreach ($var as $curr_key => $curr_val) {
$results .= '<br>' . str_repeat('&nbsp;', $depth * 2) $results .= '<br>' . str_repeat('&nbsp;', $depth * 2)
. '<b>' . strtr($curr_key, $_replace) . '</b> =&gt; ' . '<b>' . strtr($curr_key, $_replace) . '</b> =&gt; '
. smarty_modifier_debug_print_var($curr_val, ++$depth, $length); . smarty_modifier_debug_print_var($curr_val, ++$depth, $length);
$depth--; $depth --;
} }
break; break;
@@ -42,9 +43,9 @@ function smarty_modifier_debug_print_var ($var, $depth = 0, $length = 40)
$results = '<b>' . get_class($var) . ' Object (' . count($object_vars) . ')</b>'; $results = '<b>' . get_class($var) . ' Object (' . count($object_vars) . ')</b>';
foreach ($object_vars as $curr_key => $curr_val) { foreach ($object_vars as $curr_key => $curr_val) {
$results .= '<br>' . str_repeat('&nbsp;', $depth * 2) $results .= '<br>' . str_repeat('&nbsp;', $depth * 2)
. '<b> -&gt;' . strtr($curr_key, $_replace) . '</b> = ' . '<b> -&gt;' . strtr($curr_key, $_replace) . '</b> = '
. smarty_modifier_debug_print_var($curr_val, ++$depth, $length); . smarty_modifier_debug_print_var($curr_val, ++$depth, $length);
$depth--; $depth --;
} }
break; break;

View File

@@ -2,23 +2,24 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsModifier * @subpackage PluginsModifier
*/ */
/** /**
* Smarty escape modifier plugin * Smarty escape modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: escape<br> * Name: escape<br>
* Purpose: escape string for output * Purpose: escape string for output
* *
* @link http://www.smarty.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online manual) * @link http://www.smarty.net/docs/en/language.modifier.escape
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
*
* @param string $string input string * @param string $string input string
* @param string $esc_type escape type * @param string $esc_type escape type
* @param string $char_set character set, used for htmlspecialchars() or htmlentities() * @param string $char_set character set, used for htmlspecialchars() or htmlentities()
* @param boolean $double_encode encode already encoded entitites again, used for htmlspecialchars() or htmlentities() * @param boolean $double_encode encode already encoded entitites again, used for htmlspecialchars() or htmlentities()
*
* @return string escaped input string * @return string escaped input string
*/ */
function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $double_encode = true) function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $double_encode = true)
@@ -105,7 +106,7 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
// Note that the UTF-8 encoded character ä will be represented as %c3%a4 // Note that the UTF-8 encoded character ä will be represented as %c3%a4
$return = ''; $return = '';
$_length = strlen($string); $_length = strlen($string);
for ($x = 0; $x < $_length; $x++) { for ($x = 0; $x < $_length; $x ++) {
$return .= '%' . bin2hex($string[$x]); $return .= '%' . bin2hex($string[$x]);
} }
@@ -124,7 +125,7 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
} }
// no MBString fallback // no MBString fallback
$_length = strlen($string); $_length = strlen($string);
for ($x = 0; $x < $_length; $x++) { for ($x = 0; $x < $_length; $x ++) {
$return .= '&#x' . bin2hex($string[$x]) . ';'; $return .= '&#x' . bin2hex($string[$x]) . ';';
} }
@@ -143,7 +144,7 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
} }
// no MBString fallback // no MBString fallback
$_length = strlen($string); $_length = strlen($string);
for ($x = 0; $x < $_length; $x++) { for ($x = 0; $x < $_length; $x ++) {
$return .= '&#' . ord($string[$x]) . ';'; $return .= '&#' . ord($string[$x]) . ';';
} }
@@ -179,7 +180,7 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
} }
$_length = strlen($string); $_length = strlen($string);
for ($_i = 0; $_i < $_length; $_i++) { for ($_i = 0; $_i < $_length; $_i ++) {
$_ord = ord(substr($string, $_i, 1)); $_ord = ord(substr($string, $_i, 1));
// non-standard char, escape it // non-standard char, escape it
if ($_ord >= 126) { if ($_ord >= 126) {

View File

@@ -2,23 +2,24 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsModifier * @subpackage PluginsModifier
*/ */
/** /**
* Smarty regex_replace modifier plugin * Smarty regex_replace modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: regex_replace<br> * Name: regex_replace<br>
* Purpose: regular expression search/replace * Purpose: regular expression search/replace
* *
* @link http://smarty.php.net/manual/en/language.modifier.regex.replace.php * @link http://smarty.php.net/manual/en/language.modifier.regex.replace.php
* regex_replace (Smarty online manual) * regex_replace (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
* @param string $string input string *
* @param string|array $search regular expression(s) to search for * @param string $string input string
* @param string|array $replace string(s) that should be replaced * @param string|array $search regular expression(s) to search for
* @param string|array $replace string(s) that should be replaced
*
* @return string * @return string
*/ */
function smarty_modifier_regex_replace($string, $search, $replace) function smarty_modifier_regex_replace($string, $search, $replace)
@@ -36,6 +37,7 @@ function smarty_modifier_regex_replace($string, $search, $replace)
/** /**
* @param string $search string(s) that should be replaced * @param string $search string(s) that should be replaced
*
* @return string * @return string
* @ignore * @ignore
*/ */
@@ -43,12 +45,12 @@ function _smarty_regex_replace_check($search)
{ {
// null-byte injection detection // null-byte injection detection
// anything behind the first null-byte is ignored // anything behind the first null-byte is ignored
if (($pos = strpos($search,"\0")) !== false) { if (($pos = strpos($search, "\0")) !== false) {
$search = substr($search,0,$pos); $search = substr($search, 0, $pos);
} }
// remove eval-modifier from $search // remove eval-modifier from $search
if (preg_match('!([a-zA-Z\s]+)$!s', $search, $match) && (strpos($match[1], 'e') !== false)) { if (preg_match('!([a-zA-Z\s]+)$!s', $search, $match) && (strpos($match[1], 'e') !== false)) {
$search = substr($search, 0, -strlen($match[1])) . preg_replace('![e\s]+!', '', $match[1]); $search = substr($search, 0, - strlen($match[1])) . preg_replace('![e\s]+!', '', $match[1]);
} }
return $search; return $search;

View File

@@ -1,23 +1,25 @@
<?php <?php
/** /**
* Smarty plugin * Smarty plugin
* @package Smarty *
* @package Smarty
* @subpackage PluginsModifier * @subpackage PluginsModifier
*/ */
/** /**
* Smarty replace modifier plugin * Smarty replace modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: replace<br> * Name: replace<br>
* Purpose: simple search/replace * Purpose: simple search/replace
* *
* @link http://smarty.php.net/manual/en/language.modifier.replace.php replace (Smarty online manual) * @link http://smarty.php.net/manual/en/language.modifier.replace.php replace (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
* @author Uwe Tews * @author Uwe Tews
*
* @param string $string input string * @param string $string input string
* @param string $search text to search for * @param string $search text to search for
* @param string $replace replacement text * @param string $replace replacement text
*
* @return string * @return string
*/ */
function smarty_modifier_replace($string, $search, $replace) function smarty_modifier_replace($string, $search, $replace)

View File

@@ -1,25 +1,27 @@
<?php <?php
/** /**
* Smarty plugin * Smarty plugin
* @package Smarty *
* @package Smarty
* @subpackage PluginsModifier * @subpackage PluginsModifier
*/ */
/** /**
* Smarty spacify modifier plugin * Smarty spacify modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: spacify<br> * Name: spacify<br>
* Purpose: add spaces between characters in a string * Purpose: add spaces between characters in a string
* *
* @link http://smarty.php.net/manual/en/language.modifier.spacify.php spacify (Smarty online manual) * @link http://smarty.php.net/manual/en/language.modifier.spacify.php spacify (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
*
* @param string $string input string * @param string $string input string
* @param string $spacify_char string to insert between characters. * @param string $spacify_char string to insert between characters.
*
* @return string * @return string
*/ */
function smarty_modifier_spacify($string, $spacify_char = ' ') function smarty_modifier_spacify($string, $spacify_char = ' ')
{ {
// well… what about charsets besides latin and UTF-8? // well… what about charsets besides latin and UTF-8?
return implode($spacify_char, preg_split('//' . Smarty::$_UTF8_MODIFIER, $string, -1, PREG_SPLIT_NO_EMPTY)); return implode($spacify_char, preg_split('//' . Smarty::$_UTF8_MODIFIER, $string, - 1, PREG_SPLIT_NO_EMPTY));
} }

View File

@@ -2,32 +2,34 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsModifier * @subpackage PluginsModifier
*/ */
/** /**
* Smarty truncate modifier plugin * Smarty truncate modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: truncate<br> * Name: truncate<br>
* Purpose: Truncate a string to a certain length if necessary, * Purpose: Truncate a string to a certain length if necessary,
* optionally splitting in the middle of a word, and * optionally splitting in the middle of a word, and
* appending the $etc string or inserting $etc into the middle. * appending the $etc string or inserting $etc into the middle.
* *
* @link http://smarty.php.net/manual/en/language.modifier.truncate.php truncate (Smarty online manual) * @link http://smarty.php.net/manual/en/language.modifier.truncate.php truncate (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
*
* @param string $string input string * @param string $string input string
* @param integer $length length of truncated text * @param integer $length length of truncated text
* @param string $etc end string * @param string $etc end string
* @param boolean $break_words truncate at word boundary * @param boolean $break_words truncate at word boundary
* @param boolean $middle truncate in the middle of text * @param boolean $middle truncate in the middle of text
*
* @return string truncated string * @return string truncated string
*/ */
function smarty_modifier_truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false) function smarty_modifier_truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false)
{ {
if ($length == 0) if ($length == 0) {
return ''; return '';
}
if (Smarty::$_MBSTRING) { if (Smarty::$_MBSTRING) {
if (mb_strlen($string, Smarty::$_CHARSET) > $length) { if (mb_strlen($string, Smarty::$_CHARSET) > $length) {

View File

@@ -2,13 +2,12 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsModifierCompiler * @subpackage PluginsModifierCompiler
*/ */
/** /**
* Smarty cat modifier plugin * Smarty cat modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: cat<br> * Name: cat<br>
* Date: Feb 24, 2003<br> * Date: Feb 24, 2003<br>
@@ -16,13 +15,15 @@
* Input: string to catenate<br> * Input: string to catenate<br>
* Example: {$var|cat:"foo"} * Example: {$var|cat:"foo"}
* *
* @link http://smarty.php.net/manual/en/language.modifier.cat.php cat * @link http://smarty.php.net/manual/en/language.modifier.cat.php cat
* (Smarty online manual) * (Smarty online manual)
* @author Uwe Tews * @author Uwe Tews
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_cat($params, $compiler) function smarty_modifiercompiler_cat($params)
{ {
return '('.implode(').(', $params).')'; return '(' . implode(').(', $params) . ')';
} }

View File

@@ -2,23 +2,24 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsModifierCompiler * @subpackage PluginsModifierCompiler
*/ */
/** /**
* Smarty count_characters modifier plugin * Smarty count_characters modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: count_characteres<br> * Name: count_characteres<br>
* Purpose: count the number of characters in a text * Purpose: count the number of characters in a text
* *
* @link http://www.smarty.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online manual) * @link http://www.smarty.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online manual)
* @author Uwe Tews * @author Uwe Tews
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_count_characters($params, $compiler) function smarty_modifiercompiler_count_characters($params)
{ {
if (!isset($params[1]) || $params[1] != 'true') { if (!isset($params[1]) || $params[1] != 'true') {
return 'preg_match_all(\'/[^\s]/' . Smarty::$_UTF8_MODIFIER . '\',' . $params[0] . ', $tmp)'; return 'preg_match_all(\'/[^\s]/' . Smarty::$_UTF8_MODIFIER . '\',' . $params[0] . ', $tmp)';

View File

@@ -2,24 +2,25 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsModifierCompiler * @subpackage PluginsModifierCompiler
*/ */
/** /**
* Smarty count_paragraphs modifier plugin * Smarty count_paragraphs modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: count_paragraphs<br> * Name: count_paragraphs<br>
* Purpose: count the number of paragraphs in a text * Purpose: count the number of paragraphs in a text
* *
* @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php * @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php
* count_paragraphs (Smarty online manual) * count_paragraphs (Smarty online manual)
* @author Uwe Tews * @author Uwe Tews
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_count_paragraphs($params, $compiler) function smarty_modifiercompiler_count_paragraphs($params)
{ {
// count \r or \n characters // count \r or \n characters
return '(preg_match_all(\'#[\r\n]+#\', ' . $params[0] . ', $tmp)+1)'; return '(preg_match_all(\'#[\r\n]+#\', ' . $params[0] . ', $tmp)+1)';

View File

@@ -2,24 +2,25 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsModifierCompiler * @subpackage PluginsModifierCompiler
*/ */
/** /**
* Smarty count_sentences modifier plugin * Smarty count_sentences modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: count_sentences * Name: count_sentences
* Purpose: count the number of sentences in a text * Purpose: count the number of sentences in a text
* *
* @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php * @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php
* count_sentences (Smarty online manual) * count_sentences (Smarty online manual)
* @author Uwe Tews * @author Uwe Tews
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_count_sentences($params, $compiler) function smarty_modifiercompiler_count_sentences($params)
{ {
// find periods, question marks, exclamation marks with a word before but not after. // find periods, question marks, exclamation marks with a word before but not after.
return 'preg_match_all("#\w[\.\?\!](\W|$)#S' . Smarty::$_UTF8_MODIFIER . '", ' . $params[0] . ', $tmp)'; return 'preg_match_all("#\w[\.\?\!](\W|$)#S' . Smarty::$_UTF8_MODIFIER . '", ' . $params[0] . ', $tmp)';

View File

@@ -2,23 +2,24 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsModifierCompiler * @subpackage PluginsModifierCompiler
*/ */
/** /**
* Smarty count_words modifier plugin * Smarty count_words modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: count_words<br> * Name: count_words<br>
* Purpose: count the number of words in a text * Purpose: count the number of words in a text
* *
* @link http://www.smarty.net/manual/en/language.modifier.count.words.php count_words (Smarty online manual) * @link http://www.smarty.net/manual/en/language.modifier.count.words.php count_words (Smarty online manual)
* @author Uwe Tews * @author Uwe Tews
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_count_words($params, $compiler) function smarty_modifiercompiler_count_words($params)
{ {
if (Smarty::$_MBSTRING) { if (Smarty::$_MBSTRING) {
// return 'preg_match_all(\'#[\w\pL]+#' . Smarty::$_UTF8_MODIFIER . '\', ' . $params[0] . ', $tmp)'; // return 'preg_match_all(\'#[\w\pL]+#' . Smarty::$_UTF8_MODIFIER . '\', ' . $params[0] . ', $tmp)';

View File

@@ -2,23 +2,24 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsModifierCompiler * @subpackage PluginsModifierCompiler
*/ */
/** /**
* Smarty default modifier plugin * Smarty default modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: default<br> * Name: default<br>
* Purpose: designate default value for empty variables * Purpose: designate default value for empty variables
* *
* @link http://www.smarty.net/manual/en/language.modifier.default.php default (Smarty online manual) * @link http://www.smarty.net/manual/en/language.modifier.default.php default (Smarty online manual)
* @author Uwe Tews * @author Uwe Tews
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_default ($params, $compiler) function smarty_modifiercompiler_default($params)
{ {
$output = $params[0]; $output = $params[0];
if (!isset($params[1])) { if (!isset($params[1])) {

View File

@@ -2,25 +2,27 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsModifierCompiler * @subpackage PluginsModifierCompiler
*/ */
/** /**
* @ignore * @ignore
*/ */
require_once( SMARTY_PLUGINS_DIR .'shared.literal_compiler_param.php' ); require_once(SMARTY_PLUGINS_DIR . 'shared.literal_compiler_param.php');
/** /**
* Smarty escape modifier plugin * Smarty escape modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: escape<br> * Name: escape<br>
* Purpose: escape string for output * Purpose: escape string for output
* *
* @link http://www.smarty.net/docsv2/en/language.modifier.escape count_characters (Smarty online manual) * @link http://www.smarty.net/docsv2/en/language.modifier.escape count_characters (Smarty online manual)
* @author Rodney Rehm * @author Rodney Rehm
*
* @param array $params parameters * @param array $params parameters
* @param $compiler
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_escape($params, $compiler) function smarty_modifiercompiler_escape($params, $compiler)
@@ -43,13 +45,13 @@ function smarty_modifiercompiler_escape($params, $compiler)
case 'html': case 'html':
if ($_double_encode) { if ($_double_encode) {
return 'htmlspecialchars(' return 'htmlspecialchars('
. $params[0] .', ENT_QUOTES, ' . $params[0] . ', ENT_QUOTES, '
. var_export($char_set, true) . ', ' . var_export($char_set, true) . ', '
. var_export($double_encode, true) . ')'; . var_export($double_encode, true) . ')';
} elseif ($double_encode) { } elseif ($double_encode) {
return 'htmlspecialchars(' return 'htmlspecialchars('
. $params[0] .', ENT_QUOTES, ' . $params[0] . ', ENT_QUOTES, '
. var_export($char_set, true) . ')'; . var_export($char_set, true) . ')';
} else { } else {
// fall back to modifier.escape.php // fall back to modifier.escape.php
} }
@@ -59,18 +61,18 @@ function smarty_modifiercompiler_escape($params, $compiler)
if ($_double_encode) { if ($_double_encode) {
// php >=5.2.3 - go native // php >=5.2.3 - go native
return 'mb_convert_encoding(htmlspecialchars(' return 'mb_convert_encoding(htmlspecialchars('
. $params[0] .', ENT_QUOTES, ' . $params[0] . ', ENT_QUOTES, '
. var_export($char_set, true) . ', ' . var_export($char_set, true) . ', '
. var_export($double_encode, true) . var_export($double_encode, true)
. '), "HTML-ENTITIES", ' . '), "HTML-ENTITIES", '
. var_export($char_set, true) . ')'; . var_export($char_set, true) . ')';
} elseif ($double_encode) { } elseif ($double_encode) {
// php <5.2.3 - only handle double encoding // php <5.2.3 - only handle double encoding
return 'mb_convert_encoding(htmlspecialchars(' return 'mb_convert_encoding(htmlspecialchars('
. $params[0] .', ENT_QUOTES, ' . $params[0] . ', ENT_QUOTES, '
. var_export($char_set, true) . var_export($char_set, true)
. '), "HTML-ENTITIES", ' . '), "HTML-ENTITIES", '
. var_export($char_set, true) . ')'; . var_export($char_set, true) . ')';
} else { } else {
// fall back to modifier.escape.php // fall back to modifier.escape.php
} }
@@ -80,14 +82,14 @@ function smarty_modifiercompiler_escape($params, $compiler)
if ($_double_encode) { if ($_double_encode) {
// php >=5.2.3 - go native // php >=5.2.3 - go native
return 'htmlentities(' return 'htmlentities('
. $params[0] .', ENT_QUOTES, ' . $params[0] . ', ENT_QUOTES, '
. var_export($char_set, true) . ', ' . var_export($char_set, true) . ', '
. var_export($double_encode, true) . ')'; . var_export($double_encode, true) . ')';
} elseif ($double_encode) { } elseif ($double_encode) {
// php <5.2.3 - only handle double encoding // php <5.2.3 - only handle double encoding
return 'htmlentities(' return 'htmlentities('
. $params[0] .', ENT_QUOTES, ' . $params[0] . ', ENT_QUOTES, '
. var_export($char_set, true) . ')'; . var_export($char_set, true) . ')';
} else { } else {
// fall back to modifier.escape.php // fall back to modifier.escape.php
} }
@@ -105,20 +107,20 @@ function smarty_modifiercompiler_escape($params, $compiler)
case 'javascript': case 'javascript':
// escape quotes and backslashes, newlines, etc. // escape quotes and backslashes, newlines, etc.
return 'strtr(' . $params[0] . ', array("\\\\" => "\\\\\\\\", "\'" => "\\\\\'", "\"" => "\\\\\"", "\\r" => "\\\\r", "\\n" => "\\\n", "</" => "<\/" ))'; return 'strtr(' . $params[0] . ', array("\\\\" => "\\\\\\\\", "\'" => "\\\\\'", "\"" => "\\\\\"", "\\r" => "\\\\r", "\\n" => "\\\n", "</" => "<\/" ))';
} }
} catch (SmartyException $e) { }
catch (SmartyException $e) {
// pass through to regular plugin fallback // pass through to regular plugin fallback
} }
// could not optimize |escape call, so fallback to regular plugin // could not optimize |escape call, so fallback to regular plugin
if ($compiler->template->caching && ($compiler->tag_nocache | $compiler->nocache)) { if ($compiler->template->caching && ($compiler->tag_nocache | $compiler->nocache)) {
$compiler->template->required_plugins['nocache']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR .'modifier.escape.php'; $compiler->template->required_plugins['nocache']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'modifier.escape.php';
$compiler->template->required_plugins['nocache']['escape']['modifier']['function'] = 'smarty_modifier_escape'; $compiler->template->required_plugins['nocache']['escape']['modifier']['function'] = 'smarty_modifier_escape';
} else { } else {
$compiler->template->required_plugins['compiled']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR .'modifier.escape.php'; $compiler->template->required_plugins['compiled']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'modifier.escape.php';
$compiler->template->required_plugins['compiled']['escape']['modifier']['function'] = 'smarty_modifier_escape'; $compiler->template->required_plugins['compiled']['escape']['modifier']['function'] = 'smarty_modifier_escape';
} }
return 'smarty_modifier_escape(' . join( ', ', $params ) . ')'; return 'smarty_modifier_escape(' . join(', ', $params) . ')';
} }

View File

@@ -2,22 +2,23 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsModifierCompiler * @subpackage PluginsModifierCompiler
*/ */
/** /**
* Smarty from_charset modifier plugin * Smarty from_charset modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: from_charset<br> * Name: from_charset<br>
* Purpose: convert character encoding from $charset to internal encoding * Purpose: convert character encoding from $charset to internal encoding
* *
* @author Rodney Rehm * @author Rodney Rehm
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_from_charset($params, $compiler) function smarty_modifiercompiler_from_charset($params)
{ {
if (!Smarty::$_MBSTRING) { if (!Smarty::$_MBSTRING) {
// FIXME: (rodneyrehm) shouldn't this throw an error? // FIXME: (rodneyrehm) shouldn't this throw an error?

View File

@@ -1,24 +1,26 @@
<?php <?php
/** /**
* Smarty plugin * Smarty plugin
* @package Smarty *
* @package Smarty
* @subpackage PluginsModifierCompiler * @subpackage PluginsModifierCompiler
*/ */
/** /**
* Smarty indent modifier plugin * Smarty indent modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: indent<br> * Name: indent<br>
* Purpose: indent lines of text * Purpose: indent lines of text
* *
* @link http://www.smarty.net/manual/en/language.modifier.indent.php indent (Smarty online manual) * @link http://www.smarty.net/manual/en/language.modifier.indent.php indent (Smarty online manual)
* @author Uwe Tews * @author Uwe Tews
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_indent($params, $compiler) function smarty_modifiercompiler_indent($params)
{ {
if (!isset($params[1])) { if (!isset($params[1])) {
$params[1] = 4; $params[1] = 4;

View File

@@ -1,28 +1,30 @@
<?php <?php
/** /**
* Smarty plugin * Smarty plugin
* @package Smarty *
* @package Smarty
* @subpackage PluginsModifierCompiler * @subpackage PluginsModifierCompiler
*/ */
/** /**
* Smarty lower modifier plugin * Smarty lower modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: lower<br> * Name: lower<br>
* Purpose: convert string to lowercase * Purpose: convert string to lowercase
* *
* @link http://www.smarty.net/manual/en/language.modifier.lower.php lower (Smarty online manual) * @link http://www.smarty.net/manual/en/language.modifier.lower.php lower (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
* @author Uwe Tews * @author Uwe Tews
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_lower($params, $compiler) function smarty_modifiercompiler_lower($params)
{ {
if (Smarty::$_MBSTRING) { if (Smarty::$_MBSTRING) {
return 'mb_strtolower(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')' ; return 'mb_strtolower(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')';
} }
// no MBString fallback // no MBString fallback
return 'strtolower(' . $params[0] . ')'; return 'strtolower(' . $params[0] . ')';

View File

@@ -2,22 +2,20 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsModifierCompiler * @subpackage PluginsModifierCompiler
*/ */
/** /**
* Smarty noprint modifier plugin * Smarty noprint modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: noprint<br> * Name: noprint<br>
* Purpose: return an empty string * Purpose: return an empty string
* *
* @author Uwe Tews * @author Uwe Tews
* @param array $params parameters
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_noprint($params, $compiler) function smarty_modifiercompiler_noprint()
{ {
return "''"; return "''";
} }

View File

@@ -2,23 +2,24 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsModifierCompiler * @subpackage PluginsModifierCompiler
*/ */
/** /**
* Smarty string_format modifier plugin * Smarty string_format modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: string_format<br> * Name: string_format<br>
* Purpose: format strings via sprintf * Purpose: format strings via sprintf
* *
* @link http://www.smarty.net/manual/en/language.modifier.string.format.php string_format (Smarty online manual) * @link http://www.smarty.net/manual/en/language.modifier.string.format.php string_format (Smarty online manual)
* @author Uwe Tews * @author Uwe Tews
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_string_format($params, $compiler) function smarty_modifiercompiler_string_format($params)
{ {
return 'sprintf(' . $params[1] . ',' . $params[0] . ')'; return 'sprintf(' . $params[1] . ',' . $params[0] . ')';
} }

View File

@@ -2,13 +2,12 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsModifierCompiler * @subpackage PluginsModifierCompiler
*/ */
/** /**
* Smarty strip modifier plugin * Smarty strip modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: strip<br> * Name: strip<br>
* Purpose: Replace all repeated spaces, newlines, tabs * Purpose: Replace all repeated spaces, newlines, tabs
@@ -16,13 +15,15 @@
* Example: {$var|strip} {$var|strip:"&nbsp;"}<br> * Example: {$var|strip} {$var|strip:"&nbsp;"}<br>
* Date: September 25th, 2002 * Date: September 25th, 2002
* *
* @link http://www.smarty.net/manual/en/language.modifier.strip.php strip (Smarty online manual) * @link http://www.smarty.net/manual/en/language.modifier.strip.php strip (Smarty online manual)
* @author Uwe Tews * @author Uwe Tews
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_strip($params, $compiler) function smarty_modifiercompiler_strip($params)
{ {
if (!isset($params[1])) { if (!isset($params[1])) {
$params[1] = "' '"; $params[1] = "' '";

View File

@@ -2,26 +2,27 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsModifierCompiler * @subpackage PluginsModifierCompiler
*/ */
/** /**
* Smarty strip_tags modifier plugin * Smarty strip_tags modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: strip_tags<br> * Name: strip_tags<br>
* Purpose: strip html tags from text * Purpose: strip html tags from text
* *
* @link http://www.smarty.net/manual/en/language.modifier.strip.tags.php strip_tags (Smarty online manual) * @link http://www.smarty.net/manual/en/language.modifier.strip.tags.php strip_tags (Smarty online manual)
* @author Uwe Tews * @author Uwe Tews
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_strip_tags($params, $compiler) function smarty_modifiercompiler_strip_tags($params)
{ {
if (!isset($params[1]) || $params[1] === true || trim($params[1],'"') == 'true') { if (!isset($params[1]) || $params[1] === true || trim($params[1], '"') == 'true') {
return "preg_replace('!<[^>]*?>!', ' ', {$params[0]})"; return "preg_replace('!<[^>]*?>!', ' ', {$params[0]})";
} else { } else {
return 'strip_tags(' . $params[0] . ')'; return 'strip_tags(' . $params[0] . ')';
} }

View File

@@ -2,22 +2,23 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsModifierCompiler * @subpackage PluginsModifierCompiler
*/ */
/** /**
* Smarty to_charset modifier plugin * Smarty to_charset modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: to_charset<br> * Name: to_charset<br>
* Purpose: convert character encoding from internal encoding to $charset * Purpose: convert character encoding from internal encoding to $charset
* *
* @author Rodney Rehm * @author Rodney Rehm
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_to_charset($params, $compiler) function smarty_modifiercompiler_to_charset($params)
{ {
if (!Smarty::$_MBSTRING) { if (!Smarty::$_MBSTRING) {
// FIXME: (rodneyrehm) shouldn't this throw an error? // FIXME: (rodneyrehm) shouldn't this throw an error?

View File

@@ -2,22 +2,23 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsModifierCompiler * @subpackage PluginsModifierCompiler
*/ */
/** /**
* Smarty unescape modifier plugin * Smarty unescape modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: unescape<br> * Name: unescape<br>
* Purpose: unescape html entities * Purpose: unescape html entities
* *
* @author Rodney Rehm * @author Rodney Rehm
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_unescape($params, $compiler) function smarty_modifiercompiler_unescape($params)
{ {
if (!isset($params[1])) { if (!isset($params[1])) {
$params[1] = 'html'; $params[1] = 'html';

View File

@@ -2,26 +2,27 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsModifierCompiler * @subpackage PluginsModifierCompiler
*/ */
/** /**
* Smarty upper modifier plugin * Smarty upper modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: lower<br> * Name: lower<br>
* Purpose: convert string to uppercase * Purpose: convert string to uppercase
* *
* @link http://smarty.php.net/manual/en/language.modifier.upper.php lower (Smarty online manual) * @link http://smarty.php.net/manual/en/language.modifier.upper.php lower (Smarty online manual)
* @author Uwe Tews * @author Uwe Tews
*
* @param array $params parameters * @param array $params parameters
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_upper($params, $compiler) function smarty_modifiercompiler_upper($params)
{ {
if (Smarty::$_MBSTRING) { if (Smarty::$_MBSTRING) {
return 'mb_strtoupper(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')' ; return 'mb_strtoupper(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')';
} }
// no MBString fallback // no MBString fallback
return 'strtoupper(' . $params[0] . ')'; return 'strtoupper(' . $params[0] . ')';

View File

@@ -2,20 +2,22 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsModifierCompiler * @subpackage PluginsModifierCompiler
*/ */
/** /**
* Smarty wordwrap modifier plugin * Smarty wordwrap modifier plugin
*
* Type: modifier<br> * Type: modifier<br>
* Name: wordwrap<br> * Name: wordwrap<br>
* Purpose: wrap a string of text at a given length * Purpose: wrap a string of text at a given length
* *
* @link http://smarty.php.net/manual/en/language.modifier.wordwrap.php wordwrap (Smarty online manual) * @link http://smarty.php.net/manual/en/language.modifier.wordwrap.php wordwrap (Smarty online manual)
* @author Uwe Tews * @author Uwe Tews
*
* @param array $params parameters * @param array $params parameters
* @param $compiler
*
* @return string with compiled code * @return string with compiled code
*/ */
function smarty_modifiercompiler_wordwrap($params, $compiler) function smarty_modifiercompiler_wordwrap($params, $compiler)
@@ -31,11 +33,11 @@ function smarty_modifiercompiler_wordwrap($params, $compiler)
} }
$function = 'wordwrap'; $function = 'wordwrap';
if (Smarty::$_MBSTRING) { if (Smarty::$_MBSTRING) {
if ($compiler->template->caching && ($compiler->tag_nocache | $compiler->nocache)) { if ($compiler->template->caching && ($compiler->tag_nocache | $compiler->nocache)) {
$compiler->template->required_plugins['nocache']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR .'shared.mb_wordwrap.php'; $compiler->template->required_plugins['nocache']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php';
$compiler->template->required_plugins['nocache']['wordwrap']['modifier']['function'] = 'smarty_mb_wordwrap'; $compiler->template->required_plugins['nocache']['wordwrap']['modifier']['function'] = 'smarty_mb_wordwrap';
} else { } else {
$compiler->template->required_plugins['compiled']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR .'shared.mb_wordwrap.php'; $compiler->template->required_plugins['compiled']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php';
$compiler->template->required_plugins['compiled']['wordwrap']['modifier']['function'] = 'smarty_mb_wordwrap'; $compiler->template->required_plugins['compiled']['wordwrap']['modifier']['function'] = 'smarty_mb_wordwrap';
} }
$function = 'smarty_mb_wordwrap'; $function = 'smarty_mb_wordwrap';

View File

@@ -2,22 +2,22 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsFilter * @subpackage PluginsFilter
*/ */
/** /**
* Smarty trimwhitespace outputfilter plugin * Smarty trimwhitespace outputfilter plugin
*
* Trim unnecessary whitespace from HTML markup. * Trim unnecessary whitespace from HTML markup.
* *
* @author Rodney Rehm * @author Rodney Rehm
* @param string $source input string *
* @param Smarty_Internal_Template $smarty Smarty object * @param string $source input string
*
* @return string filtered output * @return string filtered output
* @todo substr_replace() is not overloaded by mbstring.func_overload - so this function might fail! * @todo substr_replace() is not overloaded by mbstring.func_overload - so this function might fail!
*/ */
function smarty_outputfilter_trimwhitespace($source, Smarty_Internal_Template $smarty) function smarty_outputfilter_trimwhitespace($source)
{ {
$store = array(); $store = array();
$_store = 0; $_store = 0;
@@ -35,13 +35,13 @@ function smarty_outputfilter_trimwhitespace($source, Smarty_Internal_Template $s
$source = substr_replace($source, $replace, $match[0][1] - $_offset, $_length); $source = substr_replace($source, $replace, $match[0][1] - $_offset, $_length);
$_offset += $_length - strlen($replace); $_offset += $_length - strlen($replace);
$_store++; $_store ++;
} }
} }
// Strip all HTML-Comments // Strip all HTML-Comments
// yes, even the ones in <script> - see http://stackoverflow.com/a/808850/515124 // yes, even the ones in <script> - see http://stackoverflow.com/a/808850/515124
$source = preg_replace( '#<!--.*?-->#ms', '', $source ); $source = preg_replace('#<!--.*?-->#ms', '', $source);
// capture html elements not to be messed with // capture html elements not to be messed with
$_offset = 0; $_offset = 0;
@@ -53,23 +53,23 @@ function smarty_outputfilter_trimwhitespace($source, Smarty_Internal_Template $s
$source = substr_replace($source, $replace, $match[0][1] - $_offset, $_length); $source = substr_replace($source, $replace, $match[0][1] - $_offset, $_length);
$_offset += $_length - strlen($replace); $_offset += $_length - strlen($replace);
$_store++; $_store ++;
} }
} }
$expressions = array( $expressions = array(
// replace multiple spaces between tags by a single space // replace multiple spaces between tags by a single space
// can't remove them entirely, becaue that might break poorly implemented CSS display:inline-block elements // can't remove them entirely, becaue that might break poorly implemented CSS display:inline-block elements
'#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1 \2', '#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1 \2',
// remove spaces between attributes (but not in attribute values!) // remove spaces between attributes (but not in attribute values!)
'#(([a-z0-9]\s*=\s*(["\'])[^\3]*?\3)|<[a-z0-9_]+)\s+([a-z/>])#is' => '\1 \4', '#(([a-z0-9]\s*=\s*(["\'])[^\3]*?\3)|<[a-z0-9_]+)\s+([a-z/>])#is' => '\1 \4',
// note: for some very weird reason trim() seems to remove spaces inside attributes. // note: for some very weird reason trim() seems to remove spaces inside attributes.
// maybe a \0 byte or something is interfering? // maybe a \0 byte or something is interfering?
'#^\s+<#Ss' => '<', '#^\s+<#Ss' => '<',
'#>\s+$#Ss' => '>', '#>\s+$#Ss' => '>',
); );
$source = preg_replace( array_keys($expressions), array_values($expressions), $source ); $source = preg_replace(array_keys($expressions), array_values($expressions), $source);
// note: for some very weird reason trim() seems to remove spaces inside attributes. // note: for some very weird reason trim() seems to remove spaces inside attributes.
// maybe a \0 byte or something is interfering? // maybe a \0 byte or something is interfering?
// $source = trim( $source ); // $source = trim( $source );
@@ -82,7 +82,7 @@ function smarty_outputfilter_trimwhitespace($source, Smarty_Internal_Template $s
$source = substr_replace($source, $replace, $match[0][1] + $_offset, $_length); $source = substr_replace($source, $replace, $match[0][1] + $_offset, $_length);
$_offset += strlen($replace) - $_length; $_offset += strlen($replace) - $_length;
$_store++; $_store ++;
} }
} }

View File

@@ -2,20 +2,21 @@
/** /**
* Smarty shared plugin * Smarty shared plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsShared * @subpackage PluginsShared
*/ */
if (version_compare(PHP_VERSION, '5.2.3', '>=')) { if (version_compare(PHP_VERSION, '5.2.3', '>=')) {
/** /**
* escape_special_chars common function * escape_special_chars common function
*
* Function: smarty_function_escape_special_chars<br> * Function: smarty_function_escape_special_chars<br>
* Purpose: used by other smarty functions to escape * Purpose: used by other smarty functions to escape
* special chars except for already escaped ones * special chars except for already escaped ones
* *
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
*
* @param string $string text that should by escaped * @param string $string text that should by escaped
*
* @return string * @return string
*/ */
function smarty_function_escape_special_chars($string) function smarty_function_escape_special_chars($string)
@@ -29,13 +30,14 @@ if (version_compare(PHP_VERSION, '5.2.3', '>=')) {
} else { } else {
/** /**
* escape_special_chars common function * escape_special_chars common function
*
* Function: smarty_function_escape_special_chars<br> * Function: smarty_function_escape_special_chars<br>
* Purpose: used by other smarty functions to escape * Purpose: used by other smarty functions to escape
* special chars except for already escaped ones * special chars except for already escaped ones
* *
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
*
* @param string $string text that should by escaped * @param string $string text that should by escaped
*
* @return string * @return string
*/ */
function smarty_function_escape_special_chars($string) function smarty_function_escape_special_chars($string)

View File

@@ -2,7 +2,7 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsShared * @subpackage PluginsShared
*/ */
@@ -12,18 +12,19 @@
* @param array $params parameter array as given to the compiler function * @param array $params parameter array as given to the compiler function
* @param integer $index array index of the parameter to convert * @param integer $index array index of the parameter to convert
* @param mixed $default value to be returned if the parameter is not present * @param mixed $default value to be returned if the parameter is not present
*
* @return mixed evaluated value of parameter or $default * @return mixed evaluated value of parameter or $default
* @throws SmartyException if parameter is not a literal (but an expression, variable, ) * @throws SmartyException if parameter is not a literal (but an expression, variable, )
* @author Rodney Rehm * @author Rodney Rehm
*/ */
function smarty_literal_compiler_param($params, $index, $default=null) function smarty_literal_compiler_param($params, $index, $default = null)
{ {
// not set, go default // not set, go default
if (!isset($params[$index])) { if (!isset($params[$index])) {
return $default; return $default;
} }
// test if param is a literal // test if param is a literal
if (!preg_match('/^([\'"]?)[a-zA-Z0-9]+(\\1)$/', $params[$index])) { if (!preg_match('/^([\'"]?)[a-zA-Z0-9-]+(\\1)$/', $params[$index])) {
throw new SmartyException('$param[' . $index . '] is not a literal and is thus not evaluatable at compile time'); throw new SmartyException('$param[' . $index . '] is not a literal and is thus not evaluatable at compile time');
} }

View File

@@ -2,7 +2,7 @@
/** /**
* Smarty shared plugin * Smarty shared plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsShared * @subpackage PluginsShared
*/ */
@@ -11,7 +11,9 @@
* Purpose: used by other smarty functions to make a timestamp from a string. * Purpose: used by other smarty functions to make a timestamp from a string.
* *
* @author Monte Ohrt <monte at ohrt dot com> * @author Monte Ohrt <monte at ohrt dot com>
* @param DateTime|int|string $string date object, timestamp or string that can be converted using strtotime() *
* @param DateTime|int|string $string date object, timestamp or string that can be converted using strtotime()
*
* @return int * @return int
*/ */
function smarty_make_timestamp($string) function smarty_make_timestamp($string)
@@ -23,15 +25,15 @@ function smarty_make_timestamp($string)
return $string->getTimestamp(); return $string->getTimestamp();
} elseif (strlen($string) == 14 && ctype_digit($string)) { } elseif (strlen($string) == 14 && ctype_digit($string)) {
// it is mysql timestamp format of YYYYMMDDHHMMSS? // it is mysql timestamp format of YYYYMMDDHHMMSS?
return mktime(substr($string, 8, 2),substr($string, 10, 2),substr($string, 12, 2), return 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)); substr($string, 4, 2), substr($string, 6, 2), substr($string, 0, 4));
} elseif (is_numeric($string)) { } elseif (is_numeric($string)) {
// it is a numeric string, we handle it as timestamp // it is a numeric string, we handle it as timestamp
return (int) $string; return (int) $string;
} else { } else {
// strtotime should handle it // strtotime should handle it
$time = strtotime($string); $time = strtotime($string);
if ($time == -1 || $time === false) { if ($time == - 1 || $time === false) {
// strtotime() was not able to parse $string, use "now": // strtotime() was not able to parse $string, use "now":
return time(); return time();
} }

View File

@@ -2,7 +2,7 @@
/** /**
* Smarty shared plugin * Smarty shared plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsShared * @subpackage PluginsShared
*/ */
if (!function_exists('smarty_mb_str_replace')) { if (!function_exists('smarty_mb_str_replace')) {
@@ -14,10 +14,11 @@ if (!function_exists('smarty_mb_str_replace')) {
* @param string $replace the replacement string * @param string $replace the replacement string
* @param string $subject the source string * @param string $subject the source string
* @param int &$count number of matches found * @param int &$count number of matches found
*
* @return string replaced string * @return string replaced string
* @author Rodney Rehm * @author Rodney Rehm
*/ */
function smarty_mb_str_replace($search, $replace, $subject, &$count=0) function smarty_mb_str_replace($search, $replace, $subject, &$count = 0)
{ {
if (!is_array($search) && is_array($replace)) { if (!is_array($search) && is_array($replace)) {
return false; return false;
@@ -25,7 +26,7 @@ if (!function_exists('smarty_mb_str_replace')) {
if (is_array($subject)) { if (is_array($subject)) {
// call mb_replace for each single string in $subject // call mb_replace for each single string in $subject
foreach ($subject as &$string) { foreach ($subject as &$string) {
$string = &smarty_mb_str_replace($search, $replace, $string, $c); $string = & smarty_mb_str_replace($search, $replace, $string, $c);
$count += $c; $count += $c;
} }
} elseif (is_array($search)) { } elseif (is_array($search)) {
@@ -36,7 +37,7 @@ if (!function_exists('smarty_mb_str_replace')) {
} }
} else { } else {
$n = max(count($search), count($replace)); $n = max(count($search), count($replace));
while ($n--) { while ($n --) {
$subject = smarty_mb_str_replace(current($search), current($replace), $subject, $c); $subject = smarty_mb_str_replace(current($search), current($replace), $subject, $c);
$count += $c; $count += $c;
next($search); next($search);
@@ -51,5 +52,4 @@ if (!function_exists('smarty_mb_str_replace')) {
return $subject; return $subject;
} }
} }

View File

@@ -2,20 +2,22 @@
/** /**
* Smarty shared plugin * Smarty shared plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsShared * @subpackage PluginsShared
*/ */
/** /**
* convert characters to their decimal unicode equivalents * convert characters to their decimal unicode equivalents
* *
* @link http://www.ibm.com/developerworks/library/os-php-unicode/index.html#listing3 for inspiration * @link http://www.ibm.com/developerworks/library/os-php-unicode/index.html#listing3 for inspiration
*
* @param string $string characters to calculate unicode of * @param string $string characters to calculate unicode of
* @param string $encoding encoding of $string, if null mb_internal_encoding() is used * @param string $encoding encoding of $string, if null mb_internal_encoding() is used
*
* @return array sequence of unicodes * @return array sequence of unicodes
* @author Rodney Rehm * @author Rodney Rehm
*/ */
function smarty_mb_to_unicode($string, $encoding=null) function smarty_mb_to_unicode($string, $encoding = null)
{ {
if ($encoding) { if ($encoding) {
$expanded = mb_convert_encoding($string, "UTF-32BE", $encoding); $expanded = mb_convert_encoding($string, "UTF-32BE", $encoding);
@@ -29,13 +31,15 @@ function smarty_mb_to_unicode($string, $encoding=null)
/** /**
* convert unicodes to the character of given encoding * convert unicodes to the character of given encoding
* *
* @link http://www.ibm.com/developerworks/library/os-php-unicode/index.html#listing3 for inspiration * @link http://www.ibm.com/developerworks/library/os-php-unicode/index.html#listing3 for inspiration
*
* @param integer|array $unicode single unicode or list of unicodes to convert * @param integer|array $unicode single unicode or list of unicodes to convert
* @param string $encoding encoding of returned string, if null mb_internal_encoding() is used * @param string $encoding encoding of returned string, if null mb_internal_encoding() is used
*
* @return string unicode as character sequence in given $encoding * @return string unicode as character sequence in given $encoding
* @author Rodney Rehm * @author Rodney Rehm
*/ */
function smarty_mb_from_unicode($unicode, $encoding=null) function smarty_mb_from_unicode($unicode, $encoding = null)
{ {
$t = ''; $t = '';
if (!$encoding) { if (!$encoding) {

View File

@@ -2,7 +2,7 @@
/** /**
* Smarty shared plugin * Smarty shared plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsShared * @subpackage PluginsShared
*/ */
@@ -11,35 +11,31 @@ if (!function_exists('smarty_mb_wordwrap')) {
/** /**
* Wrap a string to a given number of characters * Wrap a string to a given number of characters
* *
* @link http://php.net/manual/en/function.wordwrap.php for similarity * @link http://php.net/manual/en/function.wordwrap.php for similarity
*
* @param string $str the string to wrap * @param string $str the string to wrap
* @param int $width the width of the output * @param int $width the width of the output
* @param string $break the character used to break the line * @param string $break the character used to break the line
* @param boolean $cut ignored parameter, just for the sake of * @param boolean $cut ignored parameter, just for the sake of
*
* @return string wrapped string * @return string wrapped string
* @author Rodney Rehm * @author Rodney Rehm
*/ */
function smarty_mb_wordwrap($str, $width=75, $break="\n", $cut=false) function smarty_mb_wordwrap($str, $width = 75, $break = "\n", $cut = false)
{ {
// break words into tokens using white space as a delimiter // break words into tokens using white space as a delimiter
$tokens = preg_split('!(\s)!S' . Smarty::$_UTF8_MODIFIER, $str, -1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE); $tokens = preg_split('!(\s)!S' . Smarty::$_UTF8_MODIFIER, $str, - 1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
$length = 0; $length = 0;
$t = ''; $t = '';
$_previous = false; $_previous = false;
$_space = false;
foreach ($tokens as $_token) { foreach ($tokens as $_token) {
$token_length = mb_strlen($_token, Smarty::$_CHARSET); $token_length = mb_strlen($_token, Smarty::$_CHARSET);
$_tokens = array($_token); $_tokens = array($_token);
if ($token_length > $width) { if ($token_length > $width) {
// remove last space if ($cut) {
$t = mb_substr($t, 0, -1, Smarty::$_CHARSET); $_tokens = preg_split('!(.{' . $width . '})!S' . Smarty::$_UTF8_MODIFIER, $_token, - 1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
$_previous = false;
$length = 0;
if ($cut) {
$_tokens = preg_split('!(.{' . $width . '})!S' . Smarty::$_UTF8_MODIFIER, $_token, -1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
// broken words go on a new line
$t .= $break;
} }
} }
@@ -50,27 +46,23 @@ if (!function_exists('smarty_mb_wordwrap')) {
if ($length > $width) { if ($length > $width) {
// remove space before inserted break // remove space before inserted break
if ($_previous && $token_length < $width) { if ($_previous) {
$t = mb_substr($t, 0, -1, Smarty::$_CHARSET); $t = mb_substr($t, 0, - 1, Smarty::$_CHARSET);
} }
// add the break before the token if (!$_space) {
$t .= $break; // add the break before the token
$length = $token_length; if (!empty($t)) {
$t .= $break;
// skip space after inserting a break }
if ($_space) { $length = $token_length;
$length = 0;
continue;
} }
} elseif ($token == "\n") { } elseif ($token == "\n") {
// hard break must reset counters // hard break must reset counters
$_previous = 0; $_previous = 0;
$length = 0; $length = 0;
} else {
// remember if we had a space or not
$_previous = $_space;
} }
$_previous = $_space;
// add the token // add the token
$t .= $token; $t .= $token;
} }
@@ -78,5 +70,4 @@ if (!function_exists('smarty_mb_wordwrap')) {
return $t; return $t;
} }
} }

View File

@@ -2,18 +2,18 @@
/** /**
* Smarty plugin * Smarty plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsFilter * @subpackage PluginsFilter
*/ */
/** /**
* Smarty htmlspecialchars variablefilter plugin * Smarty htmlspecialchars variablefilter plugin
* *
* @param string $source input string * @param string $source input string
* @param Smarty_Internal_Template $smarty Smarty object *
* @return string filtered output * @return string filtered output
*/ */
function smarty_variablefilter_htmlspecialchars($source, $smarty) function smarty_variablefilter_htmlspecialchars($source)
{ {
return htmlspecialchars($source, ENT_QUOTES, Smarty::$_CHARSET); return htmlspecialchars($source, ENT_QUOTES, Smarty::$_CHARSET);
} }

View File

@@ -0,0 +1 @@
smarty-3.1.27/

View File

@@ -1,75 +1,82 @@
<?php <?php
/** /**
* Smarty Internal Plugin * Smarty Internal Plugin
* *
* @package Smarty * @package Smarty
* @subpackage Cacher * @subpackage Cacher
*/ */
/** /**
* Cache Handler API * Cache Handler API
* *
* @package Smarty * @package Smarty
* @subpackage Cacher * @subpackage Cacher
* @author Rodney Rehm * @author Rodney Rehm
*/ */
abstract class Smarty_CacheResource abstract class Smarty_CacheResource
{ {
/** /**
* cache for Smarty_CacheResource instances * cache for Smarty_CacheResource instances
* @var array *
*/ * @var array
*/
public static $resources = array(); public static $resources = array();
/** /**
* resource types provided by the core * resource types provided by the core
* @var array *
*/ * @var array
*/
protected static $sysplugins = array( protected static $sysplugins = array(
'file' => true, 'file' => true,
); );
/** /**
* populate Cached Object with meta data from Resource * populate Cached Object with meta data from Resource
* *
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
* @return void *
*/ * @return void
*/
abstract public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template); abstract public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template);
/** /**
* populate Cached Object with timestamp and exists from Resource * populate Cached Object with timestamp and exists from Resource
* *
* @param Smarty_Template_Cached $source cached object * @param Smarty_Template_Cached $cached
* @return void *
*/ * @return void
*/
abstract public function populateTimestamp(Smarty_Template_Cached $cached); abstract public function populateTimestamp(Smarty_Template_Cached $cached);
/** /**
* Read the cached template and process header * Read the cached template and process header
* *
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
* @return booelan true or false if the cached content does not exist *
*/ * @return boolean true or false if the cached content does not exist
abstract public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached=null); */
abstract public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null);
/** /**
* Write the rendered template output to cache * Write the rendered template output to cache
* *
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
* @param string $content content to cache * @param string $content content to cache
* @return boolean success *
*/ * @return boolean success
*/
abstract public function writeCachedContent(Smarty_Internal_Template $_template, $content); abstract public function writeCachedContent(Smarty_Internal_Template $_template, $content);
/** /**
* Return cached content * Return cached content
* *
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
* @param string $content content of cache *
*/ * @return null|string
*/
public function getCachedContent(Smarty_Internal_Template $_template) public function getCachedContent(Smarty_Internal_Template $_template)
{ {
if ($_template->cached->handler->process($_template)) { if ($_template->cached->handler->process($_template)) {
@@ -83,26 +90,34 @@ abstract class Smarty_CacheResource
} }
/** /**
* Empty cache * Empty cache
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
* @param integer $exp_time expiration time (number of seconds, not timestamp) * @param integer $exp_time expiration time (number of seconds, not timestamp)
* @return integer number of cache files deleted *
*/ * @return integer number of cache files deleted
abstract public function clearAll(Smarty $smarty, $exp_time=null); */
abstract public function clearAll(Smarty $smarty, $exp_time = null);
/** /**
* Empty cache for a specific template * Empty cache for a specific template
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
* @param string $resource_name template name * @param string $resource_name template name
* @param string $cache_id cache id * @param string $cache_id cache id
* @param string $compile_id compile id * @param string $compile_id compile id
* @param integer $exp_time expiration time (number of seconds, not timestamp) * @param integer $exp_time expiration time (number of seconds, not timestamp)
* @return integer number of cache files deleted *
*/ * @return integer number of cache files deleted
*/
abstract public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time); abstract public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time);
/**
* @param Smarty $smarty
* @param Smarty_Template_Cached $cached
*
* @return bool|null
*/
public function locked(Smarty $smarty, Smarty_Template_Cached $cached) public function locked(Smarty $smarty, Smarty_Template_Cached $cached)
{ {
// theoretically locking_timeout should be checked against time_limit (max_execution_time) // theoretically locking_timeout should be checked against time_limit (max_execution_time)
@@ -120,18 +135,42 @@ abstract class Smarty_CacheResource
return $hadLock; return $hadLock;
} }
/**
* Check is cache is locked for this template
*
* @param Smarty $smarty
* @param Smarty_Template_Cached $cached
*
* @return bool
*/
public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached) public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
{ {
// check if lock exists // check if lock exists
return false; return false;
} }
/**
* Lock cache for this template
*
* @param Smarty $smarty
* @param Smarty_Template_Cached $cached
*
* @return bool
*/
public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached) public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
{ {
// create lock // create lock
return true; return true;
} }
/**
* Unlock cache for this template
*
* @param Smarty $smarty
* @param Smarty_Template_Cached $cached
*
* @return bool
*/
public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached) public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
{ {
// release lock // release lock
@@ -139,12 +178,14 @@ abstract class Smarty_CacheResource
} }
/** /**
* Load Cache Resource Handler * Load Cache Resource Handler
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
* @param string $type name of the cache resource * @param string $type name of the cache resource
* @return Smarty_CacheResource Cache Resource Handler *
*/ * @throws SmartyException
* @return Smarty_CacheResource Cache Resource Handler
*/
public static function load(Smarty $smarty, $type = null) public static function load(Smarty $smarty, $type = null)
{ {
if (!isset($type)) { if (!isset($type)) {
@@ -184,10 +225,10 @@ abstract class Smarty_CacheResource
} }
/** /**
* Invalid Loaded Cache Files * Invalid Loaded Cache Files
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
*/ */
public static function invalidLoadedCache(Smarty $smarty) public static function invalidLoadedCache(Smarty $smarty)
{ {
foreach ($smarty->template_objects as $tpl) { foreach ($smarty->template_objects as $tpl) {
@@ -200,93 +241,104 @@ abstract class Smarty_CacheResource
} }
/** /**
* Smarty Resource Data Object * Smarty Resource Data Object
* * Cache Data Container for Template Files
* Cache Data Container for Template Files *
* * @package Smarty
* @package Smarty * @subpackage TemplateResources
* @subpackage TemplateResources * @author Rodney Rehm
* @author Rodney Rehm */
*/
class Smarty_Template_Cached class Smarty_Template_Cached
{ {
/** /**
* Source Filepath * Source Filepath
* @var string *
*/ * @var string
*/
public $filepath = false; public $filepath = false;
/** /**
* Source Content * Source Content
* @var string *
*/ * @var string
*/
public $content = null; public $content = null;
/** /**
* Source Timestamp * Source Timestamp
* @var integer *
*/ * @var integer
*/
public $timestamp = false; public $timestamp = false;
/** /**
* Source Existence * Source Existence
* @var boolean *
*/ * @var boolean
*/
public $exists = false; public $exists = false;
/** /**
* Cache Is Valid * Cache Is Valid
* @var boolean *
*/ * @var boolean
*/
public $valid = false; public $valid = false;
/** /**
* Cache was processed * Cache was processed
* @var boolean *
*/ * @var boolean
*/
public $processed = false; public $processed = false;
/** /**
* CacheResource Handler * CacheResource Handler
* @var Smarty_CacheResource *
*/ * @var Smarty_CacheResource
*/
public $handler = null; public $handler = null;
/** /**
* Template Compile Id (Smarty_Internal_Template::$compile_id) * Template Compile Id (Smarty_Internal_Template::$compile_id)
* @var string *
*/ * @var string
*/
public $compile_id = null; public $compile_id = null;
/** /**
* Template Cache Id (Smarty_Internal_Template::$cache_id) * Template Cache Id (Smarty_Internal_Template::$cache_id)
* @var string *
*/ * @var string
*/
public $cache_id = null; public $cache_id = null;
/** /**
* Id for cache locking * Id for cache locking
* @var string *
*/ * @var string
*/
public $lock_id = null; public $lock_id = null;
/** /**
* flag that cache is locked by this instance * flag that cache is locked by this instance
* @var bool *
*/ * @var bool
*/
public $is_locked = false; public $is_locked = false;
/** /**
* Source Object * Source Object
* @var Smarty_Template_Source *
*/ * @var Smarty_Template_Source
*/
public $source = null; public $source = null;
/** /**
* create Cached Object container * create Cached Object container
* *
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
*/ */
public function __construct(Smarty_Internal_Template $_template) public function __construct(Smarty_Internal_Template $_template)
{ {
$this->compile_id = $_template->compile_id; $this->compile_id = $_template->compile_id;
@@ -362,16 +414,18 @@ class Smarty_Template_Cached
} }
/** /**
* Write this cache object to handler * Write this cache object to handler
* *
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
* @param string $content content to cache * @param string $content content to cache
* @return boolean success *
*/ * @return boolean success
*/
public function write(Smarty_Internal_Template $_template, $content) public function write(Smarty_Internal_Template $_template, $content)
{ {
if (!$_template->source->recompiled) { if (!$_template->source->recompiled) {
if ($this->handler->writeCachedContent($_template, $content)) { if ($this->handler->writeCachedContent($_template, $content)) {
$this->content = null;
$this->timestamp = time(); $this->timestamp = time();
$this->exists = true; $this->exists = true;
$this->valid = true; $this->valid = true;
@@ -385,5 +439,4 @@ class Smarty_Template_Cached
return false; return false;
} }
} }

View File

@@ -2,16 +2,16 @@
/** /**
* Smarty Internal Plugin * Smarty Internal Plugin
* *
* @package Smarty * @package Smarty
* @subpackage Cacher * @subpackage Cacher
*/ */
/** /**
* Cache Handler API * Cache Handler API
* *
* @package Smarty * @package Smarty
* @subpackage Cacher * @subpackage Cacher
* @author Rodney Rehm * @author Rodney Rehm
*/ */
abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
{ {
@@ -24,20 +24,21 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
* @param string $compile_id compile id * @param string $compile_id compile id
* @param string $content cached content * @param string $content cached content
* @param integer $mtime cache modification timestamp (epoch) * @param integer $mtime cache modification timestamp (epoch)
*
* @return void * @return void
*/ */
abstract protected function fetch($id, $name, $cache_id, $compile_id, &$content, &$mtime); abstract protected function fetch($id, $name, $cache_id, $compile_id, &$content, &$mtime);
/** /**
* Fetch cached content's modification timestamp from data source * Fetch cached content's modification timestamp from data source
*
* {@internal implementing this method is optional. * {@internal implementing this method is optional.
* Only implement it if modification times can be accessed faster than loading the complete cached content.}} * Only implement it if modification times can be accessed faster than loading the complete cached content.}}
* *
* @param string $id unique cache content identifier * @param string $id unique cache content identifier
* @param string $name template name * @param string $name template name
* @param string $cache_id cache id * @param string $cache_id cache id
* @param string $compile_id compile id * @param string $compile_id compile id
*
* @return integer|boolean timestamp (epoch) the template was modified, or false if not found * @return integer|boolean timestamp (epoch) the template was modified, or false if not found
*/ */
protected function fetchTimestamp($id, $name, $cache_id, $compile_id) protected function fetchTimestamp($id, $name, $cache_id, $compile_id)
@@ -54,6 +55,7 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
* @param string $compile_id compile id * @param string $compile_id compile id
* @param integer|null $exp_time seconds till expiration or null * @param integer|null $exp_time seconds till expiration or null
* @param string $content content to cache * @param string $content content to cache
*
* @return boolean success * @return boolean success
*/ */
abstract protected function save($id, $name, $cache_id, $compile_id, $exp_time, $content); abstract protected function save($id, $name, $cache_id, $compile_id, $exp_time, $content);
@@ -65,6 +67,7 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
* @param string $cache_id cache id * @param string $cache_id cache id
* @param string $compile_id compile id * @param string $compile_id compile id
* @param integer|null $exp_time seconds till expiration time in seconds or null * @param integer|null $exp_time seconds till expiration time in seconds or null
*
* @return integer number of deleted caches * @return integer number of deleted caches
*/ */
abstract protected function delete($name, $cache_id, $compile_id, $exp_time); abstract protected function delete($name, $cache_id, $compile_id, $exp_time);
@@ -74,6 +77,7 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
* *
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
*
* @return void * @return void
*/ */
public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template) public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template)
@@ -88,7 +92,8 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
/** /**
* populate Cached Object with timestamp and exists from Resource * populate Cached Object with timestamp and exists from Resource
* *
* @param Smarty_Template_Cached $source cached object * @param Smarty_Template_Cached $cached
*
* @return void * @return void
*/ */
public function populateTimestamp(Smarty_Template_Cached $cached) public function populateTimestamp(Smarty_Template_Cached $cached)
@@ -111,9 +116,10 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
* *
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
* @return booelan true or false if the cached content does not exist *
* @return boolean true or false if the cached content does not exist
*/ */
public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached=null) public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null)
{ {
if (!$cached) { if (!$cached) {
$cached = $_template->cached; $cached = $_template->cached;
@@ -131,6 +137,9 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
); );
} }
if (isset($content)) { if (isset($content)) {
/** @var Smarty_Internal_Template $_smarty_tpl
* used in evaluated code
*/
$_smarty_tpl = $_template; $_smarty_tpl = $_template;
eval("?>" . $content); eval("?>" . $content);
@@ -145,6 +154,7 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
* *
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
* @param string $content content to cache * @param string $content content to cache
*
* @return boolean success * @return boolean success
*/ */
public function writeCachedContent(Smarty_Internal_Template $_template, $content) public function writeCachedContent(Smarty_Internal_Template $_template, $content)
@@ -164,9 +174,10 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
* @param integer $exp_time expiration time (number of seconds, not timestamp) * @param integer $exp_time expiration time (number of seconds, not timestamp)
*
* @return integer number of cache files deleted * @return integer number of cache files deleted
*/ */
public function clearAll(Smarty $smarty, $exp_time=null) public function clearAll(Smarty $smarty, $exp_time = null)
{ {
$this->cache = array(); $this->cache = array();
@@ -181,13 +192,40 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
* @param string $cache_id cache id * @param string $cache_id cache id
* @param string $compile_id compile id * @param string $compile_id compile id
* @param integer $exp_time expiration time (number of seconds, not timestamp) * @param integer $exp_time expiration time (number of seconds, not timestamp)
*
* @return integer number of cache files deleted * @return integer number of cache files deleted
*/ */
public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time) public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time)
{ {
$this->cache = array(); $this->cache = array();
$cache_name = null;
return $this->delete($resource_name, $cache_id, $compile_id, $exp_time); if (isset($resource_name)) {
$_save_stat = $smarty->caching;
$smarty->caching = true;
$tpl = new $smarty->template_class($resource_name, $smarty);
$smarty->caching = $_save_stat;
if ($tpl->source->exists) {
$cache_name = $tpl->source->name;
} else {
return 0;
}
// remove from template cache
if ($smarty->allow_ambiguous_resources) {
$_templateId = $tpl->source->unique_resource . $tpl->cache_id . $tpl->compile_id;
} else {
$_templateId = $smarty->joined_template_dir . '#' . $resource_name . $tpl->cache_id . $tpl->compile_id;
}
if (isset($_templateId[150])) {
$_templateId = sha1($_templateId);
}
unset($smarty->template_objects[$_templateId]);
// template object no longer needed
unset($tpl);
}
return $this->delete($cache_name, $cache_id, $compile_id, $exp_time);
} }
/** /**
@@ -195,7 +233,8 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
* @return booelan true or false if cache is locked *
* @return boolean true or false if cache is locked
*/ */
public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached) public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
{ {
@@ -215,6 +254,8 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
*
* @return bool|void
*/ */
public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached) public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
{ {
@@ -230,6 +271,8 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
*
* @return bool|void
*/ */
public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached) public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
{ {

View File

@@ -2,44 +2,43 @@
/** /**
* Smarty Internal Plugin * Smarty Internal Plugin
* *
* @package Smarty * @package Smarty
* @subpackage Cacher * @subpackage Cacher
*/ */
/** /**
* Smarty Cache Handler Base for Key/Value Storage Implementations * Smarty Cache Handler Base for Key/Value Storage Implementations
*
* This class implements the functionality required to use simple key/value stores * This class implements the functionality required to use simple key/value stores
* for hierarchical cache groups. key/value stores like memcache or APC do not support * for hierarchical cache groups. key/value stores like memcache or APC do not support
* wildcards in keys, therefore a cache group cannot be cleared like "a|*" - which * wildcards in keys, therefore a cache group cannot be cleared like "a|*" - which
* is no problem to filesystem and RDBMS implementations. * is no problem to filesystem and RDBMS implementations.
*
* This implementation is based on the concept of invalidation. While one specific cache * This implementation is based on the concept of invalidation. While one specific cache
* can be identified and cleared, any range of caches cannot be identified. For this reason * can be identified and cleared, any range of caches cannot be identified. For this reason
* each level of the cache group hierarchy can have its own value in the store. These values * each level of the cache group hierarchy can have its own value in the store. These values
* are nothing but microtimes, telling us when a particular cache group was cleared for the * are nothing but microtimes, telling us when a particular cache group was cleared for the
* last time. These keys are evaluated for every cache read to determine if the cache has * last time. These keys are evaluated for every cache read to determine if the cache has
* been invalidated since it was created and should hence be treated as inexistent. * been invalidated since it was created and should hence be treated as inexistent.
*
* Although deep hierarchies are possible, they are not recommended. Try to keep your * Although deep hierarchies are possible, they are not recommended. Try to keep your
* cache groups as shallow as possible. Anything up 3-5 parents should be ok. So * cache groups as shallow as possible. Anything up 3-5 parents should be ok. So
* »a|b| is a good depth where »a|b|c|d|e|f|g|h|i|j| isn't. Try to join correlating * »a|b| is a good depth where »a|b|c|d|e|f|g|h|i|j| isn't. Try to join correlating
* cache groups: if your cache groups look somewhat like »a|b|$page|$items|$whatever« * cache groups: if your cache groups look somewhat like »a|b|$page|$items|$whatever«
* consider using »a|b|c|$page-$items-$whatever« instead. * consider using »a|b|c|$page-$items-$whatever« instead.
* *
* @package Smarty * @package Smarty
* @subpackage Cacher * @subpackage Cacher
* @author Rodney Rehm * @author Rodney Rehm
*/ */
abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
{ {
/** /**
* cache for contents * cache for contents
*
* @var array * @var array
*/ */
protected $contents = array(); protected $contents = array();
/** /**
* cache for timestamps * cache for timestamps
*
* @var array * @var array
*/ */
protected $timestamps = array(); protected $timestamps = array();
@@ -49,14 +48,15 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* *
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
*
* @return void * @return void
*/ */
public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template) public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template)
{ {
$cached->filepath = $_template->source->uid $cached->filepath = $_template->source->uid
. '#' . $this->sanitize($cached->source->name) . '#' . $this->sanitize($cached->source->resource)
. '#' . $this->sanitize($cached->cache_id) . '#' . $this->sanitize($cached->cache_id)
. '#' . $this->sanitize($cached->compile_id); . '#' . $this->sanitize($cached->compile_id);
$this->populateTimestamp($cached); $this->populateTimestamp($cached);
} }
@@ -65,6 +65,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* populate Cached Object with timestamp and exists from Resource * populate Cached Object with timestamp and exists from Resource
* *
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
*
* @return void * @return void
*/ */
public function populateTimestamp(Smarty_Template_Cached $cached) public function populateTimestamp(Smarty_Template_Cached $cached)
@@ -82,9 +83,10 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* *
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
* @return booelan true or false if the cached content does not exist *
* @return boolean true or false if the cached content does not exist
*/ */
public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached=null) public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null)
{ {
if (!$cached) { if (!$cached) {
$cached = $_template->cached; $cached = $_template->cached;
@@ -97,6 +99,9 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
} }
} }
if (isset($content)) { if (isset($content)) {
/** @var Smarty_Internal_Template $_smarty_tpl
* used in evaluated code
*/
$_smarty_tpl = $_template; $_smarty_tpl = $_template;
eval("?>" . $content); eval("?>" . $content);
@@ -111,6 +116,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* *
* @param Smarty_Internal_Template $_template template object * @param Smarty_Internal_Template $_template template object
* @param string $content content to cache * @param string $content content to cache
*
* @return boolean success * @return boolean success
*/ */
public function writeCachedContent(Smarty_Internal_Template $_template, $content) public function writeCachedContent(Smarty_Internal_Template $_template, $content)
@@ -122,27 +128,26 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
/** /**
* Empty cache * Empty cache
*
* {@internal the $exp_time argument is ignored altogether }} * {@internal the $exp_time argument is ignored altogether }}
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
* @param integer $exp_time expiration time [being ignored] * @param integer $exp_time expiration time [being ignored]
*
* @return integer number of cache files deleted [always -1] * @return integer number of cache files deleted [always -1]
* @uses purge() to clear the whole store * @uses purge() to clear the whole store
* @uses invalidate() to mark everything outdated if purge() is inapplicable * @uses invalidate() to mark everything outdated if purge() is inapplicable
*/ */
public function clearAll(Smarty $smarty, $exp_time=null) public function clearAll(Smarty $smarty, $exp_time = null)
{ {
if (!$this->purge()) { if (!$this->purge()) {
$this->invalidate(null); $this->invalidate(null);
} }
return -1; return - 1;
} }
/** /**
* Empty cache for a specific template * Empty cache for a specific template
*
* {@internal the $exp_time argument is ignored altogether}} * {@internal the $exp_time argument is ignored altogether}}
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
@@ -150,6 +155,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* @param string $cache_id cache id * @param string $cache_id cache id
* @param string $compile_id compile id * @param string $compile_id compile id
* @param integer $exp_time expiration time [being ignored] * @param integer $exp_time expiration time [being ignored]
*
* @return integer number of cache files deleted [always -1] * @return integer number of cache files deleted [always -1]
* @uses buildCachedFilepath() to generate the CacheID * @uses buildCachedFilepath() to generate the CacheID
* @uses invalidate() to mark CacheIDs parent chain as outdated * @uses invalidate() to mark CacheIDs parent chain as outdated
@@ -162,8 +168,9 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
$this->delete(array($cid)); $this->delete(array($cid));
$this->invalidate($cid, $resource_name, $cache_id, $compile_id, $uid); $this->invalidate($cid, $resource_name, $cache_id, $compile_id, $uid);
return -1; return - 1;
} }
/** /**
* Get template's unique ID * Get template's unique ID
* *
@@ -171,6 +178,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* @param string $resource_name template name * @param string $resource_name template name
* @param string $cache_id cache id * @param string $cache_id cache id
* @param string $compile_id compile id * @param string $compile_id compile id
*
* @return string filepath of cache file * @return string filepath of cache file
*/ */
protected function getTemplateUid(Smarty $smarty, $resource_name, $cache_id, $compile_id) protected function getTemplateUid(Smarty $smarty, $resource_name, $cache_id, $compile_id)
@@ -201,6 +209,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* Sanitize CacheID components * Sanitize CacheID components
* *
* @param string $string CacheID component to sanitize * @param string $string CacheID component to sanitize
*
* @return string sanitized CacheID component * @return string sanitized CacheID component
*/ */
protected function sanitize($string) protected function sanitize($string)
@@ -224,6 +233,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* @param string $content cached content * @param string $content cached content
* @param integer &$timestamp cached timestamp (epoch) * @param integer &$timestamp cached timestamp (epoch)
* @param string $resource_uid resource's uid * @param string $resource_uid resource's uid
*
* @return boolean success * @return boolean success
*/ */
protected function fetch($cid, $resource_name = null, $cache_id = null, $compile_id = null, &$content = null, &$timestamp = null, $resource_uid = null) protected function fetch($cid, $resource_name = null, $cache_id = null, $compile_id = null, &$content = null, &$timestamp = null, $resource_uid = null)
@@ -245,7 +255,6 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
/** /**
* Add current microtime to the beginning of $cache_content * Add current microtime to the beginning of $cache_content
*
* {@internal the header uses 8 Bytes, the first 4 Bytes are the seconds, the second 4 Bytes are the microseconds}} * {@internal the header uses 8 Bytes, the first 4 Bytes are the seconds, the second 4 Bytes are the microseconds}}
* *
* @param string &$content the content to be cached * @param string &$content the content to be cached
@@ -261,6 +270,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* Extract the timestamp the $content was cached * Extract the timestamp the $content was cached
* *
* @param string &$content the cached content * @param string &$content the cached content
*
* @return float the microtime the content was cached * @return float the microtime the content was cached
*/ */
protected function getMetaTimestamp(&$content) protected function getMetaTimestamp(&$content)
@@ -280,6 +290,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* @param string $cache_id cache id * @param string $cache_id cache id
* @param string $compile_id compile id * @param string $compile_id compile id
* @param string $resource_uid source's uid * @param string $resource_uid source's uid
*
* @return void * @return void
*/ */
protected function invalidate($cid = null, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null) protected function invalidate($cid = null, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null)
@@ -289,22 +300,24 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
// invalidate everything // invalidate everything
if (!$resource_name && !$cache_id && !$compile_id) { if (!$resource_name && !$cache_id && !$compile_id) {
$key = 'IVK#ALL'; $key = 'IVK#ALL';
} } // invalidate all caches by template
// invalidate all caches by template
else if ($resource_name && !$cache_id && !$compile_id) {
$key = 'IVK#TEMPLATE#' . $resource_uid . '#' . $this->sanitize($resource_name);
}
// invalidate all caches by cache group
else if (!$resource_name && $cache_id && !$compile_id) {
$key = 'IVK#CACHE#' . $this->sanitize($cache_id);
}
// invalidate all caches by compile id
else if (!$resource_name && !$cache_id && $compile_id) {
$key = 'IVK#COMPILE#' . $this->sanitize($compile_id);
}
// invalidate by combination
else { else {
$key = 'IVK#CID#' . $cid; if ($resource_name && !$cache_id && !$compile_id) {
$key = 'IVK#TEMPLATE#' . $resource_uid . '#' . $this->sanitize($resource_name);
} // invalidate all caches by cache group
else {
if (!$resource_name && $cache_id && !$compile_id) {
$key = 'IVK#CACHE#' . $this->sanitize($cache_id);
} // invalidate all caches by compile id
else {
if (!$resource_name && !$cache_id && $compile_id) {
$key = 'IVK#COMPILE#' . $this->sanitize($compile_id);
} // invalidate by combination
else {
$key = 'IVK#CID#' . $cid;
}
}
}
} }
$this->write(array($key => $now)); $this->write(array($key => $now));
} }
@@ -317,6 +330,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* @param string $cache_id cache id * @param string $cache_id cache id
* @param string $compile_id compile id * @param string $compile_id compile id
* @param string $resource_uid source's filepath * @param string $resource_uid source's filepath
*
* @return float the microtime the CacheID was invalidated * @return float the microtime the CacheID was invalidated
*/ */
protected function getLatestInvalidationTimestamp($cid, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null) protected function getLatestInvalidationTimestamp($cid, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null)
@@ -342,7 +356,6 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
/** /**
* Translate a CacheID into the list of applicable InvalidationKeys. * Translate a CacheID into the list of applicable InvalidationKeys.
*
* Splits "some|chain|into|an|array" into array( '#clearAll#', 'some', 'some|chain', 'some|chain|into', ... ) * Splits "some|chain|into|an|array" into array( '#clearAll#', 'some', 'some|chain', 'some|chain|into', ... )
* *
* @param string $cid CacheID to translate * @param string $cid CacheID to translate
@@ -350,6 +363,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* @param string $cache_id cache id * @param string $cache_id cache id
* @param string $compile_id compile id * @param string $compile_id compile id
* @param string $resource_uid source's filepath * @param string $resource_uid source's filepath
*
* @return array list of InvalidationKeys * @return array list of InvalidationKeys
* @uses $invalidationKeyPrefix to prepend to each InvalidationKey * @uses $invalidationKeyPrefix to prepend to each InvalidationKey
*/ */
@@ -387,7 +401,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
$t[] = 'IVK#CACHE#' . $part; $t[] = 'IVK#CACHE#' . $part;
$t[] = 'IVK#CID' . $_name . $part . $_compile; $t[] = 'IVK#CID' . $_name . $part . $_compile;
// skip past delimiter position // skip past delimiter position
$i++; $i ++;
} }
return $t; return $t;
@@ -398,7 +412,8 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
* @return booelan true or false if cache is locked *
* @return boolean true or false if cache is locked
*/ */
public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached) public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
{ {
@@ -413,6 +428,8 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
*
* @return bool|void
*/ */
public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached) public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
{ {
@@ -426,6 +443,8 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* *
* @param Smarty $smarty Smarty object * @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object * @param Smarty_Template_Cached $cached cached object
*
* @return bool|void
*/ */
public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached) public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
{ {
@@ -438,6 +457,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
* Read values for a set of keys from cache * Read values for a set of keys from cache
* *
* @param array $keys list of keys to fetch * @param array $keys list of keys to fetch
*
* @return array list of values with the given keys used as indexes * @return array list of values with the given keys used as indexes
*/ */
abstract protected function read(array $keys); abstract protected function read(array $keys);
@@ -445,16 +465,18 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
/** /**
* Save values for a set of keys to cache * Save values for a set of keys to cache
* *
* @param array $keys list of values to save * @param array $keys list of values to save
* @param int $expire expiration time * @param int $expire expiration time
*
* @return boolean true on success, false on failure * @return boolean true on success, false on failure
*/ */
abstract protected function write(array $keys, $expire=null); abstract protected function write(array $keys, $expire = null);
/** /**
* Remove values from cache * Remove values from cache
* *
* @param array $keys list of keys to delete * @param array $keys list of keys to delete
*
* @return boolean true on success, false on failure * @return boolean true on success, false on failure
*/ */
abstract protected function delete(array $keys); abstract protected function delete(array $keys);
@@ -468,5 +490,4 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
{ {
return false; return false;
} }
} }

View File

@@ -2,19 +2,17 @@
/** /**
* Smarty Internal Plugin * Smarty Internal Plugin
* *
* @package Smarty * @package Smarty
* @subpackage TemplateResources * @subpackage TemplateResources
*/ */
/** /**
* Smarty Resource Data Object * Smarty Resource Data Object
*
* Meta Data Container for Config Files * Meta Data Container for Config Files
* *
* @package Smarty * @package Smarty
* @subpackage TemplateResources * @subpackage TemplateResources
* @author Rodney Rehm * @author Rodney Rehm
*
* @property string $content * @property string $content
* @property int $timestamp * @property int $timestamp
* @property bool $exists * @property bool $exists
@@ -50,8 +48,9 @@ class Smarty_Config_Source extends Smarty_Template_Source
/** /**
* <<magic>> Generic setter. * <<magic>> Generic setter.
* *
* @param string $property_name valid: content, timestamp, exists * @param string $property_name valid: content, timestamp, exists
* @param mixed $value newly assigned value (not check for correct type) * @param mixed $value newly assigned value (not check for correct type)
*
* @throws SmartyException when the given property name is not valid * @throws SmartyException when the given property name is not valid
*/ */
public function __set($property_name, $value) public function __set($property_name, $value)
@@ -71,7 +70,9 @@ class Smarty_Config_Source extends Smarty_Template_Source
/** /**
* <<magic>> Generic getter. * <<magic>> Generic getter.
* *
* @param string $property_name valid: content, timestamp, exists * @param string $property_name valid: content, timestamp, exists
*
* @return mixed|void
* @throws SmartyException when the given property name is not valid * @throws SmartyException when the given property name is not valid
*/ */
public function __get($property_name) public function __get($property_name)
@@ -90,5 +91,4 @@ class Smarty_Config_Source extends Smarty_Template_Source
throw new SmartyException("config property '$property_name' does not exist."); throw new SmartyException("config property '$property_name' does not exist.");
} }
} }
} }

View File

@@ -0,0 +1,297 @@
<?php
/**
* Smarty Internal Plugin CacheResource File
*
* @package Smarty
* @subpackage Cacher
* @author Uwe Tews
* @author Rodney Rehm
*/
/**
* This class does contain all necessary methods for the HTML cache on file system
* Implements the file system as resource for the HTML cache Version ussing nocache inserts.
*
* @package Smarty
* @subpackage Cacher
*/
class Smarty_Internal_CacheResource_File extends Smarty_CacheResource
{
/**
* populate Cached Object with meta data from Resource
*
* @param Smarty_Template_Cached $cached cached object
* @param Smarty_Internal_Template $_template template object
*
* @return void
*/
public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template)
{
$_source_file_path = str_replace(':', '.', $_template->source->filepath);
$_cache_id = isset($_template->cache_id) ? preg_replace('![^\w\|]+!', '_', $_template->cache_id) : null;
$_compile_id = isset($_template->compile_id) ? preg_replace('![^\w\|]+!', '_', $_template->compile_id) : null;
$_filepath = $_template->source->uid;
// if use_sub_dirs, break file into directories
if ($_template->smarty->use_sub_dirs) {
$_filepath = substr($_filepath, 0, 2) . DS
. substr($_filepath, 2, 2) . DS
. substr($_filepath, 4, 2) . DS
. $_filepath;
}
$_compile_dir_sep = $_template->smarty->use_sub_dirs ? DS : '^';
if (isset($_cache_id)) {
$_cache_id = str_replace('|', $_compile_dir_sep, $_cache_id) . $_compile_dir_sep;
} else {
$_cache_id = '';
}
if (isset($_compile_id)) {
$_compile_id = $_compile_id . $_compile_dir_sep;
} else {
$_compile_id = '';
}
$_cache_dir = $_template->smarty->getCacheDir();
if ($_template->smarty->cache_locking) {
// create locking file name
// relative file name?
if (!preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_cache_dir)) {
$_lock_dir = rtrim(getcwd(), '/\\') . DS . $_cache_dir;
} else {
$_lock_dir = $_cache_dir;
}
$cached->lock_id = $_lock_dir . sha1($_cache_id . $_compile_id . $_template->source->uid) . '.lock';
}
$cached->filepath = $_cache_dir . $_cache_id . $_compile_id . $_filepath . '.' . basename($_source_file_path) . '.php';
$cached->timestamp = @filemtime($cached->filepath);
$cached->exists = !!$cached->timestamp;
}
/**
* populate Cached Object with timestamp and exists from Resource
*
* @param Smarty_Template_Cached $cached cached object
*
* @return void
*/
public function populateTimestamp(Smarty_Template_Cached $cached)
{
$cached->timestamp = @filemtime($cached->filepath);
$cached->exists = !!$cached->timestamp;
}
/**
* Read the cached template and process its header
*
* @param Smarty_Internal_Template $_template template object
* @param Smarty_Template_Cached $cached cached object
*
* @return booleantrue or false if the cached content does not exist
*/
public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null)
{
/** @var Smarty_Internal_Template $_smarty_tpl
* used in included file
*/
$_smarty_tpl = $_template;
return @include $_template->cached->filepath;
}
/**
* Write the rendered template output to cache
*
* @param Smarty_Internal_Template $_template template object
* @param string $content content to cache
*
* @return boolean success
*/
public function writeCachedContent(Smarty_Internal_Template $_template, $content)
{
if (Smarty_Internal_Write_File::writeFile($_template->cached->filepath, $content, $_template->smarty) === true) {
$_template->cached->timestamp = @filemtime($_template->cached->filepath);
$_template->cached->exists = !!$_template->cached->timestamp;
if ($_template->cached->exists) {
return true;
}
}
return false;
}
/**
* Empty cache
*
* @param Smarty $smarty
* @param integer $exp_time expiration time (number of seconds, not timestamp)
*
* @return integer number of cache files deleted
*/
public function clearAll(Smarty $smarty, $exp_time = null)
{
return $this->clear($smarty, null, null, null, $exp_time);
}
/**
* Empty cache for a specific template
*
* @param Smarty $smarty
* @param string $resource_name template name
* @param string $cache_id cache id
* @param string $compile_id compile id
* @param integer $exp_time expiration time (number of seconds, not timestamp)
*
* @return integer number of cache files deleted
*/
public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time)
{
$_cache_id = isset($cache_id) ? preg_replace('![^\w\|]+!', '_', $cache_id) : null;
$_compile_id = isset($compile_id) ? preg_replace('![^\w\|]+!', '_', $compile_id) : null;
$_dir_sep = $smarty->use_sub_dirs ? '/' : '^';
$_compile_id_offset = $smarty->use_sub_dirs ? 3 : 0;
if (($_dir = realpath($smarty->getCacheDir())) === false) {
return 0;
}
$_dir .= '/';
$_dir_length = strlen($_dir);
if (isset($_cache_id)) {
$_cache_id_parts = explode('|', $_cache_id);
$_cache_id_parts_count = count($_cache_id_parts);
if ($smarty->use_sub_dirs) {
foreach ($_cache_id_parts as $id_part) {
$_dir .= $id_part . DS;
}
}
}
if (isset($resource_name)) {
$_save_stat = $smarty->caching;
$smarty->caching = true;
$tpl = new $smarty->template_class($resource_name, $smarty);
$smarty->caching = $_save_stat;
// remove from template cache
$tpl->source; // have the template registered before unset()
if ($smarty->allow_ambiguous_resources) {
$_templateId = $tpl->source->unique_resource . $tpl->cache_id . $tpl->compile_id;
} else {
$_templateId = $smarty->joined_template_dir . '#' . $resource_name . $tpl->cache_id . $tpl->compile_id;
}
if (isset($_templateId[150])) {
$_templateId = sha1($_templateId);
}
unset($smarty->template_objects[$_templateId]);
if ($tpl->source->exists) {
$_resourcename_parts = basename(str_replace('^', '/', $tpl->cached->filepath));
} else {
return 0;
}
}
$_count = 0;
$_time = time();
if (file_exists($_dir)) {
$_cacheDirs = new RecursiveDirectoryIterator($_dir);
$_cache = new RecursiveIteratorIterator($_cacheDirs, RecursiveIteratorIterator::CHILD_FIRST);
foreach ($_cache as $_file) {
if (substr(basename($_file->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) {
continue;
}
// directory ?
if ($_file->isDir()) {
if (!$_cache->isDot()) {
// delete folder if empty
@rmdir($_file->getPathname());
}
} else {
$_parts = explode($_dir_sep, str_replace('\\', '/', substr((string) $_file, $_dir_length)));
$_parts_count = count($_parts);
// check name
if (isset($resource_name)) {
if ($_parts[$_parts_count - 1] != $_resourcename_parts) {
continue;
}
}
// check compile id
if (isset($_compile_id) && (!isset($_parts[$_parts_count - 2 - $_compile_id_offset]) || $_parts[$_parts_count - 2 - $_compile_id_offset] != $_compile_id)) {
continue;
}
// check cache id
if (isset($_cache_id)) {
// count of cache id parts
$_parts_count = (isset($_compile_id)) ? $_parts_count - 2 - $_compile_id_offset : $_parts_count - 1 - $_compile_id_offset;
if ($_parts_count < $_cache_id_parts_count) {
continue;
}
for ($i = 0; $i < $_cache_id_parts_count; $i ++) {
if ($_parts[$i] != $_cache_id_parts[$i]) {
continue 2;
}
}
}
// expired ?
if (isset($exp_time)) {
if ($exp_time < 0) {
preg_match('#\'cache_lifetime\' =>\s*(\d*)#', file_get_contents($_file), $match);
if ($_time < (@filemtime($_file) + $match[1])) {
continue;
}
} else {
if ($_time - @filemtime($_file) < $exp_time) {
continue;
}
}
}
$_count += @unlink((string) $_file) ? 1 : 0;
}
}
}
return $_count;
}
/**
* Check is cache is locked for this template
*
* @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object
*
* @return boolean true or false if cache is locked
*/
public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
clearstatcache(true, $cached->lock_id);
} else {
clearstatcache();
}
$t = @filemtime($cached->lock_id);
return $t && (time() - $t < $smarty->locking_timeout);
}
/**
* Lock cache for this template
*
* @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object
*
* @return bool|void
*/
public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
$cached->is_locked = true;
touch($cached->lock_id);
}
/**
* Unlock cache for this template
*
* @param Smarty $smarty Smarty object
* @param Smarty_Template_Cached $cached cached object
*
* @return bool|void
*/
public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
{
$cached->is_locked = false;
@unlink($cached->lock_id);
}
}

View File

@@ -1,18 +1,17 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Append * Smarty Internal Plugin Compile Append
*
* Compiles the {append} tag * Compiles the {append} tag
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Append Class * Smarty Internal Plugin Compile Append Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Append extends Smarty_Internal_Compile_Assign class Smarty_Internal_Compile_Append extends Smarty_Internal_Compile_Assign
@@ -23,6 +22,7 @@ class Smarty_Internal_Compile_Append extends Smarty_Internal_Compile_Assign
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@@ -47,5 +47,4 @@ class Smarty_Internal_Compile_Append extends Smarty_Internal_Compile_Assign
// call compile assign // call compile assign
return parent::compile($_new_attr, $compiler, $_params); return parent::compile($_new_attr, $compiler, $_params);
} }
} }

View File

@@ -1,18 +1,17 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Assign * Smarty Internal Plugin Compile Assign
*
* Compiles the {assign} tag * Compiles the {assign} tag
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Assign Class * Smarty Internal Plugin Compile Assign Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase
@@ -23,6 +22,7 @@ class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@@ -83,5 +83,4 @@ class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase
return $output; return $output;
} }
} }

View File

@@ -2,18 +2,17 @@
/** /**
* Smarty Internal Plugin Compile Block * Smarty Internal Plugin Compile Block
*
* Compiles the {block}{/block} tags * Compiles the {block}{/block} tags
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Block Class * Smarty Internal Plugin Compile Block Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase
@@ -68,8 +67,9 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase
/** /**
* Compiles code for the {block} tag * Compiles code for the {block} tag
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return boolean true * @return boolean true
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@@ -78,13 +78,18 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
$_name = trim($_attr['name'], "\"'"); $_name = trim($_attr['name'], "\"'");
// existing child must override parent settings
if (isset($compiler->template->block_data[$_name]) && $compiler->template->block_data[$_name]['mode'] == 'replace') {
$_attr['append'] = false;
$_attr['prepend'] = false;
}
// check if we process an inheritance child template // check if we process an inheritance child template
if ($compiler->inheritance_child) { if ($compiler->inheritance_child) {
array_unshift(self::$nested_block_names, $_name); array_unshift(self::$nested_block_names, $_name);
$this->template->block_data[$_name]['source'] = '';
// build {block} for child block // build {block} for child block
self::$block_data[$_name]['source'] = self::$block_data[$_name]['source'] =
"{$compiler->smarty->left_delimiter}private_child_block name={$_attr['name']} file='{$compiler->template->source->filepath}'" . "{$compiler->smarty->left_delimiter}private_child_block name={$_attr['name']} file='{$compiler->template->source->filepath}' type='{$compiler->template->source->type}' resource='{$compiler->template->template_resource}'" .
" uid='{$compiler->template->source->uid}' line={$compiler->lex->line}"; " uid='{$compiler->template->source->uid}' line={$compiler->lex->line}";
if ($_attr['nocache']) { if ($_attr['nocache']) {
self::$block_data[$_name]['source'] .= ' nocache'; self::$block_data[$_name]['source'] .= ' nocache';
@@ -114,12 +119,12 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase
return true; return true;
} }
/** /**
* Compile saved child block source * Compile saved child block source
* *
* @param object $compiler compiler object * @param object $compiler compiler object
* @param string $_name optional name of child block * @param string $_name optional name of child block
*
* @return string compiled code of child block * @return string compiled code of child block
*/ */
static function compileChildBlock($compiler, $_name = null) static function compileChildBlock($compiler, $_name = null)
@@ -156,10 +161,11 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase
// flag that child is already compile by {$smarty.block.child} inclusion // flag that child is already compile by {$smarty.block.child} inclusion
$compiler->template->block_data[$_name]['compiled'] = true; $compiler->template->block_data[$_name]['compiled'] = true;
$_tpl = new Smarty_Internal_template('string:' . $compiler->template->block_data[$_name]['source'], $compiler->smarty, $compiler->template, $compiler->template->cache_id, $_tpl = new Smarty_Internal_template('string:' . $compiler->template->block_data[$_name]['source'], $compiler->smarty, $compiler->template, $compiler->template->cache_id,
$compiler->template->compile_id, $compiler->template->caching, $compiler->template->cache_lifetime); $compiler->template->compile_id, $compiler->template->caching, $compiler->template->cache_lifetime);
if ($compiler->smarty->debugging) { if ($compiler->smarty->debugging) {
Smarty_Internal_Debug::ignore($_tpl); Smarty_Internal_Debug::ignore($_tpl);
} }
$_tpl->tpl_vars = $compiler->template->tpl_vars;
$_tpl->variable_filters = $compiler->template->variable_filters; $_tpl->variable_filters = $compiler->template->variable_filters;
$_tpl->properties['nocache_hash'] = $compiler->template->properties['nocache_hash']; $_tpl->properties['nocache_hash'] = $compiler->template->properties['nocache_hash'];
$_tpl->allow_relative_path = true; $_tpl->allow_relative_path = true;
@@ -205,9 +211,10 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase
/** /**
* Compile $smarty.block.parent * Compile $smarty.block.parent
* *
* @param object $compiler compiler object * @param object $compiler compiler object
* @param string $_name optional name of child block * @param string $_name optional name of child block
* @return string compiled code of schild block *
* @return string compiled code of child block
*/ */
static function compileParentBlock($compiler, $_name = null) static function compileParentBlock($compiler, $_name = null)
{ {
@@ -236,21 +243,20 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase
/** /**
* Process block source * Process block source
* *
* @param string $source source text * @param $compiler
* @return '' * @param string $source source text
*
*/ */
static function blockSource($compiler, $source) static function blockSource($compiler, $source)
{ {
Smarty_Internal_Compile_Block::$block_data[Smarty_Internal_Compile_Block::$nested_block_names[0]]['source'] .= $source; Smarty_Internal_Compile_Block::$block_data[Smarty_Internal_Compile_Block::$nested_block_names[0]]['source'] .= $source;
} }
} }
/** /**
* Smarty Internal Plugin Compile BlockClose Class * Smarty Internal Plugin Compile BlockClose Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase
@@ -258,8 +264,9 @@ class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase
/** /**
* Compiles code for the {/block} tag * Compiles code for the {/block} tag
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@@ -275,7 +282,6 @@ class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase
if ($compiler->inheritance_child) { if ($compiler->inheritance_child) {
$name1 = Smarty_Internal_Compile_Block::$nested_block_names[0]; $name1 = Smarty_Internal_Compile_Block::$nested_block_names[0];
Smarty_Internal_Compile_Block::$block_data[$name1]['source'] .= "{$compiler->smarty->left_delimiter}/private_child_block{$compiler->smarty->right_delimiter}"; Smarty_Internal_Compile_Block::$block_data[$name1]['source'] .= "{$compiler->smarty->left_delimiter}/private_child_block{$compiler->smarty->right_delimiter}";
$level = count(Smarty_Internal_Compile_Block::$nested_block_names);
array_shift(Smarty_Internal_Compile_Block::$nested_block_names); array_shift(Smarty_Internal_Compile_Block::$nested_block_names);
if (!empty(Smarty_Internal_Compile_Block::$nested_block_names)) { if (!empty(Smarty_Internal_Compile_Block::$nested_block_names)) {
$name2 = Smarty_Internal_Compile_Block::$nested_block_names[0]; $name2 = Smarty_Internal_Compile_Block::$nested_block_names[0];
@@ -330,8 +336,8 @@ class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase
} else { } else {
$_output = $compiler->parser->current_buffer->to_smarty_php(); $_output = $compiler->parser->current_buffer->to_smarty_php();
} }
unset($compiler->template->block_data[$_name]['compiled']);
} }
unset($compiler->template->block_data[$_name]['compiled']);
// reset flags // reset flags
$compiler->parser->current_buffer = $saved_data[2]; $compiler->parser->current_buffer = $saved_data[2];
if ($compiler->nocache) { if ($compiler->nocache) {
@@ -348,7 +354,7 @@ class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase
/** /**
* Smarty Internal Plugin Compile Child Block Class * Smarty Internal Plugin Compile Child Block Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Private_Child_Block extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Private_Child_Block extends Smarty_Internal_CompileBase
@@ -360,14 +366,14 @@ class Smarty_Internal_Compile_Private_Child_Block extends Smarty_Internal_Compil
* @var array * @var array
* @see Smarty_Internal_CompileBase * @see Smarty_Internal_CompileBase
*/ */
public $required_attributes = array('name', 'file', 'uid', 'line'); public $required_attributes = array('name', 'file', 'uid', 'line', 'type', 'resource');
/** /**
* Compiles code for the {private_child_block} tag * Compiles code for the {private_child_block} tag
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return boolean true * @return boolean true
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@@ -375,6 +381,16 @@ class Smarty_Internal_Compile_Private_Child_Block extends Smarty_Internal_Compil
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
// update template with original template resource of {block}
if (trim($_attr['type'], "'") == 'file') {
$compiler->template->template_resource = 'file:' . realpath(trim($_attr['file'], "'"));
} else {
$compiler->template->template_resource = trim($_attr['resource'], "'");
}
// source object
unset ($compiler->template->source);
$exists = $compiler->template->source->exists;
// must merge includes // must merge includes
if ($_attr['nocache'] == true) { if ($_attr['nocache'] == true) {
$compiler->tag_nocache = true; $compiler->tag_nocache = true;
@@ -396,18 +412,18 @@ class Smarty_Internal_Compile_Private_Child_Block extends Smarty_Internal_Compil
/** /**
* Smarty Internal Plugin Compile Child Block Close Class * Smarty Internal Plugin Compile Child Block Close Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Private_Child_Blockclose extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Private_Child_Blockclose extends Smarty_Internal_CompileBase
{ {
/** /**
* Compiles code for the {/private_child_block} tag * Compiles code for the {/private_child_block} tag
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return boolean true * @return boolean true
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)

View File

@@ -1,17 +1,17 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Break * Smarty Internal Plugin Compile Break
*
* Compiles the {break} tag * Compiles the {break} tag
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Break Class * Smarty Internal Plugin Compile Break Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase
@@ -37,6 +37,7 @@ class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@@ -61,15 +62,14 @@ class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase
$stack_count = count($compiler->_tag_stack) - 1; $stack_count = count($compiler->_tag_stack) - 1;
while ($level_count > 0 && $stack_count >= 0) { while ($level_count > 0 && $stack_count >= 0) {
if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) { if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) {
$level_count--; $level_count --;
} }
$stack_count--; $stack_count --;
} }
if ($level_count != 0) { if ($level_count != 0) {
$compiler->trigger_template_error("cannot break {$_levels} level(s)", $compiler->lex->taglineno); $compiler->trigger_template_error("cannot break {$_levels} level(s)", $compiler->lex->taglineno);
} }
return "<?php break {$_levels}?>"; return "<?php break {$_levels};?>";
} }
} }

View File

@@ -1,18 +1,17 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Function_Call * Smarty Internal Plugin Compile Function_Call
*
* Compiles the calls of user defined tags defined by {function} * Compiles the calls of user defined tags defined by {function}
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Function_Call Class * Smarty Internal Plugin Compile Function_Call Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase
@@ -42,9 +41,9 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase
/** /**
* Compiles the calls of user defined tags defined by {function} * Compiles the calls of user defined tags defined by {function}
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter *
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@@ -53,7 +52,7 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
// save possible attributes // save possible attributes
if (isset($_attr['assign'])) { if (isset($_attr['assign'])) {
// output will be stored in a smarty variable instead of beind displayed // output will be stored in a smarty variable instead of being displayed
$_assign = $_attr['assign']; $_assign = $_attr['assign'];
} }
$_name = $_attr['name']; $_name = $_attr['name'];
@@ -96,7 +95,7 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase
} }
} }
} }
//varibale name? //variable name?
if (!(strpos($_name, '$') === false)) { if (!(strpos($_name, '$') === false)) {
$call_cache = $_name; $call_cache = $_name;
$call_function = '$tmp = "smarty_template_function_".' . $_name . '; $tmp'; $call_function = '$tmp = "smarty_template_function_".' . $_name . '; $tmp';
@@ -125,5 +124,4 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase
return $_output; return $_output;
} }
} }

View File

@@ -1,18 +1,17 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Capture * Smarty Internal Plugin Compile Capture
*
* Compiles the {capture} tag * Compiles the {capture} tag
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Capture Class * Smarty Internal Plugin Compile Capture Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase
@@ -37,6 +36,7 @@ class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@@ -55,13 +55,12 @@ class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase
return $_output; return $_output;
} }
} }
/** /**
* Smarty Internal Plugin Compile Captureclose Class * Smarty Internal Plugin Compile Captureclose Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase
@@ -71,6 +70,7 @@ class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@@ -93,5 +93,4 @@ class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase
return $_output; return $_output;
} }
} }

View File

@@ -1,18 +1,17 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Config Load * Smarty Internal Plugin Compile Config Load
*
* Compiles the {config load} tag * Compiles the {config load} tag
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Config Load Class * Smarty Internal Plugin Compile Config Load Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase
@@ -30,7 +29,7 @@ class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase
* @var array * @var array
* @see Smarty_Internal_CompileBase * @see Smarty_Internal_CompileBase
*/ */
public $shorttag_order = array('file','section'); public $shorttag_order = array('file', 'section');
/** /**
* Attribute definition: Overwrites base class. * Attribute definition: Overwrites base class.
* *
@@ -44,11 +43,12 @@ class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
{ {
static $_is_legal_scope = array('local' => true,'parent' => true,'root' => true,'global' => true); static $_is_legal_scope = array('local' => true, 'parent' => true, 'root' => true, 'global' => true);
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
@@ -56,7 +56,7 @@ class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase
$compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno); $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
} }
// save posible attributes // save possible attributes
$conf_file = $_attr['file']; $conf_file = $_attr['file'];
if (isset($_attr['section'])) { if (isset($_attr['section'])) {
$section = $_attr['section']; $section = $_attr['section'];
@@ -69,9 +69,9 @@ class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase
$_attr['scope'] = trim($_attr['scope'], "'\""); $_attr['scope'] = trim($_attr['scope'], "'\"");
if (isset($_is_legal_scope[$_attr['scope']])) { if (isset($_is_legal_scope[$_attr['scope']])) {
$scope = $_attr['scope']; $scope = $_attr['scope'];
} else { } else {
$compiler->trigger_template_error('illegal value for "scope" attribute', $compiler->lex->taglineno); $compiler->trigger_template_error('illegal value for "scope" attribute', $compiler->lex->taglineno);
} }
} }
// create config object // create config object
$_output = "<?php \$_config = new Smarty_Internal_Config($conf_file, \$_smarty_tpl->smarty, \$_smarty_tpl);"; $_output = "<?php \$_config = new Smarty_Internal_Config($conf_file, \$_smarty_tpl->smarty, \$_smarty_tpl);";
@@ -79,5 +79,4 @@ class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase
return $_output; return $_output;
} }
} }

View File

@@ -1,18 +1,17 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Continue * Smarty Internal Plugin Compile Continue
*
* Compiles the {continue} tag * Compiles the {continue} tag
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Continue Class * Smarty Internal Plugin Compile Continue Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Continue extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Continue extends Smarty_Internal_CompileBase
@@ -38,6 +37,7 @@ class Smarty_Internal_Compile_Continue extends Smarty_Internal_CompileBase
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@@ -62,15 +62,14 @@ class Smarty_Internal_Compile_Continue extends Smarty_Internal_CompileBase
$stack_count = count($compiler->_tag_stack) - 1; $stack_count = count($compiler->_tag_stack) - 1;
while ($level_count > 0 && $stack_count >= 0) { while ($level_count > 0 && $stack_count >= 0) {
if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) { if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) {
$level_count--; $level_count --;
} }
$stack_count--; $stack_count --;
} }
if ($level_count != 0) { if ($level_count != 0) {
$compiler->trigger_template_error("cannot continue {$_levels} level(s)", $compiler->lex->taglineno); $compiler->trigger_template_error("cannot continue {$_levels} level(s)", $compiler->lex->taglineno);
} }
return "<?php continue {$_levels}?>"; return "<?php continue {$_levels};?>";
} }
} }

View File

@@ -1,19 +1,18 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Debug * Smarty Internal Plugin Compile Debug
*
* Compiles the {debug} tag. * Compiles the {debug} tag.
* It opens a window the the Smarty Debugging Console. * It opens a window the the Smarty Debugging Console.
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Debug Class * Smarty Internal Plugin Compile Debug Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Debug extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Debug extends Smarty_Internal_CompileBase
@@ -23,6 +22,7 @@ class Smarty_Internal_Compile_Debug extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@@ -38,5 +38,4 @@ class Smarty_Internal_Compile_Debug extends Smarty_Internal_CompileBase
return $_output; return $_output;
} }
} }

View File

@@ -1,18 +1,17 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Eval * Smarty Internal Plugin Compile Eval
*
* Compiles the {eval} tag. * Compiles the {eval} tag.
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Eval Class * Smarty Internal Plugin Compile Eval Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase
@@ -37,13 +36,14 @@ class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase
* @var array * @var array
* @see Smarty_Internal_CompileBase * @see Smarty_Internal_CompileBase
*/ */
public $shorttag_order = array('var','assign'); public $shorttag_order = array('var', 'assign');
/** /**
* Compiles code for the {eval} tag * Compiles code for the {eval} tag
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@@ -53,12 +53,12 @@ class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
if (isset($_attr['assign'])) { if (isset($_attr['assign'])) {
// output will be stored in a smarty variable instead of beind displayed // output will be stored in a smarty variable instead of being displayed
$_assign = $_attr['assign']; $_assign = $_attr['assign'];
} }
// create template object // create template object
$_output = "\$_template = new {$compiler->smarty->template_class}('eval:'.".$_attr['var'].", \$_smarty_tpl->smarty, \$_smarty_tpl);"; $_output = "\$_template = new {$compiler->smarty->template_class}('eval:'." . $_attr['var'] . ", \$_smarty_tpl->smarty, \$_smarty_tpl);";
//was there an assign attribute? //was there an assign attribute?
if (isset($_assign)) { if (isset($_assign)) {
$_output .= "\$_smarty_tpl->assign($_assign,\$_template->fetch());"; $_output .= "\$_smarty_tpl->assign($_assign,\$_template->fetch());";
@@ -68,5 +68,4 @@ class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase
return "<?php $_output ?>"; return "<?php $_output ?>";
} }
} }

View File

@@ -2,18 +2,17 @@
/** /**
* Smarty Internal Plugin Compile extend * Smarty Internal Plugin Compile extend
*
* Compiles the {extends} tag * Compiles the {extends} tag
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile extend Class * Smarty Internal Plugin Compile extend Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase
@@ -36,8 +35,9 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase
/** /**
* Compiles code for the {extends} tag * Compiles code for the {extends} tag
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@@ -50,21 +50,19 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase
if (strpos($_attr['file'], '$_tmp') !== false) { if (strpos($_attr['file'], '$_tmp') !== false) {
$compiler->trigger_template_error('illegal value for file attribute', $compiler->lex->taglineno); $compiler->trigger_template_error('illegal value for file attribute', $compiler->lex->taglineno);
} }
// add tag to call parent template at the end of source
if ($compiler->has_variable_string || !((substr_count($_attr['file'], '"') == 2 || substr_count($_attr['file'], "'") == 2)) $name = $_attr['file'];
|| substr_count($_attr['file'], '(') != 0 || substr_count($_attr['file'], '$_smarty_tpl->') != 0 /** @var Smarty_Internal_Template $_smarty_tpl
) { * used in evaluated code
$compiler->trigger_template_error('variable template file name not allowed', $compiler->lex->taglineno); */
} $_smarty_tpl = $compiler->template;
eval("\$tpl_name = $name;");
$name = trim($_attr['file'],"\"'");
// create template object // create template object
$_template = new $compiler->smarty->template_class($name, $compiler->smarty, $compiler->template); $_template = new $compiler->smarty->template_class($tpl_name, $compiler->smarty, $compiler->template);
// check for recursion // check for recursion
$uid = $_template->source->uid; $uid = $_template->source->uid;
if (isset($compiler->extends_uid[$uid])) { if (isset($compiler->extends_uid[$uid])) {
$compiler->trigger_template_error("illegal recursive call of \"$include_file\"", $this->lex->line - 1); $compiler->trigger_template_error("illegal recursive call of \"$include_file\"", $compiler->lex->line - 1);
} }
$compiler->extends_uid[$uid] = true; $compiler->extends_uid[$uid] = true;
if (empty($_template->source->components)) { if (empty($_template->source->components)) {
@@ -74,7 +72,7 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase
array_unshift($compiler->sources, $source); array_unshift($compiler->sources, $source);
$uid = $source->uid; $uid = $source->uid;
if (isset($compiler->extends_uid[$uid])) { if (isset($compiler->extends_uid[$uid])) {
$compiler->trigger_template_error("illegal recursive call of \"{$sorce->filepath}\"", $this->lex->line - 1); $compiler->trigger_template_error("illegal recursive call of \"{$source->filepath}\"", $compiler->lex->line - 1);
} }
$compiler->extends_uid[$uid] = true; $compiler->extends_uid[$uid] = true;
} }

View File

@@ -1,39 +1,35 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile For * Smarty Internal Plugin Compile For
*
* Compiles the {for} {forelse} {/for} tags * Compiles the {for} {forelse} {/for} tags
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile For Class * Smarty Internal Plugin Compile For Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase
{ {
/** /**
* Compiles code for the {for} tag * Compiles code for the {for} tag
* * Smarty 3 does implement two different syntax's:
* Smarty 3 does implement two different sytaxes:
*
* - {for $var in $array} * - {for $var in $array}
* For looping over arrays or iterators * For looping over arrays or iterators
*
* - {for $x=0; $x<$y; $x++} * - {for $x=0; $x<$y; $x++}
* For general loops * For general loops
* * The parser is generating different sets of attribute by which this compiler can
* The parser is gereration different sets of attribute by which this compiler can * determine which syntax is used.
* determin which syntax is used.
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@@ -81,13 +77,12 @@ class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase
// return compiled code // return compiled code
return $output; return $output;
} }
} }
/** /**
* Smarty Internal Plugin Compile Forelse Class * Smarty Internal Plugin Compile Forelse Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Forelse extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Forelse extends Smarty_Internal_CompileBase
@@ -98,25 +93,25 @@ class Smarty_Internal_Compile_Forelse extends Smarty_Internal_CompileBase
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
{ {
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
list($openTag, $nocache) = $this->closeTag($compiler, array('for')); list($openTag, $nocache) = $this->closeTag($compiler, array('for'));
$this->openTag($compiler, 'forelse', array('forelse', $nocache)); $this->openTag($compiler, 'forelse', array('forelse', $nocache));
return "<?php }} else { ?>"; return "<?php }} else { ?>";
} }
} }
/** /**
* Smarty Internal Plugin Compile Forclose Class * Smarty Internal Plugin Compile Forclose Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase
@@ -127,6 +122,7 @@ class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@@ -146,5 +142,4 @@ class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase
return "<?php }} ?>"; return "<?php }} ?>";
} }
} }
} }

View File

@@ -1,18 +1,17 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Foreach * Smarty Internal Plugin Compile Foreach
*
* Compiles the {foreach} {foreachelse} {/foreach} tags * Compiles the {foreach} {foreachelse} {/foreach} tags
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Foreach Class * Smarty Internal Plugin Compile Foreach Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase
@@ -37,7 +36,7 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase
* @var array * @var array
* @see Smarty_Internal_CompileBase * @see Smarty_Internal_CompileBase
*/ */
public $shorttag_order = array('from','item','key','name'); public $shorttag_order = array('from', 'item', 'key', 'name');
/** /**
* Compiles code for the {foreach} tag * Compiles code for the {foreach} tag
@@ -45,11 +44,11 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
{ {
$tpl = $compiler->template;
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
@@ -80,12 +79,12 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase
$ItemVarName = '$' . trim($item, '\'"') . '@'; $ItemVarName = '$' . trim($item, '\'"') . '@';
// evaluates which Smarty variables and properties have to be computed // evaluates which Smarty variables and properties have to be computed
if ($has_name) { if ($has_name) {
$usesSmartyFirst = strpos($tpl->source->content, $SmartyVarName . 'first') !== false; $usesSmartyFirst = strpos($compiler->lex->data, $SmartyVarName . 'first') !== false;
$usesSmartyLast = strpos($tpl->source->content, $SmartyVarName . 'last') !== false; $usesSmartyLast = strpos($compiler->lex->data, $SmartyVarName . 'last') !== false;
$usesSmartyIndex = strpos($tpl->source->content, $SmartyVarName . 'index') !== false; $usesSmartyIndex = strpos($compiler->lex->data, $SmartyVarName . 'index') !== false;
$usesSmartyIteration = strpos($tpl->source->content, $SmartyVarName . 'iteration') !== false; $usesSmartyIteration = strpos($compiler->lex->data, $SmartyVarName . 'iteration') !== false;
$usesSmartyShow = strpos($tpl->source->content, $SmartyVarName . 'show') !== false; $usesSmartyShow = strpos($compiler->lex->data, $SmartyVarName . 'show') !== false;
$usesSmartyTotal = strpos($tpl->source->content, $SmartyVarName . 'total') !== false; $usesSmartyTotal = strpos($compiler->lex->data, $SmartyVarName . 'total') !== false;
} else { } else {
$usesSmartyFirst = false; $usesSmartyFirst = false;
$usesSmartyLast = false; $usesSmartyLast = false;
@@ -93,12 +92,12 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase
$usesSmartyShow = false; $usesSmartyShow = false;
} }
$usesPropFirst = $usesSmartyFirst || strpos($tpl->source->content, $ItemVarName . 'first') !== false; $usesPropFirst = $usesSmartyFirst || strpos($compiler->lex->data, $ItemVarName . 'first') !== false;
$usesPropLast = $usesSmartyLast || strpos($tpl->source->content, $ItemVarName . 'last') !== false; $usesPropLast = $usesSmartyLast || strpos($compiler->lex->data, $ItemVarName . 'last') !== false;
$usesPropIndex = $usesPropFirst || strpos($tpl->source->content, $ItemVarName . 'index') !== false; $usesPropIndex = $usesPropFirst || strpos($compiler->lex->data, $ItemVarName . 'index') !== false;
$usesPropIteration = $usesPropLast || strpos($tpl->source->content, $ItemVarName . 'iteration') !== false; $usesPropIteration = $usesPropLast || strpos($compiler->lex->data, $ItemVarName . 'iteration') !== false;
$usesPropShow = strpos($tpl->source->content, $ItemVarName . 'show') !== false; $usesPropShow = strpos($compiler->lex->data, $ItemVarName . 'show') !== false;
$usesPropTotal = $usesSmartyTotal || $usesSmartyShow || $usesPropShow || $usesPropLast || strpos($tpl->source->content, $ItemVarName . 'total') !== false; $usesPropTotal = $usesSmartyTotal || $usesSmartyShow || $usesPropShow || $usesPropLast || strpos($compiler->lex->data, $ItemVarName . 'total') !== false;
// generate output code // generate output code
$output = "<?php "; $output = "<?php ";
$output .= " \$_smarty_tpl->tpl_vars[$item] = new Smarty_Variable; \$_smarty_tpl->tpl_vars[$item]->_loop = false;\n"; $output .= " \$_smarty_tpl->tpl_vars[$item] = new Smarty_Variable; \$_smarty_tpl->tpl_vars[$item]->_loop = false;\n";
@@ -171,7 +170,7 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase
/** /**
* Smarty Internal Plugin Compile Foreachelse Class * Smarty Internal Plugin Compile Foreachelse Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase
@@ -182,6 +181,7 @@ class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@@ -194,13 +194,12 @@ class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase
return "<?php }\nif (!\$_smarty_tpl->tpl_vars[$item]->_loop) {\n?>"; return "<?php }\nif (!\$_smarty_tpl->tpl_vars[$item]->_loop) {\n?>";
} }
} }
/** /**
* Smarty Internal Plugin Compile Foreachclose Class * Smarty Internal Plugin Compile Foreachclose Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase
@@ -211,6 +210,7 @@ class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@@ -226,5 +226,4 @@ class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase
return "<?php } ?>"; return "<?php } ?>";
} }
} }

View File

@@ -1,18 +1,17 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Function * Smarty Internal Plugin Compile Function
*
* Compiles the {function} {/function} tags * Compiles the {function} {/function} tags
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Function Class * Smarty Internal Plugin Compile Function Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase
@@ -42,9 +41,10 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase
/** /**
* Compiles code for the {function} tag * Compiles code for the {function} tag
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return boolean true * @return boolean true
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@@ -57,16 +57,19 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase
} }
unset($_attr['nocache']); unset($_attr['nocache']);
$save = array($_attr, $compiler->parser->current_buffer, $save = array($_attr, $compiler->parser->current_buffer,
$compiler->template->has_nocache_code, $compiler->template->required_plugins); $compiler->template->has_nocache_code, $compiler->template->required_plugins);
$this->openTag($compiler, 'function', $save); $this->openTag($compiler, 'function', $save);
$_name = trim($_attr['name'], "'\""); $_name = trim($_attr['name'], "'\"");
unset($_attr['name']); unset($_attr['name']);
// set flag that we are compiling a template function // set flag that we are compiling a template function
$compiler->compiles_template_function = true; $compiler->compiles_template_function = true;
$compiler->template->properties['function'][$_name]['parameter'] = array(); $compiler->template->properties['function'][$_name]['parameter'] = array();
/** @var Smarty_Internal_Template $_smarty_tpl
* used in evaluated code
*/
$_smarty_tpl = $compiler->template; $_smarty_tpl = $compiler->template;
foreach ($_attr as $_key => $_data) { foreach ($_attr as $_key => $_data) {
eval ('$tmp='.$_data.';'); eval ('$tmp=' . $_data . ';');
$compiler->template->properties['function'][$_name]['parameter'][$_key] = $tmp; $compiler->template->properties['function'][$_name]['parameter'][$_key] = $tmp;
} }
$compiler->smarty->template_functions[$_name]['parameter'] = $compiler->template->properties['function'][$_name]['parameter']; $compiler->smarty->template_functions[$_name]['parameter'] = $compiler->template->properties['function'][$_name]['parameter'];
@@ -79,7 +82,7 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase
foreach (\$_smarty_tpl->smarty->template_functions['{$_name}']['parameter'] as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);}; foreach (\$_smarty_tpl->smarty->template_functions['{$_name}']['parameter'] as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);};
foreach (\$params as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);}?>"; foreach (\$params as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);}?>";
} }
// Init temporay context // Init temporary context
$compiler->template->required_plugins = array('compiled' => array(), 'nocache' => array()); $compiler->template->required_plugins = array('compiled' => array(), 'nocache' => array());
$compiler->parser->current_buffer = new _smarty_template_buffer($compiler->parser); $compiler->parser->current_buffer = new _smarty_template_buffer($compiler->parser);
$compiler->parser->current_buffer->append_subtree(new _smarty_tag($compiler->parser, $output)); $compiler->parser->current_buffer->append_subtree(new _smarty_tag($compiler->parser, $output));
@@ -88,13 +91,12 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase
$compiler->template->properties['function'][$_name]['compiled'] = ''; $compiler->template->properties['function'][$_name]['compiled'] = '';
return true; return true;
} }
} }
/** /**
* Smarty Internal Plugin Compile Functionclose Class * Smarty Internal Plugin Compile Functionclose Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
@@ -102,9 +104,10 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
/** /**
* Compiles code for the {/function} tag * Compiles code for the {/function} tag
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return boolean true * @return boolean true
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@@ -132,15 +135,10 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
} }
$plugins_string .= "?>/*/%%SmartyNocache:{$compiler->template->properties['nocache_hash']}%%*/';?>\n"; $plugins_string .= "?>/*/%%SmartyNocache:{$compiler->template->properties['nocache_hash']}%%*/';?>\n";
} }
// remove last line break from function definition // if caching save template function for possible nocache call
$last = count($compiler->parser->current_buffer->subtrees) - 1;
if ($compiler->parser->current_buffer->subtrees[$last] instanceof _smarty_linebreak) {
unset($compiler->parser->current_buffer->subtrees[$last]);
}
// if caching save template function for possible nocache call
if ($compiler->template->caching) { if ($compiler->template->caching) {
$compiler->template->properties['function'][$_name]['compiled'] .= $plugins_string $compiler->template->properties['function'][$_name]['compiled'] .= $plugins_string
. $compiler->parser->current_buffer->to_smarty_php(); . $compiler->parser->current_buffer->to_smarty_php();
$compiler->template->properties['function'][$_name]['nocache_hash'] = $compiler->template->properties['nocache_hash']; $compiler->template->properties['function'][$_name]['nocache_hash'] = $compiler->template->properties['nocache_hash'];
$compiler->template->properties['function'][$_name]['has_nocache_code'] = $compiler->template->has_nocache_code; $compiler->template->properties['function'][$_name]['has_nocache_code'] = $compiler->template->has_nocache_code;
$compiler->template->properties['function'][$_name]['called_functions'] = $compiler->called_functions; $compiler->template->properties['function'][$_name]['called_functions'] = $compiler->called_functions;
@@ -161,5 +159,4 @@ foreach (Smarty::\$global_tpl_vars as \$key => \$value) if(!isset(\$_smarty_tpl-
return $output; return $output;
} }
} }

View File

@@ -1,30 +1,30 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile If * Smarty Internal Plugin Compile If
* * Compiles the {if} {else} {elseif} {/if} tags
* Compiles the {if} {else} {elseif} {/if} tags *
* * @package Smarty
* @package Smarty * @subpackage Compiler
* @subpackage Compiler * @author Uwe Tews
* @author Uwe Tews */
*/
/** /**
* Smarty Internal Plugin Compile If Class * Smarty Internal Plugin Compile If Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase
{ {
/** /**
* Compiles code for the {if} tag * Compiles code for the {if} tag
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
* @return string compiled code *
*/ * @return string compiled code
*/
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
{ {
// check and get attributes // check and get attributes
@@ -33,7 +33,7 @@ class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase
// must whole block be nocache ? // must whole block be nocache ?
$compiler->nocache = $compiler->nocache | $compiler->tag_nocache; $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
if (!array_key_exists("if condition",$parameter)) { if (!array_key_exists("if condition", $parameter)) {
$compiler->trigger_template_error("missing if condition", $compiler->lex->taglineno); $compiler->trigger_template_error("missing if condition", $compiler->lex->taglineno);
} }
@@ -50,11 +50,11 @@ class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase
$_nocache = ''; $_nocache = '';
} }
if (is_array($parameter['if condition']['var'])) { if (is_array($parameter['if condition']['var'])) {
$_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']['var']."]) || !is_array(\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']['var']."]->value)) \$_smarty_tpl->createLocalArrayVariable(".$parameter['if condition']['var']['var']."$_nocache);\n"; $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value)) \$_smarty_tpl->createLocalArrayVariable(" . $parameter['if condition']['var']['var'] . "$_nocache);\n";
$_output .= "if (\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']['var']."]->value".$parameter['if condition']['var']['smarty_internal_index']." = ".$parameter['if condition']['value'].") {?>"; $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . ") {?>";
} else { } else {
$_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']."])) \$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']."] = new Smarty_Variable(null{$_nocache});"; $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});";
$_output .= "if (\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']."]->value = ".$parameter['if condition']['value'].") {?>"; $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . ") {?>";
} }
return $_output; return $_output;
@@ -62,25 +62,25 @@ class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase
return "<?php if ({$parameter['if condition']}) {?>"; return "<?php if ({$parameter['if condition']}) {?>";
} }
} }
} }
/** /**
* Smarty Internal Plugin Compile Else Class * Smarty Internal Plugin Compile Else Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Else extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Else extends Smarty_Internal_CompileBase
{ {
/** /**
* Compiles code for the {else} tag * Compiles code for the {else} tag
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
* @return string compiled code *
*/ * @return string compiled code
*/
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
{ {
list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif')); list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif'));
@@ -88,25 +88,25 @@ class Smarty_Internal_Compile_Else extends Smarty_Internal_CompileBase
return "<?php } else { ?>"; return "<?php } else { ?>";
} }
} }
/** /**
* Smarty Internal Plugin Compile ElseIf Class * Smarty Internal Plugin Compile ElseIf Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase
{ {
/** /**
* Compiles code for the {elseif} tag * Compiles code for the {elseif} tag
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
* @return string compiled code *
*/ * @return string compiled code
*/
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
{ {
// check and get attributes // check and get attributes
@@ -114,7 +114,7 @@ class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase
list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif')); list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif'));
if (!array_key_exists("if condition",$parameter)) { if (!array_key_exists("if condition", $parameter)) {
$compiler->trigger_template_error("missing elseif condition", $compiler->lex->taglineno); $compiler->trigger_template_error("missing elseif condition", $compiler->lex->taglineno);
} }
@@ -154,8 +154,9 @@ class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase
} }
} else { } else {
$tmp = ''; $tmp = '';
foreach ($compiler->prefix_code as $code) foreach ($compiler->prefix_code as $code) {
$tmp .= $code; $tmp .= $code;
}
$compiler->prefix_code = array(); $compiler->prefix_code = array();
$this->openTag($compiler, 'elseif', array($nesting + 1, $compiler->tag_nocache)); $this->openTag($compiler, 'elseif', array($nesting + 1, $compiler->tag_nocache));
if ($condition_by_assign) { if ($condition_by_assign) {
@@ -173,25 +174,25 @@ class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase
} }
} }
} }
} }
/** /**
* Smarty Internal Plugin Compile Ifclose Class * Smarty Internal Plugin Compile Ifclose Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase
{ {
/** /**
* Compiles code for the {/if} tag * Compiles code for the {/if} tag
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
* @return string compiled code *
*/ * @return string compiled code
*/
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
{ {
// must endblock be nocache? // must endblock be nocache?
@@ -200,11 +201,10 @@ class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase
} }
list($nesting, $compiler->nocache) = $this->closeTag($compiler, array('if', 'else', 'elseif')); list($nesting, $compiler->nocache) = $this->closeTag($compiler, array('if', 'else', 'elseif'));
$tmp = ''; $tmp = '';
for ($i = 0; $i < $nesting; $i++) { for ($i = 0; $i < $nesting; $i ++) {
$tmp .= '}'; $tmp .= '}';
} }
return "<?php {$tmp}?>"; return "<?php {$tmp}?>";
} }
} }

View File

@@ -1,18 +1,17 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Include * Smarty Internal Plugin Compile Include
*
* Compiles the {include} tag * Compiles the {include} tag
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Include Class * Smarty Internal Plugin Compile Include Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
@@ -53,20 +52,21 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
/** /**
* Compiles code for the {include} tag * Compiles code for the {include} tag
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
{ {
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
// save posible attributes // save possible attributes
$include_file = $_attr['file']; $include_file = $_attr['file'];
if (isset($_attr['assign'])) { if (isset($_attr['assign'])) {
// output will be stored in a smarty variable instead of beind displayed // output will be stored in a smarty variable instead of being displayed
$_assign = $_attr['assign']; $_assign = $_attr['assign'];
} }
@@ -81,15 +81,15 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
$_parent_scope = Smarty::SCOPE_GLOBAL; $_parent_scope = Smarty::SCOPE_GLOBAL;
} }
} }
$_caching = Smarty::CACHING_OFF; $_caching = Smarty::CACHING_OFF;
// flag if included template code should be merged into caller // flag if included template code should be merged into caller
$merge_compiled_includes = ($compiler->smarty->merge_compiled_includes || $_attr['inline'] === true) && !$compiler->template->source->recompiled; $merge_compiled_includes = ($compiler->smarty->merge_compiled_includes || ($compiler->inheritance && $compiler->smarty->inheritance_merge_compiled_includes) || $_attr['inline'] === true) && !$compiler->template->source->recompiled;
// set default when in nocache mode // set default when in nocache mode
// if ($compiler->template->caching && ($compiler->nocache || $compiler->tag_nocache || $compiler->forceNocache == 2)) { // if ($compiler->template->caching && ($compiler->nocache || $compiler->tag_nocache || $compiler->forceNocache == 2)) {
if ($compiler->template->caching && ((!$compiler->inheritance && !$compiler->nocache && !$compiler->tag_nocache) || ($compiler->inheritance && ($compiler->nocache ||$compiler->tag_nocache)))) { if ($compiler->template->caching && ((!$compiler->inheritance && !$compiler->nocache && !$compiler->tag_nocache) || ($compiler->inheritance && ($compiler->nocache || $compiler->tag_nocache)))) {
$_caching = self::CACHING_NOCACHE_CODE; $_caching = self::CACHING_NOCACHE_CODE;
} }
/* /*
@@ -121,21 +121,21 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
} }
if ($_attr['nocache'] === true) { if ($_attr['nocache'] === true) {
$compiler->tag_nocache = true; $compiler->tag_nocache = true;
if ($merge_compiled_includes || $compiler->inheritance) { if ($merge_compiled_includes) {
$_caching = self::CACHING_NOCACHE_CODE; $_caching = self::CACHING_NOCACHE_CODE;
} else { } else {
$_caching = Smarty::CACHING_OFF; $_caching = Smarty::CACHING_OFF;
} }
} }
$has_compiled_template = false; $has_compiled_template = false;
if ($merge_compiled_includes || $compiler->inheritance) { if ($merge_compiled_includes && $_attr['inline'] !== true) {
// variable template name ? // variable template name ?
if ($compiler->has_variable_string || !((substr_count($include_file, '"') == 2 || substr_count($include_file, "'") == 2)) if ($compiler->has_variable_string || !((substr_count($include_file, '"') == 2 || substr_count($include_file, "'") == 2))
|| substr_count($include_file, '(') != 0 || substr_count($include_file, '$_smarty_tpl->') != 0 || substr_count($include_file, '(') != 0 || substr_count($include_file, '$_smarty_tpl->') != 0
) { ) {
$merge_compiled_includes = false; $merge_compiled_includes = false;
if ($compiler->inheritance) { if ($compiler->inheritance && $compiler->smarty->inheritance_merge_compiled_includes) {
$compiler->trigger_template_error(' variable template file names not allow within {block} tags'); $compiler->trigger_template_error(' variable template file names not allow within {block} tags');
} }
} }
@@ -145,28 +145,34 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
|| substr_count($_attr['compile_id'], '(') != 0 || substr_count($_attr['compile_id'], '$_smarty_tpl->') != 0 || substr_count($_attr['compile_id'], '(') != 0 || substr_count($_attr['compile_id'], '$_smarty_tpl->') != 0
) { ) {
$merge_compiled_includes = false; $merge_compiled_includes = false;
if ($compiler->inheritance) { if ($compiler->inheritance && $compiler->smarty->inheritance_merge_compiled_includes) {
$compiler->trigger_template_error(' variable compile_id not allow within {block} tags'); $compiler->trigger_template_error(' variable compile_id not allow within {block} tags');
} }
} }
} }
}
if ($merge_compiled_includes) {
if ($compiler->template->caching && ($compiler->tag_nocache || $compiler->nocache) && $_caching != self::CACHING_NOCACHE_CODE) { if ($compiler->template->caching && ($compiler->tag_nocache || $compiler->nocache) && $_caching != self::CACHING_NOCACHE_CODE) {
$merge_compiled_includes = false; $merge_compiled_includes = false;
if ($compiler->inheritance) { if ($compiler->inheritance && $compiler->smarty->inheritance_merge_compiled_includes) {
$compiler->trigger_template_error(' invalid caching mode of subtemplate within {block} tags'); $compiler->trigger_template_error(' invalid caching mode of subtemplate within {block} tags');
} }
} }
} }
if ($merge_compiled_includes || $compiler->inheritance) { if ($merge_compiled_includes) {
// we must observe different compile_id // we must observe different compile_id
$uid = sha1($_compile_id); $uid = sha1($_compile_id);
$tpl_name = null; $tpl_name = null;
$nocache = false; $nocache = false;
/** @var Smarty_Internal_Template $_smarty_tpl
* used in evaluated code
*/
$_smarty_tpl = $compiler->template;
eval("\$tpl_name = $include_file;"); eval("\$tpl_name = $include_file;");
if (!isset($compiler->smarty->merged_templates_func[$tpl_name][$uid]) || $compiler->inheritance) { if (!isset($compiler->smarty->merged_templates_func[$tpl_name][$uid])) {
$tpl = new $compiler->smarty->template_class ($tpl_name, $compiler->smarty, $compiler->template, $compiler->template->cache_id, $compiler->template->compile_id); $tpl = new $compiler->smarty->template_class ($tpl_name, $compiler->smarty, $compiler->template, $compiler->template->cache_id, $compiler->template->compile_id);
// save unique function name // save unique function name
$compiler->smarty->merged_templates_func[$tpl_name][$uid]['func'] = $tpl->properties['unifunc'] = 'content_' . str_replace('.', '_', uniqid('', true)); $compiler->smarty->merged_templates_func[$tpl_name][$uid]['func'] = $tpl->properties['unifunc'] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true));
// use current nocache hash for inlined code // use current nocache hash for inlined code
$compiler->smarty->merged_templates_func[$tpl_name][$uid]['nocache_hash'] = $tpl->properties['nocache_hash'] = $compiler->template->properties['nocache_hash']; $compiler->smarty->merged_templates_func[$tpl_name][$uid]['nocache_hash'] = $tpl->properties['nocache_hash'] = $compiler->template->properties['nocache_hash'];
if ($compiler->template->caching && $_caching == self::CACHING_NOCACHE_CODE) { if ($compiler->template->caching && $_caching == self::CACHING_NOCACHE_CODE) {
@@ -180,7 +186,6 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
$tpl->mustCompile = true; $tpl->mustCompile = true;
if (!($tpl->source->uncompiled) && $tpl->source->exists) { if (!($tpl->source->uncompiled) && $tpl->source->exists) {
// get compiled code // get compiled code
$compiled_code = $tpl->compiler->compileTemplate($tpl, $nocache); $compiled_code = $tpl->compiler->compileTemplate($tpl, $nocache);
// release compiler object to free memory // release compiler object to free memory
@@ -211,17 +216,17 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
if (!empty($_attr)) { if (!empty($_attr)) {
if ($_parent_scope == Smarty::SCOPE_LOCAL) { if ($_parent_scope == Smarty::SCOPE_LOCAL) {
// create variables // create variables
$nccode = '';
foreach ($_attr as $key => $value) { foreach ($_attr as $key => $value) {
$_pairs[] = "'$key'=>$value"; $_pairs[] = "'$key'=>$value";
$nccode .= "\$_smarty_tpl->tpl_vars['$key'] = new Smarty_variable($value);\n";
} }
$_vars = 'array(' . join(',', $_pairs) . ')'; $_vars = 'array(' . join(',', $_pairs) . ')';
$_has_vars = true;
} else { } else {
$compiler->trigger_template_error('variable passing not allowed in parent/global scope', $compiler->lex->taglineno); $compiler->trigger_template_error('variable passing not allowed in parent/global scope', $compiler->lex->taglineno);
} }
} else { } else {
$_vars = 'array()'; $_vars = 'array()';
$_has_vars = false;
} }
if ($has_compiled_template) { if ($has_compiled_template) {
// never call inline templates in nocache mode // never call inline templates in nocache mode
@@ -229,6 +234,11 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
$_hash = $compiler->smarty->merged_templates_func[$tpl_name][$uid]['nocache_hash']; $_hash = $compiler->smarty->merged_templates_func[$tpl_name][$uid]['nocache_hash'];
$_output = "<?php /* Call merged included template \"" . $tpl_name . "\" */\n"; $_output = "<?php /* Call merged included template \"" . $tpl_name . "\" */\n";
$_output .= "\$_tpl_stack[] = \$_smarty_tpl;\n"; $_output .= "\$_tpl_stack[] = \$_smarty_tpl;\n";
if (!empty($nccode) && $_caching == 9999 && $_smarty_tpl->caching) {
$compiler->suppressNocacheProcessing = false;
$_output .= substr($compiler->processNocacheCode('<?php ' .$nccode . "?>\n", true), 6, -3);
$compiler->suppressNocacheProcessing = true;
}
$_output .= " \$_smarty_tpl = \$_smarty_tpl->setupInlineSubTemplate($include_file, $_cache_id, $_compile_id, $_caching, $_cache_lifetime, $_vars, $_parent_scope, '$_hash');\n"; $_output .= " \$_smarty_tpl = \$_smarty_tpl->setupInlineSubTemplate($include_file, $_cache_id, $_compile_id, $_caching, $_cache_lifetime, $_vars, $_parent_scope, '$_hash');\n";
if (isset($_assign)) { if (isset($_assign)) {
$_output .= 'ob_start(); '; $_output .= 'ob_start(); ';

View File

@@ -1,18 +1,17 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Include PHP * Smarty Internal Plugin Compile Include PHP
*
* Compiles the {include_php} tag * Compiles the {include_php} tag
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Insert Class * Smarty Internal Plugin Compile Insert Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase
@@ -44,6 +43,8 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @throws SmartyException
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@@ -54,8 +55,9 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
$_output = '<?php '; /** @var Smarty_Internal_Template $_smarty_tpl
* used in evaluated code
*/
$_smarty_tpl = $compiler->template; $_smarty_tpl = $compiler->template;
$_filepath = false; $_filepath = false;
eval('$_file = ' . $_attr['file'] . ';'); eval('$_file = ' . $_attr['file'] . ';');
@@ -71,7 +73,7 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase
foreach ((array) $_dir as $_script_dir) { foreach ((array) $_dir as $_script_dir) {
$_script_dir = rtrim($_script_dir, '/\\') . DS; $_script_dir = rtrim($_script_dir, '/\\') . DS;
if (file_exists($_script_dir . $_file)) { if (file_exists($_script_dir . $_file)) {
$_filepath = $_script_dir . $_file; $_filepath = $_script_dir . $_file;
break; break;
} }
} }
@@ -102,5 +104,4 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase
return "<?php include{$_once} ('{$_filepath}');?>\n"; return "<?php include{$_once} ('{$_filepath}');?>\n";
} }
} }
} }

View File

@@ -2,18 +2,17 @@
/** /**
* Smarty Internal Plugin Compile Insert * Smarty Internal Plugin Compile Insert
*
* Compiles the {insert} tag * Compiles the {insert} tag
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Insert Class * Smarty Internal Plugin Compile Insert Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase
@@ -45,6 +44,7 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@@ -59,12 +59,12 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase
$_script = null; $_script = null;
$_output = '<?php '; $_output = '<?php ';
// save posible attributes // save possible attributes
eval('$_name = ' . $_attr['name'] . ';'); eval('$_name = ' . $_attr['name'] . ';');
if (isset($_attr['assign'])) { if (isset($_attr['assign'])) {
// output will be stored in a smarty variable instead of being displayed // output will be stored in a smarty variable instead of being displayed
$_assign = $_attr['assign']; $_assign = $_attr['assign'];
// create variable to make shure that the compiler knows about its nocache status // create variable to make sure that the compiler knows about its nocache status
$compiler->template->tpl_vars[trim($_attr['assign'], "'")] = new Smarty_Variable(null, true); $compiler->template->tpl_vars[trim($_attr['assign'], "'")] = new Smarty_Variable(null, true);
} }
if (isset($_attr['script'])) { if (isset($_attr['script'])) {
@@ -137,5 +137,4 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase
return $_output; return $_output;
} }
} }

View File

@@ -1,28 +1,28 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Ldelim * Smarty Internal Plugin Compile Ldelim
*
* Compiles the {ldelim} tag * Compiles the {ldelim} tag
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Ldelim Class * Smarty Internal Plugin Compile Ldelim Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Ldelim extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Ldelim extends Smarty_Internal_CompileBase
{ {
/** /**
* Compiles code for the {ldelim} tag * Compiles code for the {ldelim} tag
*
* This tag does output the left delimiter * This tag does output the left delimiter
*
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@@ -36,5 +36,4 @@ class Smarty_Internal_Compile_Ldelim extends Smarty_Internal_CompileBase
return $compiler->smarty->left_delimiter; return $compiler->smarty->left_delimiter;
} }
} }

View File

@@ -1,29 +1,28 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Nocache * Smarty Internal Plugin Compile Nocache
*
* Compiles the {nocache} {/nocache} tags. * Compiles the {nocache} {/nocache} tags.
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Nocache Classv * Smarty Internal Plugin Compile Nocache Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Nocache extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Nocache extends Smarty_Internal_CompileBase
{ {
/** /**
* Compiles code for the {nocache} tag * Compiles code for the {nocache} tag
*
* This tag does not generate compiled output. It only sets a compiler flag. * This tag does not generate compiled output. It only sets a compiler flag.
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return bool * @return bool
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
@@ -32,47 +31,40 @@ class Smarty_Internal_Compile_Nocache extends Smarty_Internal_CompileBase
if ($_attr['nocache'] === true) { if ($_attr['nocache'] === true) {
$compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno); $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
} }
if ($compiler->template->caching) {
// enter nocache mode // enter nocache mode
$this->openTag($compiler, 'nocache', $compiler->nocache);
$compiler->nocache = true; $compiler->nocache = true;
}
// this tag does not return compiled code // this tag does not return compiled code
$compiler->has_code = false; $compiler->has_code = false;
return true; return true;
} }
} }
/** /**
* Smarty Internal Plugin Compile Nocacheclose Class * Smarty Internal Plugin Compile Nocacheclose Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Nocacheclose extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Nocacheclose extends Smarty_Internal_CompileBase
{ {
/** /**
* Compiles code for the {/nocache} tag * Compiles code for the {/nocache} tag
*
* This tag does not generate compiled output. It only sets a compiler flag. * This tag does not generate compiled output. It only sets a compiler flag.
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
*
* @return bool * @return bool
*/ */
public function compile($args, $compiler) public function compile($args, $compiler)
{ {
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
if ($compiler->template->caching) { // leave nocache mode
// restore old nocache mode $compiler->nocache = false;
$compiler->nocache = $this->closeTag($compiler, 'nocache');
}
// this tag does not return compiled code // this tag does not return compiled code
$compiler->has_code = false; $compiler->has_code = false;
return true; return true;
} }
} }

View File

@@ -1,18 +1,17 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Block Plugin * Smarty Internal Plugin Compile Block Plugin
*
* Compiles code for the execution of block plugin * Compiles code for the execution of block plugin
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Block Plugin Class * Smarty Internal Plugin Compile Block Plugin Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_CompileBase
@@ -33,18 +32,19 @@ class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_Compi
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
* @param string $tag name of block plugin * @param string $tag name of block plugin
* @param string $function PHP function name * @param string $function PHP function name
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter, $tag, $function) public function compile($args, $compiler, $parameter, $tag, $function)
{ {
if (!isset($tag[5]) || substr($tag, -5) != 'close') { if (!isset($tag[5]) || substr($tag, - 5) != 'close') {
// opening tag of block plugin // opening tag of block plugin
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
if ($_attr['nocache'] === true) { if ($_attr['nocache'] === true) {
$compiler->tag_nocache = true; $compiler->tag_nocache = true;
} }
unset($_attr['nocache']); unset($_attr['nocache']);
// convert attributes into parameter array string // convert attributes into parameter array string
$_paramsArray = array(); $_paramsArray = array();
foreach ($_attr as $_key => $_value) { foreach ($_attr as $_key => $_value) {
@@ -67,20 +67,19 @@ class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_Compi
$compiler->tag_nocache = true; $compiler->tag_nocache = true;
} }
// closing tag of block plugin, restore nocache // closing tag of block plugin, restore nocache
list($_params, $compiler->nocache) = $this->closeTag($compiler, substr($tag, 0, -5)); list($_params, $compiler->nocache) = $this->closeTag($compiler, substr($tag, 0, - 5));
// This tag does create output // This tag does create output
$compiler->has_output = true; $compiler->has_output = true;
// compile code // compile code
if (!isset($parameter['modifier_list'])) { if (!isset($parameter['modifier_list'])) {
$mod_pre = $mod_post =''; $mod_pre = $mod_post = '';
} else { } else {
$mod_pre = ' ob_start(); '; $mod_pre = ' ob_start(); ';
$mod_post = 'echo '.$compiler->compileTag('private_modifier',array(),array('modifierlist'=>$parameter['modifier_list'],'value'=>'ob_get_clean()')).';'; $mod_post = 'echo ' . $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifier_list'], 'value' => 'ob_get_clean()')) . ';';
} }
$output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;".$mod_pre." echo {$function}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); ".$mod_post." } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>"; $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . " echo {$function}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . $mod_post . " } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
} }
return $output . "\n"; return $output . "\n";
} }
} }

View File

@@ -1,18 +1,17 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Function Plugin * Smarty Internal Plugin Compile Function Plugin
*
* Compiles code for the execution of function plugin * Compiles code for the execution of function plugin
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Function Plugin Class * Smarty Internal Plugin Compile Function Plugin Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_CompileBase
@@ -40,6 +39,7 @@ class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_Co
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
* @param string $tag name of function plugin * @param string $tag name of function plugin
* @param string $function PHP function name * @param string $function PHP function name
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter, $tag, $function) public function compile($args, $compiler, $parameter, $tag, $function)
@@ -68,5 +68,4 @@ class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_Co
return $output; return $output;
} }
} }

View File

@@ -2,18 +2,17 @@
/** /**
* Smarty Internal Plugin Compile Modifier * Smarty Internal Plugin Compile Modifier
*
* Compiles code for modifier execution * Compiles code for modifier execution
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Modifier Class * Smarty Internal Plugin Compile Modifier Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBase
@@ -24,6 +23,7 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
@@ -136,5 +136,4 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa
return $output; return $output;
} }
} }

View File

@@ -1,18 +1,17 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Object Block Function * Smarty Internal Plugin Compile Object Block Function
*
* Compiles code for registered objects as block function * Compiles code for registered objects as block function
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Object Block Function Class * Smarty Internal Plugin Compile Object Block Function Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Internal_CompileBase
@@ -33,11 +32,12 @@ class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Inter
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
* @param string $tag name of block object * @param string $tag name of block object
* @param string $method name of method to call * @param string $method name of method to call
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter, $tag, $method) public function compile($args, $compiler, $parameter, $tag, $method)
{ {
if (!isset($tag[5]) || substr($tag, -5) != 'close') { if (!isset($tag[5]) || substr($tag, - 5) != 'close') {
// opening tag of block plugin // opening tag of block plugin
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
@@ -62,7 +62,7 @@ class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Inter
// compile code // compile code
$output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}->{$method}', {$_params}); \$_block_repeat=true; echo \$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}->{$method}', {$_params}); \$_block_repeat=true; echo \$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";
} else { } else {
$base_tag = substr($tag, 0, -5); $base_tag = substr($tag, 0, - 5);
// must endblock be nocache? // must endblock be nocache?
if ($compiler->nocache) { if ($compiler->nocache) {
$compiler->tag_nocache = true; $compiler->tag_nocache = true;
@@ -83,5 +83,4 @@ class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Inter
return $output . "\n"; return $output . "\n";
} }
} }

View File

@@ -1,18 +1,17 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Object Funtion * Smarty Internal Plugin Compile Object Function
*
* Compiles code for registered objects as function * Compiles code for registered objects as function
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Object Function Class * Smarty Internal Plugin Compile Object Function Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_CompileBase
@@ -28,11 +27,12 @@ class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_Co
/** /**
* Compiles code for the execution of function plugin * Compiles code for the execution of function plugin
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
* @param string $tag name of function * @param string $tag name of function
* @param string $method name of method to call * @param string $method name of method to call
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter, $tag, $method) public function compile($args, $compiler, $parameter, $tag, $method)
@@ -81,5 +81,4 @@ class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_Co
return $output; return $output;
} }
} }

View File

@@ -1,45 +1,46 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Print Expression * Smarty Internal Plugin Compile Print Expression
* * Compiles any tag which will output an expression or variable
* Compiles any tag which will output an expression or variable *
* * @package Smarty
* @package Smarty * @subpackage Compiler
* @subpackage Compiler * @author Uwe Tews
* @author Uwe Tews */
*/
/** /**
* Smarty Internal Plugin Compile Print Expression Class * Smarty Internal Plugin Compile Print Expression Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_CompileBase
{ {
/** /**
* Attribute definition: Overwrites base class. * Attribute definition: Overwrites base class.
* *
* @var array * @var array
* @see Smarty_Internal_CompileBase * @see Smarty_Internal_CompileBase
*/ */
public $optional_attributes = array('assign'); public $optional_attributes = array('assign');
/** /**
* Attribute definition: Overwrites base class. * Attribute definition: Overwrites base class.
* *
* @var array * @var array
* @see Smarty_Internal_CompileBase * @see Smarty_Internal_CompileBase
*/ */
public $option_flags = array('nocache', 'nofilter'); public $option_flags = array('nocache', 'nofilter');
/** /**
* Compiles code for gererting output from any expression * Compiles code for generating output from any expression
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
* @return string compiled code *
*/ * @throws SmartyException
* @return string compiled code
*/
public function compile($args, $compiler, $parameter) public function compile($args, $compiler, $parameter)
{ {
// check and get attributes // check and get attributes
@@ -48,12 +49,6 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
if ($_attr['nocache'] === true) { if ($_attr['nocache'] === true) {
$compiler->tag_nocache = true; $compiler->tag_nocache = true;
} }
// filter handling
if ($_attr['nofilter'] === true) {
$_filter = 'false';
} else {
$_filter = 'true';
}
if (isset($_attr['assign'])) { if (isset($_attr['assign'])) {
// assign output to variable // assign output to variable
$output = "<?php \$_smarty_tpl->assign({$_attr['assign']},{$parameter['value']});?>"; $output = "<?php \$_smarty_tpl->assign({$_attr['assign']},{$parameter['value']});?>";
@@ -71,13 +66,13 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
$modifierlist = array(); $modifierlist = array();
foreach ($compiler->smarty->default_modifiers as $key => $single_default_modifier) { foreach ($compiler->smarty->default_modifiers as $key => $single_default_modifier) {
preg_match_all('/(\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'|"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|:|[^:]+)/', $single_default_modifier, $mod_array); preg_match_all('/(\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'|"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|:|[^:]+)/', $single_default_modifier, $mod_array);
for ($i = 0, $count = count($mod_array[0]);$i < $count;$i++) { for ($i = 0, $count = count($mod_array[0]); $i < $count; $i ++) {
if ($mod_array[0][$i] != ':') { if ($mod_array[0][$i] != ':') {
$modifierlist[$key][] = $mod_array[0][$i]; $modifierlist[$key][] = $mod_array[0][$i];
} }
} }
} }
$compiler->default_modifier_list = $modifierlist; $compiler->default_modifier_list = $modifierlist;
} }
$output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => $compiler->default_modifier_list, 'value' => $output)); $output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => $compiler->default_modifier_list, 'value' => $output));
} }
@@ -85,7 +80,7 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
if ($compiler->template->smarty->escape_html) { if ($compiler->template->smarty->escape_html) {
$output = "htmlspecialchars({$output}, ENT_QUOTES, '" . addslashes(Smarty::$_CHARSET) . "')"; $output = "htmlspecialchars({$output}, ENT_QUOTES, '" . addslashes(Smarty::$_CHARSET) . "')";
} }
// loop over registerd filters // loop over registered filters
if (!empty($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE])) { if (!empty($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE])) {
foreach ($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE] as $key => $function) { foreach ($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE] as $key => $function) {
if (!is_array($function)) { if (!is_array($function)) {
@@ -128,11 +123,12 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
} }
/** /**
* @param object $compiler compiler object * @param object $compiler compiler object
* @param string $name name of variable filter * @param string $name name of variable filter
* @param type $output embedded output * @param string $output embedded output
* @return string *
*/ * @return string
*/
private function compile_output_filter($compiler, $name, $output) private function compile_output_filter($compiler, $name, $output)
{ {
$plugin_name = "smarty_variablefilter_{$name}"; $plugin_name = "smarty_variablefilter_{$name}";
@@ -152,5 +148,4 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
return "{$plugin_name}({$output},\$_smarty_tpl)"; return "{$plugin_name}({$output},\$_smarty_tpl)";
} }
} }

View File

@@ -1,18 +1,17 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Registered Block * Smarty Internal Plugin Compile Registered Block
*
* Compiles code for the execution of a registered block function * Compiles code for the execution of a registered block function
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Registered Block Class * Smarty Internal Plugin Compile Registered Block Class
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
*/ */
class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_CompileBase class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_CompileBase
@@ -32,30 +31,31 @@ class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_C
* @param object $compiler compiler object * @param object $compiler compiler object
* @param array $parameter array with compilation parameter * @param array $parameter array with compilation parameter
* @param string $tag name of block function * @param string $tag name of block function
*
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $compiler, $parameter, $tag) public function compile($args, $compiler, $parameter, $tag)
{ {
if (!isset($tag[5]) || substr($tag,-5) != 'close') { if (!isset($tag[5]) || substr($tag, - 5) != 'close') {
// opening tag of block plugin // opening tag of block plugin
// check and get attributes // check and get attributes
$_attr = $this->getAttributes($compiler, $args); $_attr = $this->getAttributes($compiler, $args);
if ($_attr['nocache']) { if ($_attr['nocache']) {
$compiler->tag_nocache = true; $compiler->tag_nocache = true;
} }
unset($_attr['nocache']); unset($_attr['nocache']);
if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag])) { if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag])) {
$tag_info = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag]; $tag_info = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag];
} else { } else {
$tag_info = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$tag]; $tag_info = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$tag];
} }
// convert attributes into parameter array string // convert attributes into parameter array string
$_paramsArray = array(); $_paramsArray = array();
foreach ($_attr as $_key => $_value) { foreach ($_attr as $_key => $_value) {
if (is_int($_key)) { if (is_int($_key)) {
$_paramsArray[] = "$_key=>$_value"; $_paramsArray[] = "$_key=>$_value";
} elseif ($compiler->template->caching && in_array($_key,$tag_info[2])) { } elseif ($compiler->template->caching && in_array($_key, $tag_info[2])) {
$_value = str_replace("'","^#^",$_value); $_value = str_replace("'", "^#^", $_value);
$_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^"; $_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^";
} else { } else {
$_paramsArray[] = "'$_key'=>$_value"; $_paramsArray[] = "'$_key'=>$_value";
@@ -80,33 +80,32 @@ class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_C
if ($compiler->nocache) { if ($compiler->nocache) {
$compiler->tag_nocache = true; $compiler->tag_nocache = true;
} }
$base_tag = substr($tag, 0, -5); $base_tag = substr($tag, 0, - 5);
// closing tag of block plugin, restore nocache // closing tag of block plugin, restore nocache
list($_params, $compiler->nocache) = $this->closeTag($compiler, $base_tag); list($_params, $compiler->nocache) = $this->closeTag($compiler, $base_tag);
// This tag does create output // This tag does create output
$compiler->has_output = true; $compiler->has_output = true;
if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag])) { if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag])) {
$function = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0]; $function = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0];
} else { } else {
$function = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0]; $function = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0];
} }
// compile code // compile code
if (!isset($parameter['modifier_list'])) { if (!isset($parameter['modifier_list'])) {
$mod_pre = $mod_post =''; $mod_pre = $mod_post = '';
} else { } else {
$mod_pre = ' ob_start(); '; $mod_pre = ' ob_start(); ';
$mod_post = 'echo '.$compiler->compileTag('private_modifier',array(),array('modifierlist'=>$parameter['modifier_list'],'value'=>'ob_get_clean()')).';'; $mod_post = 'echo ' . $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifier_list'], 'value' => 'ob_get_clean()')) . ';';
} }
if (!is_array($function)) { if (!is_array($function)) {
$output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;".$mod_pre." echo {$function}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat);".$mod_post." } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>"; $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . " echo {$function}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat);" . $mod_post . " } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
} elseif (is_object($function[0])) { } elseif (is_object($function[0])) {
$output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;".$mod_pre." echo \$_smarty_tpl->smarty->registered_plugins['block']['{$base_tag}'][0][0]->{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); ".$mod_post."} array_pop(\$_smarty_tpl->smarty->_tag_stack);?>"; $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . " echo \$_smarty_tpl->smarty->registered_plugins['block']['{$base_tag}'][0][0]->{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . $mod_post . "} array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
} else { } else {
$output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;".$mod_pre." echo {$function[0]}::{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); ".$mod_post."} array_pop(\$_smarty_tpl->smarty->_tag_stack);?>"; $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . " echo {$function[0]}::{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . $mod_post . "} array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
} }
} }
return $output . "\n"; return $output . "\n";
} }
} }

Some files were not shown because too many files have changed in this diff Show More