mirror of
https://github.com/smarty-php/smarty.git
synced 2025-08-04 02:14:26 +02:00
Update PSR-2
This commit is contained in:
@@ -2,7 +2,9 @@
|
||||
"name": "smarty/smarty",
|
||||
"type": "library",
|
||||
"description": "Smarty - the compiling PHP template engine",
|
||||
"keywords": ["templating"],
|
||||
"keywords": [
|
||||
"templating"
|
||||
],
|
||||
"homepage": "http://www.smarty.net",
|
||||
"license": "LGPL-3.0",
|
||||
"authors": [
|
||||
@@ -28,12 +30,13 @@
|
||||
"php": ">=5.2"
|
||||
},
|
||||
"autoload": {
|
||||
"files": ["libs/bootstrap.php"]
|
||||
"files": [
|
||||
"libs/bootstrap.php"
|
||||
]
|
||||
},
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.1.x-dev"
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -17,11 +17,15 @@ $smarty->cache_lifetime = 120;
|
||||
$smarty->assign("Name", "Fred Irving Johnathan Bradley Peppergill", true);
|
||||
$smarty->assign("FirstName", array("John", "Mary", "James", "Henry"));
|
||||
$smarty->assign("LastName", array("Doe", "Smith", "Johnson", "Case"));
|
||||
$smarty->assign("Class", array(array("A", "B", "C", "D"), array("E", "F", "G", "H"), array("I", "J", "K", "L"),
|
||||
array("M", "N", "O", "P")));
|
||||
$smarty->assign(
|
||||
"Class", array(array("A", "B", "C", "D"), array("E", "F", "G", "H"), array("I", "J", "K", "L"),
|
||||
array("M", "N", "O", "P"))
|
||||
);
|
||||
|
||||
$smarty->assign("contacts", array(array("phone" => "1", "fax" => "2", "cell" => "3"),
|
||||
array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234")));
|
||||
$smarty->assign(
|
||||
"contacts", array(array("phone" => "1", "fax" => "2", "cell" => "3"),
|
||||
array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234"))
|
||||
);
|
||||
|
||||
$smarty->assign("option_values", array("NY", "NE", "KS", "IA", "OK", "TX"));
|
||||
$smarty->assign("option_output", array("New York", "Nebraska", "Kansas", "Iowa", "Oklahoma", "Texas"));
|
||||
|
@@ -43,8 +43,10 @@ class Smarty_CacheResource_Mysql extends Smarty_CacheResource_Custom
|
||||
}
|
||||
$this->fetch = $this->db->prepare('SELECT modified, content FROM output_cache WHERE id = :id');
|
||||
$this->fetchTimestamp = $this->db->prepare('SELECT modified FROM output_cache WHERE id = :id');
|
||||
$this->save = $this->db->prepare('REPLACE INTO output_cache (id, name, cache_id, compile_id, content)
|
||||
VALUES (:id, :name, :cache_id, :compile_id, :content)');
|
||||
$this->save = $this->db->prepare(
|
||||
'REPLACE INTO output_cache (id, name, cache_id, compile_id, content)
|
||||
VALUES (:id, :name, :cache_id, :compile_id, :content)'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -108,8 +110,10 @@ class Smarty_CacheResource_Mysql extends Smarty_CacheResource_Custom
|
||||
*/
|
||||
protected function save($id, $name, $cache_id, $compile_id, $exp_time, $content)
|
||||
{
|
||||
$this->save->execute(array('id' => $id, 'name' => $name, 'cache_id' => $cache_id, 'compile_id' => $compile_id,
|
||||
'content' => $content,));
|
||||
$this->save->execute(
|
||||
array('id' => $id, 'name' => $name, 'cache_id' => $cache_id, 'compile_id' => $compile_id,
|
||||
'content' => $content,)
|
||||
);
|
||||
|
||||
return !!$this->save->rowCount();
|
||||
}
|
||||
|
@@ -54,8 +54,8 @@ class Smarty_Autoloader
|
||||
if (!defined('SMARTY_SPL_AUTOLOAD')) {
|
||||
define('SMARTY_SPL_AUTOLOAD', 0);
|
||||
}
|
||||
if (SMARTY_SPL_AUTOLOAD &&
|
||||
set_include_path(get_include_path() . PATH_SEPARATOR . SMARTY_SYSPLUGINS_DIR) !== false
|
||||
if (SMARTY_SPL_AUTOLOAD
|
||||
&& set_include_path(get_include_path() . PATH_SEPARATOR . SMARTY_SYSPLUGINS_DIR) !== false
|
||||
) {
|
||||
$registeredAutoLoadFunctions = spl_autoload_functions();
|
||||
if (!isset($registeredAutoLoadFunctions[ 'spl_autoload' ])) {
|
||||
|
@@ -1008,8 +1008,8 @@ class Smarty extends Smarty_Internal_TemplateBase
|
||||
$cache_id = null,
|
||||
$compile_id = null,
|
||||
$caching = null,
|
||||
Smarty_Internal_Template $template = null)
|
||||
{
|
||||
Smarty_Internal_Template $template = null
|
||||
) {
|
||||
$template_name = (strpos($template_name, ':') === false) ? "{$this->default_resource_type}:{$template_name}" :
|
||||
$template_name;
|
||||
$cache_id = $cache_id === null ? $this->cache_id : $cache_id;
|
||||
@@ -1036,7 +1036,8 @@ class Smarty extends Smarty_Internal_TemplateBase
|
||||
* @param string $path file path
|
||||
* @param bool $realpath if true - convert to absolute
|
||||
* false - convert to relative
|
||||
* null - keep as it is but remove /./ /../
|
||||
* null - keep as it is but
|
||||
* remove /./ /../
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
@@ -1045,9 +1046,11 @@ class Smarty extends Smarty_Internal_TemplateBase
|
||||
$nds = array('/' => '\\', '\\' => '/');
|
||||
// normalize DIRECTORY_SEPARATOR
|
||||
//$path = str_replace(array($nds[DIRECTORY_SEPARATOR], DIRECTORY_SEPARATOR . '.' . DIRECTORY_SEPARATOR), DIRECTORY_SEPARATOR, $path);
|
||||
preg_match('%^(?<root>(?:[[:alpha:]]:[\\\\]|/|[\\\\]{2}[[:alpha:]]+|[[:print:]]{2,}:[/]{2}|[\\\\])?)(?<path>(.*))$%u',
|
||||
preg_match(
|
||||
'%^(?<root>(?:[[:alpha:]]:[\\\\]|/|[\\\\]{2}[[:alpha:]]+|[[:print:]]{2,}:[/]{2}|[\\\\])?)(?<path>(.*))$%u',
|
||||
$path,
|
||||
$parts);
|
||||
$parts
|
||||
);
|
||||
$path = $parts[ 'path' ];
|
||||
if ($parts[ 'root' ] === '\\') {
|
||||
$parts[ 'root' ] = substr(getcwd(), 0, 2) . $parts[ 'root' ];
|
||||
@@ -1059,7 +1062,8 @@ class Smarty extends Smarty_Internal_TemplateBase
|
||||
do {
|
||||
$path = preg_replace(
|
||||
array('#[\\\\/]{2}#', '#[\\\\/][.][\\\\/]#', '#[\\\\/]([^\\\\/.]+)[\\\\/][.][.][\\\\/]#'),
|
||||
DIRECTORY_SEPARATOR, $path, -1, $count);
|
||||
DIRECTORY_SEPARATOR, $path, -1, $count
|
||||
);
|
||||
} while($count > 0);
|
||||
return $realpath !== false ? $parts[ 'root' ] . $path : str_ireplace(getcwd(), '.', $parts[ 'root' ] . $path);
|
||||
}
|
||||
@@ -1270,7 +1274,9 @@ class Smarty extends Smarty_Internal_TemplateBase
|
||||
return null;
|
||||
} else {
|
||||
trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE);
|
||||
}}}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -1297,7 +1303,8 @@ class Smarty extends Smarty_Internal_TemplateBase
|
||||
} else {
|
||||
trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE);
|
||||
}
|
||||
}}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1320,7 +1327,6 @@ class Smarty extends Smarty_Internal_TemplateBase
|
||||
* Normalize template_dir or config_dir
|
||||
*
|
||||
* @param bool $isConfig true for config_dir
|
||||
*
|
||||
*/
|
||||
private function _normalizeTemplateConfig($isConfig)
|
||||
{
|
||||
|
@@ -28,7 +28,7 @@
|
||||
/**
|
||||
* @ignore
|
||||
*/
|
||||
require_once(dirname(__FILE__) . '/Smarty.class.php');
|
||||
require_once dirname(__FILE__) . '/Smarty.class.php';
|
||||
|
||||
/**
|
||||
* Smarty Backward Compatibility Wrapper Class
|
||||
@@ -53,7 +53,6 @@ class SmartyBC extends Smarty
|
||||
|
||||
/**
|
||||
* Initialize new SmartyBC object
|
||||
*
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -131,8 +130,8 @@ class SmartyBC extends Smarty
|
||||
* @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())
|
||||
{
|
||||
$block_methods = array()
|
||||
) {
|
||||
settype($allowed, 'array');
|
||||
settype($smarty_args, 'boolean');
|
||||
$this->registerObject($object, $object_impl, $allowed, $smarty_args, $block_methods);
|
||||
|
@@ -12,6 +12,6 @@
|
||||
* Load and register Smarty Autoloader
|
||||
*/
|
||||
if (!class_exists('Smarty_Autoloader')) {
|
||||
require dirname(__FILE__) . '/Autoloader.php';
|
||||
include dirname(__FILE__) . '/Autoloader.php';
|
||||
}
|
||||
Smarty_Autoloader::register(true);
|
||||
|
@@ -20,7 +20,6 @@
|
||||
* - indent_char - string (" ")
|
||||
* - wrap_boundary - boolean (true)
|
||||
*
|
||||
*
|
||||
* @link http://www.smarty.net/manual/en/language.function.textformat.php {textformat}
|
||||
* (Smarty online manual)
|
||||
*
|
||||
@@ -39,8 +38,10 @@ function smarty_block_textformat($params, $content, Smarty_Internal_Template $te
|
||||
return;
|
||||
}
|
||||
if (Smarty::$_MBSTRING) {
|
||||
$template->_checkPlugins(array(array('function' => 'smarty_modifier_mb_wordwrap',
|
||||
'file' => SMARTY_PLUGINS_DIR . 'modifier.mb_wordwrap.php')));
|
||||
$template->_checkPlugins(
|
||||
array(array('function' => 'smarty_modifier_mb_wordwrap',
|
||||
'file' => SMARTY_PLUGINS_DIR . 'modifier.mb_wordwrap.php'))
|
||||
);
|
||||
}
|
||||
|
||||
$style = null;
|
||||
@@ -88,10 +89,12 @@ function smarty_block_textformat($params, $content, Smarty_Internal_Template $te
|
||||
}
|
||||
// convert mult. spaces & special chars to single space
|
||||
$_paragraph =
|
||||
preg_replace(array('!\s+!' . Smarty::$_UTF8_MODIFIER,
|
||||
preg_replace(
|
||||
array('!\s+!' . Smarty::$_UTF8_MODIFIER,
|
||||
'!(^\s+)|(\s+$)!' . Smarty::$_UTF8_MODIFIER),
|
||||
array(' ',
|
||||
''), $_paragraph);
|
||||
''), $_paragraph
|
||||
);
|
||||
// indent first line
|
||||
if ($indent_first > 0) {
|
||||
$_paragraph = str_repeat($indent_char, $indent_first) . $_paragraph;
|
||||
|
@@ -29,7 +29,6 @@
|
||||
* {cycle name=row values="one,two,three" reset=true}
|
||||
* {cycle name=row}
|
||||
*
|
||||
*
|
||||
* @link http://www.smarty.net/manual/en/language.function.cycle.php {cycle}
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
|
@@ -29,7 +29,6 @@
|
||||
* - assign (optional) - assign the output as an array to this variable
|
||||
* - escape (optional) - escape the content (not value), defaults to true
|
||||
*
|
||||
*
|
||||
* @link http://www.smarty.net/manual/en/language.function.html.checkboxes.php {html_checkboxes}
|
||||
* (Smarty online manual)
|
||||
* @author Christopher Kvarme <christopher.kvarme@flashjab.com>
|
||||
@@ -45,8 +44,10 @@
|
||||
*/
|
||||
function smarty_function_html_checkboxes($params, Smarty_Internal_Template $template)
|
||||
{
|
||||
$template->_checkPlugins(array(array('function' => 'smarty_function_escape_special_chars',
|
||||
'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php')));
|
||||
$template->_checkPlugins(
|
||||
array(array('function' => 'smarty_function_escape_special_chars',
|
||||
'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'))
|
||||
);
|
||||
|
||||
$name = 'checkbox';
|
||||
$values = null;
|
||||
@@ -91,8 +92,10 @@ function smarty_function_html_checkboxes($params, Smarty_Internal_Template $temp
|
||||
if (method_exists($_sel, '__toString')) {
|
||||
$_sel = smarty_function_escape_special_chars((string) $_sel->__toString());
|
||||
} 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;
|
||||
}
|
||||
} else {
|
||||
@@ -104,8 +107,10 @@ function smarty_function_html_checkboxes($params, Smarty_Internal_Template $temp
|
||||
if (method_exists($_val, '__toString')) {
|
||||
$selected = smarty_function_escape_special_chars((string) $_val->__toString());
|
||||
} 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 {
|
||||
$selected = smarty_function_escape_special_chars((string) $_val);
|
||||
@@ -113,8 +118,10 @@ function smarty_function_html_checkboxes($params, Smarty_Internal_Template $temp
|
||||
break;
|
||||
|
||||
case 'checkboxes':
|
||||
trigger_error('html_checkboxes: the use of the "checkboxes" attribute is deprecated, use "options" instead',
|
||||
E_USER_WARNING);
|
||||
trigger_error(
|
||||
'html_checkboxes: the use of the "checkboxes" attribute is deprecated, use "options" instead',
|
||||
E_USER_WARNING
|
||||
);
|
||||
$options = (array) $_val;
|
||||
break;
|
||||
|
||||
@@ -128,8 +135,10 @@ function smarty_function_html_checkboxes($params, Smarty_Internal_Template $temp
|
||||
case 'readonly':
|
||||
if (!empty($params[ 'strict' ])) {
|
||||
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) {
|
||||
@@ -159,15 +168,19 @@ function smarty_function_html_checkboxes($params, Smarty_Internal_Template $temp
|
||||
if (isset($options)) {
|
||||
foreach ($options as $_key => $_val) {
|
||||
$_html_result[] =
|
||||
smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels,
|
||||
$label_ids, $escape);
|
||||
smarty_function_html_checkboxes_output(
|
||||
$name, $_key, $_val, $selected, $extra, $separator, $labels,
|
||||
$label_ids, $escape
|
||||
);
|
||||
}
|
||||
} else {
|
||||
foreach ($values as $_i => $_key) {
|
||||
$_val = isset($output[ $_i ]) ? $output[ $_i ] : '';
|
||||
$_html_result[] =
|
||||
smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels,
|
||||
$label_ids, $escape);
|
||||
smarty_function_html_checkboxes_output(
|
||||
$name, $_key, $_val, $selected, $extra, $separator, $labels,
|
||||
$label_ids, $escape
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -191,16 +204,18 @@ function smarty_function_html_checkboxes($params, Smarty_Internal_Template $temp
|
||||
* @return string
|
||||
*/
|
||||
function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels,
|
||||
$label_ids, $escape = true)
|
||||
{
|
||||
$label_ids, $escape = true
|
||||
) {
|
||||
$_output = '';
|
||||
|
||||
if (is_object($value)) {
|
||||
if (method_exists($value, '__toString')) {
|
||||
$value = (string) $value->__toString();
|
||||
} 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 '';
|
||||
}
|
||||
@@ -212,8 +227,10 @@ function smarty_function_html_checkboxes_output($name, $value, $output, $selecte
|
||||
if (method_exists($output, '__toString')) {
|
||||
$output = (string) $output->__toString();
|
||||
} 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 '';
|
||||
}
|
||||
@@ -223,8 +240,12 @@ function smarty_function_html_checkboxes_output($name, $value, $output, $selecte
|
||||
|
||||
if ($labels) {
|
||||
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 . '">';
|
||||
} else {
|
||||
$_output .= '<label>';
|
||||
|
@@ -22,7 +22,6 @@
|
||||
* - basedir - (optional) - base directory for absolute paths, default is environment variable DOCUMENT_ROOT
|
||||
* - path_prefix - prefix for path output (optional, default empty)
|
||||
*
|
||||
*
|
||||
* @link http://www.smarty.net/manual/en/language.function.html.image.php {html_image}
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
@@ -38,8 +37,10 @@
|
||||
*/
|
||||
function smarty_function_html_image($params, Smarty_Internal_Template $template)
|
||||
{
|
||||
$template->_checkPlugins(array(array('function' => 'smarty_function_escape_special_chars',
|
||||
'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php')));
|
||||
$template->_checkPlugins(
|
||||
array(array('function' => 'smarty_function_escape_special_chars',
|
||||
'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'))
|
||||
);
|
||||
|
||||
$alt = '';
|
||||
$file = '';
|
||||
|
@@ -21,7 +21,6 @@
|
||||
* - id (optional) - string default not set
|
||||
* - class (optional) - string default not set
|
||||
*
|
||||
*
|
||||
* @link http://www.smarty.net/manual/en/language.function.html.options.php {html_image}
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
@@ -37,8 +36,10 @@
|
||||
*/
|
||||
function smarty_function_html_options($params, Smarty_Internal_Template $template)
|
||||
{
|
||||
$template->_checkPlugins(array(array('function' => 'smarty_function_escape_special_chars',
|
||||
'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php')));
|
||||
$template->_checkPlugins(
|
||||
array(array('function' => 'smarty_function_escape_special_chars',
|
||||
'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'))
|
||||
);
|
||||
|
||||
$name = null;
|
||||
$values = null;
|
||||
@@ -75,8 +76,10 @@ function smarty_function_html_options($params, Smarty_Internal_Template $templat
|
||||
if (method_exists($_sel, '__toString')) {
|
||||
$_sel = smarty_function_escape_special_chars((string) $_sel->__toString());
|
||||
} 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;
|
||||
}
|
||||
} else {
|
||||
@@ -88,8 +91,10 @@ function smarty_function_html_options($params, Smarty_Internal_Template $templat
|
||||
if (method_exists($_val, '__toString')) {
|
||||
$selected = smarty_function_escape_special_chars((string) $_val->__toString());
|
||||
} 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 {
|
||||
$selected = smarty_function_escape_special_chars((string) $_val);
|
||||
@@ -103,8 +108,10 @@ function smarty_function_html_options($params, Smarty_Internal_Template $templat
|
||||
case 'readonly':
|
||||
if (!empty($params[ 'strict' ])) {
|
||||
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) {
|
||||
@@ -183,8 +190,10 @@ function smarty_function_html_options_optoutput($key, $value, $selected, $id, $c
|
||||
if (method_exists($value, '__toString')) {
|
||||
$value = smarty_function_escape_special_chars((string) $value->__toString());
|
||||
} 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 '';
|
||||
}
|
||||
@@ -196,8 +205,10 @@ function smarty_function_html_options_optoutput($key, $value, $selected, $id, $c
|
||||
} else {
|
||||
$_idx = 0;
|
||||
$_html_result =
|
||||
smarty_function_html_options_optgroup($key, $value, $selected, !empty($id) ? ($id . '-' . $idx) : null,
|
||||
$class, $_idx);
|
||||
smarty_function_html_options_optgroup(
|
||||
$key, $value, $selected, !empty($id) ? ($id . '-' . $idx) : null,
|
||||
$class, $_idx
|
||||
);
|
||||
$idx ++;
|
||||
}
|
||||
|
||||
|
@@ -29,7 +29,6 @@
|
||||
* {html_radios values=$ids name='box' separator='<br>' output=$names}
|
||||
* {html_radios values=$ids checked=$checked separator='<br>' output=$names}
|
||||
*
|
||||
*
|
||||
* @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios}
|
||||
* (Smarty online manual)
|
||||
* @author Christopher Kvarme <christopher.kvarme@flashjab.com>
|
||||
@@ -45,8 +44,10 @@
|
||||
*/
|
||||
function smarty_function_html_radios($params, Smarty_Internal_Template $template)
|
||||
{
|
||||
$template->_checkPlugins(array(array('function' => 'smarty_function_escape_special_chars',
|
||||
'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php')));
|
||||
$template->_checkPlugins(
|
||||
array(array('function' => 'smarty_function_escape_special_chars',
|
||||
'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'))
|
||||
);
|
||||
|
||||
$name = 'radio';
|
||||
$values = null;
|
||||
@@ -74,8 +75,10 @@ function smarty_function_html_radios($params, Smarty_Internal_Template $template
|
||||
if (method_exists($_val, '__toString')) {
|
||||
$selected = smarty_function_escape_special_chars((string) $_val->__toString());
|
||||
} 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 {
|
||||
$selected = (string) $_val;
|
||||
@@ -98,8 +101,10 @@ function smarty_function_html_radios($params, Smarty_Internal_Template $template
|
||||
break;
|
||||
|
||||
case 'radios':
|
||||
trigger_error('html_radios: the use of the "radios" attribute is deprecated, use "options" instead',
|
||||
E_USER_WARNING);
|
||||
trigger_error(
|
||||
'html_radios: the use of the "radios" attribute is deprecated, use "options" instead',
|
||||
E_USER_WARNING
|
||||
);
|
||||
$options = (array) $_val;
|
||||
break;
|
||||
|
||||
@@ -113,8 +118,10 @@ function smarty_function_html_radios($params, Smarty_Internal_Template $template
|
||||
case 'readonly':
|
||||
if (!empty($params[ 'strict' ])) {
|
||||
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) {
|
||||
@@ -146,15 +153,19 @@ function smarty_function_html_radios($params, Smarty_Internal_Template $template
|
||||
if (isset($options)) {
|
||||
foreach ($options as $_key => $_val) {
|
||||
$_html_result[] =
|
||||
smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels,
|
||||
$label_ids, $escape);
|
||||
smarty_function_html_radios_output(
|
||||
$name, $_key, $_val, $selected, $extra, $separator, $labels,
|
||||
$label_ids, $escape
|
||||
);
|
||||
}
|
||||
} else {
|
||||
foreach ($values as $_i => $_key) {
|
||||
$_val = isset($output[ $_i ]) ? $output[ $_i ] : '';
|
||||
$_html_result[] =
|
||||
smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels,
|
||||
$label_ids, $escape);
|
||||
smarty_function_html_radios_output(
|
||||
$name, $_key, $_val, $selected, $extra, $separator, $labels,
|
||||
$label_ids, $escape
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -178,16 +189,18 @@ function smarty_function_html_radios($params, Smarty_Internal_Template $template
|
||||
* @return string
|
||||
*/
|
||||
function smarty_function_html_radios_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids,
|
||||
$escape)
|
||||
{
|
||||
$escape
|
||||
) {
|
||||
$_output = '';
|
||||
|
||||
if (is_object($value)) {
|
||||
if (method_exists($value, '__toString')) {
|
||||
$value = (string) $value->__toString();
|
||||
} 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 '';
|
||||
}
|
||||
@@ -199,8 +212,10 @@ function smarty_function_html_radios_output($name, $value, $output, $selected, $
|
||||
if (method_exists($output, '__toString')) {
|
||||
$output = (string) $output->__toString();
|
||||
} 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 '';
|
||||
}
|
||||
@@ -210,8 +225,12 @@ function smarty_function_html_radios_output($name, $value, $output, $selected, $
|
||||
|
||||
if ($labels) {
|
||||
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 . '">';
|
||||
} else {
|
||||
$_output .= '<label>';
|
||||
|
@@ -28,7 +28,6 @@
|
||||
* - 2.0 complete rewrite for performance,
|
||||
* added attributes month_names, *_id
|
||||
*
|
||||
*
|
||||
* @link http://www.smarty.net/manual/en/language.function.html.select.date.php {html_select_date}
|
||||
* (Smarty online manual)
|
||||
* @version 2.0
|
||||
@@ -45,8 +44,10 @@
|
||||
*/
|
||||
function smarty_function_html_select_date($params, Smarty_Internal_Template $template)
|
||||
{
|
||||
$template->_checkPlugins(array(array('function' => 'smarty_function_escape_special_chars',
|
||||
'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php')));
|
||||
$template->_checkPlugins(
|
||||
array(array('function' => 'smarty_function_escape_special_chars',
|
||||
'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'))
|
||||
);
|
||||
// generate timestamps used for month names only
|
||||
static $_month_timestamps = null;
|
||||
static $_current_year = null;
|
||||
@@ -111,8 +112,10 @@ function smarty_function_html_select_date($params, Smarty_Internal_Template $tem
|
||||
switch ($_key) {
|
||||
case 'time':
|
||||
if (!is_array($_value) && $_value !== null) {
|
||||
$template->_checkPlugins(array(array('function' => 'smarty_make_timestamp',
|
||||
'file' => SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php')));
|
||||
$template->_checkPlugins(
|
||||
array(array('function' => 'smarty_make_timestamp',
|
||||
'file' => SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php'))
|
||||
);
|
||||
$time = smarty_make_timestamp($_value);
|
||||
}
|
||||
break;
|
||||
@@ -250,10 +253,12 @@ function smarty_function_html_select_date($params, Smarty_Internal_Template $tem
|
||||
} else {
|
||||
$_html_years = '<select name="' . $_name . '"';
|
||||
if ($year_id !== null || $all_id !== null) {
|
||||
$_html_years .= ' id="' . smarty_function_escape_special_chars($year_id !== null ?
|
||||
$_html_years .= ' id="' . smarty_function_escape_special_chars(
|
||||
$year_id !== null ?
|
||||
($year_id ? $year_id : $_name) :
|
||||
($all_id ? ($all_id . $_name) :
|
||||
$_name)) . '"';
|
||||
$_name)
|
||||
) . '"';
|
||||
}
|
||||
if ($year_size) {
|
||||
$_html_years .= ' size="' . $year_size . '"';
|
||||
@@ -288,10 +293,12 @@ function smarty_function_html_select_date($params, Smarty_Internal_Template $tem
|
||||
|
||||
$_html_months = '<select name="' . $_name . '"';
|
||||
if ($month_id !== null || $all_id !== null) {
|
||||
$_html_months .= ' id="' . smarty_function_escape_special_chars($month_id !== null ?
|
||||
$_html_months .= ' id="' . smarty_function_escape_special_chars(
|
||||
$month_id !== null ?
|
||||
($month_id ? $month_id : $_name) :
|
||||
($all_id ? ($all_id . $_name) :
|
||||
$_name)) . '"';
|
||||
$_name)
|
||||
) . '"';
|
||||
}
|
||||
if ($month_size) {
|
||||
$_html_months .= ' size="' . $month_size . '"';
|
||||
@@ -329,8 +336,10 @@ function smarty_function_html_select_date($params, Smarty_Internal_Template $tem
|
||||
$_html_days = '<select name="' . $_name . '"';
|
||||
if ($day_id !== null || $all_id !== null) {
|
||||
$_html_days .= ' id="' .
|
||||
smarty_function_escape_special_chars($day_id !== null ? ($day_id ? $day_id : $_name) :
|
||||
($all_id ? ($all_id . $_name) : $_name)) . '"';
|
||||
smarty_function_escape_special_chars(
|
||||
$day_id !== null ? ($day_id ? $day_id : $_name) :
|
||||
($all_id ? ($all_id . $_name) : $_name)
|
||||
) . '"';
|
||||
}
|
||||
if ($day_size) {
|
||||
$_html_days .= ' size="' . $day_size . '"';
|
||||
|
@@ -26,8 +26,10 @@
|
||||
*/
|
||||
function smarty_function_html_select_time($params, Smarty_Internal_Template $template)
|
||||
{
|
||||
$template->_checkPlugins(array(array('function' => 'smarty_function_escape_special_chars',
|
||||
'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php')));
|
||||
$template->_checkPlugins(
|
||||
array(array('function' => 'smarty_function_escape_special_chars',
|
||||
'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'))
|
||||
);
|
||||
$prefix = 'Time_';
|
||||
$field_array = null;
|
||||
$field_separator = "\n";
|
||||
@@ -78,8 +80,10 @@ function smarty_function_html_select_time($params, Smarty_Internal_Template $tem
|
||||
switch ($_key) {
|
||||
case 'time':
|
||||
if (!is_array($_value) && $_value !== null) {
|
||||
$template->_checkPlugins(array(array('function' => 'smarty_make_timestamp',
|
||||
'file' => SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php')));
|
||||
$template->_checkPlugins(
|
||||
array(array('function' => 'smarty_make_timestamp',
|
||||
'file' => SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php'))
|
||||
);
|
||||
$time = smarty_make_timestamp($_value);
|
||||
}
|
||||
break;
|
||||
@@ -203,8 +207,10 @@ function smarty_function_html_select_time($params, Smarty_Internal_Template $tem
|
||||
$_html_hours = '<select name="' . $_name . '"';
|
||||
if ($hour_id !== null || $all_id !== null) {
|
||||
$_html_hours .= ' id="' .
|
||||
smarty_function_escape_special_chars($hour_id !== null ? ($hour_id ? $hour_id : $_name) :
|
||||
($all_id ? ($all_id . $_name) : $_name)) . '"';
|
||||
smarty_function_escape_special_chars(
|
||||
$hour_id !== null ? ($hour_id ? $hour_id : $_name) :
|
||||
($all_id ? ($all_id . $_name) : $_name)
|
||||
) . '"';
|
||||
}
|
||||
if ($hour_size) {
|
||||
$_html_hours .= ' size="' . $hour_size . '"';
|
||||
@@ -249,10 +255,12 @@ function smarty_function_html_select_time($params, Smarty_Internal_Template $tem
|
||||
|
||||
$_html_minutes = '<select name="' . $_name . '"';
|
||||
if ($minute_id !== null || $all_id !== null) {
|
||||
$_html_minutes .= ' id="' . smarty_function_escape_special_chars($minute_id !== null ?
|
||||
$_html_minutes .= ' id="' . smarty_function_escape_special_chars(
|
||||
$minute_id !== null ?
|
||||
($minute_id ? $minute_id : $_name) :
|
||||
($all_id ? ($all_id . $_name) :
|
||||
$_name)) . '"';
|
||||
$_name)
|
||||
) . '"';
|
||||
}
|
||||
if ($minute_size) {
|
||||
$_html_minutes .= ' size="' . $minute_size . '"';
|
||||
@@ -290,10 +298,12 @@ function smarty_function_html_select_time($params, Smarty_Internal_Template $tem
|
||||
|
||||
$_html_seconds = '<select name="' . $_name . '"';
|
||||
if ($second_id !== null || $all_id !== null) {
|
||||
$_html_seconds .= ' id="' . smarty_function_escape_special_chars($second_id !== null ?
|
||||
$_html_seconds .= ' id="' . smarty_function_escape_special_chars(
|
||||
$second_id !== null ?
|
||||
($second_id ? $second_id : $_name) :
|
||||
($all_id ? ($all_id . $_name) :
|
||||
$_name)) . '"';
|
||||
$_name)
|
||||
) . '"';
|
||||
}
|
||||
if ($second_size) {
|
||||
$_html_seconds .= ' size="' . $second_size . '"';
|
||||
@@ -331,11 +341,13 @@ function smarty_function_html_select_time($params, Smarty_Internal_Template $tem
|
||||
|
||||
$_html_meridian = '<select name="' . $_name . '"';
|
||||
if ($meridian_id !== null || $all_id !== null) {
|
||||
$_html_meridian .= ' id="' . smarty_function_escape_special_chars($meridian_id !== null ?
|
||||
$_html_meridian .= ' id="' . smarty_function_escape_special_chars(
|
||||
$meridian_id !== null ?
|
||||
($meridian_id ? $meridian_id :
|
||||
$_name) :
|
||||
($all_id ? ($all_id . $_name) :
|
||||
$_name)) . '"';
|
||||
$_name)
|
||||
) . '"';
|
||||
}
|
||||
if ($meridian_size) {
|
||||
$_html_meridian .= ' size="' . $meridian_size . '"';
|
||||
|
@@ -35,7 +35,6 @@
|
||||
* {table loop=$data cols=4 tr_attr='"bgcolor=red"'}
|
||||
* {table loop=$data cols="first,second,third" tr_attr=$colors}
|
||||
*
|
||||
*
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @author credit to Messju Mohr <messju at lammfellpuschen dot de>
|
||||
* @author credit to boots <boots dot smarty at yahoo dot com>
|
||||
|
@@ -37,7 +37,6 @@
|
||||
* {mailto address="me@domain.com" cc="you@domain.com,they@domain.com"}
|
||||
* {mailto address="me@domain.com" extra='class="mailto"'}
|
||||
*
|
||||
*
|
||||
* @link http://www.smarty.net/manual/en/language.function.mailto.php {mailto}
|
||||
* (Smarty online manual)
|
||||
* @version 1.2
|
||||
@@ -97,8 +96,10 @@ function smarty_function_mailto($params)
|
||||
|
||||
$encode = (empty($params[ 'encode' ])) ? 'none' : $params[ 'encode' ];
|
||||
if (!isset($_allowed_encoding[ $encode ])) {
|
||||
trigger_error("mailto: 'encode' parameter must be none, javascript, javascript_charcode or hex",
|
||||
E_USER_WARNING);
|
||||
trigger_error(
|
||||
"mailto: 'encode' parameter must be none, javascript, javascript_charcode or hex",
|
||||
E_USER_WARNING
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
|
@@ -29,23 +29,32 @@ function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = fals
|
||||
$upper_string = mb_convert_case($string, MB_CASE_TITLE, Smarty::$_CHARSET);
|
||||
} else {
|
||||
// uppercase word breaks
|
||||
$upper_string = preg_replace_callback("!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER,
|
||||
'smarty_mod_cap_mbconvert_cb', $string);
|
||||
$upper_string = preg_replace_callback(
|
||||
"!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER,
|
||||
'smarty_mod_cap_mbconvert_cb', $string
|
||||
);
|
||||
}
|
||||
// check uc_digits case
|
||||
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
|
||||
)
|
||||
) {
|
||||
foreach ($matches[ 1 ] as $match) {
|
||||
$upper_string =
|
||||
substr_replace($upper_string, mb_strtolower($match[ 0 ], Smarty::$_CHARSET), $match[ 1 ],
|
||||
strlen($match[ 0 ]));
|
||||
substr_replace(
|
||||
$upper_string, mb_strtolower($match[ 0 ], Smarty::$_CHARSET), $match[ 1 ],
|
||||
strlen($match[ 0 ])
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
$upper_string =
|
||||
preg_replace_callback("!((^|\s)['\"])(\w)!" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_mbconvert2_cb',
|
||||
$upper_string);
|
||||
preg_replace_callback(
|
||||
"!((^|\s)['\"])(\w)!" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_mbconvert2_cb',
|
||||
$upper_string
|
||||
);
|
||||
return $upper_string;
|
||||
}
|
||||
|
||||
@@ -55,20 +64,27 @@ function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = fals
|
||||
}
|
||||
// uppercase (including hyphenated words)
|
||||
$upper_string =
|
||||
preg_replace_callback("!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_ucfirst_cb',
|
||||
$string);
|
||||
preg_replace_callback(
|
||||
"!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_ucfirst_cb',
|
||||
$string
|
||||
);
|
||||
// check uc_digits case
|
||||
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
|
||||
)
|
||||
) {
|
||||
foreach ($matches[ 1 ] as $match) {
|
||||
$upper_string =
|
||||
substr_replace($upper_string, strtolower($match[ 0 ]), $match[ 1 ], strlen($match[ 0 ]));
|
||||
}
|
||||
}
|
||||
}
|
||||
$upper_string = preg_replace_callback("!((^|\s)['\"])(\w)!" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_ucfirst2_cb',
|
||||
$upper_string);
|
||||
$upper_string = preg_replace_callback(
|
||||
"!((^|\s)['\"])(\w)!" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_ucfirst2_cb',
|
||||
$upper_string
|
||||
);
|
||||
return $upper_string;
|
||||
}
|
||||
|
||||
|
@@ -38,7 +38,7 @@ function smarty_modifier_date_format($string, $format = null, $default_date = ''
|
||||
static $is_loaded = false;
|
||||
if (!$is_loaded) {
|
||||
if (!is_callable('smarty_make_timestamp')) {
|
||||
require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
|
||||
include_once SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php';
|
||||
}
|
||||
$is_loaded = true;
|
||||
}
|
||||
|
@@ -48,9 +48,11 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
|
||||
// php <5.2.3 - prevent double encoding
|
||||
$string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string);
|
||||
$string = htmlspecialchars($string, ENT_QUOTES, $char_set);
|
||||
$string = str_replace(array('%%%SMARTY_START%%%',
|
||||
$string = str_replace(
|
||||
array('%%%SMARTY_START%%%',
|
||||
'%%%SMARTY_END%%%'), array('&',
|
||||
';'), $string);
|
||||
';'), $string
|
||||
);
|
||||
|
||||
return $string;
|
||||
}
|
||||
@@ -71,9 +73,11 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
|
||||
$string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string);
|
||||
$string = htmlspecialchars($string, ENT_QUOTES, $char_set);
|
||||
$string =
|
||||
str_replace(array('%%%SMARTY_START%%%',
|
||||
str_replace(
|
||||
array('%%%SMARTY_START%%%',
|
||||
'%%%SMARTY_END%%%'), array('&',
|
||||
';'), $string);
|
||||
';'), $string
|
||||
);
|
||||
|
||||
return $string;
|
||||
}
|
||||
@@ -92,9 +96,11 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
|
||||
} else {
|
||||
$string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string);
|
||||
$string = htmlentities($string, ENT_QUOTES, $char_set);
|
||||
$string = str_replace(array('%%%SMARTY_START%%%',
|
||||
$string = str_replace(
|
||||
array('%%%SMARTY_START%%%',
|
||||
'%%%SMARTY_END%%%'), array('&',
|
||||
';'), $string);
|
||||
';'), $string
|
||||
);
|
||||
|
||||
return $string;
|
||||
}
|
||||
@@ -126,7 +132,7 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
|
||||
if (Smarty::$_MBSTRING) {
|
||||
if (!$is_loaded_1) {
|
||||
if (!is_callable('smarty_mb_to_unicode')) {
|
||||
require_once(SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php');
|
||||
include_once SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php';
|
||||
}
|
||||
$is_loaded_1 = true;
|
||||
}
|
||||
@@ -150,7 +156,7 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
|
||||
if (Smarty::$_MBSTRING) {
|
||||
if (!$is_loaded_1) {
|
||||
if (!is_callable('smarty_mb_to_unicode')) {
|
||||
require_once(SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php');
|
||||
include_once SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php';
|
||||
}
|
||||
$is_loaded_1 = true;
|
||||
}
|
||||
@@ -171,29 +177,35 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
|
||||
|
||||
case 'javascript':
|
||||
// escape quotes and backslashes, newlines, etc.
|
||||
return strtr($string, array('\\' => '\\\\',
|
||||
return strtr(
|
||||
$string, array('\\' => '\\\\',
|
||||
"'" => "\\'",
|
||||
'"' => '\\"',
|
||||
"\r" => '\\r',
|
||||
"\n" => '\\n',
|
||||
'</' => '<\/'));
|
||||
'</' => '<\/')
|
||||
);
|
||||
|
||||
case 'mail':
|
||||
if (Smarty::$_MBSTRING) {
|
||||
if (!$is_loaded_2) {
|
||||
if (!is_callable('smarty_mb_str_replace')) {
|
||||
require_once(SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php');
|
||||
include_once SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php';
|
||||
}
|
||||
$is_loaded_2 = true;
|
||||
}
|
||||
return smarty_mb_str_replace(array('@',
|
||||
return smarty_mb_str_replace(
|
||||
array('@',
|
||||
'.'), array(' [AT] ',
|
||||
' [DOT] '), $string);
|
||||
' [DOT] '), $string
|
||||
);
|
||||
}
|
||||
// no MBString fallback
|
||||
return str_replace(array('@',
|
||||
return str_replace(
|
||||
array('@',
|
||||
'.'), array(' [AT] ',
|
||||
' [DOT] '), $string);
|
||||
' [DOT] '), $string
|
||||
);
|
||||
|
||||
case 'nonstd':
|
||||
// escape non-standard chars, such as ms document quotes
|
||||
@@ -201,7 +213,7 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
|
||||
if (Smarty::$_MBSTRING) {
|
||||
if (!$is_loaded_1) {
|
||||
if (!is_callable('smarty_mb_to_unicode')) {
|
||||
require_once(SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php');
|
||||
include_once SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php';
|
||||
}
|
||||
$is_loaded_1 = true;
|
||||
}
|
||||
|
@@ -11,7 +11,6 @@
|
||||
* Name: mb_wordwrap
|
||||
* Purpose: Wrap a string to a given number of characters
|
||||
*
|
||||
|
||||
* @link http://php.net/manual/en/function.wordwrap.php for similarity
|
||||
*
|
||||
* @param string $str the string to wrap
|
||||
@@ -36,10 +35,12 @@ function smarty_modifier_mb_wordwrap($str, $width = 75, $break = "\n", $cut = fa
|
||||
$_tokens = array($_token);
|
||||
if ($token_length > $width) {
|
||||
if ($cut) {
|
||||
$_tokens = preg_split('!(.{' . $width . '})!S' . Smarty::$_UTF8_MODIFIER,
|
||||
$_tokens = preg_split(
|
||||
'!(.{' . $width . '})!S' . Smarty::$_UTF8_MODIFIER,
|
||||
$_token,
|
||||
-1,
|
||||
PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
|
||||
PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -28,7 +28,7 @@ function smarty_modifier_replace($string, $search, $replace)
|
||||
if (Smarty::$_MBSTRING) {
|
||||
if (!$is_loaded) {
|
||||
if (!is_callable('smarty_mb_str_replace')) {
|
||||
require_once(SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php');
|
||||
include_once SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php';
|
||||
}
|
||||
$is_loaded = true;
|
||||
}
|
||||
|
@@ -35,8 +35,10 @@ function smarty_modifier_truncate($string, $length = 80, $etc = '...', $break_wo
|
||||
if (mb_strlen($string, Smarty::$_CHARSET) > $length) {
|
||||
$length -= min($length, mb_strlen($etc, Smarty::$_CHARSET));
|
||||
if (!$break_words && !$middle) {
|
||||
$string = preg_replace('/\s+?(\S+)?$/' . Smarty::$_UTF8_MODIFIER, '',
|
||||
mb_substr($string, 0, $length + 1, Smarty::$_CHARSET));
|
||||
$string = preg_replace(
|
||||
'/\s+?(\S+)?$/' . Smarty::$_UTF8_MODIFIER, '',
|
||||
mb_substr($string, 0, $length + 1, Smarty::$_CHARSET)
|
||||
);
|
||||
}
|
||||
if (!$middle) {
|
||||
return mb_substr($string, 0, $length, Smarty::$_CHARSET) . $etc;
|
||||
|
@@ -24,8 +24,10 @@ function smarty_modifiercompiler_escape($params, Smarty_Internal_TemplateCompile
|
||||
{
|
||||
static $_double_encode = null;
|
||||
static $is_loaded = false;
|
||||
$compiler->template->_checkPlugins(array(array('function' => 'smarty_literal_compiler_param',
|
||||
'file' => SMARTY_PLUGINS_DIR . 'shared.literal_compiler_param.php')));
|
||||
$compiler->template->_checkPlugins(
|
||||
array(array('function' => 'smarty_literal_compiler_param',
|
||||
'file' => SMARTY_PLUGINS_DIR . 'shared.literal_compiler_param.php'))
|
||||
);
|
||||
if ($_double_encode === null) {
|
||||
$_double_encode = version_compare(PHP_VERSION, '5.2.3', '>=');
|
||||
}
|
||||
|
@@ -27,8 +27,11 @@ function smarty_outputfilter_trimwhitespace($source)
|
||||
$source = preg_replace('/\015\012|\015|\012/', "\n", $source);
|
||||
|
||||
// capture Internet Explorer and KnockoutJS Conditional Comments
|
||||
if (preg_match_all('#<!--((\[[^\]]+\]>.*?<!\[[^\]]+\])|(\s*/?ko\s+.+))-->#is', $source, $matches,
|
||||
PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {
|
||||
if (preg_match_all(
|
||||
'#<!--((\[[^\]]+\]>.*?<!\[[^\]]+\])|(\s*/?ko\s+.+))-->#is', $source, $matches,
|
||||
PREG_OFFSET_CAPTURE | PREG_SET_ORDER
|
||||
)
|
||||
) {
|
||||
foreach ($matches as $match) {
|
||||
$store[] = $match[ 0 ][ 0 ];
|
||||
$_length = strlen($match[ 0 ][ 0 ]);
|
||||
@@ -46,8 +49,11 @@ function smarty_outputfilter_trimwhitespace($source)
|
||||
|
||||
// capture html elements not to be messed with
|
||||
$_offset = 0;
|
||||
if (preg_match_all('#(<script[^>]*>.*?</script[^>]*>)|(<textarea[^>]*>.*?</textarea[^>]*>)|(<pre[^>]*>.*?</pre[^>]*>)#is',
|
||||
$source, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {
|
||||
if (preg_match_all(
|
||||
'#(<script[^>]*>.*?</script[^>]*>)|(<textarea[^>]*>.*?</textarea[^>]*>)|(<pre[^>]*>.*?</pre[^>]*>)#is',
|
||||
$source, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER
|
||||
)
|
||||
) {
|
||||
foreach ($matches as $match) {
|
||||
$store[] = $match[ 0 ][ 0 ];
|
||||
$_length = strlen($match[ 0 ][ 0 ]);
|
||||
|
@@ -25,8 +25,10 @@ function smarty_literal_compiler_param($params, $index, $default = null)
|
||||
}
|
||||
// test if param is a literal
|
||||
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'
|
||||
);
|
||||
}
|
||||
|
||||
$t = null;
|
||||
|
@@ -21,14 +21,16 @@ function smarty_make_timestamp($string)
|
||||
if (empty($string)) {
|
||||
// use "now":
|
||||
return time();
|
||||
} elseif ($string instanceof DateTime ||
|
||||
(interface_exists('DateTimeInterface', false) && $string instanceof DateTimeInterface)
|
||||
} elseif ($string instanceof DateTime
|
||||
|| (interface_exists('DateTimeInterface', false) && $string instanceof DateTimeInterface)
|
||||
) {
|
||||
return (int) $string->format('U'); // PHP 5.2 BC
|
||||
} elseif (strlen($string) === 14 && ctype_digit($string)) {
|
||||
// it is mysql timestamp format of YYYYMMDDHHMMSS?
|
||||
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));
|
||||
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)
|
||||
);
|
||||
} elseif (is_numeric($string)) {
|
||||
// it is a numeric string, we handle it as timestamp
|
||||
return (int) $string;
|
||||
|
@@ -51,7 +51,8 @@ abstract class Smarty_CacheResource
|
||||
* @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,
|
||||
$update = false);
|
||||
$update = false
|
||||
);
|
||||
|
||||
/**
|
||||
* Write the rendered template output to cache
|
||||
|
@@ -110,8 +110,10 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
|
||||
return;
|
||||
}
|
||||
$timestamp = null;
|
||||
$this->fetch($cached->filepath, $cached->source->name, $cached->cache_id, $cached->compile_id, $cached->content,
|
||||
$timestamp);
|
||||
$this->fetch(
|
||||
$cached->filepath, $cached->source->name, $cached->cache_id, $cached->compile_id, $cached->content,
|
||||
$timestamp
|
||||
);
|
||||
$cached->timestamp = isset($timestamp) ? $timestamp : false;
|
||||
$cached->exists = !!$cached->timestamp;
|
||||
}
|
||||
@@ -126,16 +128,18 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
|
||||
* @return boolean true or false if the cached content does not exist
|
||||
*/
|
||||
public function process(Smarty_Internal_Template $_smarty_tpl, Smarty_Template_Cached $cached = null,
|
||||
$update = false)
|
||||
{
|
||||
$update = false
|
||||
) {
|
||||
if (!$cached) {
|
||||
$cached = $_smarty_tpl->cached;
|
||||
}
|
||||
$content = $cached->content ? $cached->content : null;
|
||||
$timestamp = $cached->timestamp ? $cached->timestamp : null;
|
||||
if ($content === null || !$timestamp) {
|
||||
$this->fetch($_smarty_tpl->cached->filepath, $_smarty_tpl->source->name, $_smarty_tpl->cache_id,
|
||||
$_smarty_tpl->compile_id, $content, $timestamp);
|
||||
$this->fetch(
|
||||
$_smarty_tpl->cached->filepath, $_smarty_tpl->source->name, $_smarty_tpl->cache_id,
|
||||
$_smarty_tpl->compile_id, $content, $timestamp
|
||||
);
|
||||
}
|
||||
if (isset($content)) {
|
||||
eval('?>' . $content);
|
||||
@@ -156,8 +160,10 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
|
||||
*/
|
||||
public function writeCachedContent(Smarty_Internal_Template $_template, $content)
|
||||
{
|
||||
return $this->save($_template->cached->filepath, $_template->source->name, $_template->cache_id,
|
||||
$_template->compile_id, $_template->cache_lifetime, $content);
|
||||
return $this->save(
|
||||
$_template->cached->filepath, $_template->source->name, $_template->cache_id,
|
||||
$_template->compile_id, $_template->cache_lifetime, $content
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -173,8 +179,10 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
|
||||
$timestamp = null;
|
||||
if ($content === null) {
|
||||
$timestamp = null;
|
||||
$this->fetch($_template->cached->filepath, $_template->source->name, $_template->cache_id,
|
||||
$_template->compile_id, $content, $timestamp);
|
||||
$this->fetch(
|
||||
$_template->cached->filepath, $_template->source->name, $_template->cache_id,
|
||||
$_template->compile_id, $content, $timestamp
|
||||
);
|
||||
}
|
||||
if (isset($content)) {
|
||||
return $content;
|
||||
|
@@ -69,8 +69,10 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
|
||||
*/
|
||||
public function populateTimestamp(Smarty_Template_Cached $cached)
|
||||
{
|
||||
if (!$this->fetch($cached->filepath, $cached->source->name, $cached->cache_id, $cached->compile_id, $content,
|
||||
$timestamp, $cached->source->uid)
|
||||
if (!$this->fetch(
|
||||
$cached->filepath, $cached->source->name, $cached->cache_id, $cached->compile_id, $content,
|
||||
$timestamp, $cached->source->uid
|
||||
)
|
||||
) {
|
||||
return;
|
||||
}
|
||||
@@ -89,16 +91,18 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
|
||||
* @return boolean true or false if the cached content does not exist
|
||||
*/
|
||||
public function process(Smarty_Internal_Template $_smarty_tpl, Smarty_Template_Cached $cached = null,
|
||||
$update = false)
|
||||
{
|
||||
$update = false
|
||||
) {
|
||||
if (!$cached) {
|
||||
$cached = $_smarty_tpl->cached;
|
||||
}
|
||||
$content = $cached->content ? $cached->content : null;
|
||||
$timestamp = $cached->timestamp ? $cached->timestamp : null;
|
||||
if ($content === null || !$timestamp) {
|
||||
if (!$this->fetch($_smarty_tpl->cached->filepath, $_smarty_tpl->source->name, $_smarty_tpl->cache_id,
|
||||
$_smarty_tpl->compile_id, $content, $timestamp, $_smarty_tpl->source->uid)
|
||||
if (!$this->fetch(
|
||||
$_smarty_tpl->cached->filepath, $_smarty_tpl->source->name, $_smarty_tpl->cache_id,
|
||||
$_smarty_tpl->compile_id, $content, $timestamp, $_smarty_tpl->source->uid
|
||||
)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
@@ -139,8 +143,10 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
|
||||
$content = $_template->cached->content ? $_template->cached->content : null;
|
||||
$timestamp = null;
|
||||
if ($content === null) {
|
||||
if (!$this->fetch($_template->cached->filepath, $_template->source->name, $_template->cache_id,
|
||||
$_template->compile_id, $content, $timestamp, $_template->source->uid)
|
||||
if (!$this->fetch(
|
||||
$_template->cached->filepath, $_template->source->name, $_template->cache_id,
|
||||
$_template->compile_id, $content, $timestamp, $_template->source->uid
|
||||
)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
@@ -204,7 +210,6 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
|
||||
*
|
||||
* @return string filepath of cache file
|
||||
* @throws \SmartyException
|
||||
*
|
||||
*/
|
||||
protected function getTemplateUid(Smarty $smarty, $resource_name)
|
||||
{
|
||||
@@ -247,8 +252,8 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
|
||||
* @return boolean success
|
||||
*/
|
||||
protected function fetch($cid, $resource_name = null, $cache_id = null, $compile_id = null, &$content = null,
|
||||
&$timestamp = null, $resource_uid = null)
|
||||
{
|
||||
&$timestamp = null, $resource_uid = null
|
||||
) {
|
||||
$t = $this->read(array($cid));
|
||||
$content = !empty($t[ $cid ]) ? $t[ $cid ] : null;
|
||||
$timestamp = null;
|
||||
@@ -307,8 +312,8 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
|
||||
* @return void
|
||||
*/
|
||||
protected function invalidate($cid = null, $resource_name = null, $cache_id = null, $compile_id = null,
|
||||
$resource_uid = null)
|
||||
{
|
||||
$resource_uid = null
|
||||
) {
|
||||
$now = microtime(true);
|
||||
$key = null;
|
||||
// invalidate everything
|
||||
@@ -348,8 +353,8 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
|
||||
* @return float the microtime the CacheID was invalidated
|
||||
*/
|
||||
protected function getLatestInvalidationTimestamp($cid, $resource_name = null, $cache_id = null, $compile_id = null,
|
||||
$resource_uid = null)
|
||||
{
|
||||
$resource_uid = null
|
||||
) {
|
||||
// abort if there is no CacheID
|
||||
if (false && !$cid) {
|
||||
return 0;
|
||||
@@ -383,8 +388,8 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
|
||||
* @uses $invalidationKeyPrefix to prepend to each InvalidationKey
|
||||
*/
|
||||
protected function listInvalidationKeys($cid, $resource_name = null, $cache_id = null, $compile_id = null,
|
||||
$resource_uid = null)
|
||||
{
|
||||
$resource_uid = null
|
||||
) {
|
||||
$t = array('IVK#ALL');
|
||||
$_name = $_compile = '#';
|
||||
if ($resource_name) {
|
||||
|
@@ -32,11 +32,13 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource
|
||||
$_filepath = sha1($source->uid . $smarty->_joined_template_dir);
|
||||
$cached->filepath = $smarty->getCacheDir();
|
||||
if (isset($_template->cache_id)) {
|
||||
$cached->filepath .= preg_replace(array('![^\w|]+!',
|
||||
$cached->filepath .= preg_replace(
|
||||
array('![^\w|]+!',
|
||||
'![|]+!'),
|
||||
array('_',
|
||||
$_compile_dir_sep),
|
||||
$_template->cache_id) . $_compile_dir_sep;
|
||||
$_template->cache_id
|
||||
) . $_compile_dir_sep;
|
||||
}
|
||||
if (isset($_template->compile_id)) {
|
||||
$cached->filepath .= preg_replace('![^\w]+!', '_', $_template->compile_id) . $_compile_dir_sep;
|
||||
@@ -89,8 +91,8 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource
|
||||
*/
|
||||
public function process(Smarty_Internal_Template $_smarty_tpl,
|
||||
Smarty_Template_Cached $cached = null,
|
||||
$update = false)
|
||||
{
|
||||
$update = false
|
||||
) {
|
||||
$_smarty_tpl->cached->valid = false;
|
||||
if ($update && defined('HHVM_VERSION')) {
|
||||
eval('?>' . file_get_contents($_smarty_tpl->cached->filepath));
|
||||
@@ -111,12 +113,14 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource
|
||||
*/
|
||||
public function writeCachedContent(Smarty_Internal_Template $_template, $content)
|
||||
{
|
||||
if ($_template->smarty->ext->_writeFile->writeFile($_template->cached->filepath,
|
||||
if ($_template->smarty->ext->_writeFile->writeFile(
|
||||
$_template->cached->filepath,
|
||||
$content,
|
||||
$_template->smarty) === true
|
||||
$_template->smarty
|
||||
) === true
|
||||
) {
|
||||
if (function_exists('opcache_invalidate') &&
|
||||
(!function_exists('ini_get') || strlen(ini_get('opcache.restrict_api'))) < 1
|
||||
if (function_exists('opcache_invalidate')
|
||||
&& (!function_exists('ini_get') || strlen(ini_get('opcache.restrict_api'))) < 1
|
||||
) {
|
||||
opcache_invalidate($_template->cached->filepath, true);
|
||||
} else if (function_exists('apc_compile_file')) {
|
||||
|
@@ -50,7 +50,6 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_Compile_Shared_Inher
|
||||
* @param array $args array with attributes from parser
|
||||
* @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
|
||||
* @param array $parameter array with compilation parameter
|
||||
*
|
||||
*/
|
||||
public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
|
||||
{
|
||||
@@ -72,11 +71,13 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_Compile_Shared_Inher
|
||||
$compiler->_cache[ 'blockClass' ][ $compiler->_cache[ 'blockNesting' ] ] = $_className;
|
||||
$compiler->_cache[ 'blockParams' ][ $compiler->_cache[ 'blockNesting' ] ] = array();
|
||||
$compiler->_cache[ 'blockParams' ][ 1 ][ 'subBlocks' ][ trim($_attr[ 'name' ], '"\'') ][] = $_className;
|
||||
$this->openTag($compiler,
|
||||
$this->openTag(
|
||||
$compiler,
|
||||
'block',
|
||||
array($_attr, $compiler->nocache, $compiler->parser->current_buffer,
|
||||
$compiler->template->compiled->has_nocache_code,
|
||||
$compiler->template->caching));
|
||||
$compiler->template->caching)
|
||||
);
|
||||
$compiler->saveRequiredPlugins(true);
|
||||
$compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
|
||||
$compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template();
|
||||
@@ -86,7 +87,6 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_Compile_Shared_Inher
|
||||
}
|
||||
/**
|
||||
* Smarty Internal Plugin Compile BlockClose Class
|
||||
*
|
||||
*/
|
||||
class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_Compile_Shared_Inheritance
|
||||
{
|
||||
@@ -136,9 +136,13 @@ class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_Compile_Shared_
|
||||
$output .= "ob_start();\n";
|
||||
}
|
||||
$output .= "?>\n";
|
||||
$compiler->parser->current_buffer->append_subtree($compiler->parser,
|
||||
new Smarty_Internal_ParseTree_Tag($compiler->parser,
|
||||
$output));
|
||||
$compiler->parser->current_buffer->append_subtree(
|
||||
$compiler->parser,
|
||||
new Smarty_Internal_ParseTree_Tag(
|
||||
$compiler->parser,
|
||||
$output
|
||||
)
|
||||
);
|
||||
$compiler->parser->current_buffer->append_subtree($compiler->parser, $_functionCode);
|
||||
$output = "<?php\n";
|
||||
if (isset($_assign)) {
|
||||
@@ -148,9 +152,13 @@ class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_Compile_Shared_
|
||||
$output .= "}\n";
|
||||
$output .= "/* {/block {$_name}} */\n\n";
|
||||
$output .= "?>\n";
|
||||
$compiler->parser->current_buffer->append_subtree($compiler->parser,
|
||||
new Smarty_Internal_ParseTree_Tag($compiler->parser,
|
||||
$output));
|
||||
$compiler->parser->current_buffer->append_subtree(
|
||||
$compiler->parser,
|
||||
new Smarty_Internal_ParseTree_Tag(
|
||||
$compiler->parser,
|
||||
$output
|
||||
)
|
||||
);
|
||||
$compiler->blockOrFunctionCode .= $compiler->parser->current_buffer->to_smarty_php($compiler->parser);
|
||||
$compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template();
|
||||
// restore old status
|
||||
|
@@ -53,8 +53,10 @@ class Smarty_Internal_Compile_Child extends Smarty_Internal_CompileBase
|
||||
$_attr = $this->getAttributes($compiler, $args);
|
||||
$tag = isset($parameter[0]) ? "'{$parameter[0]}'" : "'{{$this->tag}}'";
|
||||
if (!isset($compiler->_cache[ 'blockNesting' ])) {
|
||||
$compiler->trigger_template_error("{$tag} used outside {block} tags ",
|
||||
$compiler->parser->lex->taglineno);
|
||||
$compiler->trigger_template_error(
|
||||
"{$tag} used outside {block} tags ",
|
||||
$compiler->parser->lex->taglineno
|
||||
);
|
||||
}
|
||||
$compiler->has_code = true;
|
||||
$compiler->suppressNocacheProcessing = true;
|
||||
|
@@ -108,11 +108,13 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_Compile_Shared_Inh
|
||||
$inlineUids = $match[ 1 ];
|
||||
}
|
||||
}
|
||||
$compiler->parser->template_postfix[] = new Smarty_Internal_ParseTree_Tag($compiler->parser,
|
||||
$compiler->parser->template_postfix[] = new Smarty_Internal_ParseTree_Tag(
|
||||
$compiler->parser,
|
||||
'<?php $_smarty_tpl->inheritance->endChild($_smarty_tpl' .
|
||||
(isset($template) ?
|
||||
", {$template}{$inlineUids}" :
|
||||
'') . ");\n?>");
|
||||
'') . ");\n?>"
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -126,10 +128,14 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_Compile_Shared_Inh
|
||||
*/
|
||||
private function compileInclude(Smarty_Internal_TemplateCompilerBase $compiler, $template)
|
||||
{
|
||||
$compiler->parser->template_postfix[] = new Smarty_Internal_ParseTree_Tag($compiler->parser,
|
||||
$compiler->compileTag('include',
|
||||
$compiler->parser->template_postfix[] = new Smarty_Internal_ParseTree_Tag(
|
||||
$compiler->parser,
|
||||
$compiler->compileTag(
|
||||
'include',
|
||||
array($template,
|
||||
array('scope' => 'parent'))));
|
||||
array('scope' => 'parent'))
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -119,8 +119,10 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_Compile_Private_Fo
|
||||
if ($fromName) {
|
||||
foreach (array('item', 'key') as $a) {
|
||||
if (isset($attributes[ $a ]) && $attributes[ $a ] === $fromName) {
|
||||
$compiler->trigger_template_error("'{$a}' and 'from' may not have same variable name '{$fromName}'",
|
||||
null, true);
|
||||
$compiler->trigger_template_error(
|
||||
"'{$a}' and 'from' may not have same variable name '{$fromName}'",
|
||||
null, true
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -187,8 +189,10 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_Compile_Private_Fo
|
||||
}
|
||||
$needTotal = isset($itemAttr[ 'total' ]);
|
||||
// Register tag
|
||||
$this->openTag($compiler, 'foreach',
|
||||
array('foreach', $compiler->nocache, $local, $itemVar, empty($itemAttr) ? 1 : 2));
|
||||
$this->openTag(
|
||||
$compiler, 'foreach',
|
||||
array('foreach', $compiler->nocache, $local, $itemVar, empty($itemAttr) ? 1 : 2)
|
||||
);
|
||||
// maybe nocache because of nocache variables
|
||||
$compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
|
||||
// generate output code
|
||||
|
@@ -143,9 +143,13 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
|
||||
$output .= "echo \"/*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/<?php ";
|
||||
$output .= "\\\$_smarty_tpl->smarty->ext->_tplFunction->saveTemplateVariables(\\\$_smarty_tpl, '{$_name}');\nforeach (\$params as \\\$key => \\\$value) {\n\\\$_smarty_tpl->tpl_vars[\\\$key] = new Smarty_Variable(\\\$value, \\\$_smarty_tpl->isRenderingCache);\n}\n?>";
|
||||
$output .= "/*/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/\";?>";
|
||||
$compiler->parser->current_buffer->append_subtree($compiler->parser,
|
||||
new Smarty_Internal_ParseTree_Tag($compiler->parser,
|
||||
$output));
|
||||
$compiler->parser->current_buffer->append_subtree(
|
||||
$compiler->parser,
|
||||
new Smarty_Internal_ParseTree_Tag(
|
||||
$compiler->parser,
|
||||
$output
|
||||
)
|
||||
);
|
||||
$compiler->parser->current_buffer->append_subtree($compiler->parser, $_functionCode);
|
||||
$output = "<?php echo \"/*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/<?php ";
|
||||
$output .= "\\\$_smarty_tpl->smarty->ext->_tplFunction->restoreTemplateVariables(\\\$_smarty_tpl, '{$_name}');?>\n";
|
||||
@@ -154,13 +158,21 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
|
||||
$output .= "}\n}\n";
|
||||
$output .= "/*/ {$_funcName}_nocache */\n\n";
|
||||
$output .= "?>\n";
|
||||
$compiler->parser->current_buffer->append_subtree($compiler->parser,
|
||||
new Smarty_Internal_ParseTree_Tag($compiler->parser,
|
||||
$output));
|
||||
$_functionCode = new Smarty_Internal_ParseTree_Tag($compiler->parser,
|
||||
preg_replace_callback("/((<\?php )?echo '\/\*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%\*\/([\S\s]*?)\/\*\/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%\*\/';(\?>\n)?)/",
|
||||
$compiler->parser->current_buffer->append_subtree(
|
||||
$compiler->parser,
|
||||
new Smarty_Internal_ParseTree_Tag(
|
||||
$compiler->parser,
|
||||
$output
|
||||
)
|
||||
);
|
||||
$_functionCode = new Smarty_Internal_ParseTree_Tag(
|
||||
$compiler->parser,
|
||||
preg_replace_callback(
|
||||
"/((<\?php )?echo '\/\*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%\*\/([\S\s]*?)\/\*\/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%\*\/';(\?>\n)?)/",
|
||||
array($this, 'removeNocache'),
|
||||
$_functionCode->to_smarty_php($compiler->parser)));
|
||||
$_functionCode->to_smarty_php($compiler->parser)
|
||||
)
|
||||
);
|
||||
}
|
||||
$compiler->parent_compiler->tpl_function[ $_name ][ 'call_name' ] = $_funcName;
|
||||
$output = "<?php\n";
|
||||
@@ -171,16 +183,24 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
|
||||
$output .= "foreach (\$params as \$key => \$value) {\n\$_smarty_tpl->tpl_vars[\$key] = new Smarty_Variable(\$value, \$_smarty_tpl->isRenderingCache);\n}\n";
|
||||
$output .= $compiler->compileCheckPlugins(array_merge($compiler->required_plugins[ 'compiled' ], $compiler->required_plugins[ 'nocache' ]));
|
||||
$output .= "?>\n";
|
||||
$compiler->parser->current_buffer->append_subtree($compiler->parser,
|
||||
new Smarty_Internal_ParseTree_Tag($compiler->parser,
|
||||
$output));
|
||||
$compiler->parser->current_buffer->append_subtree(
|
||||
$compiler->parser,
|
||||
new Smarty_Internal_ParseTree_Tag(
|
||||
$compiler->parser,
|
||||
$output
|
||||
)
|
||||
);
|
||||
$compiler->parser->current_buffer->append_subtree($compiler->parser, $_functionCode);
|
||||
$output = "<?php\n}}\n";
|
||||
$output .= "/*/ {$_funcName} */\n\n";
|
||||
$output .= "?>\n";
|
||||
$compiler->parser->current_buffer->append_subtree($compiler->parser,
|
||||
new Smarty_Internal_ParseTree_Tag($compiler->parser,
|
||||
$output));
|
||||
$compiler->parser->current_buffer->append_subtree(
|
||||
$compiler->parser,
|
||||
new Smarty_Internal_ParseTree_Tag(
|
||||
$compiler->parser,
|
||||
$output
|
||||
)
|
||||
);
|
||||
$compiler->parent_compiler->blockOrFunctionCode .= $compiler->parser->current_buffer->to_smarty_php($compiler->parser);
|
||||
// restore old buffer
|
||||
$compiler->parser->current_buffer = $saved_data[ 1 ];
|
||||
@@ -201,8 +221,10 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
|
||||
function removeNocache($match)
|
||||
{
|
||||
$code =
|
||||
preg_replace("/((<\?php )?echo '\/\*%%SmartyNocache:{$this->compiler->template->compiled->nocache_hash}%%\*\/)|(\/\*\/%%SmartyNocache:{$this->compiler->template->compiled->nocache_hash}%%\*\/';(\?>\n)?)/",
|
||||
'', $match[ 0 ]);
|
||||
preg_replace(
|
||||
"/((<\?php )?echo '\/\*%%SmartyNocache:{$this->compiler->template->compiled->nocache_hash}%%\*\/)|(\/\*\/%%SmartyNocache:{$this->compiler->template->compiled->nocache_hash}%%\*\/';(\?>\n)?)/",
|
||||
'', $match[ 0 ]
|
||||
);
|
||||
$code = str_replace(array('\\\'', '\\\\\''), array('\'', '\\\''), $code);
|
||||
return $code;
|
||||
}
|
||||
|
@@ -55,8 +55,10 @@ class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase
|
||||
$assignCompiler = new Smarty_Internal_Compile_Assign();
|
||||
if (is_array($parameter[ 'if condition' ][ 'var' ])) {
|
||||
$assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
|
||||
$_output .= $assignCompiler->compile($assignAttr, $compiler,
|
||||
array('smarty_internal_index' => $parameter[ 'if condition' ][ 'var' ][ 'smarty_internal_index' ]));
|
||||
$_output .= $assignCompiler->compile(
|
||||
$assignAttr, $compiler,
|
||||
array('smarty_internal_index' => $parameter[ 'if condition' ][ 'var' ][ 'smarty_internal_index' ])
|
||||
);
|
||||
} else {
|
||||
$assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ];
|
||||
$_output .= $assignCompiler->compile($assignAttr, $compiler, array());
|
||||
@@ -143,8 +145,10 @@ class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase
|
||||
$assignAttr[][ 'value' ] = $prefixVar;
|
||||
if (is_array($parameter[ 'if condition' ][ 'var' ])) {
|
||||
$assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
|
||||
$assignCode .= $assignCompiler->compile($assignAttr, $compiler,
|
||||
array('smarty_internal_index' => $parameter[ 'if condition' ][ 'var' ][ 'smarty_internal_index' ]));
|
||||
$assignCode .= $assignCompiler->compile(
|
||||
$assignAttr, $compiler,
|
||||
array('smarty_internal_index' => $parameter[ 'if condition' ][ 'var' ][ 'smarty_internal_index' ])
|
||||
);
|
||||
} else {
|
||||
$assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ];
|
||||
$assignCode .= $assignCompiler->compile($assignAttr, $compiler, array());
|
||||
|
@@ -91,8 +91,7 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
|
||||
$compiled->includes[ $fullResourceName ]++;
|
||||
$cache_tpl = true;
|
||||
} else {
|
||||
if ("{$compiler->template->source->type}:{$compiler->template->source->name}" ==
|
||||
$fullResourceName
|
||||
if ("{$compiler->template->source->type}:{$compiler->template->source->name}" == $fullResourceName
|
||||
) {
|
||||
// recursive call of current template
|
||||
$compiled->includes[ $fullResourceName ] = 2;
|
||||
@@ -193,9 +192,11 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
|
||||
$t_hash = sha1($c_id . ($_caching ? '--caching' : '--nocaching'));
|
||||
$compiler->smarty->allow_ambiguous_resources = true;
|
||||
/* @var Smarty_Internal_Template $tpl */
|
||||
$tpl = new $compiler->smarty->template_class (trim($fullResourceName, '"\''), $compiler->smarty,
|
||||
$tpl = new $compiler->smarty->template_class(
|
||||
trim($fullResourceName, '"\''), $compiler->smarty,
|
||||
$compiler->template, $compiler->template->cache_id, $c_id,
|
||||
$_caching);
|
||||
$_caching
|
||||
);
|
||||
$uid = $tpl->source->type . $tpl->source->uid;
|
||||
if (!isset($compiler->parent_compiler->mergedSubTemplatesData[ $uid ][ $t_hash ])) {
|
||||
$has_compiled_template = $this->compileInlineTemplate($compiler, $tpl, $t_hash);
|
||||
@@ -277,8 +278,8 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
|
||||
*/
|
||||
public function compileInlineTemplate(Smarty_Internal_SmartyTemplateCompiler $compiler,
|
||||
Smarty_Internal_Template $tpl,
|
||||
$t_hash)
|
||||
{
|
||||
$t_hash
|
||||
) {
|
||||
$uid = $tpl->source->type . $tpl->source->uid;
|
||||
if (!($tpl->source->handler->uncompiled) && $tpl->source->exists) {
|
||||
$compiler->parent_compiler->mergedSubTemplatesData[ $uid ][ $t_hash ][ 'uid' ] = $tpl->source->uid;
|
||||
@@ -317,9 +318,11 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
|
||||
if ($tpl->compiled->has_nocache_code) {
|
||||
// replace nocache_hash
|
||||
$compiled_code =
|
||||
str_replace("{$tpl->compiled->nocache_hash}",
|
||||
str_replace(
|
||||
"{$tpl->compiled->nocache_hash}",
|
||||
$compiler->template->compiled->nocache_hash,
|
||||
$compiled_code);
|
||||
$compiled_code
|
||||
);
|
||||
$compiler->template->compiled->has_nocache_code = true;
|
||||
}
|
||||
$compiler->parent_compiler->mergedSubTemplatesCode[ $tpl->compiled->unifunc ] = $compiled_code;
|
||||
|
@@ -56,7 +56,10 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase
|
||||
}
|
||||
// check and get attributes
|
||||
$_attr = $this->getAttributes($compiler, $args);
|
||||
/** @var Smarty_Internal_Template $_smarty_tpl
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @var Smarty_Internal_Template $_smarty_tpl
|
||||
* used in evaluated code
|
||||
*/
|
||||
$_smarty_tpl = $compiler->template;
|
||||
|
@@ -104,11 +104,13 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase
|
||||
}
|
||||
// code for script file loading
|
||||
$_output .= "require_once '{$_filepath}' ;";
|
||||
require_once $_filepath;
|
||||
include_once $_filepath;
|
||||
if (!is_callable($_function)) {
|
||||
$compiler->trigger_template_error(" {insert} function '{$_function}' is not callable in script file '{$_script}'",
|
||||
$compiler->trigger_template_error(
|
||||
" {insert} function '{$_function}' is not callable in script file '{$_script}'",
|
||||
null,
|
||||
true);
|
||||
true
|
||||
);
|
||||
}
|
||||
} else {
|
||||
$_filepath = 'null';
|
||||
@@ -117,9 +119,11 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase
|
||||
if (!is_callable($_function)) {
|
||||
// try plugin
|
||||
if (!$_function = $compiler->getPlugin($_name, 'insert')) {
|
||||
$compiler->trigger_template_error("{insert} no function or plugin found for '{$_name}'",
|
||||
$compiler->trigger_template_error(
|
||||
"{insert} no function or plugin found for '{$_name}'",
|
||||
null,
|
||||
true);
|
||||
true
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -84,9 +84,11 @@ class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_Compi
|
||||
$mod_content2 = "\$_block_content{$this->nesting}";
|
||||
$mod_content = "\$_block_content{$this->nesting} = ob_get_clean();\n";
|
||||
$mod_pre = "ob_start();\n";
|
||||
$mod_post = 'echo ' . $compiler->compileTag('private_modifier', array(),
|
||||
$mod_post = 'echo ' . $compiler->compileTag(
|
||||
'private_modifier', array(),
|
||||
array('modifierlist' => $parameter[ 'modifier_list' ],
|
||||
'value' => 'ob_get_clean()')) . ";\n";
|
||||
'value' => 'ob_get_clean()')
|
||||
) . ";\n";
|
||||
}
|
||||
$output = "<?php {$mod_content}\$_block_repeat=false;\n{$mod_pre}echo {$callback}({$_params}, {$mod_content2}, \$_smarty_tpl, \$_block_repeat);\n{$mod_post}}\n";
|
||||
$output .= 'array_pop($_smarty_tpl->smarty->_cache[\'_tag_stack\']);?>';
|
||||
|
@@ -178,11 +178,13 @@ class Smarty_Internal_Compile_Private_ForeachSection extends Smarty_Internal_Com
|
||||
$_content = $nextCompiler->template->source->getContent();
|
||||
if ($_content !== '') {
|
||||
// run pre filter if required
|
||||
if ((isset($nextCompiler->smarty->autoload_filters[ 'pre' ]) ||
|
||||
isset($nextCompiler->smarty->registered_filters[ 'pre' ]))
|
||||
if ((isset($nextCompiler->smarty->autoload_filters[ 'pre' ])
|
||||
|| isset($nextCompiler->smarty->registered_filters[ 'pre' ]))
|
||||
) {
|
||||
$_content = $nextCompiler->smarty->ext->_filterHandler->runFilter('pre', $_content,
|
||||
$nextCompiler->template);
|
||||
$_content = $nextCompiler->smarty->ext->_filterHandler->runFilter(
|
||||
'pre', $_content,
|
||||
$nextCompiler->template
|
||||
);
|
||||
}
|
||||
$this->matchProperty($_content);
|
||||
}
|
||||
|
@@ -64,9 +64,11 @@ class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_Co
|
||||
// compile code
|
||||
$output = "{$function}({$_params},\$_smarty_tpl)";
|
||||
if (!empty($parameter[ 'modifierlist' ])) {
|
||||
$output = $compiler->compileTag('private_modifier', array(),
|
||||
$output = $compiler->compileTag(
|
||||
'private_modifier', array(),
|
||||
array('modifierlist' => $parameter[ 'modifierlist' ],
|
||||
'value' => $output));
|
||||
'value' => $output)
|
||||
);
|
||||
}
|
||||
$output = "<?php echo {$output};?>\n";
|
||||
return $output;
|
||||
|
@@ -52,8 +52,10 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa
|
||||
if (isset($compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIER ][ $modifier ])) {
|
||||
if (is_callable($compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIER ][ $modifier ][ 0 ])) {
|
||||
$output =
|
||||
sprintf('call_user_func_array($_smarty_tpl->registered_plugins[ \'%s\' ][ %s ][ 0 ], array( %s ))',
|
||||
Smarty::PLUGIN_MODIFIER, var_export($modifier, true), $params);
|
||||
sprintf(
|
||||
'call_user_func_array($_smarty_tpl->registered_plugins[ \'%s\' ][ %s ][ 0 ], array( %s ))',
|
||||
Smarty::PLUGIN_MODIFIER, var_export($modifier, true), $params
|
||||
);
|
||||
$compiler->known_modifier_type[ $modifier ] = $type;
|
||||
break 2;
|
||||
}
|
||||
@@ -63,8 +65,10 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa
|
||||
// registered modifier compiler
|
||||
if (isset($compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIERCOMPILER ][ $modifier ][ 0 ])) {
|
||||
$output =
|
||||
call_user_func($compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIERCOMPILER ][ $modifier ][ 0 ],
|
||||
$single_modifier, $compiler->smarty);
|
||||
call_user_func(
|
||||
$compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIERCOMPILER ][ $modifier ][ 0 ],
|
||||
$single_modifier, $compiler->smarty
|
||||
);
|
||||
$compiler->known_modifier_type[ $modifier ] = $type;
|
||||
break 2;
|
||||
}
|
||||
@@ -73,8 +77,8 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa
|
||||
// modifiercompiler plugin
|
||||
if ($compiler->smarty->loadPlugin('smarty_modifiercompiler_' . $modifier)) {
|
||||
// check if modifier allowed
|
||||
if (!is_object($compiler->smarty->security_policy) ||
|
||||
$compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)
|
||||
if (!is_object($compiler->smarty->security_policy)
|
||||
|| $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)
|
||||
) {
|
||||
$plugin = 'smarty_modifiercompiler_' . $modifier;
|
||||
$output = $plugin($single_modifier, $compiler);
|
||||
@@ -87,8 +91,8 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa
|
||||
// modifier plugin
|
||||
if ($function = $compiler->getPlugin($modifier, Smarty::PLUGIN_MODIFIER)) {
|
||||
// check if modifier allowed
|
||||
if (!is_object($compiler->smarty->security_policy) ||
|
||||
$compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)
|
||||
if (!is_object($compiler->smarty->security_policy)
|
||||
|| $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)
|
||||
) {
|
||||
$output = "{$function}({$params})";
|
||||
}
|
||||
@@ -100,8 +104,8 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa
|
||||
// PHP function
|
||||
if (is_callable($modifier)) {
|
||||
// check if modifier allowed
|
||||
if (!is_object($compiler->smarty->security_policy) ||
|
||||
$compiler->smarty->security_policy->isTrustedPhpModifier($modifier, $compiler)
|
||||
if (!is_object($compiler->smarty->security_policy)
|
||||
|| $compiler->smarty->security_policy->isTrustedPhpModifier($modifier, $compiler)
|
||||
) {
|
||||
$output = "{$modifier}({$params})";
|
||||
}
|
||||
@@ -111,14 +115,14 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa
|
||||
break;
|
||||
case 6:
|
||||
// default plugin handler
|
||||
if (isset($compiler->default_handler_plugins[ Smarty::PLUGIN_MODIFIER ][ $modifier ]) ||
|
||||
(is_callable($compiler->smarty->default_plugin_handler_func) &&
|
||||
$compiler->getPluginFromDefaultHandler($modifier, Smarty::PLUGIN_MODIFIER))
|
||||
if (isset($compiler->default_handler_plugins[ Smarty::PLUGIN_MODIFIER ][ $modifier ])
|
||||
|| (is_callable($compiler->smarty->default_plugin_handler_func)
|
||||
&& $compiler->getPluginFromDefaultHandler($modifier, Smarty::PLUGIN_MODIFIER))
|
||||
) {
|
||||
$function = $compiler->default_handler_plugins[ Smarty::PLUGIN_MODIFIER ][ $modifier ][ 0 ];
|
||||
// check if modifier allowed
|
||||
if (!is_object($compiler->smarty->security_policy) ||
|
||||
$compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)
|
||||
if (!is_object($compiler->smarty->security_policy)
|
||||
|| $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)
|
||||
) {
|
||||
if (!is_array($function)) {
|
||||
$output = "{$function}({$params})";
|
||||
@@ -130,8 +134,8 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isset($compiler->required_plugins[ 'nocache' ][ $modifier ][ Smarty::PLUGIN_MODIFIER ][ 'file' ]) ||
|
||||
isset($compiler->required_plugins[ 'compiled' ][ $modifier ][ Smarty::PLUGIN_MODIFIER ][ 'file' ])
|
||||
if (isset($compiler->required_plugins[ 'nocache' ][ $modifier ][ Smarty::PLUGIN_MODIFIER ][ 'file' ])
|
||||
|| isset($compiler->required_plugins[ 'compiled' ][ $modifier ][ Smarty::PLUGIN_MODIFIER ][ 'file' ])
|
||||
) {
|
||||
// was a plugin
|
||||
$compiler->known_modifier_type[ $modifier ] = 4;
|
||||
|
@@ -70,8 +70,10 @@ class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_Co
|
||||
$output = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}";
|
||||
}
|
||||
if (!empty($parameter[ 'modifierlist' ])) {
|
||||
$output = $compiler->compileTag('private_modifier', array(),
|
||||
array('modifierlist' => $parameter[ 'modifierlist' ], 'value' => $output));
|
||||
$output = $compiler->compileTag(
|
||||
'private_modifier', array(),
|
||||
array('modifierlist' => $parameter[ 'modifierlist' ], 'value' => $output)
|
||||
);
|
||||
}
|
||||
if (empty($_assign)) {
|
||||
return "<?php echo {$output};?>\n";
|
||||
|
@@ -43,10 +43,16 @@ class Smarty_Internal_Compile_Private_Php extends Smarty_Internal_CompileBase
|
||||
if ($_attr[ 'type' ] === 'xml') {
|
||||
$compiler->tag_nocache = true;
|
||||
$output = addcslashes($_attr[ 'code' ], "'\\");
|
||||
$compiler->parser->current_buffer->append_subtree($compiler->parser,
|
||||
new Smarty_Internal_ParseTree_Tag($compiler->parser,
|
||||
$compiler->processNocacheCode("<?php echo '{$output}';?>",
|
||||
true)));
|
||||
$compiler->parser->current_buffer->append_subtree(
|
||||
$compiler->parser,
|
||||
new Smarty_Internal_ParseTree_Tag(
|
||||
$compiler->parser,
|
||||
$compiler->processNocacheCode(
|
||||
"<?php echo '{$output}';?>",
|
||||
true
|
||||
)
|
||||
)
|
||||
);
|
||||
return '';
|
||||
}
|
||||
if ($_attr[ 'type' ] !== 'tag') {
|
||||
@@ -54,23 +60,35 @@ class Smarty_Internal_Compile_Private_Php extends Smarty_Internal_CompileBase
|
||||
return '';
|
||||
} elseif ($compiler->php_handling === Smarty::PHP_QUOTE) {
|
||||
$output =
|
||||
preg_replace_callback('#(<\?(?:php|=)?)|(<%)|(<script\s+language\s*=\s*["\']?\s*php\s*["\']?\s*>)|(\?>)|(%>)|(<\/script>)#i',
|
||||
array($this, 'quote'), $_attr[ 'code' ]);
|
||||
$compiler->parser->current_buffer->append_subtree($compiler->parser,
|
||||
new Smarty_Internal_ParseTree_Text($output));
|
||||
preg_replace_callback(
|
||||
'#(<\?(?:php|=)?)|(<%)|(<script\s+language\s*=\s*["\']?\s*php\s*["\']?\s*>)|(\?>)|(%>)|(<\/script>)#i',
|
||||
array($this, 'quote'), $_attr[ 'code' ]
|
||||
);
|
||||
$compiler->parser->current_buffer->append_subtree(
|
||||
$compiler->parser,
|
||||
new Smarty_Internal_ParseTree_Text($output)
|
||||
);
|
||||
return '';
|
||||
} elseif ($compiler->php_handling === Smarty::PHP_PASSTHRU || $_attr[ 'type' ] === 'unmatched') {
|
||||
$compiler->tag_nocache = true;
|
||||
$output = addcslashes($_attr[ 'code' ], "'\\");
|
||||
$compiler->parser->current_buffer->append_subtree($compiler->parser,
|
||||
new Smarty_Internal_ParseTree_Tag($compiler->parser,
|
||||
$compiler->processNocacheCode("<?php echo '{$output}';?>",
|
||||
true)));
|
||||
$compiler->parser->current_buffer->append_subtree(
|
||||
$compiler->parser,
|
||||
new Smarty_Internal_ParseTree_Tag(
|
||||
$compiler->parser,
|
||||
$compiler->processNocacheCode(
|
||||
"<?php echo '{$output}';?>",
|
||||
true
|
||||
)
|
||||
)
|
||||
);
|
||||
return '';
|
||||
} elseif ($compiler->php_handling === Smarty::PHP_ALLOW) {
|
||||
if (!($compiler->smarty instanceof SmartyBC)) {
|
||||
$compiler->trigger_template_error('$smarty->php_handling PHP_ALLOW not allowed. Use SmartyBC to enable it',
|
||||
null, true);
|
||||
$compiler->trigger_template_error(
|
||||
'$smarty->php_handling PHP_ALLOW not allowed. Use SmartyBC to enable it',
|
||||
null, true
|
||||
);
|
||||
}
|
||||
$compiler->has_code = true;
|
||||
return $_attr[ 'code' ];
|
||||
@@ -80,8 +98,10 @@ class Smarty_Internal_Compile_Private_Php extends Smarty_Internal_CompileBase
|
||||
} else {
|
||||
$compiler->has_code = true;
|
||||
if (!($compiler->smarty instanceof SmartyBC)) {
|
||||
$compiler->trigger_template_error('{php}{/php} tags not allowed. Use SmartyBC to enable them', null,
|
||||
true);
|
||||
$compiler->trigger_template_error(
|
||||
'{php}{/php} tags not allowed. Use SmartyBC to enable them', null,
|
||||
true
|
||||
);
|
||||
}
|
||||
$ldel = preg_quote($compiler->smarty->left_delimiter, '#');
|
||||
$rdel = preg_quote($compiler->smarty->right_delimiter, '#');
|
||||
@@ -93,8 +113,10 @@ class Smarty_Internal_Compile_Private_Php extends Smarty_Internal_CompileBase
|
||||
$compiler->trigger_template_error("illegal value of option flag '{$match[2]}'", null, true);
|
||||
}
|
||||
}
|
||||
return preg_replace(array("#^{$ldel}\\s*php\\s*(.)*?{$rdel}#", "#{$ldel}\\s*/\\s*php\\s*{$rdel}$#"),
|
||||
array('<?php ', '?>'), $_attr[ 'code' ]);
|
||||
return preg_replace(
|
||||
array("#^{$ldel}\\s*php\\s*(.)*?{$rdel}#", "#{$ldel}\\s*/\\s*php\\s*{$rdel}$#"),
|
||||
array('<?php ', '?>'), $_attr[ 'code' ]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -148,8 +170,8 @@ class Smarty_Internal_Compile_Private_Php extends Smarty_Internal_CompileBase
|
||||
if ($lex->phpType === 'unmatched') {
|
||||
return;
|
||||
}
|
||||
if (($lex->phpType === 'php' || $lex->phpType === 'asp') &&
|
||||
($lex->compiler->php_handling === Smarty::PHP_PASSTHRU || $lex->compiler->php_handling === Smarty::PHP_QUOTE)
|
||||
if (($lex->phpType === 'php' || $lex->phpType === 'asp')
|
||||
&& ($lex->compiler->php_handling === Smarty::PHP_PASSTHRU || $lex->compiler->php_handling === Smarty::PHP_QUOTE)
|
||||
) {
|
||||
return;
|
||||
}
|
||||
@@ -161,8 +183,11 @@ class Smarty_Internal_Compile_Private_Php extends Smarty_Internal_CompileBase
|
||||
$lex->compiler->trigger_template_error("missing closing tag '{$closeTag}'");
|
||||
}
|
||||
while ($body) {
|
||||
if (preg_match('~([/][*])|([/][/][^\n]*)|(\'[^\'\\\\]*(?:\\.[^\'\\\\]*)*\')|("[^"\\\\]*(?:\\.[^"\\\\]*)*")~',
|
||||
$lex->data, $match, PREG_OFFSET_CAPTURE, $start)) {
|
||||
if (preg_match(
|
||||
'~([/][*])|([/][/][^\n]*)|(\'[^\'\\\\]*(?:\\.[^\'\\\\]*)*\')|("[^"\\\\]*(?:\\.[^"\\\\]*)*")~',
|
||||
$lex->data, $match, PREG_OFFSET_CAPTURE, $start
|
||||
)
|
||||
) {
|
||||
$value = $match[ 0 ][ 0 ];
|
||||
$from = $pos = $match[ 0 ][ 1 ];
|
||||
if ($pos > $close) {
|
||||
@@ -178,8 +203,11 @@ class Smarty_Internal_Compile_Private_Php extends Smarty_Internal_CompileBase
|
||||
}
|
||||
}
|
||||
while ($close > $pos && $close < $start) {
|
||||
if (preg_match('~' . preg_quote($closeTag, '~') . '~i', $lex->data, $match, PREG_OFFSET_CAPTURE,
|
||||
$from)) {
|
||||
if (preg_match(
|
||||
'~' . preg_quote($closeTag, '~') . '~i', $lex->data, $match, PREG_OFFSET_CAPTURE,
|
||||
$from
|
||||
)
|
||||
) {
|
||||
$close = $match[ 0 ][ 1 ];
|
||||
$from = $close + strlen($match[ 0 ][ 0 ]);
|
||||
} else {
|
||||
|
@@ -49,9 +49,11 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
|
||||
$output = $parameter[ 'value' ];
|
||||
// tag modifier
|
||||
if (!empty($parameter[ 'modifierlist' ])) {
|
||||
$output = $compiler->compileTag('private_modifier', array(),
|
||||
$output = $compiler->compileTag(
|
||||
'private_modifier', array(),
|
||||
array('modifierlist' => $parameter[ 'modifierlist' ],
|
||||
'value' => $output));
|
||||
'value' => $output)
|
||||
);
|
||||
}
|
||||
if (isset($_attr[ 'assign' ])) {
|
||||
// assign output to variable
|
||||
@@ -64,8 +66,10 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
|
||||
if (empty($compiler->default_modifier_list)) {
|
||||
$modifierlist = array();
|
||||
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 ++) {
|
||||
if ($mod_array[ 0 ][ $i ] !== ':') {
|
||||
$modifierlist[ $key ][] = $mod_array[ 0 ][ $i ];
|
||||
@@ -74,9 +78,11 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
|
||||
}
|
||||
$compiler->default_modifier_list = $modifierlist;
|
||||
}
|
||||
$output = $compiler->compileTag('private_modifier', array(),
|
||||
$output = $compiler->compileTag(
|
||||
'private_modifier', array(),
|
||||
array('modifierlist' => $compiler->default_modifier_list,
|
||||
'value' => $output));
|
||||
'value' => $output)
|
||||
);
|
||||
}
|
||||
// autoescape html
|
||||
if ($compiler->template->smarty->escape_html) {
|
||||
@@ -110,13 +116,15 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
|
||||
}
|
||||
}
|
||||
foreach ($compiler->variable_filters as $filter) {
|
||||
if (count($filter) === 1 &&
|
||||
($result = $this->compile_variable_filter($compiler, $filter[ 0 ], $output)) !== false
|
||||
if (count($filter) === 1
|
||||
&& ($result = $this->compile_variable_filter($compiler, $filter[ 0 ], $output)) !== false
|
||||
) {
|
||||
$output = $result;
|
||||
} else {
|
||||
$output = $compiler->compileTag('private_modifier', array(),
|
||||
array('modifierlist' => array($filter), 'value' => $output));
|
||||
$output = $compiler->compileTag(
|
||||
'private_modifier', array(),
|
||||
array('modifierlist' => array($filter), 'value' => $output)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -76,9 +76,11 @@ class Smarty_Internal_Compile_Private_Registered_Function extends Smarty_Interna
|
||||
}
|
||||
}
|
||||
if (!empty($parameter[ 'modifierlist' ])) {
|
||||
$output = $compiler->compileTag('private_modifier', array(),
|
||||
$output = $compiler->compileTag(
|
||||
'private_modifier', array(),
|
||||
array('modifierlist' => $parameter[ 'modifierlist' ],
|
||||
'value' => $output));
|
||||
'value' => $output)
|
||||
);
|
||||
}
|
||||
$output = "<?php echo {$output};?>\n";
|
||||
return $output;
|
||||
|
@@ -33,8 +33,8 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C
|
||||
if ($variable === false) {
|
||||
$compiler->trigger_template_error("special \$Smarty variable name index can not be variable", null, true);
|
||||
}
|
||||
if (!isset($compiler->smarty->security_policy) ||
|
||||
$compiler->smarty->security_policy->isTrustedSpecialSmartyVar($variable, $compiler)
|
||||
if (!isset($compiler->smarty->security_policy)
|
||||
|| $compiler->smarty->security_policy->isTrustedSpecialSmartyVar($variable, $compiler)
|
||||
) {
|
||||
switch ($variable) {
|
||||
case 'foreach':
|
||||
@@ -52,8 +52,8 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C
|
||||
case 'now':
|
||||
return 'time()';
|
||||
case 'cookies':
|
||||
if (isset($compiler->smarty->security_policy) &&
|
||||
!$compiler->smarty->security_policy->allow_super_globals
|
||||
if (isset($compiler->smarty->security_policy)
|
||||
&& !$compiler->smarty->security_policy->allow_super_globals
|
||||
) {
|
||||
$compiler->trigger_template_error("(secure mode) super globals not permitted");
|
||||
break;
|
||||
@@ -66,8 +66,8 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C
|
||||
case 'server':
|
||||
case 'session':
|
||||
case 'request':
|
||||
if (isset($compiler->smarty->security_policy) &&
|
||||
!$compiler->smarty->security_policy->allow_super_globals
|
||||
if (isset($compiler->smarty->security_policy)
|
||||
&& !$compiler->smarty->security_policy->allow_super_globals
|
||||
) {
|
||||
$compiler->trigger_template_error("(secure mode) super globals not permitted");
|
||||
break;
|
||||
@@ -88,8 +88,8 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C
|
||||
return "Smarty::SMARTY_VERSION";
|
||||
|
||||
case 'const':
|
||||
if (isset($compiler->smarty->security_policy) &&
|
||||
!$compiler->smarty->security_policy->allow_constants
|
||||
if (isset($compiler->smarty->security_policy)
|
||||
&& !$compiler->smarty->security_policy->allow_constants
|
||||
) {
|
||||
$compiler->trigger_template_error("(secure mode) constants not permitted");
|
||||
break;
|
||||
|
@@ -264,8 +264,10 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_Compile_Private_Fo
|
||||
$start_code[ $i ] = '';
|
||||
}
|
||||
if ($propType[ 'start' ] === 0) {
|
||||
$start_code = array(max($propValue[ 'step' ] > 0 ? 0 : - 1,
|
||||
$propValue[ 'start' ] + $propValue[ 'loop' ]));
|
||||
$start_code = array(max(
|
||||
$propValue[ 'step' ] > 0 ? 0 : - 1,
|
||||
$propValue[ 'start' ] + $propValue[ 'loop' ]
|
||||
));
|
||||
}
|
||||
} else {
|
||||
for ($i = 1; $i <= 11; $i ++) {
|
||||
@@ -273,8 +275,10 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_Compile_Private_Fo
|
||||
}
|
||||
if ($propType[ 'start' ] === 0) {
|
||||
$start_code =
|
||||
array(min($propValue[ 'step' ] > 0 ? $propValue[ 'loop' ] : $propValue[ 'loop' ] - 1,
|
||||
$propValue[ 'start' ]));
|
||||
array(min(
|
||||
$propValue[ 'step' ] > 0 ? $propValue[ 'loop' ] : $propValue[ 'loop' ] - 1,
|
||||
$propValue[ 'start' ]
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -295,8 +299,12 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_Compile_Private_Fo
|
||||
$propType[ 'start' ] + $propType[ 'loop' ] + $propType[ 'step' ] + $propType[ 'max' ];
|
||||
if ($propType[ 'total' ] === 0) {
|
||||
$propValue[ 'total' ] =
|
||||
min(ceil(($propValue[ 'step' ] > 0 ? $propValue[ 'loop' ] - $propValue[ 'start' ] :
|
||||
(int) $propValue[ 'start' ] + 1) / abs($propValue[ 'step' ])), $propValue[ 'max' ]);
|
||||
min(
|
||||
ceil(
|
||||
($propValue[ 'step' ] > 0 ? $propValue[ 'loop' ] - $propValue[ 'start' ] :
|
||||
(int) $propValue[ 'start' ] + 1) / abs($propValue[ 'step' ])
|
||||
), $propValue[ 'max' ]
|
||||
);
|
||||
} else {
|
||||
$total_code = array(1 => 'min(', 2 => 'ceil(', 3 => '(', 4 => "{$propValue['step']} > 0 ? ",
|
||||
5 => $propValue[ 'loop' ], 6 => ' - ', 7 => $propValue[ 'start' ], 8 => ' : ',
|
||||
|
@@ -37,10 +37,12 @@ class Smarty_Internal_Compile_Shared_Inheritance extends Smarty_Internal_Compile
|
||||
public function registerInit(Smarty_Internal_TemplateCompilerBase $compiler, $initChildSequence = false)
|
||||
{
|
||||
if ($initChildSequence || !isset($compiler->_cache['inheritanceInit'])) {
|
||||
$compiler->registerPostCompileCallback(array('Smarty_Internal_Compile_Shared_Inheritance', 'postCompile'),
|
||||
$compiler->registerPostCompileCallback(
|
||||
array('Smarty_Internal_Compile_Shared_Inheritance', 'postCompile'),
|
||||
array($initChildSequence),
|
||||
'inheritanceInit',
|
||||
$initChildSequence);
|
||||
$initChildSequence
|
||||
);
|
||||
|
||||
$compiler->_cache['inheritanceInit'] = true;
|
||||
}
|
||||
|
@@ -56,8 +56,10 @@ class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase
|
||||
if (is_array($parameter[ 'if condition' ][ 'var' ])) {
|
||||
$assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
|
||||
$_output = "<?php while ({$prefixVar} = {$parameter[ 'if condition' ][ 'value' ]}) {?>";
|
||||
$_output .= $assignCompiler->compile($assignAttr, $compiler,
|
||||
array('smarty_internal_index' => $parameter[ 'if condition' ][ 'var' ][ 'smarty_internal_index' ]));
|
||||
$_output .= $assignCompiler->compile(
|
||||
$assignAttr, $compiler,
|
||||
array('smarty_internal_index' => $parameter[ 'if condition' ][ 'var' ][ 'smarty_internal_index' ])
|
||||
);
|
||||
} else {
|
||||
$assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ];
|
||||
$_output = "<?php while ({$prefixVar} = {$parameter[ 'if condition' ][ 'value' ]}) {?>";
|
||||
|
@@ -103,8 +103,10 @@ abstract class Smarty_Internal_CompileBase
|
||||
if (isset($this->optionMap[ $v ])) {
|
||||
$_indexed_attr[ $k ] = $this->optionMap[ $v ];
|
||||
} else {
|
||||
$compiler->trigger_template_error("illegal value '" . var_export($v, true) .
|
||||
"' for option flag '{$k}'", null, true);
|
||||
$compiler->trigger_template_error(
|
||||
"illegal value '" . var_export($v, true) .
|
||||
"' for option flag '{$k}'", null, true
|
||||
);
|
||||
}
|
||||
}
|
||||
// must be named attribute
|
||||
@@ -124,8 +126,12 @@ abstract class Smarty_Internal_CompileBase
|
||||
if ($this->optional_attributes !== array('_any')) {
|
||||
if (!isset($this->mapCache[ 'all' ])) {
|
||||
$this->mapCache[ 'all' ] =
|
||||
array_fill_keys(array_merge($this->required_attributes, $this->optional_attributes,
|
||||
$this->option_flags), true);
|
||||
array_fill_keys(
|
||||
array_merge(
|
||||
$this->required_attributes, $this->optional_attributes,
|
||||
$this->option_flags
|
||||
), true
|
||||
);
|
||||
}
|
||||
foreach ($_indexed_attr as $key => $dummy) {
|
||||
if (!isset($this->mapCache[ 'all' ][ $key ]) && $key !== 0) {
|
||||
|
@@ -114,9 +114,13 @@ class Smarty_Internal_Config_File_Compiler
|
||||
}
|
||||
// init the lexer/parser to compile the config file
|
||||
/* @var Smarty_Internal_ConfigFileLexer $this ->lex */
|
||||
$this->lex = new $this->lexer_class(str_replace(array("\r\n",
|
||||
"\r"), "\n", $template->source->getContent()) . "\n",
|
||||
$this);
|
||||
$this->lex = new $this->lexer_class(
|
||||
str_replace(
|
||||
array("\r\n",
|
||||
"\r"), "\n", $template->source->getContent()
|
||||
) . "\n",
|
||||
$this
|
||||
);
|
||||
/* @var Smarty_Internal_ConfigFileParser $this ->parser */
|
||||
$this->parser = new $this->parser_class($this->lex, $this);
|
||||
|
||||
|
@@ -166,39 +166,47 @@ class Smarty_Internal_Configfilelexer
|
||||
public function yypushstate($state)
|
||||
{
|
||||
if ($this->yyTraceFILE) {
|
||||
fprintf($this->yyTraceFILE,
|
||||
fprintf(
|
||||
$this->yyTraceFILE,
|
||||
"%sState push %s\n",
|
||||
$this->yyTracePrompt,
|
||||
isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] :
|
||||
$this->_yy_state);
|
||||
$this->_yy_state
|
||||
);
|
||||
}
|
||||
array_push($this->_yy_stack, $this->_yy_state);
|
||||
$this->_yy_state = $state;
|
||||
if ($this->yyTraceFILE) {
|
||||
fprintf($this->yyTraceFILE,
|
||||
fprintf(
|
||||
$this->yyTraceFILE,
|
||||
"%snew State %s\n",
|
||||
$this->yyTracePrompt,
|
||||
isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] :
|
||||
$this->_yy_state);
|
||||
$this->_yy_state
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public function yypopstate()
|
||||
{
|
||||
if ($this->yyTraceFILE) {
|
||||
fprintf($this->yyTraceFILE,
|
||||
fprintf(
|
||||
$this->yyTraceFILE,
|
||||
"%sState pop %s\n",
|
||||
$this->yyTracePrompt,
|
||||
isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] :
|
||||
$this->_yy_state);
|
||||
$this->_yy_state
|
||||
);
|
||||
}
|
||||
$this->_yy_state = array_pop($this->_yy_stack);
|
||||
if ($this->yyTraceFILE) {
|
||||
fprintf($this->yyTraceFILE,
|
||||
fprintf(
|
||||
$this->yyTraceFILE,
|
||||
"%snew State %s\n",
|
||||
$this->yyTracePrompt,
|
||||
isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] :
|
||||
$this->_yy_state);
|
||||
$this->_yy_state
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -206,11 +214,13 @@ class Smarty_Internal_Configfilelexer
|
||||
{
|
||||
$this->_yy_state = $state;
|
||||
if ($this->yyTraceFILE) {
|
||||
fprintf($this->yyTraceFILE,
|
||||
fprintf(
|
||||
$this->yyTraceFILE,
|
||||
"%sState set %s\n",
|
||||
$this->yyTracePrompt,
|
||||
isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] :
|
||||
$this->_yy_state);
|
||||
$this->_yy_state
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -234,10 +244,14 @@ class Smarty_Internal_Configfilelexer
|
||||
$yymatches = array_filter($yymatches);
|
||||
}
|
||||
if (empty($yymatches)) {
|
||||
throw new Exception('Error: lexing failed because a rule matched' .
|
||||
' an empty string. Input "' . substr($this->data,
|
||||
throw new Exception(
|
||||
'Error: lexing failed because a rule matched' .
|
||||
' an empty string. Input "' . substr(
|
||||
$this->data,
|
||||
$this->counter,
|
||||
5) . '... state START');
|
||||
5
|
||||
) . '... state START'
|
||||
);
|
||||
}
|
||||
next($yymatches); // skip global match
|
||||
$this->token = key($yymatches); // token number
|
||||
@@ -262,8 +276,10 @@ class Smarty_Internal_Configfilelexer
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
throw new Exception('Unexpected input at line' . $this->line .
|
||||
': ' . $this->data[ $this->counter ]);
|
||||
throw new Exception(
|
||||
'Unexpected input at line' . $this->line .
|
||||
': ' . $this->data[ $this->counter ]
|
||||
);
|
||||
}
|
||||
break;
|
||||
} while (true);
|
||||
@@ -332,10 +348,14 @@ class Smarty_Internal_Configfilelexer
|
||||
$yymatches = array_filter($yymatches);
|
||||
}
|
||||
if (empty($yymatches)) {
|
||||
throw new Exception('Error: lexing failed because a rule matched' .
|
||||
' an empty string. Input "' . substr($this->data,
|
||||
throw new Exception(
|
||||
'Error: lexing failed because a rule matched' .
|
||||
' an empty string. Input "' . substr(
|
||||
$this->data,
|
||||
$this->counter,
|
||||
5) . '... state VALUE');
|
||||
5
|
||||
) . '... state VALUE'
|
||||
);
|
||||
}
|
||||
next($yymatches); // skip global match
|
||||
$this->token = key($yymatches); // token number
|
||||
@@ -360,8 +380,10 @@ class Smarty_Internal_Configfilelexer
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
throw new Exception('Unexpected input at line' . $this->line .
|
||||
': ' . $this->data[ $this->counter ]);
|
||||
throw new Exception(
|
||||
'Unexpected input at line' . $this->line .
|
||||
': ' . $this->data[ $this->counter ]
|
||||
);
|
||||
}
|
||||
break;
|
||||
} while (true);
|
||||
@@ -404,8 +426,9 @@ class Smarty_Internal_Configfilelexer
|
||||
|
||||
function yy_r2_7()
|
||||
{
|
||||
if (!$this->configBooleanize ||
|
||||
!in_array(strtolower($this->value), array('true', 'false', 'on', 'off', 'yes', 'no'))) {
|
||||
if (!$this->configBooleanize
|
||||
|| !in_array(strtolower($this->value), array('true', 'false', 'on', 'off', 'yes', 'no'))
|
||||
) {
|
||||
$this->yypopstate();
|
||||
$this->yypushstate(self::NAKED_STRING_VALUE);
|
||||
return true; //reprocess in new state
|
||||
@@ -447,10 +470,14 @@ class Smarty_Internal_Configfilelexer
|
||||
$yymatches = array_filter($yymatches);
|
||||
}
|
||||
if (empty($yymatches)) {
|
||||
throw new Exception('Error: lexing failed because a rule matched' .
|
||||
' an empty string. Input "' . substr($this->data,
|
||||
throw new Exception(
|
||||
'Error: lexing failed because a rule matched' .
|
||||
' an empty string. Input "' . substr(
|
||||
$this->data,
|
||||
$this->counter,
|
||||
5) . '... state NAKED_STRING_VALUE');
|
||||
5
|
||||
) . '... state NAKED_STRING_VALUE'
|
||||
);
|
||||
}
|
||||
next($yymatches); // skip global match
|
||||
$this->token = key($yymatches); // token number
|
||||
@@ -475,8 +502,10 @@ class Smarty_Internal_Configfilelexer
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
throw new Exception('Unexpected input at line' . $this->line .
|
||||
': ' . $this->data[ $this->counter ]);
|
||||
throw new Exception(
|
||||
'Unexpected input at line' . $this->line .
|
||||
': ' . $this->data[ $this->counter ]
|
||||
);
|
||||
}
|
||||
break;
|
||||
} while (true);
|
||||
@@ -507,10 +536,14 @@ class Smarty_Internal_Configfilelexer
|
||||
$yymatches = array_filter($yymatches);
|
||||
}
|
||||
if (empty($yymatches)) {
|
||||
throw new Exception('Error: lexing failed because a rule matched' .
|
||||
' an empty string. Input "' . substr($this->data,
|
||||
throw new Exception(
|
||||
'Error: lexing failed because a rule matched' .
|
||||
' an empty string. Input "' . substr(
|
||||
$this->data,
|
||||
$this->counter,
|
||||
5) . '... state COMMENT');
|
||||
5
|
||||
) . '... state COMMENT'
|
||||
);
|
||||
}
|
||||
next($yymatches); // skip global match
|
||||
$this->token = key($yymatches); // token number
|
||||
@@ -535,8 +568,10 @@ class Smarty_Internal_Configfilelexer
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
throw new Exception('Unexpected input at line' . $this->line .
|
||||
': ' . $this->data[ $this->counter ]);
|
||||
throw new Exception(
|
||||
'Unexpected input at line' . $this->line .
|
||||
': ' . $this->data[ $this->counter ]
|
||||
);
|
||||
}
|
||||
break;
|
||||
} while (true);
|
||||
@@ -577,10 +612,14 @@ class Smarty_Internal_Configfilelexer
|
||||
$yymatches = array_filter($yymatches);
|
||||
}
|
||||
if (empty($yymatches)) {
|
||||
throw new Exception('Error: lexing failed because a rule matched' .
|
||||
' an empty string. Input "' . substr($this->data,
|
||||
throw new Exception(
|
||||
'Error: lexing failed because a rule matched' .
|
||||
' an empty string. Input "' . substr(
|
||||
$this->data,
|
||||
$this->counter,
|
||||
5) . '... state SECTION');
|
||||
5
|
||||
) . '... state SECTION'
|
||||
);
|
||||
}
|
||||
next($yymatches); // skip global match
|
||||
$this->token = key($yymatches); // token number
|
||||
@@ -605,8 +644,10 @@ class Smarty_Internal_Configfilelexer
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
throw new Exception('Unexpected input at line' . $this->line .
|
||||
': ' . $this->data[ $this->counter ]);
|
||||
throw new Exception(
|
||||
'Unexpected input at line' . $this->line .
|
||||
': ' . $this->data[ $this->counter ]
|
||||
);
|
||||
}
|
||||
break;
|
||||
} while (true);
|
||||
@@ -642,10 +683,14 @@ class Smarty_Internal_Configfilelexer
|
||||
$yymatches = array_filter($yymatches);
|
||||
}
|
||||
if (empty($yymatches)) {
|
||||
throw new Exception('Error: lexing failed because a rule matched' .
|
||||
' an empty string. Input "' . substr($this->data,
|
||||
throw new Exception(
|
||||
'Error: lexing failed because a rule matched' .
|
||||
' an empty string. Input "' . substr(
|
||||
$this->data,
|
||||
$this->counter,
|
||||
5) . '... state TRIPPLE');
|
||||
5
|
||||
) . '... state TRIPPLE'
|
||||
);
|
||||
}
|
||||
next($yymatches); // skip global match
|
||||
$this->token = key($yymatches); // token number
|
||||
@@ -670,8 +715,10 @@ class Smarty_Internal_Configfilelexer
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
throw new Exception('Unexpected input at line' . $this->line .
|
||||
': ' . $this->data[ $this->counter ]);
|
||||
throw new Exception(
|
||||
'Unexpected input at line' . $this->line .
|
||||
': ' . $this->data[ $this->counter ]
|
||||
);
|
||||
}
|
||||
break;
|
||||
} while (true);
|
||||
|
@@ -9,7 +9,7 @@ class TPC_yyStackEntry
|
||||
** is the value of the token */
|
||||
}
|
||||
|
||||
#line 12 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
// line 12 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
|
||||
/**
|
||||
* Smarty Internal Plugin Configfileparse
|
||||
@@ -23,7 +23,7 @@ class TPC_yyStackEntry
|
||||
*/
|
||||
class Smarty_Internal_Configfileparser
|
||||
{
|
||||
#line 25 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
// line 25 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
const TPC_OPENB = 1;
|
||||
const TPC_SECTION = 2;
|
||||
const TPC_CLOSEB = 3;
|
||||
@@ -375,9 +375,11 @@ class Smarty_Internal_Configfileparser
|
||||
}
|
||||
$yytos = array_pop($this->yystack);
|
||||
if ($this->yyTraceFILE && $this->yyidx >= 0) {
|
||||
fwrite($this->yyTraceFILE,
|
||||
fwrite(
|
||||
$this->yyTraceFILE,
|
||||
$this->yyTracePrompt . 'Popping ' . $this->yyTokenName[ $yytos->major ] .
|
||||
"\n");
|
||||
"\n"
|
||||
);
|
||||
}
|
||||
$yymajor = $yytos->major;
|
||||
self::yy_destructor($yymajor, $yytos->minor);
|
||||
@@ -429,7 +431,8 @@ class Smarty_Internal_Configfileparser
|
||||
$this->yyidx -= self::$yyRuleInfo[ $yyruleno ][ 1 ];
|
||||
$nextstate = $this->yy_find_reduce_action(
|
||||
$this->yystack[ $this->yyidx ]->stateno,
|
||||
self::$yyRuleInfo[ $yyruleno ][ 0 ]);
|
||||
self::$yyRuleInfo[ $yyruleno ][ 0 ]
|
||||
);
|
||||
if (isset(self::$yyExpectedTokens[ $nextstate ])) {
|
||||
$expected = array_merge($expected, self::$yyExpectedTokens[ $nextstate ]);
|
||||
if (isset($res4[ $nextstate ][ $token ])) {
|
||||
@@ -439,8 +442,8 @@ class Smarty_Internal_Configfileparser
|
||||
return array_unique($expected);
|
||||
}
|
||||
} else {
|
||||
if ($res4[ $nextstate ][ $token ] =
|
||||
in_array($token, self::$yyExpectedTokens[ $nextstate ], true)) {
|
||||
if ($res4[ $nextstate ][ $token ] = in_array($token, self::$yyExpectedTokens[ $nextstate ], true)
|
||||
) {
|
||||
$this->yyidx = $yyidx;
|
||||
$this->yystack = $stack;
|
||||
return array_unique($expected);
|
||||
@@ -515,7 +518,8 @@ class Smarty_Internal_Configfileparser
|
||||
$this->yyidx -= self::$yyRuleInfo[ $yyruleno ][ 1 ];
|
||||
$nextstate = $this->yy_find_reduce_action(
|
||||
$this->yystack[ $this->yyidx ]->stateno,
|
||||
self::$yyRuleInfo[ $yyruleno ][ 0 ]);
|
||||
self::$yyRuleInfo[ $yyruleno ][ 0 ]
|
||||
);
|
||||
if (isset($res2[ $nextstate ][ $token ])) {
|
||||
if ($res2[ $nextstate ][ $token ]) {
|
||||
$this->yyidx = $yyidx;
|
||||
@@ -523,10 +527,13 @@ class Smarty_Internal_Configfileparser
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
if ($res2[ $nextstate ][ $token ] = (isset(self::$yyExpectedTokens[ $nextstate ]) &&
|
||||
in_array($token,
|
||||
if ($res2[ $nextstate ][ $token ] = (isset(self::$yyExpectedTokens[ $nextstate ])
|
||||
&& in_array(
|
||||
$token,
|
||||
self::$yyExpectedTokens[ $nextstate ],
|
||||
true))) {
|
||||
true
|
||||
))
|
||||
) {
|
||||
$this->yyidx = $yyidx;
|
||||
$this->yystack = $stack;
|
||||
return true;
|
||||
@@ -584,15 +591,19 @@ class Smarty_Internal_Configfileparser
|
||||
return self::YY_NO_ACTION;
|
||||
}
|
||||
$i += $iLookAhead;
|
||||
if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
|
||||
self::$yy_lookahead[ $i ] != $iLookAhead) {
|
||||
if ($i < 0 || $i >= self::YY_SZ_ACTTAB
|
||||
|| self::$yy_lookahead[ $i ] != $iLookAhead
|
||||
) {
|
||||
if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback)
|
||||
&& ($iFallback = self::$yyFallback[ $iLookAhead ]) != 0) {
|
||||
&& ($iFallback = self::$yyFallback[ $iLookAhead ]) != 0
|
||||
) {
|
||||
if ($this->yyTraceFILE) {
|
||||
fwrite($this->yyTraceFILE,
|
||||
fwrite(
|
||||
$this->yyTraceFILE,
|
||||
$this->yyTracePrompt . 'FALLBACK ' .
|
||||
$this->yyTokenName[ $iLookAhead ] . ' => ' .
|
||||
$this->yyTokenName[ $iFallback ] . "\n");
|
||||
$this->yyTokenName[ $iFallback ] . "\n"
|
||||
);
|
||||
}
|
||||
return $this->yy_find_shift_action($iFallback);
|
||||
}
|
||||
@@ -616,8 +627,9 @@ class Smarty_Internal_Configfileparser
|
||||
return self::YY_NO_ACTION;
|
||||
}
|
||||
$i += $iLookAhead;
|
||||
if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
|
||||
self::$yy_lookahead[ $i ] != $iLookAhead) {
|
||||
if ($i < 0 || $i >= self::YY_SZ_ACTTAB
|
||||
|| self::$yy_lookahead[ $i ] != $iLookAhead
|
||||
) {
|
||||
return self::$yy_default[ $stateno ];
|
||||
} else {
|
||||
return self::$yy_action[ $i ];
|
||||
@@ -635,7 +647,7 @@ class Smarty_Internal_Configfileparser
|
||||
while ($this->yyidx >= 0) {
|
||||
$this->yy_pop_parser_stack();
|
||||
}
|
||||
#line 239 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
// line 239 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
$this->internalError = true;
|
||||
$this->compiler->trigger_config_file_error('Stack overflow in configfile parser');
|
||||
return;
|
||||
@@ -646,15 +658,19 @@ class Smarty_Internal_Configfileparser
|
||||
$yytos->minor = $yypMinor;
|
||||
$this->yystack[] = $yytos;
|
||||
if ($this->yyTraceFILE && $this->yyidx > 0) {
|
||||
fprintf($this->yyTraceFILE,
|
||||
fprintf(
|
||||
$this->yyTraceFILE,
|
||||
"%sShift %d\n",
|
||||
$this->yyTracePrompt,
|
||||
$yyNewState);
|
||||
$yyNewState
|
||||
);
|
||||
fprintf($this->yyTraceFILE, "%sStack:", $this->yyTracePrompt);
|
||||
for ($i = 1; $i <= $this->yyidx; $i++) {
|
||||
fprintf($this->yyTraceFILE,
|
||||
fprintf(
|
||||
$this->yyTraceFILE,
|
||||
" %s",
|
||||
$this->yyTokenName[ $this->yystack[ $i ]->major ]);
|
||||
$this->yyTokenName[ $this->yystack[ $i ]->major ]
|
||||
);
|
||||
}
|
||||
fwrite($this->yyTraceFILE, "\n");
|
||||
}
|
||||
@@ -677,100 +693,105 @@ class Smarty_Internal_Configfileparser
|
||||
$this->_retvalue = null;
|
||||
}
|
||||
|
||||
#line 245 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
// line 245 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
function yy_r5()
|
||||
{
|
||||
if ($this->configReadHidden) {
|
||||
$this->add_section_vars($this->yystack[ $this->yyidx + -3 ]->minor,
|
||||
$this->yystack[ $this->yyidx + 0 ]->minor);
|
||||
$this->add_section_vars(
|
||||
$this->yystack[ $this->yyidx + -3 ]->minor,
|
||||
$this->yystack[ $this->yyidx + 0 ]->minor
|
||||
);
|
||||
}
|
||||
$this->_retvalue = null;
|
||||
}
|
||||
|
||||
#line 250 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
// line 250 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
function yy_r6()
|
||||
{
|
||||
$this->_retvalue = $this->yystack[ $this->yyidx + -1 ]->minor;
|
||||
}
|
||||
|
||||
#line 264 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
// line 264 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
function yy_r7()
|
||||
{
|
||||
$this->_retvalue =
|
||||
array_merge($this->yystack[ $this->yyidx + -1 ]->minor, array($this->yystack[ $this->yyidx + 0 ]->minor));
|
||||
}
|
||||
|
||||
#line 269 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
// line 269 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
function yy_r8()
|
||||
{
|
||||
$this->_retvalue = array();
|
||||
}
|
||||
|
||||
#line 277 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
// line 277 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
function yy_r9()
|
||||
{
|
||||
$this->_retvalue = array('key' => $this->yystack[ $this->yyidx + -2 ]->minor,
|
||||
'value' => $this->yystack[ $this->yyidx + 0 ]->minor);
|
||||
}
|
||||
|
||||
#line 281 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
// line 281 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
function yy_r10()
|
||||
{
|
||||
$this->_retvalue = (float)$this->yystack[ $this->yyidx + 0 ]->minor;
|
||||
}
|
||||
|
||||
#line 285 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
// line 285 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
function yy_r11()
|
||||
{
|
||||
$this->_retvalue = (int)$this->yystack[ $this->yyidx + 0 ]->minor;
|
||||
}
|
||||
|
||||
#line 291 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
// line 291 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
function yy_r12()
|
||||
{
|
||||
$this->_retvalue = $this->parse_bool($this->yystack[ $this->yyidx + 0 ]->minor);
|
||||
}
|
||||
|
||||
#line 296 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
// line 296 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
function yy_r13()
|
||||
{
|
||||
$this->_retvalue = self::parse_single_quoted_string($this->yystack[ $this->yyidx + 0 ]->minor);
|
||||
}
|
||||
|
||||
#line 300 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
// line 300 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
function yy_r14()
|
||||
{
|
||||
$this->_retvalue = self::parse_double_quoted_string($this->yystack[ $this->yyidx + 0 ]->minor);
|
||||
}
|
||||
|
||||
#line 304 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
// line 304 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
function yy_r15()
|
||||
{
|
||||
$this->_retvalue = self::parse_tripple_double_quoted_string($this->yystack[ $this->yyidx + -1 ]->minor);
|
||||
}
|
||||
|
||||
#line 308 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
// line 308 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
function yy_r16()
|
||||
{
|
||||
$this->_retvalue = '';
|
||||
}
|
||||
|
||||
#line 312 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
// line 312 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
function yy_r17()
|
||||
{
|
||||
$this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor;
|
||||
}
|
||||
|
||||
#line 316 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
// line 316 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
public function yy_reduce($yyruleno)
|
||||
{
|
||||
if ($this->yyTraceFILE && $yyruleno >= 0
|
||||
&& $yyruleno < count(self::$yyRuleName)) {
|
||||
fprintf($this->yyTraceFILE,
|
||||
&& $yyruleno < count(self::$yyRuleName)
|
||||
) {
|
||||
fprintf(
|
||||
$this->yyTraceFILE,
|
||||
"%sReduce (%d) [%s].\n",
|
||||
$this->yyTracePrompt,
|
||||
$yyruleno,
|
||||
self::$yyRuleName[ $yyruleno ]);
|
||||
self::$yyRuleName[ $yyruleno ]
|
||||
);
|
||||
}
|
||||
$this->_retvalue = $yy_lefthand_side = null;
|
||||
if (isset(self::$yyReduceMap[ $yyruleno ])) {
|
||||
@@ -803,7 +824,7 @@ class Smarty_Internal_Configfileparser
|
||||
}
|
||||
}
|
||||
|
||||
#line 320 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
// line 320 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
public function yy_parse_failed()
|
||||
{
|
||||
if ($this->yyTraceFILE) {
|
||||
@@ -814,10 +835,10 @@ class Smarty_Internal_Configfileparser
|
||||
}
|
||||
}
|
||||
|
||||
#line 324 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
// line 324 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
public function yy_syntax_error($yymajor, $TOKEN)
|
||||
{
|
||||
#line 232 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
// line 232 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
$this->internalError = true;
|
||||
$this->yymajor = $yymajor;
|
||||
$this->compiler->trigger_config_file_error();
|
||||
@@ -831,7 +852,7 @@ class Smarty_Internal_Configfileparser
|
||||
while ($this->yyidx >= 0) {
|
||||
$this->yy_pop_parser_stack();
|
||||
}
|
||||
#line 225 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
// line 225 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||
$this->successful = !$this->internalError;
|
||||
$this->internalError = false;
|
||||
$this->retvalue = $this->_retvalue;
|
||||
@@ -851,15 +872,18 @@ class Smarty_Internal_Configfileparser
|
||||
}
|
||||
$yyendofinput = ($yymajor == 0);
|
||||
if ($this->yyTraceFILE) {
|
||||
fprintf($this->yyTraceFILE,
|
||||
fprintf(
|
||||
$this->yyTraceFILE,
|
||||
"%sInput %s\n",
|
||||
$this->yyTracePrompt,
|
||||
$this->yyTokenName[ $yymajor ]);
|
||||
$this->yyTokenName[ $yymajor ]
|
||||
);
|
||||
}
|
||||
do {
|
||||
$yyact = $this->yy_find_shift_action($yymajor);
|
||||
if ($yymajor < self::YYERRORSYMBOL &&
|
||||
!$this->yy_is_expected_token($yymajor)) {
|
||||
if ($yymajor < self::YYERRORSYMBOL
|
||||
&& !$this->yy_is_expected_token($yymajor)
|
||||
) {
|
||||
// force a syntax error
|
||||
$yyact = self::YY_ERROR_ACTION;
|
||||
}
|
||||
@@ -875,9 +899,11 @@ class Smarty_Internal_Configfileparser
|
||||
$this->yy_reduce($yyact - self::YYNSTATE);
|
||||
} else if ($yyact === self::YY_ERROR_ACTION) {
|
||||
if ($this->yyTraceFILE) {
|
||||
fprintf($this->yyTraceFILE,
|
||||
fprintf(
|
||||
$this->yyTraceFILE,
|
||||
"%sSyntax Error!\n",
|
||||
$this->yyTracePrompt);
|
||||
$this->yyTracePrompt
|
||||
);
|
||||
}
|
||||
if (self::YYERRORSYMBOL) {
|
||||
if ($this->yyerrcnt < 0) {
|
||||
@@ -886,10 +912,12 @@ class Smarty_Internal_Configfileparser
|
||||
$yymx = $this->yystack[ $this->yyidx ]->major;
|
||||
if ($yymx === self::YYERRORSYMBOL || $yyerrorhit) {
|
||||
if ($this->yyTraceFILE) {
|
||||
fprintf($this->yyTraceFILE,
|
||||
fprintf(
|
||||
$this->yyTraceFILE,
|
||||
"%sDiscard input token %s\n",
|
||||
$this->yyTracePrompt,
|
||||
$this->yyTokenName[ $yymajor ]);
|
||||
$this->yyTokenName[ $yymajor ]
|
||||
);
|
||||
}
|
||||
$this->yy_destructor($yymajor, $yytokenvalue);
|
||||
$yymajor = self::YYNOCODE;
|
||||
|
@@ -103,7 +103,11 @@ abstract class Smarty_Internal_Data
|
||||
} else {
|
||||
if ($tpl_var !== '') {
|
||||
if ($this->_objType === 2) {
|
||||
/** @var Smarty_Internal_Template $this */
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @var Smarty_Internal_Template $this
|
||||
*/
|
||||
$this->_assignInScope($tpl_var, $value, $nocache);
|
||||
} else {
|
||||
$this->tpl_vars[ $tpl_var ] = new Smarty_Variable($value, $nocache);
|
||||
@@ -203,8 +207,8 @@ abstract class Smarty_Internal_Data
|
||||
* @deprecated since 3.1.28 please use Smarty_Internal_Data::getTemplateVars() instead.
|
||||
*/
|
||||
public function getVariable($variable = null, Smarty_Internal_Data $_ptr = null, $searchParents = true,
|
||||
$error_enable = true)
|
||||
{
|
||||
$error_enable = true
|
||||
) {
|
||||
return $this->ext->getTemplateVars->_getVariable($this, $variable, $_ptr, $searchParents, $error_enable);
|
||||
}
|
||||
|
||||
|
@@ -3,7 +3,6 @@
|
||||
/**
|
||||
* Smarty error handler
|
||||
*
|
||||
*
|
||||
* @package Smarty
|
||||
* @subpackage PluginsInternal
|
||||
* @author Uwe Tews
|
||||
@@ -98,12 +97,14 @@ class Smarty_Internal_ErrorHandler
|
||||
// or the error was within smarty but masked to be ignored
|
||||
if (!$_is_muted_directory || ($errno && $errno & error_reporting())) {
|
||||
if (self::$previousErrorHandler) {
|
||||
return call_user_func(self::$previousErrorHandler,
|
||||
return call_user_func(
|
||||
self::$previousErrorHandler,
|
||||
$errno,
|
||||
$errstr,
|
||||
$errfile,
|
||||
$errline,
|
||||
$errcontext);
|
||||
$errcontext
|
||||
);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
@@ -5,7 +5,6 @@
|
||||
*
|
||||
* Load extensions dynamically
|
||||
*
|
||||
*
|
||||
* @package Smarty
|
||||
* @subpackage PluginsInternal
|
||||
* @author Uwe Tews
|
||||
@@ -50,7 +49,7 @@ class Smarty_Internal_Extension_Handler
|
||||
*/
|
||||
private $_property_info = array('AutoloadFilters' => 0, 'DefaultModifiers' => 0, 'ConfigVars' => 0,
|
||||
'DebugTemplate' => 0, 'RegisteredObject' => 0, 'StreamVariable' => 0,
|
||||
'TemplateVars' => 0, 'Literals' => 'Literals',);#
|
||||
'TemplateVars' => 0, 'Literals' => 'Literals',);//
|
||||
|
||||
private $resolvedProperties = array();
|
||||
|
||||
@@ -71,8 +70,9 @@ class Smarty_Internal_Extension_Handler
|
||||
if (!isset($smarty->ext->$name)) {
|
||||
if (preg_match('/^((set|get)|(.*?))([A-Z].*)$/', $name, $match)) {
|
||||
$basename = $this->upperCase($match[4]);
|
||||
if (!isset($smarty->ext->$basename) && isset($this->_property_info[ $basename ]) &&
|
||||
is_string($this->_property_info[ $basename ])) {
|
||||
if (!isset($smarty->ext->$basename) && isset($this->_property_info[ $basename ])
|
||||
&& is_string($this->_property_info[ $basename ])
|
||||
) {
|
||||
$class = 'Smarty_Internal_Method_' . $this->_property_info[ $basename ];
|
||||
if (class_exists($class)) {
|
||||
$classObj = new $class();
|
||||
@@ -90,12 +90,18 @@ class Smarty_Internal_Extension_Handler
|
||||
if (!isset($this->resolvedProperties[ $match[0] ][ $objType ])) {
|
||||
$property = isset($this->resolvedProperties['property'][ $basename ]) ?
|
||||
$this->resolvedProperties['property'][ $basename ] :
|
||||
$property = $this->resolvedProperties['property'][ $basename ] = strtolower(join('_',
|
||||
preg_split('/([A-Z][^A-Z]*)/',
|
||||
$property = $this->resolvedProperties['property'][ $basename ] = strtolower(
|
||||
join(
|
||||
'_',
|
||||
preg_split(
|
||||
'/([A-Z][^A-Z]*)/',
|
||||
$basename,
|
||||
-1,
|
||||
PREG_SPLIT_NO_EMPTY |
|
||||
PREG_SPLIT_DELIM_CAPTURE)));
|
||||
PREG_SPLIT_DELIM_CAPTURE
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
if ($property !== false) {
|
||||
if (property_exists($data, $property)) {
|
||||
|
@@ -18,10 +18,11 @@ class Smarty_Internal_Method_AddAutoloadFilters extends Smarty_Internal_Method_S
|
||||
*
|
||||
* @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
|
||||
* @param array $filters filters to load automatically
|
||||
* @param string $type "pre", "output", … specify the
|
||||
* filter type to set. Defaults to
|
||||
* none treating $filters' keys as
|
||||
* the appropriate types
|
||||
* @param string $type "pre", "output", … specify
|
||||
* the filter type to set.
|
||||
* Defaults to none treating
|
||||
* $filters' keys as the
|
||||
* appropriate types
|
||||
*
|
||||
* @return \Smarty|\Smarty_Internal_Template
|
||||
* @throws \SmartyException
|
||||
|
@@ -52,8 +52,8 @@ class Smarty_Internal_Method_Append
|
||||
$data->tpl_vars[ $tpl_var ] = clone $tpl_var_inst;
|
||||
}
|
||||
}
|
||||
if (!(is_array($data->tpl_vars[ $tpl_var ]->value) ||
|
||||
$data->tpl_vars[ $tpl_var ]->value instanceof ArrayAccess)
|
||||
if (!(is_array($data->tpl_vars[ $tpl_var ]->value)
|
||||
|| $data->tpl_vars[ $tpl_var ]->value instanceof ArrayAccess)
|
||||
) {
|
||||
settype($data->tpl_vars[ $tpl_var ]->value, 'array');
|
||||
}
|
||||
|
@@ -35,8 +35,8 @@ class Smarty_Internal_Method_ClearCache
|
||||
* @throws \SmartyException
|
||||
*/
|
||||
public function clearCache(Smarty $smarty, $template_name, $cache_id = null, $compile_id = null, $exp_time = null,
|
||||
$type = null)
|
||||
{
|
||||
$type = null
|
||||
) {
|
||||
$smarty->_clearTemplateCache();
|
||||
// load cache resource and call clear
|
||||
$_cache_resource = Smarty_CacheResource::load($smarty, $type);
|
||||
|
@@ -90,18 +90,20 @@ class Smarty_Internal_Method_ClearCompiledTemplate
|
||||
continue;
|
||||
}
|
||||
$unlink = false;
|
||||
if ((!isset($_compile_id) || (isset($_filepath[ $_compile_id_part_length ]) && $a =
|
||||
!strncmp($_filepath, $_compile_id_part, $_compile_id_part_length))) &&
|
||||
(!isset($resource_name) || (isset($_filepath[ $_resource_part_1_length ]) &&
|
||||
substr_compare($_filepath,
|
||||
if ((!isset($_compile_id) || (isset($_filepath[ $_compile_id_part_length ]) && $a =!strncmp($_filepath, $_compile_id_part, $_compile_id_part_length)))
|
||||
&& (!isset($resource_name) || (isset($_filepath[ $_resource_part_1_length ])
|
||||
&& substr_compare(
|
||||
$_filepath,
|
||||
$_resource_part_1,
|
||||
-$_resource_part_1_length,
|
||||
$_resource_part_1_length) ===
|
||||
0) || (isset($_filepath[ $_resource_part_2_length ]) &&
|
||||
substr_compare($_filepath,
|
||||
$_resource_part_1_length
|
||||
) ===0) || (isset($_filepath[ $_resource_part_2_length ])
|
||||
&& substr_compare(
|
||||
$_filepath,
|
||||
$_resource_part_2,
|
||||
-$_resource_part_2_length,
|
||||
$_resource_part_2_length) === 0))
|
||||
$_resource_part_2_length
|
||||
) === 0))
|
||||
) {
|
||||
if (isset($exp_time)) {
|
||||
if (is_file($_filepath) && time() - filemtime($_filepath) >= $exp_time) {
|
||||
|
@@ -26,8 +26,8 @@ class Smarty_Internal_Method_CompileAllConfig extends Smarty_Internal_Method_Com
|
||||
* @return int number of template files recompiled
|
||||
*/
|
||||
public function compileAllConfig(Smarty $smarty, $extension = '.conf', $force_compile = false, $time_limit = 0,
|
||||
$max_errors = null)
|
||||
{
|
||||
$max_errors = null
|
||||
) {
|
||||
return $this->compileAll($smarty, $extension, $force_compile, $time_limit, $max_errors, true);
|
||||
}
|
||||
}
|
@@ -34,8 +34,8 @@ class Smarty_Internal_Method_CompileAllTemplates
|
||||
$extension = '.tpl',
|
||||
$force_compile = false,
|
||||
$time_limit = 0,
|
||||
$max_errors = null)
|
||||
{
|
||||
$max_errors = null
|
||||
) {
|
||||
return $this->compileAll($smarty, $extension, $force_compile, $time_limit, $max_errors);
|
||||
}
|
||||
|
||||
@@ -56,8 +56,8 @@ class Smarty_Internal_Method_CompileAllTemplates
|
||||
$force_compile,
|
||||
$time_limit,
|
||||
$max_errors,
|
||||
$isConfig = false)
|
||||
{
|
||||
$isConfig = false
|
||||
) {
|
||||
// switch off time limit
|
||||
if (function_exists('set_time_limit')) {
|
||||
@set_time_limit($time_limit);
|
||||
@@ -67,8 +67,10 @@ class Smarty_Internal_Method_CompileAllTemplates
|
||||
$sourceDir = $isConfig ? $smarty->getConfigDir() : $smarty->getTemplateDir();
|
||||
// loop over array of source directories
|
||||
foreach ($sourceDir as $_dir) {
|
||||
$_dir_1 = new RecursiveDirectoryIterator($_dir, defined('FilesystemIterator::FOLLOW_SYMLINKS') ?
|
||||
FilesystemIterator::FOLLOW_SYMLINKS : 0);
|
||||
$_dir_1 = new RecursiveDirectoryIterator(
|
||||
$_dir, defined('FilesystemIterator::FOLLOW_SYMLINKS') ?
|
||||
FilesystemIterator::FOLLOW_SYMLINKS : 0
|
||||
);
|
||||
$_dir_2 = new RecursiveIteratorIterator($_dir_1);
|
||||
foreach ($_dir_2 as $_fileinfo) {
|
||||
$_file = $_fileinfo->getFilename();
|
||||
|
@@ -48,6 +48,7 @@ class Smarty_Internal_Method_ConfigLoad
|
||||
* @param string $config_file filename
|
||||
* @param mixed $sections array of section names, single
|
||||
* section or null
|
||||
|
||||
* @param int $scope scope into which config variables
|
||||
* shall be loaded
|
||||
*
|
||||
@@ -76,7 +77,6 @@ class Smarty_Internal_Method_ConfigLoad
|
||||
*
|
||||
* @param \Smarty_Internal_Template $tpl
|
||||
* @param array $new_config_vars
|
||||
*
|
||||
*/
|
||||
public function _loadConfigVars(Smarty_Internal_Template $tpl, $new_config_vars)
|
||||
{
|
||||
|
@@ -32,8 +32,8 @@ class Smarty_Internal_Method_GetTemplateVars
|
||||
* @return mixed variable value or or array of variables
|
||||
*/
|
||||
public function getTemplateVars(Smarty_Internal_Data $data, $varName = null, Smarty_Internal_Data $_ptr = null,
|
||||
$searchParents = true)
|
||||
{
|
||||
$searchParents = true
|
||||
) {
|
||||
if (isset($varName)) {
|
||||
$_var = $this->_getVariable($data, $varName, $_ptr, $searchParents, false);
|
||||
if (is_object($_var)) {
|
||||
@@ -82,8 +82,8 @@ class Smarty_Internal_Method_GetTemplateVars
|
||||
* @return \Smarty_Variable
|
||||
*/
|
||||
public function _getVariable(Smarty_Internal_Data $data, $varName, Smarty_Internal_Data $_ptr = null,
|
||||
$searchParents = true, $errorEnable = true)
|
||||
{
|
||||
$searchParents = true, $errorEnable = true
|
||||
) {
|
||||
if ($_ptr === null) {
|
||||
$_ptr = $data;
|
||||
}
|
||||
|
@@ -40,7 +40,7 @@ class Smarty_Internal_Method_Literals
|
||||
*
|
||||
* @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
|
||||
* @param array|string $literals literal or list of literals
|
||||
* to add
|
||||
* to addto add
|
||||
*
|
||||
* @return \Smarty|\Smarty_Internal_Template
|
||||
* @throws \SmartyException
|
||||
@@ -60,7 +60,7 @@ class Smarty_Internal_Method_Literals
|
||||
*
|
||||
* @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
|
||||
* @param array|string $literals literal or list of literals
|
||||
* to set
|
||||
* to setto set
|
||||
*
|
||||
* @return \Smarty|\Smarty_Internal_Template
|
||||
* @throws \SmartyException
|
||||
@@ -90,8 +90,10 @@ class Smarty_Internal_Method_Literals
|
||||
$error = isset($literals[ $smarty->left_delimiter ]) ? array($smarty->left_delimiter) : array();
|
||||
$error = isset($literals[ $smarty->right_delimiter ]) ? $error[] = $smarty->right_delimiter : $error;
|
||||
if (!empty($error)) {
|
||||
throw new SmartyException('User defined literal(s) "' . $error .
|
||||
'" may not be identical with left or right delimiter');
|
||||
throw new SmartyException(
|
||||
'User defined literal(s) "' . $error .
|
||||
'" may not be identical with left or right delimiter'
|
||||
);
|
||||
}
|
||||
$smarty->literals = array_merge((array)$smarty->literals, (array)$literals);
|
||||
}
|
||||
|
@@ -50,7 +50,7 @@ class Smarty_Internal_Method_LoadPlugin
|
||||
} else {
|
||||
if (is_file($file)) {
|
||||
$this->plugin_files[ $file ] = $file;
|
||||
require_once($file);
|
||||
include_once $file;
|
||||
return $file;
|
||||
} else {
|
||||
$this->plugin_files[ $file ] = false;
|
||||
@@ -87,7 +87,7 @@ class Smarty_Internal_Method_LoadPlugin
|
||||
$file = $_plugin_dir . $name;
|
||||
if (is_file($file)) {
|
||||
$this->plugin_files[ 'plugins_dir' ][ $_lower_filename ] = $file;
|
||||
require_once($file);
|
||||
include_once $file;
|
||||
return $file;
|
||||
}
|
||||
$this->plugin_files[ 'plugins_dir' ][ $_lower_filename ] = false;
|
||||
@@ -100,7 +100,7 @@ class Smarty_Internal_Method_LoadPlugin
|
||||
$file = $smarty->ext->_getIncludePath->getIncludePath($_p_dirs, $_file_name, $smarty);
|
||||
$this->plugin_files[ 'include_path' ][ $_lower_filename ] = $file;
|
||||
if ($file !== false) {
|
||||
require_once($file);
|
||||
include_once $file;
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
|
@@ -31,8 +31,8 @@ class Smarty_Internal_Method_RegisterCacheResource
|
||||
* @return \Smarty|\Smarty_Internal_Template
|
||||
*/
|
||||
public function registerCacheResource(Smarty_Internal_TemplateBase $obj, $name,
|
||||
Smarty_CacheResource $resource_handler)
|
||||
{
|
||||
Smarty_CacheResource $resource_handler
|
||||
) {
|
||||
$smarty = $obj->_getSmartyObj();
|
||||
$smarty->registered_cache_resources[ $name ] = $resource_handler;
|
||||
return $obj;
|
||||
|
@@ -55,16 +55,20 @@ class Smarty_Internal_Method_RegisterDefaultTemplateHandler
|
||||
$default_handler = $source->smarty->default_template_handler_func;
|
||||
}
|
||||
$_content = $_timestamp = null;
|
||||
$_return = call_user_func_array($default_handler,
|
||||
array($source->type, $source->name, &$_content, &$_timestamp, $source->smarty));
|
||||
$_return = call_user_func_array(
|
||||
$default_handler,
|
||||
array($source->type, $source->name, &$_content, &$_timestamp, $source->smarty)
|
||||
);
|
||||
if (is_string($_return)) {
|
||||
$source->exists = is_file($_return);
|
||||
if ($source->exists) {
|
||||
$source->timestamp = filemtime($_return);
|
||||
} else {
|
||||
throw new SmartyException('Default handler: Unable to load ' .
|
||||
throw new SmartyException(
|
||||
'Default handler: Unable to load ' .
|
||||
($source->isConfig ? 'config' : 'template') .
|
||||
" default file '{$_return}' for '{$source->type}:{$source->name}'");
|
||||
" default file '{$_return}' for '{$source->type}:{$source->name}'"
|
||||
);
|
||||
}
|
||||
$source->name = $source->filepath = $_return;
|
||||
$source->uid = sha1($source->filepath);
|
||||
@@ -75,8 +79,10 @@ class Smarty_Internal_Method_RegisterDefaultTemplateHandler
|
||||
$source->handler = Smarty_Resource::load($source->smarty, 'eval');
|
||||
} else {
|
||||
$source->exists = false;
|
||||
throw new SmartyException('Default handler: No ' . ($source->isConfig ? 'config' : 'template') .
|
||||
" default content for '{$source->type}:{$source->name}'");
|
||||
throw new SmartyException(
|
||||
'Default handler: No ' . ($source->isConfig ? 'config' : 'template') .
|
||||
" default content for '{$source->type}:{$source->name}'"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
@@ -28,16 +28,23 @@ class Smarty_Internal_Method_RegisterObject
|
||||
* @param string $object_name
|
||||
* @param object $object the
|
||||
* referenced
|
||||
* PHP object to
|
||||
* PHP
|
||||
* object
|
||||
* to
|
||||
* register
|
||||
*
|
||||
* @param array $allowed_methods_properties list of
|
||||
* allowed
|
||||
* methods
|
||||
* (empty = all)
|
||||
* (empty
|
||||
* = all)
|
||||
*
|
||||
* @param bool $format smarty
|
||||
* argument
|
||||
* format, else
|
||||
* format,
|
||||
* else
|
||||
* traditional
|
||||
*
|
||||
* @param array $block_methods list of
|
||||
* block-methods
|
||||
*
|
||||
@@ -45,8 +52,8 @@ class Smarty_Internal_Method_RegisterObject
|
||||
* @throws \SmartyException
|
||||
*/
|
||||
public function registerObject(Smarty_Internal_TemplateBase $obj, $object_name, $object,
|
||||
$allowed_methods_properties = array(), $format = true, $block_methods = array())
|
||||
{
|
||||
$allowed_methods_properties = array(), $format = true, $block_methods = array()
|
||||
) {
|
||||
$smarty = $obj->_getSmartyObj();
|
||||
// test if allowed methods callable
|
||||
if (!empty($allowed_methods_properties)) {
|
||||
|
@@ -30,14 +30,15 @@ class Smarty_Internal_Method_RegisterPlugin
|
||||
* @param callback $callback PHP callback to register
|
||||
* @param bool $cacheable if true (default) this
|
||||
* function is cache able
|
||||
|
||||
* @param mixed $cache_attr caching attributes if any
|
||||
*
|
||||
* @return \Smarty|\Smarty_Internal_Template
|
||||
* @throws SmartyException when the plugin tag is invalid
|
||||
*/
|
||||
public function registerPlugin(Smarty_Internal_TemplateBase $obj, $type, $name, $callback, $cacheable = true,
|
||||
$cache_attr = null)
|
||||
{
|
||||
$cache_attr = null
|
||||
) {
|
||||
$smarty = $obj->_getSmartyObj();
|
||||
if (isset($smarty->registered_plugins[ $type ][ $name ])) {
|
||||
throw new SmartyException("Plugin tag '{$name}' already registered");
|
||||
|
@@ -27,9 +27,11 @@ class Smarty_Internal_Method_RegisterResource
|
||||
* @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
|
||||
* @param string $name name of resource type
|
||||
* @param Smarty_Resource|array $resource_handler or instance of
|
||||
* Smarty_Resource, or
|
||||
* array of callbacks to
|
||||
* handle resource
|
||||
* Smarty_Resource,
|
||||
* or array of
|
||||
* callbacks to
|
||||
* handle
|
||||
* resource
|
||||
* (deprecated)
|
||||
*
|
||||
* @return \Smarty|\Smarty_Internal_Template
|
||||
|
@@ -32,10 +32,11 @@ class Smarty_Internal_Method_SetAutoloadFilters
|
||||
*
|
||||
* @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
|
||||
* @param array $filters filters to load automatically
|
||||
* @param string $type "pre", "output", … specify the
|
||||
* filter type to set. Defaults to
|
||||
* none treating $filters' keys as
|
||||
* the appropriate types
|
||||
* @param string $type "pre", "output", … specify
|
||||
* the filter type to set.
|
||||
* Defaults to none treating
|
||||
* $filters' keys as the
|
||||
* appropriate types
|
||||
*
|
||||
* @return \Smarty|\Smarty_Internal_Template
|
||||
* @throws \SmartyException
|
||||
|
@@ -40,17 +40,21 @@ class Smarty_Internal_ParseTree_Dq extends Smarty_Internal_ParseTree
|
||||
public function append_subtree(Smarty_Internal_Templateparser $parser, Smarty_Internal_ParseTree $subtree)
|
||||
{
|
||||
$last_subtree = count($this->subtrees) - 1;
|
||||
if ($last_subtree >= 0 && $this->subtrees[ $last_subtree ] instanceof Smarty_Internal_ParseTree_Tag &&
|
||||
$this->subtrees[ $last_subtree ]->saved_block_nesting < $parser->block_nesting_level
|
||||
if ($last_subtree >= 0 && $this->subtrees[ $last_subtree ] instanceof Smarty_Internal_ParseTree_Tag
|
||||
&& $this->subtrees[ $last_subtree ]->saved_block_nesting < $parser->block_nesting_level
|
||||
) {
|
||||
if ($subtree instanceof Smarty_Internal_ParseTree_Code) {
|
||||
$this->subtrees[ $last_subtree ]->data =
|
||||
$parser->compiler->appendCode($this->subtrees[ $last_subtree ]->data,
|
||||
'<?php echo ' . $subtree->data . ';?>');
|
||||
$parser->compiler->appendCode(
|
||||
$this->subtrees[ $last_subtree ]->data,
|
||||
'<?php echo ' . $subtree->data . ';?>'
|
||||
);
|
||||
} elseif ($subtree instanceof Smarty_Internal_ParseTree_DqContent) {
|
||||
$this->subtrees[ $last_subtree ]->data =
|
||||
$parser->compiler->appendCode($this->subtrees[ $last_subtree ]->data,
|
||||
'<?php echo "' . $subtree->data . '";?>');
|
||||
$parser->compiler->appendCode(
|
||||
$this->subtrees[ $last_subtree ]->data,
|
||||
'<?php echo "' . $subtree->data . '";?>'
|
||||
);
|
||||
} else {
|
||||
$this->subtrees[ $last_subtree ]->data =
|
||||
$parser->compiler->appendCode($this->subtrees[ $last_subtree ]->data, $subtree->data);
|
||||
|
@@ -28,7 +28,6 @@ class Smarty_Internal_ParseTree_Template extends Smarty_Internal_ParseTree
|
||||
|
||||
/**
|
||||
* Create root of parse tree for template elements
|
||||
*
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
@@ -101,8 +100,10 @@ class Smarty_Internal_ParseTree_Template extends Smarty_Internal_ParseTree
|
||||
if ($subtree === '') {
|
||||
continue;
|
||||
}
|
||||
$code .= preg_replace('/((<%)|(%>)|(<\?php)|(<\?)|(\?>)|(<\/?script))/', "<?php echo '\$1'; ?>\n",
|
||||
$subtree);
|
||||
$code .= preg_replace(
|
||||
'/((<%)|(%>)|(<\?php)|(<\?)|(\?>)|(<\/?script))/', "<?php echo '\$1'; ?>\n",
|
||||
$subtree
|
||||
);
|
||||
continue;
|
||||
}
|
||||
if ($this->subtrees[ $key ] instanceof Smarty_Internal_ParseTree_Tag) {
|
||||
|
@@ -35,11 +35,11 @@ class Smarty_Internal_Resource_File extends Smarty_Resource
|
||||
return is_file($file) ? $file : false;
|
||||
}
|
||||
// go relative to a given template?
|
||||
if ($file[ 0 ] === '.' && $_template && $_template->_isSubTpl() &&
|
||||
preg_match('#^[.]{1,2}[\\\/]#', $file)
|
||||
if ($file[ 0 ] === '.' && $_template && $_template->_isSubTpl()
|
||||
&& preg_match('#^[.]{1,2}[\\\/]#', $file)
|
||||
) {
|
||||
if ($_template->parent->source->type !== 'file' && $_template->parent->source->type !== 'extends' &&
|
||||
!isset($_template->parent->_cache[ 'allow_relative_path' ])
|
||||
if ($_template->parent->source->type !== 'file' && $_template->parent->source->type !== 'extends'
|
||||
&& !isset($_template->parent->_cache[ 'allow_relative_path' ])
|
||||
) {
|
||||
throw new SmartyException("Template '{$file}' cannot be relative to template of resource type '{$_template->parent->source->type}'");
|
||||
}
|
||||
@@ -124,8 +124,10 @@ class Smarty_Internal_Resource_File extends Smarty_Resource
|
||||
$source->smarty->security_policy->isTrustedResourceDir($source->filepath, $source->isConfig);
|
||||
}
|
||||
$source->exists = true;
|
||||
$source->uid = sha1($source->filepath . ($source->isConfig ? $source->smarty->_joined_config_dir :
|
||||
$source->smarty->_joined_template_dir));
|
||||
$source->uid = sha1(
|
||||
$source->filepath . ($source->isConfig ? $source->smarty->_joined_config_dir :
|
||||
$source->smarty->_joined_template_dir)
|
||||
);
|
||||
$source->timestamp = filemtime($source->filepath);
|
||||
} else {
|
||||
$source->timestamp = $source->exists = false;
|
||||
@@ -160,8 +162,10 @@ class Smarty_Internal_Resource_File extends Smarty_Resource
|
||||
if ($source->exists) {
|
||||
return file_get_contents($source->filepath);
|
||||
}
|
||||
throw new SmartyException('Unable to read ' . ($source->isConfig ? 'config' : 'template') .
|
||||
" {$source->type} '{$source->name}'");
|
||||
throw new SmartyException(
|
||||
'Unable to read ' . ($source->isConfig ? 'config' : 'template') .
|
||||
" {$source->type} '{$source->name}'"
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -88,8 +88,10 @@ class Smarty_Internal_Resource_Php extends Smarty_Internal_Resource_File
|
||||
throw new SmartyException('PHP templates are disabled');
|
||||
}
|
||||
if (!$source->exists) {
|
||||
throw new SmartyException("Unable to load template '{$source->type}:{$source->name}'" .
|
||||
($_template->_isSubTpl() ? " in '{$_template->parent->template_resource}'" : ''));
|
||||
throw new SmartyException(
|
||||
"Unable to load template '{$source->type}:{$source->name}'" .
|
||||
($_template->_isSubTpl() ? " in '{$_template->parent->template_resource}'" : '')
|
||||
);
|
||||
}
|
||||
|
||||
// prepare variables
|
||||
@@ -99,11 +101,14 @@ class Smarty_Internal_Resource_Php extends Smarty_Internal_Resource_File
|
||||
if (function_exists('ini_set')) {
|
||||
ini_set('short_open_tag', '1');
|
||||
}
|
||||
/** @var Smarty_Internal_Template $_smarty_template
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @var Smarty_Internal_Template $_smarty_template
|
||||
* used in included file
|
||||
*/
|
||||
$_smarty_template = $_template;
|
||||
include($source->filepath);
|
||||
include $source->filepath;
|
||||
if (function_exists('ini_set')) {
|
||||
ini_set('short_open_tag', $this->short_open_tag);
|
||||
}
|
||||
|
@@ -58,8 +58,10 @@ class Smarty_Internal_Resource_Registered extends Smarty_Resource
|
||||
{
|
||||
// return timestamp
|
||||
$time_stamp = false;
|
||||
call_user_func_array($source->smarty->registered_resources[ $source->type ][ 0 ][ 1 ],
|
||||
array($source->name, &$time_stamp, $source->smarty));
|
||||
call_user_func_array(
|
||||
$source->smarty->registered_resources[ $source->type ][ 0 ][ 1 ],
|
||||
array($source->name, &$time_stamp, $source->smarty)
|
||||
);
|
||||
|
||||
return is_numeric($time_stamp) ? (int) $time_stamp : $time_stamp;
|
||||
}
|
||||
@@ -76,8 +78,10 @@ class Smarty_Internal_Resource_Registered extends Smarty_Resource
|
||||
{
|
||||
// return template string
|
||||
$content = null;
|
||||
$t = call_user_func_array($source->smarty->registered_resources[ $source->type ][ 0 ][ 0 ],
|
||||
array($source->name, &$content, $source->smarty));
|
||||
$t = call_user_func_array(
|
||||
$source->smarty->registered_resources[ $source->type ][ 0 ][ 0 ],
|
||||
array($source->name, &$content, $source->smarty)
|
||||
);
|
||||
if (is_bool($t) && !$t) {
|
||||
throw new SmartyException("Unable to read template {$source->type} '{$source->name}'");
|
||||
}
|
||||
|
@@ -6,7 +6,6 @@
|
||||
* @package Smarty
|
||||
* @subpackage PluginsInternal
|
||||
* @author Uwe Tews
|
||||
*
|
||||
**/
|
||||
class Smarty_Internal_Runtime_CacheModify
|
||||
{
|
||||
|
@@ -88,8 +88,8 @@ class Smarty_Internal_Runtime_CacheResourceFile
|
||||
}
|
||||
}
|
||||
// check compile id
|
||||
if (isset($_compile_id) && (!isset($_parts[ $_parts_count - 2 - $_compile_id_offset ]) ||
|
||||
$_parts[ $_parts_count - 2 - $_compile_id_offset ] !== $_compile_id)
|
||||
if (isset($_compile_id) && (!isset($_parts[ $_parts_count - 2 - $_compile_id_offset ])
|
||||
|| $_parts[ $_parts_count - 2 - $_compile_id_offset ] !== $_compile_id)
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
@@ -26,8 +26,8 @@ class Smarty_Internal_Runtime_CodeFrame
|
||||
* @return string
|
||||
*/
|
||||
public function create(Smarty_Internal_Template $_template, $content = '', $functions = '', $cache = false,
|
||||
Smarty_Internal_TemplateCompilerBase $compiler = null)
|
||||
{
|
||||
Smarty_Internal_TemplateCompilerBase $compiler = null
|
||||
) {
|
||||
// build property code
|
||||
$properties[ 'version' ] = Smarty::SMARTY_VERSION;
|
||||
$properties[ 'unifunc' ] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true));
|
||||
@@ -65,11 +65,15 @@ class Smarty_Internal_Runtime_CodeFrame
|
||||
$output .= "<?php }\n";
|
||||
// remove unneeded PHP tags
|
||||
if (preg_match('/\s*\?>[\n]?<\?php\s*/', $output)) {
|
||||
$curr_split = preg_split('/\s*\?>[\n]?<\?php\s*/',
|
||||
$output);
|
||||
preg_match_all('/\s*\?>[\n]?<\?php\s*/',
|
||||
$curr_split = preg_split(
|
||||
'/\s*\?>[\n]?<\?php\s*/',
|
||||
$output
|
||||
);
|
||||
preg_match_all(
|
||||
'/\s*\?>[\n]?<\?php\s*/',
|
||||
$output,
|
||||
$curr_parts);
|
||||
$curr_parts
|
||||
);
|
||||
$output = '';
|
||||
foreach ($curr_split as $idx => $curr_output) {
|
||||
$output .= $curr_output;
|
||||
@@ -79,8 +83,10 @@ class Smarty_Internal_Runtime_CodeFrame
|
||||
}
|
||||
}
|
||||
if (preg_match('/\?>\s*$/', $output)) {
|
||||
$curr_split = preg_split('/\?>\s*$/',
|
||||
$output);
|
||||
$curr_split = preg_split(
|
||||
'/\?>\s*$/',
|
||||
$output
|
||||
);
|
||||
$output = '';
|
||||
foreach ($curr_split as $idx => $curr_output) {
|
||||
$output .= $curr_output;
|
||||
|
@@ -6,7 +6,6 @@
|
||||
* @package Smarty
|
||||
* @subpackage PluginsInternal
|
||||
* @author Uwe Tews
|
||||
*
|
||||
*/
|
||||
class Smarty_Internal_Runtime_Foreach
|
||||
{
|
||||
@@ -35,8 +34,8 @@ class Smarty_Internal_Runtime_Foreach
|
||||
* @return mixed $from
|
||||
*/
|
||||
public function init(Smarty_Internal_Template $tpl, $from, $item, $needTotal = false, $key = null, $name = null,
|
||||
$properties = array())
|
||||
{
|
||||
$properties = array()
|
||||
) {
|
||||
$needTotal = $needTotal || isset($properties[ 'total' ]);
|
||||
$saveVars = array();
|
||||
$total = null;
|
||||
@@ -97,7 +96,6 @@ class Smarty_Internal_Runtime_Foreach
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* [util function] counts an array, arrayAccess/traversable or PDOStatement object
|
||||
*
|
||||
* @param mixed $value
|
||||
|
@@ -109,13 +109,11 @@ class Smarty_Internal_Runtime_GetIncludePath
|
||||
* @param \Smarty $smarty
|
||||
*
|
||||
* @return bool|string full filepath or false
|
||||
*
|
||||
*/
|
||||
public function getIncludePath($dirs, $file, Smarty $smarty)
|
||||
{
|
||||
//if (!(isset($this->_has_stream_include) ? $this->_has_stream_include : $this->_has_stream_include = false)) {
|
||||
if (!(isset($this->_has_stream_include) ? $this->_has_stream_include :
|
||||
$this->_has_stream_include = function_exists('stream_resolve_include_path'))
|
||||
if (!(isset($this->_has_stream_include) ? $this->_has_stream_include : $this->_has_stream_include = function_exists('stream_resolve_include_path'))
|
||||
) {
|
||||
$this->isNewIncludePath($smarty);
|
||||
}
|
||||
|
@@ -6,7 +6,6 @@
|
||||
* @package Smarty
|
||||
* @subpackage PluginsInternal
|
||||
* @author Uwe Tews
|
||||
*
|
||||
**/
|
||||
class Smarty_Internal_Runtime_Inheritance
|
||||
{
|
||||
@@ -64,7 +63,6 @@ class Smarty_Internal_Runtime_Inheritance
|
||||
* @param \Smarty_Internal_Template $tpl template object of caller
|
||||
* @param bool $initChild if true init for child template
|
||||
* @param array $blockNames outer level block name
|
||||
*
|
||||
*/
|
||||
public function init(Smarty_Internal_Template $tpl, $initChild, $blockNames = array())
|
||||
{
|
||||
@@ -113,9 +111,11 @@ class Smarty_Internal_Runtime_Inheritance
|
||||
ob_end_clean();
|
||||
$this->state = 2;
|
||||
}
|
||||
if (isset($template) && (($tpl->parent->_isTplObj() && $tpl->parent->source->type !== 'extends') ||
|
||||
$tpl->smarty->extends_recursion)) {
|
||||
$tpl->_subTemplateRender($template,
|
||||
if (isset($template) && (($tpl->parent->_isTplObj() && $tpl->parent->source->type !== 'extends')
|
||||
|| $tpl->smarty->extends_recursion)
|
||||
) {
|
||||
$tpl->_subTemplateRender(
|
||||
$template,
|
||||
$tpl->cache_id,
|
||||
$tpl->compile_id,
|
||||
$tpl->caching ? 9999 : 0,
|
||||
@@ -124,7 +124,8 @@ class Smarty_Internal_Runtime_Inheritance
|
||||
2,
|
||||
false,
|
||||
$uid,
|
||||
$func);
|
||||
$func
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,8 +168,8 @@ class Smarty_Internal_Runtime_Inheritance
|
||||
* @throws \SmartyException
|
||||
*/
|
||||
public function process(Smarty_Internal_Template $tpl, Smarty_Internal_Block $block,
|
||||
Smarty_Internal_Block $parent = null)
|
||||
{
|
||||
Smarty_Internal_Block $parent = null
|
||||
) {
|
||||
if ($block->hide && !isset($block->child)) {
|
||||
return;
|
||||
}
|
||||
@@ -187,8 +188,8 @@ class Smarty_Internal_Runtime_Inheritance
|
||||
if ($block->prepend && isset($parent)) {
|
||||
$this->callParent($tpl, $block, '{block prepend}');
|
||||
if ($block->append) {
|
||||
if ($block->callsChild || !isset($block->child) ||
|
||||
($block->child->hide && !isset($block->child->child))
|
||||
if ($block->callsChild || !isset($block->child)
|
||||
|| ($block->child->hide && !isset($block->child->child))
|
||||
) {
|
||||
$this->callBlock($block, $tpl);
|
||||
} else {
|
||||
|
@@ -6,7 +6,6 @@
|
||||
* @package Smarty
|
||||
* @subpackage PluginsInternal
|
||||
* @author Uwe Tews
|
||||
*
|
||||
*/
|
||||
class Smarty_Internal_Runtime_Make_Nocache
|
||||
{
|
||||
|
@@ -6,7 +6,6 @@
|
||||
* @package Smarty
|
||||
* @subpackage PluginsInternal
|
||||
* @author Uwe Tews
|
||||
*
|
||||
**/
|
||||
class Smarty_Internal_Runtime_TplFunction
|
||||
{
|
||||
@@ -90,7 +89,6 @@ class Smarty_Internal_Runtime_TplFunction
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Add template function to cache file for nocache calls
|
||||
*
|
||||
* @param Smarty_Internal_Template $tpl
|
||||
@@ -126,11 +124,15 @@ class Smarty_Internal_Runtime_TplFunction
|
||||
if (!preg_match("/'{$funcParam['uid']}'(.*?)'nocache_hash'/", $content, $match2)) {
|
||||
$content = preg_replace("/('file_dependency'(.*?)\()/", "\\1{$match1[0]}", $content);
|
||||
}
|
||||
$tplPtr->smarty->ext->_updateCache->write($tplPtr,
|
||||
$tplPtr->smarty->ext->_updateCache->write(
|
||||
$tplPtr,
|
||||
preg_replace('/\s*\?>\s*$/', "\n", $content) .
|
||||
"\n" . preg_replace(array('/^\s*<\?php\s+/',
|
||||
"\n" . preg_replace(
|
||||
array('/^\s*<\?php\s+/',
|
||||
'/\s*\?>\s*$/',), "\n",
|
||||
$match[ 0 ]));
|
||||
$match[ 0 ]
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
@@ -6,7 +6,6 @@
|
||||
* @package Smarty
|
||||
* @subpackage PluginsInternal
|
||||
* @author Uwe Tews
|
||||
*
|
||||
**/
|
||||
class Smarty_Internal_Runtime_UpdateCache
|
||||
{
|
||||
@@ -67,8 +66,8 @@ class Smarty_Internal_Runtime_UpdateCache
|
||||
*/
|
||||
public function removeNoCacheHash(Smarty_Template_Cached $cached,
|
||||
Smarty_Internal_Template $_template,
|
||||
$no_output_filter)
|
||||
{
|
||||
$no_output_filter
|
||||
) {
|
||||
$php_pattern = '/(<%|%>|<\?php|<\?|\?>|<script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*>)/';
|
||||
$content = ob_get_clean();
|
||||
$hash_array = $cached->hashes;
|
||||
@@ -78,22 +77,30 @@ class Smarty_Internal_Runtime_UpdateCache
|
||||
$_template->cached->has_nocache_code = false;
|
||||
// get text between non-cached items
|
||||
$cache_split =
|
||||
preg_split("!/\*%%SmartyNocache:{$nocache_hash}%%\*\/(.+?)/\*/%%SmartyNocache:{$nocache_hash}%%\*/!s",
|
||||
$content);
|
||||
preg_split(
|
||||
"!/\*%%SmartyNocache:{$nocache_hash}%%\*\/(.+?)/\*/%%SmartyNocache:{$nocache_hash}%%\*/!s",
|
||||
$content
|
||||
);
|
||||
// get non-cached items
|
||||
preg_match_all("!/\*%%SmartyNocache:{$nocache_hash}%%\*\/(.+?)/\*/%%SmartyNocache:{$nocache_hash}%%\*/!s",
|
||||
preg_match_all(
|
||||
"!/\*%%SmartyNocache:{$nocache_hash}%%\*\/(.+?)/\*/%%SmartyNocache:{$nocache_hash}%%\*/!s",
|
||||
$content,
|
||||
$cache_parts);
|
||||
$cache_parts
|
||||
);
|
||||
$content = '';
|
||||
// loop over items, stitch back together
|
||||
foreach ($cache_split as $curr_idx => $curr_split) {
|
||||
if (preg_match($php_pattern, $curr_split)) {
|
||||
// escape PHP tags in template content
|
||||
$php_split = preg_split($php_pattern,
|
||||
$curr_split);
|
||||
preg_match_all($php_pattern,
|
||||
$php_split = preg_split(
|
||||
$php_pattern,
|
||||
$curr_split
|
||||
);
|
||||
preg_match_all(
|
||||
$php_pattern,
|
||||
$curr_split,
|
||||
$php_parts);
|
||||
$php_parts
|
||||
);
|
||||
foreach ($php_split as $idx_php => $curr_php) {
|
||||
$content .= $curr_php;
|
||||
if (isset($php_parts[ 0 ][ $idx_php ])) {
|
||||
@@ -108,9 +115,9 @@ class Smarty_Internal_Runtime_UpdateCache
|
||||
$content .= $cache_parts[ 2 ][ $curr_idx ];
|
||||
}
|
||||
}
|
||||
if (!$no_output_filter && !$_template->cached->has_nocache_code &&
|
||||
(isset($_template->smarty->autoload_filters[ 'output' ]) ||
|
||||
isset($_template->smarty->registered_filters[ 'output' ]))
|
||||
if (!$no_output_filter && !$_template->cached->has_nocache_code
|
||||
&& (isset($_template->smarty->autoload_filters[ 'output' ])
|
||||
|| isset($_template->smarty->registered_filters[ 'output' ]))
|
||||
) {
|
||||
$content = $_template->smarty->ext->_filterHandler->runFilter('output', $content, $_template);
|
||||
}
|
||||
|
@@ -6,7 +6,6 @@
|
||||
* @package Smarty
|
||||
* @subpackage PluginsInternal
|
||||
* @author Uwe Tews
|
||||
*
|
||||
**/
|
||||
class Smarty_Internal_Runtime_UpdateScope
|
||||
{
|
||||
@@ -17,14 +16,14 @@ class Smarty_Internal_Runtime_UpdateScope
|
||||
* @param Smarty_Internal_Template $tpl data object
|
||||
* @param string|null $varName variable name
|
||||
* @param int $tagScope tag scope to which bubble up variable value
|
||||
*
|
||||
*/
|
||||
public function _updateScope(Smarty_Internal_Template $tpl, $varName, $tagScope = 0)
|
||||
{
|
||||
if ($tagScope) {
|
||||
$this->_updateVarStack($tpl, $varName);
|
||||
$tagScope = $tagScope & ~Smarty::SCOPE_LOCAL;
|
||||
if (!$tpl->scope && !$tagScope) return;
|
||||
if (!$tpl->scope && !$tagScope) { return;
|
||||
}
|
||||
}
|
||||
$mergedScope = $tagScope | $tpl->scope;
|
||||
if ($mergedScope) {
|
||||
@@ -35,7 +34,8 @@ class Smarty_Internal_Runtime_UpdateScope
|
||||
foreach ($this->_getAffectedScopes($tpl, $mergedScope) as $ptr) {
|
||||
$this->_updateVariableInOtherScope($ptr->tpl_vars, $tpl, $varName);
|
||||
if($tagScope && $ptr->_isTplObj() && isset($tpl->_cache[ 'varStack' ])) {
|
||||
$this->_updateVarStack($ptr, $varName); }
|
||||
$this->_updateVarStack($ptr, $varName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -89,9 +89,15 @@ class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCom
|
||||
then written to compiled files. */
|
||||
// init the lexer/parser to compile the template
|
||||
$this->parser =
|
||||
new $this->parser_class(new $this->lexer_class(str_replace(array("\r\n",
|
||||
"\r"), "\n", $_content), $this),
|
||||
$this);
|
||||
new $this->parser_class(
|
||||
new $this->lexer_class(
|
||||
str_replace(
|
||||
array("\r\n",
|
||||
"\r"), "\n", $_content
|
||||
), $this
|
||||
),
|
||||
$this
|
||||
);
|
||||
if ($isTemplateSource && $this->template->caching) {
|
||||
$this->parser->insertPhpCode("<?php\n\$_smarty_tpl->compiled->nocache_hash = '{$this->nocache_hash}';\n?>\n");
|
||||
}
|
||||
@@ -127,8 +133,10 @@ class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCom
|
||||
if (count($this->_tag_stack) > 0) {
|
||||
// get stacked info
|
||||
list($openTag, $_data) = array_pop($this->_tag_stack);
|
||||
$this->trigger_template_error("unclosed {$this->smarty->left_delimiter}" . $openTag .
|
||||
"{$this->smarty->right_delimiter} tag");
|
||||
$this->trigger_template_error(
|
||||
"unclosed {$this->smarty->left_delimiter}" . $openTag .
|
||||
"{$this->smarty->right_delimiter} tag"
|
||||
);
|
||||
}
|
||||
// call post compile callbacks
|
||||
foreach ($this->postCompileCallbacks as $cb) {
|
||||
@@ -148,7 +156,6 @@ class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCom
|
||||
* @param array $parameter optional parameter array
|
||||
* @param string $key optional key for callback
|
||||
* @param bool $replace if true replace existing keyed callback
|
||||
*
|
||||
*/
|
||||
public function registerPostCompileCallback($callback, $parameter = array(), $key = null, $replace = false)
|
||||
{
|
||||
|
@@ -145,8 +145,8 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase
|
||||
*/
|
||||
public function __construct($template_resource, Smarty $smarty, Smarty_Internal_Data $_parent = null,
|
||||
$_cache_id = null, $_compile_id = null, $_caching = null, $_cache_lifetime = null,
|
||||
$_isConfig = false)
|
||||
{
|
||||
$_isConfig = false
|
||||
) {
|
||||
$this->smarty = $smarty;
|
||||
// Smarty parameter
|
||||
$this->cache_id = $_cache_id === null ? $this->smarty->cache_id : $_cache_id;
|
||||
@@ -184,8 +184,10 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase
|
||||
}
|
||||
// checks if template exists
|
||||
if (!$this->source->exists) {
|
||||
throw new SmartyException("Unable to load template '{$this->source->type}:{$this->source->name}'" .
|
||||
($this->_isSubTpl() ? " in '{$this->parent->template_resource}'" : ''));
|
||||
throw new SmartyException(
|
||||
"Unable to load template '{$this->source->type}:{$this->source->name}'" .
|
||||
($this->_isSubTpl() ? " in '{$this->parent->template_resource}'" : '')
|
||||
);
|
||||
}
|
||||
// disable caching for evaluated code
|
||||
if ($this->source->handler->recompiled) {
|
||||
@@ -193,8 +195,8 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase
|
||||
}
|
||||
// read from cache or render
|
||||
if ($this->caching === Smarty::CACHING_LIFETIME_CURRENT || $this->caching === Smarty::CACHING_LIFETIME_SAVED) {
|
||||
if (!isset($this->cached) || $this->cached->cache_id !== $this->cache_id ||
|
||||
$this->cached->compile_id !== $this->compile_id
|
||||
if (!isset($this->cached) || $this->cached->cache_id !== $this->cache_id
|
||||
|| $this->cached->compile_id !== $this->compile_id
|
||||
) {
|
||||
$this->loadCached(true);
|
||||
}
|
||||
@@ -209,12 +211,14 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase
|
||||
// display or fetch
|
||||
if ($display) {
|
||||
if ($this->caching && $this->smarty->cache_modified_check) {
|
||||
$this->smarty->ext->_cacheModify->cacheModifiedCheck($this->cached, $this,
|
||||
isset($content) ? $content : ob_get_clean());
|
||||
$this->smarty->ext->_cacheModify->cacheModifiedCheck(
|
||||
$this->cached, $this,
|
||||
isset($content) ? $content : ob_get_clean()
|
||||
);
|
||||
} else {
|
||||
if ((!$this->caching || $this->cached->has_nocache_code || $this->source->handler->recompiled) &&
|
||||
!$no_output_filter && (isset($this->smarty->autoload_filters[ 'output' ]) ||
|
||||
isset($this->smarty->registered_filters[ 'output' ]))
|
||||
if ((!$this->caching || $this->cached->has_nocache_code || $this->source->handler->recompiled)
|
||||
&& !$no_output_filter && (isset($this->smarty->autoload_filters[ 'output' ])
|
||||
|| isset($this->smarty->registered_filters[ 'output' ]))
|
||||
) {
|
||||
echo $this->smarty->ext->_filterHandler->runFilter('output', ob_get_clean(), $this);
|
||||
} else {
|
||||
@@ -234,10 +238,10 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase
|
||||
$this->smarty->_debug->display_debug($this, true);
|
||||
}
|
||||
}
|
||||
if (!$no_output_filter &&
|
||||
(!$this->caching || $this->cached->has_nocache_code || $this->source->handler->recompiled) &&
|
||||
(isset($this->smarty->autoload_filters[ 'output' ]) ||
|
||||
isset($this->smarty->registered_filters[ 'output' ]))
|
||||
if (!$no_output_filter
|
||||
&& (!$this->caching || $this->cached->has_nocache_code || $this->source->handler->recompiled)
|
||||
&& (isset($this->smarty->autoload_filters[ 'output' ])
|
||||
|| isset($this->smarty->registered_filters[ 'output' ]))
|
||||
) {
|
||||
return $this->smarty->ext->_filterHandler->runFilter('output', ob_get_clean(), $this);
|
||||
}
|
||||
@@ -264,8 +268,8 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase
|
||||
* @throws \SmartyException
|
||||
*/
|
||||
public function _subTemplateRender($template, $cache_id, $compile_id, $caching, $cache_lifetime, $data, $scope,
|
||||
$forceTplCache, $uid = null, $content_func = null)
|
||||
{
|
||||
$forceTplCache, $uid = null, $content_func = null
|
||||
) {
|
||||
$tpl = clone $this;
|
||||
$tpl->parent = $this;
|
||||
$smarty = &$this->smarty;
|
||||
@@ -322,9 +326,9 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase
|
||||
$tpl->scope = $scope;
|
||||
if (!isset(self::$tplObjCache[ $tpl->templateId ]) && !$tpl->source->handler->recompiled) {
|
||||
// check if template object should be cached
|
||||
if ($forceTplCache || (isset(self::$subTplInfo[ $tpl->template_resource ]) &&
|
||||
self::$subTplInfo[ $tpl->template_resource ] > 1) ||
|
||||
($tpl->_isSubTpl() && isset(self::$tplObjCache[ $tpl->parent->templateId ]))
|
||||
if ($forceTplCache || (isset(self::$subTplInfo[ $tpl->template_resource ])
|
||||
&& self::$subTplInfo[ $tpl->template_resource ] > 1)
|
||||
|| ($tpl->_isSubTpl() && isset(self::$tplObjCache[ $tpl->parent->templateId ]))
|
||||
) {
|
||||
self::$tplObjCache[ $tpl->templateId ] = $tpl;
|
||||
}
|
||||
@@ -369,7 +373,6 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase
|
||||
|
||||
/**
|
||||
* Get called sub-templates and save call count
|
||||
*
|
||||
*/
|
||||
public function _subTemplateRegister()
|
||||
{
|
||||
@@ -399,7 +402,6 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase
|
||||
* @param mixed $value value
|
||||
* @param bool $nocache nocache flag
|
||||
* @param int $scope scope into which variable shall be assigned
|
||||
*
|
||||
*/
|
||||
public function _assignInScope($varName, $value, $nocache = false, $scope = 0)
|
||||
{
|
||||
@@ -426,14 +428,15 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase
|
||||
*
|
||||
* @throws \SmartyException
|
||||
*/
|
||||
public function _checkPlugins($plugins) {
|
||||
public function _checkPlugins($plugins)
|
||||
{
|
||||
static $checked = array();
|
||||
foreach($plugins as $plugin) {
|
||||
$name = join('::', (array)$plugin[ 'function' ]);
|
||||
if (!isset($checked[$name])) {
|
||||
if (!is_callable($plugin['function'])) {
|
||||
if (is_file($plugin['file'])) {
|
||||
require_once $plugin['file'];
|
||||
include_once $plugin['file'];
|
||||
if (is_callable($plugin['function'])) {
|
||||
$checked[ $name ] = true;
|
||||
}
|
||||
@@ -476,8 +479,8 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase
|
||||
return false;
|
||||
}
|
||||
$is_valid = true;
|
||||
if (!empty($properties[ 'file_dependency' ]) &&
|
||||
((!$cache && $tpl->compile_check) || $tpl->compile_check === Smarty::COMPILECHECK_ON)
|
||||
if (!empty($properties[ 'file_dependency' ])
|
||||
&& ((!$cache && $tpl->compile_check) || $tpl->compile_check === Smarty::COMPILECHECK_ON)
|
||||
) {
|
||||
// check file dependencies at compiled code
|
||||
foreach ($properties[ 'file_dependency' ] as $_file_to_check) {
|
||||
@@ -507,8 +510,8 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase
|
||||
}
|
||||
if ($cache) {
|
||||
// CACHING_LIFETIME_SAVED cache expiry has to be validated here since otherwise we'd define the unifunc
|
||||
if ($tpl->caching === Smarty::CACHING_LIFETIME_SAVED && $properties[ 'cache_lifetime' ] >= 0 &&
|
||||
(time() > ($tpl->cached->timestamp + $properties[ 'cache_lifetime' ]))
|
||||
if ($tpl->caching === Smarty::CACHING_LIFETIME_SAVED && $properties[ 'cache_lifetime' ] >= 0
|
||||
&& (time() > ($tpl->cached->timestamp + $properties[ 'cache_lifetime' ]))
|
||||
) {
|
||||
$is_valid = false;
|
||||
}
|
||||
@@ -596,7 +599,6 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase
|
||||
|
||||
/**
|
||||
* Load inheritance object
|
||||
*
|
||||
*/
|
||||
public function _loadInheritance()
|
||||
{
|
||||
@@ -607,7 +609,6 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase
|
||||
|
||||
/**
|
||||
* Unload inheritance object
|
||||
*
|
||||
*/
|
||||
public function _cleanUp()
|
||||
{
|
||||
@@ -627,8 +628,10 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase
|
||||
$this->smarty->loadPlugin($this->source->compiler_class);
|
||||
}
|
||||
$this->compiler =
|
||||
new $this->source->compiler_class($this->source->template_lexer_class, $this->source->template_parser_class,
|
||||
$this->smarty);
|
||||
new $this->source->compiler_class(
|
||||
$this->source->template_lexer_class, $this->source->template_parser_class,
|
||||
$this->smarty
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -329,10 +329,12 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data
|
||||
* @throws \SmartyException
|
||||
*/
|
||||
public function registerObject($object_name, $object, $allowed_methods_properties = array(), $format = true,
|
||||
$block_methods = array())
|
||||
{
|
||||
return $this->ext->registerObject->registerObject($this, $object_name, $object, $allowed_methods_properties,
|
||||
$format, $block_methods);
|
||||
$block_methods = array()
|
||||
) {
|
||||
return $this->ext->registerObject->registerObject(
|
||||
$this, $object_name, $object, $allowed_methods_properties,
|
||||
$format, $block_methods
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -324,10 +324,12 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
public function __construct(Smarty $smarty)
|
||||
{
|
||||
$this->smarty = $smarty;
|
||||
$this->nocache_hash = str_replace(array('.',
|
||||
$this->nocache_hash = str_replace(
|
||||
array('.',
|
||||
','),
|
||||
'_',
|
||||
uniqid(rand(), true));
|
||||
uniqid(rand(), true)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -342,17 +344,21 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
*/
|
||||
public function compileTemplate(Smarty_Internal_Template $template,
|
||||
$nocache = null,
|
||||
Smarty_Internal_TemplateCompilerBase $parent_compiler = null)
|
||||
{
|
||||
Smarty_Internal_TemplateCompilerBase $parent_compiler = null
|
||||
) {
|
||||
// get code frame of compiled template
|
||||
$_compiled_code = $template->smarty->ext->_codeFrame->create($template,
|
||||
$this->compileTemplateSource($template,
|
||||
$_compiled_code = $template->smarty->ext->_codeFrame->create(
|
||||
$template,
|
||||
$this->compileTemplateSource(
|
||||
$template,
|
||||
$nocache,
|
||||
$parent_compiler),
|
||||
$parent_compiler
|
||||
),
|
||||
$this->postFilter($this->blockOrFunctionCode) .
|
||||
join('', $this->mergedSubTemplatesCode),
|
||||
false,
|
||||
$this);
|
||||
$this
|
||||
);
|
||||
return $_compiled_code;
|
||||
}
|
||||
|
||||
@@ -368,8 +374,8 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
*/
|
||||
public function compileTemplateSource(Smarty_Internal_Template $template,
|
||||
$nocache = null,
|
||||
Smarty_Internal_TemplateCompilerBase $parent_compiler = null)
|
||||
{
|
||||
Smarty_Internal_TemplateCompilerBase $parent_compiler = null
|
||||
) {
|
||||
try {
|
||||
// save template object in compiler class
|
||||
$this->template = $template;
|
||||
@@ -455,8 +461,8 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
public function postFilter($code)
|
||||
{
|
||||
// run post filter if on code
|
||||
if (!empty($code) &&
|
||||
(isset($this->smarty->autoload_filters[ 'post' ]) || isset($this->smarty->registered_filters[ 'post' ]))
|
||||
if (!empty($code)
|
||||
&& (isset($this->smarty->autoload_filters[ 'post' ]) || isset($this->smarty->registered_filters[ 'post' ]))
|
||||
) {
|
||||
return $this->smarty->ext->_filterHandler->runFilter('post', $code, $this->template);
|
||||
} else {
|
||||
@@ -475,8 +481,8 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
public function preFilter($_content)
|
||||
{
|
||||
// run pre filter if required
|
||||
if ($_content !== '' &&
|
||||
((isset($this->smarty->autoload_filters[ 'pre' ]) || isset($this->smarty->registered_filters[ 'pre' ])))
|
||||
if ($_content !== ''
|
||||
&& ((isset($this->smarty->autoload_filters[ 'pre' ]) || isset($this->smarty->registered_filters[ 'pre' ])))
|
||||
) {
|
||||
return $this->smarty->ext->_filterHandler->runFilter('pre', $_content, $this->template);
|
||||
} else {
|
||||
@@ -523,11 +529,13 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
// not a variable variable
|
||||
$var = trim($variable, '\'');
|
||||
$this->tag_nocache = $this->tag_nocache |
|
||||
$this->template->ext->getTemplateVars->_getVariable($this->template,
|
||||
$this->template->ext->getTemplateVars->_getVariable(
|
||||
$this->template,
|
||||
$var,
|
||||
null,
|
||||
true,
|
||||
false)->nocache;
|
||||
false
|
||||
)->nocache;
|
||||
// todo $this->template->compiled->properties['variables'][$var] = $this->tag_nocache | $this->nocache;
|
||||
}
|
||||
return '$_smarty_tpl->tpl_vars[' . $variable . ']->value';
|
||||
@@ -558,8 +566,8 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
public function compilePHPFunctionCall($name, $parameter)
|
||||
{
|
||||
if (!$this->smarty->security_policy || $this->smarty->security_policy->isTrustedPhpFunction($name, $this)) {
|
||||
if (strcasecmp($name, 'isset') === 0 || strcasecmp($name, 'empty') === 0 ||
|
||||
strcasecmp($name, 'array') === 0 || is_callable($name)
|
||||
if (strcasecmp($name, 'isset') === 0 || strcasecmp($name, 'empty') === 0
|
||||
|| strcasecmp($name, 'array') === 0 || is_callable($name)
|
||||
) {
|
||||
$func_name = strtolower($name);
|
||||
$par = implode(',', $parameter);
|
||||
@@ -578,13 +586,16 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
$isset_par = str_replace("')->value", "',null,true,false)->value", $par);
|
||||
}
|
||||
return $name . '(' . $isset_par . ')';
|
||||
} else if (in_array($func_name,
|
||||
} else if (in_array(
|
||||
$func_name,
|
||||
array('empty',
|
||||
'reset',
|
||||
'current',
|
||||
'end',
|
||||
'prev',
|
||||
'next'))) {
|
||||
'next')
|
||||
)
|
||||
) {
|
||||
if (count($parameter) !== 1) {
|
||||
$this->trigger_template_error("Illegal number of parameter in '{$func_name()}'");
|
||||
}
|
||||
@@ -625,8 +636,11 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
if (strpos($text, '<') !== false) {
|
||||
// capture html elements not to be messed with
|
||||
$_offset = 0;
|
||||
if (preg_match_all('#(<script[^>]*>.*?</script[^>]*>)|(<textarea[^>]*>.*?</textarea[^>]*>)|(<pre[^>]*>.*?</pre[^>]*>)#is',
|
||||
$text, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {
|
||||
if (preg_match_all(
|
||||
'#(<script[^>]*>.*?</script[^>]*>)|(<textarea[^>]*>.*?</textarea[^>]*>)|(<pre[^>]*>.*?</pre[^>]*>)#is',
|
||||
$text, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER
|
||||
)
|
||||
) {
|
||||
foreach ($matches as $match) {
|
||||
$store[] = $match[ 0 ][ 0 ];
|
||||
$_length = strlen($match[ 0 ][ 0 ]);
|
||||
@@ -648,8 +662,11 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
|
||||
$text = preg_replace(array_keys($expressions), array_values($expressions), $text);
|
||||
$_offset = 0;
|
||||
if (preg_match_all('#@!@SMARTY:([0-9]+):SMARTY@!@#is', $text, $matches,
|
||||
PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {
|
||||
if (preg_match_all(
|
||||
'#@!@SMARTY:([0-9]+):SMARTY@!@#is', $text, $matches,
|
||||
PREG_OFFSET_CAPTURE | PREG_SET_ORDER
|
||||
)
|
||||
) {
|
||||
foreach ($matches as $match) {
|
||||
$_length = strlen($match[ 0 ][ 0 ]);
|
||||
$replace = $store[ $match[ 1 ][ 0 ] ];
|
||||
@@ -710,8 +727,8 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
$_tag = explode('_', $tag);
|
||||
$_tag = array_map('ucfirst', $_tag);
|
||||
$class_name = 'Smarty_Internal_Compile_' . implode('_', $_tag);
|
||||
if (class_exists($class_name) &&
|
||||
(!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this))
|
||||
if (class_exists($class_name)
|
||||
&& (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this))
|
||||
) {
|
||||
self::$_tag_objects[ $tag ] = new $class_name;
|
||||
} else {
|
||||
@@ -801,13 +818,15 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
$callback = null;
|
||||
$script = null;
|
||||
$cacheable = true;
|
||||
$result = call_user_func_array($this->smarty->default_plugin_handler_func,
|
||||
$result = call_user_func_array(
|
||||
$this->smarty->default_plugin_handler_func,
|
||||
array($tag,
|
||||
$plugin_type,
|
||||
$this->template,
|
||||
&$callback,
|
||||
&$script,
|
||||
&$cacheable,));
|
||||
&$cacheable,)
|
||||
);
|
||||
if ($result) {
|
||||
$this->tag_nocache = $this->tag_nocache || !$cacheable;
|
||||
if ($script !== null) {
|
||||
@@ -823,7 +842,7 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
$this->required_plugins[ 'compiled' ][ $tag ][ $plugin_type ][ 'function' ] =
|
||||
$callback;
|
||||
}
|
||||
require_once $script;
|
||||
include_once $script;
|
||||
} else {
|
||||
$this->trigger_template_error("Default plugin handler: Returned script file '{$script}' for '{$tag}' not found");
|
||||
}
|
||||
@@ -875,8 +894,8 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
// If the template is not evaluated and we have a nocache section and or a nocache tag
|
||||
if ($is_code && !empty($content)) {
|
||||
// generate replacement code
|
||||
if ((!($this->template->source->handler->recompiled) || $this->forceNocache) && $this->caching &&
|
||||
!$this->suppressNocacheProcessing && ($this->nocache || $this->tag_nocache)
|
||||
if ((!($this->template->source->handler->recompiled) || $this->forceNocache) && $this->caching
|
||||
&& !$this->suppressNocacheProcessing && ($this->nocache || $this->tag_nocache)
|
||||
) {
|
||||
$this->template->compiled->has_nocache_code = true;
|
||||
$_output = addcslashes($content, '\'\\');
|
||||
@@ -1015,14 +1034,21 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
} else {
|
||||
$line = (int)$line;
|
||||
}
|
||||
if (in_array($this->template->source->type,
|
||||
if (in_array(
|
||||
$this->template->source->type,
|
||||
array('eval',
|
||||
'string'))) {
|
||||
$templateName = $this->template->source->type . ':' . trim(preg_replace('![\t\r\n]+!',
|
||||
'string')
|
||||
)
|
||||
) {
|
||||
$templateName = $this->template->source->type . ':' . trim(
|
||||
preg_replace(
|
||||
'![\t\r\n]+!',
|
||||
' ',
|
||||
strlen($lex->data) > 40 ?
|
||||
substr($lex->data, 0, 40) .
|
||||
'...' : $lex->data));
|
||||
'...' : $lex->data
|
||||
)
|
||||
);
|
||||
} else {
|
||||
$templateName = $this->template->source->type . ':' . $this->template->source->filepath;
|
||||
}
|
||||
@@ -1104,11 +1130,13 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
*/
|
||||
public function replaceDelimiter($lexerPreg)
|
||||
{
|
||||
return str_replace(array('SMARTYldel', 'SMARTYliteral', 'SMARTYrdel', 'SMARTYautoliteral', 'SMARTYal'),
|
||||
return str_replace(
|
||||
array('SMARTYldel', 'SMARTYliteral', 'SMARTYrdel', 'SMARTYautoliteral', 'SMARTYal'),
|
||||
array($this->ldelPreg, $this->literalPreg, $this->rdelPreg,
|
||||
$this->smarty->getAutoLiteral() ? '{1,}' : '{9}',
|
||||
$this->smarty->getAutoLiteral() ? '' : '\\s*'),
|
||||
$lexerPreg);
|
||||
$lexerPreg
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1153,9 +1181,11 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
{
|
||||
if (array_pop($this->_tag_stack_count) !== $this->getTagStackCount()) {
|
||||
$tag = $this->getOpenBlockTag();
|
||||
$this->trigger_template_error("unclosed '{{$tag}}' in doubled quoted string",
|
||||
$this->trigger_template_error(
|
||||
"unclosed '{{$tag}}' in doubled quoted string",
|
||||
null,
|
||||
true);
|
||||
true
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1395,9 +1425,9 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
}
|
||||
// compile the smarty tag (required compile classes to compile the tag are auto loaded)
|
||||
if (($_output = $this->callTagCompiler($tag, $args, $parameter)) === false) {
|
||||
if (isset($this->parent_compiler->tpl_function[ $tag ]) ||
|
||||
(isset ($this->template->smarty->ext->_tplFunction) &&
|
||||
$this->template->smarty->ext->_tplFunction->getTplFunction($this->template, $tag) !== false)
|
||||
if (isset($this->parent_compiler->tpl_function[ $tag ])
|
||||
|| (isset($this->template->smarty->ext->_tplFunction)
|
||||
&& $this->template->smarty->ext->_tplFunction->getTplFunction($this->template, $tag) !== false)
|
||||
) {
|
||||
// template defined by {template} tag
|
||||
$args[ '_attr' ][ 'name' ] = "'{$tag}'";
|
||||
@@ -1428,23 +1458,27 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
// check if tag is a registered object
|
||||
if (isset($this->smarty->registered_objects[ $tag ]) && isset($parameter[ 'object_method' ])) {
|
||||
$method = $parameter[ 'object_method' ];
|
||||
if (!in_array($method, $this->smarty->registered_objects[ $tag ][ 3 ]) &&
|
||||
(empty($this->smarty->registered_objects[ $tag ][ 1 ]) ||
|
||||
in_array($method, $this->smarty->registered_objects[ $tag ][ 1 ]))
|
||||
if (!in_array($method, $this->smarty->registered_objects[ $tag ][ 3 ])
|
||||
&& (empty($this->smarty->registered_objects[ $tag ][ 1 ])
|
||||
|| in_array($method, $this->smarty->registered_objects[ $tag ][ 1 ]))
|
||||
) {
|
||||
return $this->callTagCompiler('private_object_function', $args, $parameter, $tag, $method);
|
||||
} else if (in_array($method, $this->smarty->registered_objects[ $tag ][ 3 ])) {
|
||||
return $this->callTagCompiler('private_object_block_function',
|
||||
return $this->callTagCompiler(
|
||||
'private_object_block_function',
|
||||
$args,
|
||||
$parameter,
|
||||
$tag,
|
||||
$method);
|
||||
$method
|
||||
);
|
||||
} else {
|
||||
// throw exception
|
||||
$this->trigger_template_error('not allowed method "' . $method . '" in registered object "' .
|
||||
$this->trigger_template_error(
|
||||
'not allowed method "' . $method . '" in registered object "' .
|
||||
$tag . '"',
|
||||
null,
|
||||
true);
|
||||
true
|
||||
);
|
||||
}
|
||||
}
|
||||
// check if tag is registered
|
||||
@@ -1465,25 +1499,29 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
if (!$this->smarty->registered_plugins[ $plugin_type ][ $tag ][ 1 ]) {
|
||||
$this->tag_nocache = true;
|
||||
}
|
||||
return call_user_func_array($this->smarty->registered_plugins[ $plugin_type ][ $tag ][ 0 ],
|
||||
return call_user_func_array(
|
||||
$this->smarty->registered_plugins[ $plugin_type ][ $tag ][ 0 ],
|
||||
array($new_args,
|
||||
$this));
|
||||
$this)
|
||||
);
|
||||
}
|
||||
// compile registered function or block function
|
||||
if ($plugin_type === Smarty::PLUGIN_FUNCTION || $plugin_type === Smarty::PLUGIN_BLOCK) {
|
||||
return $this->callTagCompiler('private_registered_' . $plugin_type,
|
||||
return $this->callTagCompiler(
|
||||
'private_registered_' . $plugin_type,
|
||||
$args,
|
||||
$parameter,
|
||||
$tag);
|
||||
$tag
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
// check plugins from plugins folder
|
||||
foreach ($this->plugin_search_order as $plugin_type) {
|
||||
if ($plugin_type === Smarty::PLUGIN_COMPILER &&
|
||||
$this->smarty->loadPlugin('smarty_compiler_' . $tag) &&
|
||||
(!isset($this->smarty->security_policy) ||
|
||||
$this->smarty->security_policy->isTrustedTag($tag, $this))
|
||||
if ($plugin_type === Smarty::PLUGIN_COMPILER
|
||||
&& $this->smarty->loadPlugin('smarty_compiler_' . $tag)
|
||||
&& (!isset($this->smarty->security_policy)
|
||||
|| $this->smarty->security_policy->isTrustedTag($tag, $this))
|
||||
) {
|
||||
$plugin = 'smarty_compiler_' . $tag;
|
||||
if (is_callable($plugin)) {
|
||||
@@ -1507,14 +1545,16 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
throw new SmartyException("Plugin '{$tag}' not callable");
|
||||
} else {
|
||||
if ($function = $this->getPlugin($tag, $plugin_type)) {
|
||||
if (!isset($this->smarty->security_policy) ||
|
||||
$this->smarty->security_policy->isTrustedTag($tag, $this)
|
||||
if (!isset($this->smarty->security_policy)
|
||||
|| $this->smarty->security_policy->isTrustedTag($tag, $this)
|
||||
) {
|
||||
return $this->callTagCompiler('private_' . $plugin_type . '_plugin',
|
||||
return $this->callTagCompiler(
|
||||
'private_' . $plugin_type . '_plugin',
|
||||
$args,
|
||||
$parameter,
|
||||
$tag,
|
||||
$function);
|
||||
$function
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1548,14 +1588,18 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
$new_args[ $key ] = $mixed;
|
||||
}
|
||||
}
|
||||
return call_user_func_array($this->default_handler_plugins[ $plugin_type ][ $tag ][ 0 ],
|
||||
return call_user_func_array(
|
||||
$this->default_handler_plugins[ $plugin_type ][ $tag ][ 0 ],
|
||||
array($new_args,
|
||||
$this));
|
||||
$this)
|
||||
);
|
||||
} else {
|
||||
return $this->callTagCompiler('private_registered_' . $plugin_type,
|
||||
return $this->callTagCompiler(
|
||||
'private_registered_' . $plugin_type,
|
||||
$args,
|
||||
$parameter,
|
||||
$tag);
|
||||
$tag
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1566,22 +1610,26 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
if (isset($this->smarty->registered_objects[ $base_tag ]) && isset($parameter[ 'object_method' ])) {
|
||||
$method = $parameter[ 'object_method' ];
|
||||
if (in_array($method, $this->smarty->registered_objects[ $base_tag ][ 3 ])) {
|
||||
return $this->callTagCompiler('private_object_block_function',
|
||||
return $this->callTagCompiler(
|
||||
'private_object_block_function',
|
||||
$args,
|
||||
$parameter,
|
||||
$tag,
|
||||
$method);
|
||||
$method
|
||||
);
|
||||
} else {
|
||||
// throw exception
|
||||
$this->trigger_template_error('not allowed closing tag method "' . $method .
|
||||
$this->trigger_template_error(
|
||||
'not allowed closing tag method "' . $method .
|
||||
'" in registered object "' . $base_tag . '"',
|
||||
null,
|
||||
true);
|
||||
true
|
||||
);
|
||||
}
|
||||
}
|
||||
// registered block tag ?
|
||||
if (isset($this->smarty->registered_plugins[ Smarty::PLUGIN_BLOCK ][ $base_tag ]) ||
|
||||
isset($this->default_handler_plugins[ Smarty::PLUGIN_BLOCK ][ $base_tag ])
|
||||
if (isset($this->smarty->registered_plugins[ Smarty::PLUGIN_BLOCK ][ $base_tag ])
|
||||
|| isset($this->default_handler_plugins[ Smarty::PLUGIN_BLOCK ][ $base_tag ])
|
||||
) {
|
||||
return $this->callTagCompiler('private_registered_block', $args, $parameter, $tag);
|
||||
}
|
||||
@@ -1595,8 +1643,8 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
}
|
||||
// function plugin?
|
||||
if ($function = $this->getPlugin($tag, Smarty::PLUGIN_FUNCTION)) {
|
||||
if (!isset($this->smarty->security_policy) ||
|
||||
$this->smarty->security_policy->isTrustedTag($tag, $this)
|
||||
if (!isset($this->smarty->security_policy)
|
||||
|| $this->smarty->security_policy->isTrustedTag($tag, $this)
|
||||
) {
|
||||
return $this->callTagCompiler('private_function_plugin', $args, $parameter, $tag, $function);
|
||||
}
|
||||
@@ -1608,9 +1656,11 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
if (!$this->smarty->registered_plugins[ Smarty::PLUGIN_COMPILER ][ $tag ][ 1 ]) {
|
||||
$this->tag_nocache = true;
|
||||
}
|
||||
return call_user_func_array($this->smarty->registered_plugins[ Smarty::PLUGIN_COMPILER ][ $tag ][ 0 ],
|
||||
return call_user_func_array(
|
||||
$this->smarty->registered_plugins[ Smarty::PLUGIN_COMPILER ][ $tag ][ 0 ],
|
||||
array($args,
|
||||
$this));
|
||||
$this)
|
||||
);
|
||||
}
|
||||
if ($this->smarty->loadPlugin('smarty_compiler_' . $tag)) {
|
||||
$plugin = 'smarty_compiler_' . $tag;
|
||||
|
@@ -13,7 +13,6 @@
|
||||
* This is the template file lexer.
|
||||
* It is generated from the smarty_internal_templatelexer.plex file
|
||||
*
|
||||
*
|
||||
* @author Uwe Tews <uwe.tews@googlemail.com>
|
||||
*/
|
||||
class Smarty_Internal_Templatelexer
|
||||
@@ -219,7 +218,6 @@ class Smarty_Internal_Templatelexer
|
||||
|
||||
/**
|
||||
* open lexer/parser trace file
|
||||
*
|
||||
*/
|
||||
public function PrintTrace()
|
||||
{
|
||||
@@ -258,39 +256,47 @@ class Smarty_Internal_Templatelexer
|
||||
public function yypushstate($state)
|
||||
{
|
||||
if ($this->yyTraceFILE) {
|
||||
fprintf($this->yyTraceFILE,
|
||||
fprintf(
|
||||
$this->yyTraceFILE,
|
||||
"%sState push %s\n",
|
||||
$this->yyTracePrompt,
|
||||
isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] :
|
||||
$this->_yy_state);
|
||||
$this->_yy_state
|
||||
);
|
||||
}
|
||||
array_push($this->_yy_stack, $this->_yy_state);
|
||||
$this->_yy_state = $state;
|
||||
if ($this->yyTraceFILE) {
|
||||
fprintf($this->yyTraceFILE,
|
||||
fprintf(
|
||||
$this->yyTraceFILE,
|
||||
"%snew State %s\n",
|
||||
$this->yyTracePrompt,
|
||||
isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] :
|
||||
$this->_yy_state);
|
||||
$this->_yy_state
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public function yypopstate()
|
||||
{
|
||||
if ($this->yyTraceFILE) {
|
||||
fprintf($this->yyTraceFILE,
|
||||
fprintf(
|
||||
$this->yyTraceFILE,
|
||||
"%sState pop %s\n",
|
||||
$this->yyTracePrompt,
|
||||
isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] :
|
||||
$this->_yy_state);
|
||||
$this->_yy_state
|
||||
);
|
||||
}
|
||||
$this->_yy_state = array_pop($this->_yy_stack);
|
||||
if ($this->yyTraceFILE) {
|
||||
fprintf($this->yyTraceFILE,
|
||||
fprintf(
|
||||
$this->yyTraceFILE,
|
||||
"%snew State %s\n",
|
||||
$this->yyTracePrompt,
|
||||
isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] :
|
||||
$this->_yy_state);
|
||||
$this->_yy_state
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -298,11 +304,13 @@ class Smarty_Internal_Templatelexer
|
||||
{
|
||||
$this->_yy_state = $state;
|
||||
if ($this->yyTraceFILE) {
|
||||
fprintf($this->yyTraceFILE,
|
||||
fprintf(
|
||||
$this->yyTraceFILE,
|
||||
"%sState set %s\n",
|
||||
$this->yyTracePrompt,
|
||||
isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] :
|
||||
$this->_yy_state);
|
||||
$this->_yy_state
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -326,10 +334,14 @@ public function yylex1()
|
||||
$yymatches = array_filter($yymatches);
|
||||
}
|
||||
if (empty($yymatches)) {
|
||||
throw new Exception('Error: lexing failed because a rule matched' .
|
||||
' an empty string. Input "' . substr($this->data,
|
||||
throw new Exception(
|
||||
'Error: lexing failed because a rule matched' .
|
||||
' an empty string. Input "' . substr(
|
||||
$this->data,
|
||||
$this->counter,
|
||||
5) . '... state TEXT');
|
||||
5
|
||||
) . '... state TEXT'
|
||||
);
|
||||
}
|
||||
next($yymatches); // skip global match
|
||||
$this->token = key($yymatches); // token number
|
||||
@@ -354,8 +366,10 @@ public function yylex1()
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
throw new Exception('Unexpected input at line' . $this->line .
|
||||
': ' . $this->data[ $this->counter ]);
|
||||
throw new Exception(
|
||||
'Unexpected input at line' . $this->line .
|
||||
': ' . $this->data[ $this->counter ]
|
||||
);
|
||||
}
|
||||
break;
|
||||
} while (true);
|
||||
@@ -368,11 +382,13 @@ public function yylex1()
|
||||
|
||||
function yy_r1_2()
|
||||
{
|
||||
preg_match("/[*]{$this->compiler->getRdelPreg()}[\n]?/",
|
||||
preg_match(
|
||||
"/[*]{$this->compiler->getRdelPreg()}[\n]?/",
|
||||
$this->data,
|
||||
$match,
|
||||
PREG_OFFSET_CAPTURE,
|
||||
$this->counter);
|
||||
$this->counter
|
||||
);
|
||||
if (isset($match[ 0 ][ 1 ])) {
|
||||
$to = $match[ 0 ][ 1 ] + strlen($match[ 0 ][ 0 ]);
|
||||
} else {
|
||||
@@ -440,10 +456,14 @@ public function yylex2()
|
||||
$yymatches = array_filter($yymatches);
|
||||
}
|
||||
if (empty($yymatches)) {
|
||||
throw new Exception('Error: lexing failed because a rule matched' .
|
||||
' an empty string. Input "' . substr($this->data,
|
||||
throw new Exception(
|
||||
'Error: lexing failed because a rule matched' .
|
||||
' an empty string. Input "' . substr(
|
||||
$this->data,
|
||||
$this->counter,
|
||||
5) . '... state TAG');
|
||||
5
|
||||
) . '... state TAG'
|
||||
);
|
||||
}
|
||||
next($yymatches); // skip global match
|
||||
$this->token = key($yymatches); // token number
|
||||
@@ -468,8 +488,10 @@ public function yylex2()
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
throw new Exception('Unexpected input at line' . $this->line .
|
||||
': ' . $this->data[ $this->counter ]);
|
||||
throw new Exception(
|
||||
'Unexpected input at line' . $this->line .
|
||||
': ' . $this->data[ $this->counter ]
|
||||
);
|
||||
}
|
||||
break;
|
||||
} while (true);
|
||||
@@ -579,10 +601,14 @@ public function yylex3()
|
||||
$yymatches = array_filter($yymatches);
|
||||
}
|
||||
if (empty($yymatches)) {
|
||||
throw new Exception('Error: lexing failed because a rule matched' .
|
||||
' an empty string. Input "' . substr($this->data,
|
||||
throw new Exception(
|
||||
'Error: lexing failed because a rule matched' .
|
||||
' an empty string. Input "' . substr(
|
||||
$this->data,
|
||||
$this->counter,
|
||||
5) . '... state TAGBODY');
|
||||
5
|
||||
) . '... state TAGBODY'
|
||||
);
|
||||
}
|
||||
next($yymatches); // skip global match
|
||||
$this->token = key($yymatches); // token number
|
||||
@@ -607,8 +633,10 @@ public function yylex3()
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
throw new Exception('Unexpected input at line' . $this->line .
|
||||
': ' . $this->data[ $this->counter ]);
|
||||
throw new Exception(
|
||||
'Unexpected input at line' . $this->line .
|
||||
': ' . $this->data[ $this->counter ]
|
||||
);
|
||||
}
|
||||
break;
|
||||
} while (true);
|
||||
@@ -766,8 +794,8 @@ public function yylex3()
|
||||
function yy_r3_43()
|
||||
{
|
||||
// resolve conflicts with shorttag and right_delimiter starting with '='
|
||||
if (substr($this->data, $this->counter + strlen($this->value) - 1, $this->compiler->getRdelLength()) ===
|
||||
$this->smarty->getRightDelimiter()) {
|
||||
if (substr($this->data, $this->counter + strlen($this->value) - 1, $this->compiler->getRdelLength()) === $this->smarty->getRightDelimiter()
|
||||
) {
|
||||
preg_match('/\s+/', $this->value, $match);
|
||||
$this->value = $match[ 0 ];
|
||||
$this->token = Smarty_Internal_Templateparser::TP_SPACE;
|
||||
@@ -867,10 +895,14 @@ public function yylex4()
|
||||
$yymatches = array_filter($yymatches);
|
||||
}
|
||||
if (empty($yymatches)) {
|
||||
throw new Exception('Error: lexing failed because a rule matched' .
|
||||
' an empty string. Input "' . substr($this->data,
|
||||
throw new Exception(
|
||||
'Error: lexing failed because a rule matched' .
|
||||
' an empty string. Input "' . substr(
|
||||
$this->data,
|
||||
$this->counter,
|
||||
5) . '... state LITERAL');
|
||||
5
|
||||
) . '... state LITERAL'
|
||||
);
|
||||
}
|
||||
next($yymatches); // skip global match
|
||||
$this->token = key($yymatches); // token number
|
||||
@@ -895,8 +927,10 @@ public function yylex4()
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
throw new Exception('Unexpected input at line' . $this->line .
|
||||
': ' . $this->data[ $this->counter ]);
|
||||
throw new Exception(
|
||||
'Unexpected input at line' . $this->line .
|
||||
': ' . $this->data[ $this->counter ]
|
||||
);
|
||||
}
|
||||
break;
|
||||
} while (true);
|
||||
@@ -944,10 +978,14 @@ public function yylex5()
|
||||
$yymatches = array_filter($yymatches);
|
||||
}
|
||||
if (empty($yymatches)) {
|
||||
throw new Exception('Error: lexing failed because a rule matched' .
|
||||
' an empty string. Input "' . substr($this->data,
|
||||
throw new Exception(
|
||||
'Error: lexing failed because a rule matched' .
|
||||
' an empty string. Input "' . substr(
|
||||
$this->data,
|
||||
$this->counter,
|
||||
5) . '... state DOUBLEQUOTEDSTRING');
|
||||
5
|
||||
) . '... state DOUBLEQUOTEDSTRING'
|
||||
);
|
||||
}
|
||||
next($yymatches); // skip global match
|
||||
$this->token = key($yymatches); // token number
|
||||
@@ -972,8 +1010,10 @@ public function yylex5()
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
throw new Exception('Unexpected input at line' . $this->line .
|
||||
': ' . $this->data[ $this->counter ]);
|
||||
throw new Exception(
|
||||
'Unexpected input at line' . $this->line .
|
||||
': ' . $this->data[ $this->counter ]
|
||||
);
|
||||
}
|
||||
break;
|
||||
} while (true);
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -82,9 +82,11 @@ abstract class Smarty_Resource
|
||||
if (class_exists($_resource_class, false)) {
|
||||
return $smarty->_cache[ 'resource_handlers' ][ $type ] = new $_resource_class();
|
||||
} else {
|
||||
$smarty->registerResource($type,
|
||||
$smarty->registerResource(
|
||||
$type,
|
||||
array("smarty_resource_{$type}_source", "smarty_resource_{$type}_timestamp",
|
||||
"smarty_resource_{$type}_secure", "smarty_resource_{$type}_trusted"));
|
||||
"smarty_resource_{$type}_secure", "smarty_resource_{$type}_trusted")
|
||||
);
|
||||
// give it another try, now that the resource is registered properly
|
||||
return self::load($smarty, $type);
|
||||
}
|
||||
@@ -105,6 +107,7 @@ abstract class Smarty_Resource
|
||||
|
||||
/**
|
||||
* extract resource_type and resource_name from template_resource and config_resource
|
||||
*
|
||||
* @note "C:/foo.tpl" was forced to file resource up till Smarty 3.1.3 (including).
|
||||
*
|
||||
* @param string $resource_name template_resource or config_resource to parse
|
||||
@@ -143,8 +146,8 @@ abstract class Smarty_Resource
|
||||
$resource = Smarty_Resource::load($smarty, $type);
|
||||
// go relative to a given template?
|
||||
$_file_is_dotted = $name[ 0 ] === '.' && ($name[ 1 ] === '.' || $name[ 1 ] === '/');
|
||||
if ($obj->_isTplObj() && $_file_is_dotted &&
|
||||
($obj->source->type === 'file' || $obj->parent->source->type === 'extends')
|
||||
if ($obj->_isTplObj() && $_file_is_dotted
|
||||
&& ($obj->source->type === 'file' || $obj->parent->source->type === 'extends')
|
||||
) {
|
||||
$name = $smarty->_realpath(dirname($obj->parent->source->filepath) . DIRECTORY_SEPARATOR . $name);
|
||||
}
|
||||
@@ -165,8 +168,8 @@ abstract class Smarty_Resource
|
||||
*/
|
||||
public static function source(Smarty_Internal_Template $_template = null,
|
||||
Smarty $smarty = null,
|
||||
$template_resource = null)
|
||||
{
|
||||
$template_resource = null
|
||||
) {
|
||||
return Smarty_Template_Source::load($_template, $smarty, $template_resource);
|
||||
}
|
||||
|
||||
|
@@ -271,8 +271,8 @@ class Smarty_Security
|
||||
*/
|
||||
public function isTrustedPhpFunction($function_name, $compiler)
|
||||
{
|
||||
if (isset($this->php_functions) &&
|
||||
(empty($this->php_functions) || in_array($function_name, $this->php_functions))
|
||||
if (isset($this->php_functions)
|
||||
&& (empty($this->php_functions) || in_array($function_name, $this->php_functions))
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
@@ -293,8 +293,8 @@ class Smarty_Security
|
||||
*/
|
||||
public function isTrustedStaticClass($class_name, $compiler)
|
||||
{
|
||||
if (isset($this->static_classes) &&
|
||||
(empty($this->static_classes) || in_array($class_name, $this->static_classes))
|
||||
if (isset($this->static_classes)
|
||||
&& (empty($this->static_classes) || in_array($class_name, $this->static_classes))
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
@@ -333,8 +333,8 @@ class Smarty_Security
|
||||
// fall back
|
||||
return $this->isTrustedStaticClass($class_name, $compiler);
|
||||
}
|
||||
if (isset($allowed[ $class_name ]) &&
|
||||
(empty($allowed[ $class_name ]) || in_array($name, $allowed[ $class_name ]))
|
||||
if (isset($allowed[ $class_name ])
|
||||
&& (empty($allowed[ $class_name ]) || in_array($name, $allowed[ $class_name ]))
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
@@ -354,8 +354,8 @@ class Smarty_Security
|
||||
*/
|
||||
public function isTrustedPhpModifier($modifier_name, $compiler)
|
||||
{
|
||||
if (isset($this->php_modifiers) &&
|
||||
(empty($this->php_modifiers) || in_array($modifier_name, $this->php_modifiers))
|
||||
if (isset($this->php_modifiers)
|
||||
&& (empty($this->php_modifiers) || in_array($modifier_name, $this->php_modifiers))
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
@@ -377,11 +377,14 @@ class Smarty_Security
|
||||
public function isTrustedTag($tag_name, $compiler)
|
||||
{
|
||||
// check for internal always required tags
|
||||
if (in_array($tag_name,
|
||||
if (in_array(
|
||||
$tag_name,
|
||||
array('assign', 'call', 'private_filter', 'private_block_plugin', 'private_function_plugin',
|
||||
'private_object_block_function', 'private_object_function', 'private_registered_function',
|
||||
'private_registered_block', 'private_special_variable', 'private_print_expression',
|
||||
'private_modifier'))) {
|
||||
'private_modifier')
|
||||
)
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
// check security settings
|
||||
@@ -414,8 +417,10 @@ class Smarty_Security
|
||||
if (!in_array($var_name, $this->disabled_special_smarty_vars)) {
|
||||
return true;
|
||||
} else {
|
||||
$compiler->trigger_template_error("special variable '\$smarty.{$var_name}' not allowed by security setting",
|
||||
null, true);
|
||||
$compiler->trigger_template_error(
|
||||
"special variable '\$smarty.{$var_name}' not allowed by security setting",
|
||||
null, true
|
||||
);
|
||||
}
|
||||
|
||||
return false; // should not, but who knows what happens to the compiler in the future?
|
||||
@@ -441,16 +446,20 @@ class Smarty_Security
|
||||
if (empty($this->disabled_modifiers) || !in_array($modifier_name, $this->disabled_modifiers)) {
|
||||
return true;
|
||||
} else {
|
||||
$compiler->trigger_template_error("modifier '{$modifier_name}' disabled by security setting", null,
|
||||
true);
|
||||
$compiler->trigger_template_error(
|
||||
"modifier '{$modifier_name}' disabled by security setting", null,
|
||||
true
|
||||
);
|
||||
}
|
||||
} elseif (in_array($modifier_name, $this->allowed_modifiers) &&
|
||||
!in_array($modifier_name, $this->disabled_modifiers)
|
||||
} elseif (in_array($modifier_name, $this->allowed_modifiers)
|
||||
&& !in_array($modifier_name, $this->disabled_modifiers)
|
||||
) {
|
||||
return true;
|
||||
} else {
|
||||
$compiler->trigger_template_error("modifier '{$modifier_name}' not allowed by security setting", null,
|
||||
true);
|
||||
$compiler->trigger_template_error(
|
||||
"modifier '{$modifier_name}' not allowed by security setting", null,
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
return false; // should not, but who knows what happens to the compiler in the future?
|
||||
@@ -611,7 +620,8 @@ class Smarty_Security
|
||||
* @param array $oldDir
|
||||
* @param array $newDir
|
||||
*/
|
||||
private function _updateResourceDir($oldDir, $newDir) {
|
||||
private function _updateResourceDir($oldDir, $newDir)
|
||||
{
|
||||
foreach ($oldDir as $directory) {
|
||||
// $directory = $this->smarty->_realpath($directory, true);
|
||||
$length = strlen($directory);
|
||||
@@ -705,7 +715,6 @@ class Smarty_Security
|
||||
|
||||
/**
|
||||
* Exit template processing
|
||||
*
|
||||
*/
|
||||
public function endTemplate()
|
||||
{
|
||||
|
@@ -92,7 +92,7 @@ class Smarty_Template_Cached extends Smarty_Template_Resource_Base
|
||||
$this->cache_id = $_template->cache_id;
|
||||
$this->source = $_template->source;
|
||||
if (!class_exists('Smarty_CacheResource', false)) {
|
||||
require SMARTY_SYSPLUGINS_DIR . 'smarty_cacheresource.php';
|
||||
include SMARTY_SYSPLUGINS_DIR . 'smarty_cacheresource.php';
|
||||
}
|
||||
$this->handler = Smarty_CacheResource::load($_template->smarty);
|
||||
}
|
||||
@@ -163,14 +163,14 @@ class Smarty_Template_Cached extends Smarty_Template_Resource_Base
|
||||
} else {
|
||||
$this->valid = true;
|
||||
}
|
||||
if ($this->valid && $_template->caching === Smarty::CACHING_LIFETIME_CURRENT &&
|
||||
$_template->cache_lifetime >= 0 && time() > ($this->timestamp + $_template->cache_lifetime)
|
||||
if ($this->valid && $_template->caching === Smarty::CACHING_LIFETIME_CURRENT
|
||||
&& $_template->cache_lifetime >= 0 && time() > ($this->timestamp + $_template->cache_lifetime)
|
||||
) {
|
||||
// lifetime expired
|
||||
$this->valid = false;
|
||||
}
|
||||
if ($this->valid && $_template->compile_check === Smarty::COMPILECHECK_ON &&
|
||||
$_template->source->getTimeStamp() > $this->timestamp
|
||||
if ($this->valid && $_template->compile_check === Smarty::COMPILECHECK_ON
|
||||
&& $_template->source->getTimeStamp() > $this->timestamp
|
||||
) {
|
||||
$this->valid = false;
|
||||
}
|
||||
@@ -204,9 +204,9 @@ class Smarty_Template_Cached extends Smarty_Template_Resource_Base
|
||||
} else {
|
||||
return $this->valid;
|
||||
}
|
||||
if ($this->valid && $_template->caching === Smarty::CACHING_LIFETIME_SAVED &&
|
||||
$_template->cached->cache_lifetime >= 0 &&
|
||||
(time() > ($_template->cached->timestamp + $_template->cached->cache_lifetime))
|
||||
if ($this->valid && $_template->caching === Smarty::CACHING_LIFETIME_SAVED
|
||||
&& $_template->cached->cache_lifetime >= 0
|
||||
&& (time() > ($_template->cached->timestamp + $_template->cached->cache_lifetime))
|
||||
) {
|
||||
$this->valid = false;
|
||||
}
|
||||
|
@@ -135,8 +135,8 @@ class Smarty_Template_Compiled extends Smarty_Template_Resource_Base
|
||||
if ($source->handler->recompiled) {
|
||||
$source->handler->process($_smarty_tpl);
|
||||
} else if (!$source->handler->uncompiled) {
|
||||
if (!$this->exists || $smarty->force_compile ||
|
||||
($_smarty_tpl->compile_check && $source->getTimeStamp() > $this->getTimeStamp())
|
||||
if (!$this->exists || $smarty->force_compile
|
||||
|| ($_smarty_tpl->compile_check && $source->getTimeStamp() > $this->getTimeStamp())
|
||||
) {
|
||||
$this->compileTemplateSource($_smarty_tpl);
|
||||
$compileCheck = $_smarty_tpl->compile_check;
|
||||
@@ -145,7 +145,7 @@ class Smarty_Template_Compiled extends Smarty_Template_Resource_Base
|
||||
$_smarty_tpl->compile_check = $compileCheck;
|
||||
} else {
|
||||
$_smarty_tpl->mustCompile = true;
|
||||
@include($this->filepath);
|
||||
@include $this->filepath;
|
||||
if ($_smarty_tpl->mustCompile) {
|
||||
$this->compileTemplateSource($_smarty_tpl);
|
||||
$compileCheck = $_smarty_tpl->compile_check;
|
||||
@@ -252,7 +252,7 @@ class Smarty_Template_Compiled extends Smarty_Template_Resource_Base
|
||||
if (defined('HHVM_VERSION')) {
|
||||
eval('?>' . file_get_contents($this->filepath));
|
||||
} else {
|
||||
include($this->filepath);
|
||||
include $this->filepath;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user