mirror of
https://github.com/smarty-php/smarty.git
synced 2025-11-02 05:11:36 +01:00
- reformating for PSR-2 coding standards https://github.com/smarty-php/smarty/pull/483
This commit is contained in:
@@ -26,31 +26,36 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
static $_tag_objects = array();
|
||||
public static $_tag_objects = array();
|
||||
|
||||
/**
|
||||
* counter for prefix variable number
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public static $prefixVariableNumber = 0;
|
||||
|
||||
/**
|
||||
* Smarty object
|
||||
*
|
||||
* @var Smarty
|
||||
*/
|
||||
public $smarty = null;
|
||||
|
||||
/**
|
||||
* Parser object
|
||||
*
|
||||
* @var Smarty_Internal_Templateparser
|
||||
*/
|
||||
public $parser = null;
|
||||
|
||||
/**
|
||||
* hash for nocache sections
|
||||
*
|
||||
* @var mixed
|
||||
*/
|
||||
public $nocache_hash = null;
|
||||
|
||||
/**
|
||||
* suppress generation of nocache code
|
||||
*
|
||||
@@ -71,174 +76,203 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
* @var array
|
||||
*/
|
||||
public $_tag_stack = array();
|
||||
|
||||
/**
|
||||
* tag stack count
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $_tag_stack_count = array();
|
||||
|
||||
/**
|
||||
* Plugins used by template
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $required_plugins = array('compiled' => array(), 'nocache' => array());
|
||||
|
||||
/**
|
||||
* Required plugins stack
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $required_plugins_stack = array();
|
||||
|
||||
/**
|
||||
* current template
|
||||
*
|
||||
* @var Smarty_Internal_Template
|
||||
*/
|
||||
public $template = null;
|
||||
|
||||
/**
|
||||
* merged included sub template data
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $mergedSubTemplatesData = array();
|
||||
|
||||
/**
|
||||
* merged sub template code
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $mergedSubTemplatesCode = array();
|
||||
|
||||
/**
|
||||
* collected template properties during compilation
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $templateProperties = array();
|
||||
|
||||
/**
|
||||
* source line offset for error messages
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $trace_line_offset = 0;
|
||||
|
||||
/**
|
||||
* trace uid
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $trace_uid = '';
|
||||
|
||||
/**
|
||||
* trace file path
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $trace_filepath = '';
|
||||
|
||||
/**
|
||||
* stack for tracing file and line of nested {block} tags
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $trace_stack = array();
|
||||
|
||||
/**
|
||||
* plugins loaded by default plugin handler
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $default_handler_plugins = array();
|
||||
|
||||
/**
|
||||
* saved preprocessed modifier list
|
||||
*
|
||||
* @var mixed
|
||||
*/
|
||||
public $default_modifier_list = null;
|
||||
|
||||
/**
|
||||
* force compilation of complete template as nocache
|
||||
*
|
||||
* @var boolean
|
||||
*/
|
||||
public $forceNocache = false;
|
||||
|
||||
/**
|
||||
* flag if compiled template file shall we written
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
public $write_compiled_code = true;
|
||||
|
||||
/**
|
||||
* Template functions
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $tpl_function = array();
|
||||
|
||||
/**
|
||||
* called sub functions from template function
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $called_functions = array();
|
||||
|
||||
/**
|
||||
* compiled template or block function code
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $blockOrFunctionCode = '';
|
||||
|
||||
/**
|
||||
* php_handling setting either from Smarty or security
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $php_handling = 0;
|
||||
|
||||
/**
|
||||
* flags for used modifier plugins
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $modifier_plugins = array();
|
||||
|
||||
/**
|
||||
* type of already compiled modifier
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $known_modifier_type = array();
|
||||
|
||||
/**
|
||||
* parent compiler object for merged subtemplates and template functions
|
||||
*
|
||||
* @var Smarty_Internal_TemplateCompilerBase
|
||||
*/
|
||||
public $parent_compiler = null;
|
||||
|
||||
/**
|
||||
* Flag true when compiling nocache section
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
public $nocache = false;
|
||||
|
||||
/**
|
||||
* Flag true when tag is compiled as nocache
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
public $tag_nocache = false;
|
||||
|
||||
/**
|
||||
* Compiled tag prefix code
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $prefix_code = array();
|
||||
|
||||
/**
|
||||
* used prefix variables by current compiled tag
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $usedPrefixVariables = array();
|
||||
|
||||
/**
|
||||
* Prefix code stack
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $prefixCodeStack = array();
|
||||
|
||||
/**
|
||||
* Tag has compiled code
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
public $has_code = false;
|
||||
|
||||
/**
|
||||
* A variable string was compiled
|
||||
*
|
||||
@@ -252,63 +286,75 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
* @var array
|
||||
*/
|
||||
public $variable_filter_stack = array();
|
||||
|
||||
/**
|
||||
* variable filters for {setfilter} {/setfilter}
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $variable_filters = array();
|
||||
|
||||
/**
|
||||
* Nesting count of looping tags like {foreach}, {for}, {section}, {while}
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $loopNesting = 0;
|
||||
|
||||
/**
|
||||
* Strip preg pattern
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $stripRegEx = '![\t ]*[\r\n]+[\t ]*!';
|
||||
|
||||
/**
|
||||
* plugin search order
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $plugin_search_order = array('function',
|
||||
'block',
|
||||
'compiler',
|
||||
'class');
|
||||
public $plugin_search_order = array(
|
||||
'function',
|
||||
'block',
|
||||
'compiler',
|
||||
'class'
|
||||
);
|
||||
|
||||
/**
|
||||
* General storage area for tag compiler plugins
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $_cache = array();
|
||||
|
||||
/**
|
||||
* Lexer preg pattern for left delimiter
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $ldelPreg = '[{]';
|
||||
|
||||
/**
|
||||
* Lexer preg pattern for right delimiter
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $rdelPreg = '[}]';
|
||||
|
||||
/**
|
||||
* Length of right delimiter
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
private $rdelLength = 0;
|
||||
|
||||
/**
|
||||
* Length of left delimiter
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
private $ldelLength = 0;
|
||||
|
||||
/**
|
||||
* Lexer preg pattern for user literals
|
||||
*
|
||||
@@ -325,8 +371,10 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
{
|
||||
$this->smarty = $smarty;
|
||||
$this->nocache_hash = str_replace(
|
||||
array('.',
|
||||
','),
|
||||
array(
|
||||
'.',
|
||||
','
|
||||
),
|
||||
'_',
|
||||
uniqid(mt_rand(), true)
|
||||
);
|
||||
@@ -335,14 +383,15 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
/**
|
||||
* Method to compile a Smarty template
|
||||
*
|
||||
* @param Smarty_Internal_Template $template template object to compile
|
||||
* @param bool $nocache true is shall be compiled in nocache mode
|
||||
* @param Smarty_Internal_Template $template template object to compile
|
||||
* @param bool $nocache true is shall be compiled in nocache mode
|
||||
* @param null|Smarty_Internal_TemplateCompilerBase $parent_compiler
|
||||
*
|
||||
* @return bool true if compiling succeeded, false if it failed
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function compileTemplate(Smarty_Internal_Template $template,
|
||||
public function compileTemplate(
|
||||
Smarty_Internal_Template $template,
|
||||
$nocache = null,
|
||||
Smarty_Internal_TemplateCompilerBase $parent_compiler = null
|
||||
) {
|
||||
@@ -355,7 +404,7 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
$parent_compiler
|
||||
),
|
||||
$this->postFilter($this->blockOrFunctionCode) .
|
||||
join('', $this->mergedSubTemplatesCode),
|
||||
join('', $this->mergedSubTemplatesCode),
|
||||
false,
|
||||
$this
|
||||
);
|
||||
@@ -366,13 +415,14 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
* Compile template source and run optional post filter
|
||||
*
|
||||
* @param \Smarty_Internal_Template $template
|
||||
* @param null|bool $nocache flag if template must be compiled in nocache mode
|
||||
* @param null|bool $nocache flag if template must be compiled in nocache mode
|
||||
* @param \Smarty_Internal_TemplateCompilerBase $parent_compiler
|
||||
*
|
||||
* @return string
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function compileTemplateSource(Smarty_Internal_Template $template,
|
||||
public function compileTemplateSource(
|
||||
Smarty_Internal_Template $template,
|
||||
$nocache = null,
|
||||
Smarty_Internal_TemplateCompilerBase $parent_compiler = null
|
||||
) {
|
||||
@@ -411,9 +461,11 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
// add file dependency
|
||||
if ($this->smarty->merge_compiled_includes || $this->template->source->handler->checkTimestamps()) {
|
||||
$this->parent_compiler->template->compiled->file_dependency[ $this->template->source->uid ] =
|
||||
array($this->template->source->filepath,
|
||||
$this->template->source->getTimeStamp(),
|
||||
$this->template->source->type,);
|
||||
array(
|
||||
$this->template->source->filepath,
|
||||
$this->template->source->getTimeStamp(),
|
||||
$this->template->source->type,
|
||||
);
|
||||
}
|
||||
$this->smarty->_current_file = $this->template->source->filepath;
|
||||
// get template source
|
||||
@@ -430,8 +482,7 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
if (!empty($this->required_plugins[ 'compiled' ]) || !empty($this->required_plugins[ 'nocache' ])) {
|
||||
$_compiled_code = '<?php ' . $this->compileRequiredPlugins() . "?>\n" . $_compiled_code;
|
||||
}
|
||||
}
|
||||
catch (Exception $e) {
|
||||
} catch (Exception $e) {
|
||||
if ($this->smarty->debugging) {
|
||||
$this->smarty->_debug->end_compile($this->template);
|
||||
}
|
||||
@@ -461,7 +512,7 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
public function postFilter($code)
|
||||
{
|
||||
// run post filter if on code
|
||||
if (!empty($code)
|
||||
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);
|
||||
@@ -481,7 +532,7 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
public function preFilter($_content)
|
||||
{
|
||||
// run pre filter if required
|
||||
if ($_content !== ''
|
||||
if ($_content !== ''
|
||||
&& ((isset($this->smarty->autoload_filters[ 'pre' ]) || isset($this->smarty->registered_filters[ 'pre' ])))
|
||||
) {
|
||||
return $this->smarty->ext->_filterHandler->runFilter('pre', $_content, $this->template);
|
||||
@@ -529,13 +580,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,
|
||||
$var,
|
||||
null,
|
||||
true,
|
||||
false
|
||||
)->nocache;
|
||||
$this->template->ext->getTemplateVars->_getVariable(
|
||||
$this->template,
|
||||
$var,
|
||||
null,
|
||||
true,
|
||||
false
|
||||
)->nocache;
|
||||
// todo $this->template->compiled->properties['variables'][$var] = $this->tag_nocache | $this->nocache;
|
||||
}
|
||||
return '$_smarty_tpl->tpl_vars[' . $variable . ']->value';
|
||||
@@ -566,7 +617,7 @@ 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
|
||||
if (strcasecmp($name, 'isset') === 0 || strcasecmp($name, 'empty') === 0
|
||||
|| strcasecmp($name, 'array') === 0 || is_callable($name)
|
||||
) {
|
||||
$func_name = strtolower($name);
|
||||
@@ -588,12 +639,14 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
return $name . '(' . $isset_par . ')';
|
||||
} elseif (in_array(
|
||||
$func_name,
|
||||
array('empty',
|
||||
'reset',
|
||||
'current',
|
||||
'end',
|
||||
'prev',
|
||||
'next')
|
||||
array(
|
||||
'empty',
|
||||
'reset',
|
||||
'current',
|
||||
'end',
|
||||
'prev',
|
||||
'next'
|
||||
)
|
||||
)
|
||||
) {
|
||||
if (count($parameter) !== 1) {
|
||||
@@ -629,7 +682,7 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
*/
|
||||
public function processText($text)
|
||||
{
|
||||
if ((string) $text != '') {
|
||||
if ((string)$text != '') {
|
||||
$store = array();
|
||||
$_store = 0;
|
||||
if ($this->parser->strip) {
|
||||
@@ -638,7 +691,9 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
$_offset = 0;
|
||||
if (preg_match_all(
|
||||
'#(<script[^>]*>.*?</script[^>]*>)|(<textarea[^>]*>.*?</textarea[^>]*>)|(<pre[^>]*>.*?</pre[^>]*>)#is',
|
||||
$text, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER
|
||||
$text,
|
||||
$matches,
|
||||
PREG_OFFSET_CAPTURE | PREG_SET_ORDER
|
||||
)
|
||||
) {
|
||||
foreach ($matches as $match) {
|
||||
@@ -646,24 +701,26 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
$_length = strlen($match[ 0 ][ 0 ]);
|
||||
$replace = '@!@SMARTY:' . $_store . ':SMARTY@!@';
|
||||
$text = substr_replace($text, $replace, $match[ 0 ][ 1 ] - $_offset, $_length);
|
||||
|
||||
$_offset += $_length - strlen($replace);
|
||||
$_store ++;
|
||||
$_store++;
|
||||
}
|
||||
}
|
||||
$expressions = array(// replace multiple spaces between tags by a single space
|
||||
'#(:SMARTY@!@|>)[\040\011]+(?=@!@SMARTY:|<)#s' => '\1 \2',
|
||||
'#(:SMARTY@!@|>)[\040\011]+(?=@!@SMARTY:|<)#s' => '\1 \2',
|
||||
// remove newline between tags
|
||||
'#(:SMARTY@!@|>)[\040\011]*[\n]\s*(?=@!@SMARTY:|<)#s' => '\1\2',
|
||||
'#(:SMARTY@!@|>)[\040\011]*[\n]\s*(?=@!@SMARTY:|<)#s' => '\1\2',
|
||||
// remove multiple spaces between attributes (but not in attribute values!)
|
||||
'#(([a-z0-9]\s*=\s*("[^"]*?")|(\'[^\']*?\'))|<[a-z0-9_]+)\s+([a-z/>])#is' => '\1 \5',
|
||||
'#>[\040\011]+$#Ss' => '> ', '#>[\040\011]*[\n]\s*$#Ss' => '>',
|
||||
$this->stripRegEx => '',);
|
||||
|
||||
'#>[\040\011]+$#Ss' => '> ',
|
||||
'#>[\040\011]*[\n]\s*$#Ss' => '>',
|
||||
$this->stripRegEx => '',
|
||||
);
|
||||
$text = preg_replace(array_keys($expressions), array_values($expressions), $text);
|
||||
$_offset = 0;
|
||||
if (preg_match_all(
|
||||
'#@!@SMARTY:([0-9]+):SMARTY@!@#is', $text, $matches,
|
||||
'#@!@SMARTY:([0-9]+):SMARTY@!@#is',
|
||||
$text,
|
||||
$matches,
|
||||
PREG_OFFSET_CAPTURE | PREG_SET_ORDER
|
||||
)
|
||||
) {
|
||||
@@ -671,9 +728,8 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
$_length = strlen($match[ 0 ][ 0 ]);
|
||||
$replace = $store[ $match[ 1 ][ 0 ] ];
|
||||
$text = substr_replace($text, $replace, $match[ 0 ][ 1 ] + $_offset, $_length);
|
||||
|
||||
$_offset += strlen($replace) - $_length;
|
||||
$_store ++;
|
||||
$_store++;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -726,7 +782,7 @@ 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)
|
||||
if (class_exists($class_name)
|
||||
&& (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this))
|
||||
) {
|
||||
self::$_tag_objects[ $tag ] = new $class_name;
|
||||
@@ -740,8 +796,8 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
/**
|
||||
* Check for plugins and return function name
|
||||
*
|
||||
* @param $plugin_name
|
||||
* @param string $plugin_type type of plugin
|
||||
* @param $plugin_name
|
||||
* @param string $plugin_type type of plugin
|
||||
*
|
||||
* @return string call name of function
|
||||
* @throws \SmartyException
|
||||
@@ -819,12 +875,14 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
$cacheable = true;
|
||||
$result = call_user_func_array(
|
||||
$this->smarty->default_plugin_handler_func,
|
||||
array($tag,
|
||||
$plugin_type,
|
||||
$this->template,
|
||||
&$callback,
|
||||
&$script,
|
||||
&$cacheable,)
|
||||
array(
|
||||
$tag,
|
||||
$plugin_type,
|
||||
$this->template,
|
||||
&$callback,
|
||||
&$script,
|
||||
&$cacheable,
|
||||
)
|
||||
);
|
||||
if ($result) {
|
||||
$this->tag_nocache = $this->tag_nocache || !$cacheable;
|
||||
@@ -847,9 +905,11 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
}
|
||||
}
|
||||
if (is_callable($callback)) {
|
||||
$this->default_handler_plugins[ $plugin_type ][ $tag ] = array($callback,
|
||||
true,
|
||||
array());
|
||||
$this->default_handler_plugins[ $plugin_type ][ $tag ] = array(
|
||||
$callback,
|
||||
true,
|
||||
array()
|
||||
);
|
||||
return true;
|
||||
} else {
|
||||
$this->trigger_template_error("Default plugin handler: Returned callback for '{$tag}' not callable");
|
||||
@@ -893,13 +953,14 @@ 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
|
||||
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, '\'\\');
|
||||
$_output = str_replace('^#^', '\'', $_output);
|
||||
$_output = "<?php echo '/*%%SmartyNocache:{$this->nocache_hash}%%*/{$_output}/*/%%SmartyNocache:{$this->nocache_hash}%%*/';?>\n";
|
||||
$_output =
|
||||
"<?php echo '/*%%SmartyNocache:{$this->nocache_hash}%%*/{$_output}/*/%%SmartyNocache:{$this->nocache_hash}%%*/';?>\n";
|
||||
// make sure we include modifier plugins for nocache code
|
||||
foreach ($this->modifier_plugins as $plugin_name => $dummy) {
|
||||
if (isset($this->required_plugins[ 'compiled' ][ $plugin_name ][ 'modifier' ])) {
|
||||
@@ -968,7 +1029,7 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $_attr tag attributes
|
||||
* @param array $_attr tag attributes
|
||||
* @param array $validScopes
|
||||
*
|
||||
* @return int|string
|
||||
@@ -1035,19 +1096,21 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
}
|
||||
if (in_array(
|
||||
$this->template->source->type,
|
||||
array('eval',
|
||||
'string')
|
||||
array(
|
||||
'eval',
|
||||
'string'
|
||||
)
|
||||
)
|
||||
) {
|
||||
$templateName = $this->template->source->type . ':' . trim(
|
||||
preg_replace(
|
||||
'![\t\r\n]+!',
|
||||
' ',
|
||||
strlen($lex->data) > 40 ?
|
||||
substr($lex->data, 0, 40) .
|
||||
'...' : $lex->data
|
||||
)
|
||||
);
|
||||
preg_replace(
|
||||
'![\t\r\n]+!',
|
||||
' ',
|
||||
strlen($lex->data) > 40 ?
|
||||
substr($lex->data, 0, 40) .
|
||||
'...' : $lex->data
|
||||
)
|
||||
);
|
||||
} else {
|
||||
$templateName = $this->template->source->type . ':' . $this->template->source->filepath;
|
||||
}
|
||||
@@ -1131,9 +1194,11 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
{
|
||||
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*'),
|
||||
array(
|
||||
$this->ldelPreg, $this->literalPreg, $this->rdelPreg,
|
||||
$this->smarty->getAutoLiteral() ? '{1,}' : '{9}',
|
||||
$this->smarty->getAutoLiteral() ? '' : '\\s*'
|
||||
),
|
||||
$lexerPreg
|
||||
);
|
||||
}
|
||||
@@ -1322,7 +1387,7 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
*
|
||||
* @param bool $init if true init required plugins
|
||||
*/
|
||||
public function saveRequiredPlugins($init=false)
|
||||
public function saveRequiredPlugins($init = false)
|
||||
{
|
||||
$this->required_plugins_stack[] = $this->required_plugins;
|
||||
if ($init) {
|
||||
@@ -1379,7 +1444,7 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
/**
|
||||
* method to compile a Smarty template
|
||||
*
|
||||
* @param mixed $_content template source
|
||||
* @param mixed $_content template source
|
||||
* @param bool $isTemplateSource
|
||||
*
|
||||
* @return bool true if compiling succeeded, false if it failed
|
||||
@@ -1405,8 +1470,10 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
$this->has_code = true;
|
||||
// log tag/attributes
|
||||
if (isset($this->smarty->_cache[ 'get_used_tags' ])) {
|
||||
$this->template->_cache[ 'used_tags' ][] = array($tag,
|
||||
$args);
|
||||
$this->template->_cache[ 'used_tags' ][] = array(
|
||||
$tag,
|
||||
$args
|
||||
);
|
||||
}
|
||||
// check nocache option flag
|
||||
foreach ($args as $arg) {
|
||||
@@ -1424,9 +1491,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}'";
|
||||
@@ -1457,9 +1524,9 @@ 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);
|
||||
} elseif (in_array($method, $this->smarty->registered_objects[ $tag ][ 3 ])) {
|
||||
@@ -1474,16 +1541,18 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
// throw exception
|
||||
$this->trigger_template_error(
|
||||
'not allowed method "' . $method . '" in registered object "' .
|
||||
$tag . '"',
|
||||
$tag . '"',
|
||||
null,
|
||||
true
|
||||
);
|
||||
}
|
||||
}
|
||||
// check if tag is registered
|
||||
foreach (array(Smarty::PLUGIN_COMPILER,
|
||||
Smarty::PLUGIN_FUNCTION,
|
||||
Smarty::PLUGIN_BLOCK,) as $plugin_type) {
|
||||
foreach (array(
|
||||
Smarty::PLUGIN_COMPILER,
|
||||
Smarty::PLUGIN_FUNCTION,
|
||||
Smarty::PLUGIN_BLOCK,
|
||||
) as $plugin_type) {
|
||||
if (isset($this->smarty->registered_plugins[ $plugin_type ][ $tag ])) {
|
||||
// if compiler function plugin call it now
|
||||
if ($plugin_type === Smarty::PLUGIN_COMPILER) {
|
||||
@@ -1500,8 +1569,10 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
}
|
||||
return call_user_func_array(
|
||||
$this->smarty->registered_plugins[ $plugin_type ][ $tag ][ 0 ],
|
||||
array($new_args,
|
||||
$this)
|
||||
array(
|
||||
$new_args,
|
||||
$this
|
||||
)
|
||||
);
|
||||
}
|
||||
// compile registered function or block function
|
||||
@@ -1517,10 +1588,10 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
}
|
||||
// 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)) {
|
||||
@@ -1544,7 +1615,7 @@ 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)
|
||||
if (!isset($this->smarty->security_policy)
|
||||
|| $this->smarty->security_policy->isTrustedTag($tag, $this)
|
||||
) {
|
||||
return $this->callTagCompiler(
|
||||
@@ -1589,8 +1660,10 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
}
|
||||
return call_user_func_array(
|
||||
$this->default_handler_plugins[ $plugin_type ][ $tag ][ 0 ],
|
||||
array($new_args,
|
||||
$this)
|
||||
array(
|
||||
$new_args,
|
||||
$this
|
||||
)
|
||||
);
|
||||
} else {
|
||||
return $this->callTagCompiler(
|
||||
@@ -1620,14 +1693,14 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
// throw exception
|
||||
$this->trigger_template_error(
|
||||
'not allowed closing tag method "' . $method .
|
||||
'" in registered object "' . $base_tag . '"',
|
||||
'" in registered object "' . $base_tag . '"',
|
||||
null,
|
||||
true
|
||||
);
|
||||
}
|
||||
}
|
||||
// registered block tag ?
|
||||
if (isset($this->smarty->registered_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);
|
||||
@@ -1642,7 +1715,7 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
}
|
||||
// function plugin?
|
||||
if ($function = $this->getPlugin($tag, Smarty::PLUGIN_FUNCTION)) {
|
||||
if (!isset($this->smarty->security_policy)
|
||||
if (!isset($this->smarty->security_policy)
|
||||
|| $this->smarty->security_policy->isTrustedTag($tag, $this)
|
||||
) {
|
||||
return $this->callTagCompiler('private_function_plugin', $args, $parameter, $tag, $function);
|
||||
@@ -1657,8 +1730,10 @@ abstract class Smarty_Internal_TemplateCompilerBase
|
||||
}
|
||||
return call_user_func_array(
|
||||
$this->smarty->registered_plugins[ Smarty::PLUGIN_COMPILER ][ $tag ][ 0 ],
|
||||
array($args,
|
||||
$this)
|
||||
array(
|
||||
$args,
|
||||
$this
|
||||
)
|
||||
);
|
||||
}
|
||||
if ($this->smarty->loadPlugin('smarty_compiler_' . $tag)) {
|
||||
|
||||
Reference in New Issue
Block a user