aboutsummaryrefslogtreecommitdiffstats
path: root/library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php
diff options
context:
space:
mode:
Diffstat (limited to 'library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php')
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php53
1 files changed, 31 insertions, 22 deletions
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php
index 525bc0db7..5a8c54faa 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php
@@ -19,44 +19,51 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C
/**
* Compiles code for the special $smarty variables
*
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param $parameter
+ * @param array $args array with attributes from parser
+ * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
+ * @param $parameter
*
* @return string compiled code
+ * @throws \SmartyCompilerException
*/
- public function compile($args, $compiler, $parameter)
+ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
{
$_index = preg_split("/\]\[/", substr($parameter, 1, strlen($parameter) - 2));
- $compiled_ref = ' ';
- $variable = trim($_index[0], "'");
- if (!isset($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedSpecialSmartyVar($variable, $compiler)) {
+ $variable = strtolower($compiler->getId($_index[0]));
+ 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)
+ ) {
switch ($variable) {
case 'foreach':
- $name = trim($_index[1], "'");
- $foreachVar = "'__foreach_{$name}'";
- return "(isset(\$_smarty_tpl->tpl_vars[$foreachVar]->value[{$_index[2]}]) ? \$_smarty_tpl->tpl_vars[$foreachVar]->value[{$_index[2]}] : null)";
case 'section':
- return "\$_smarty_tpl->getVariable('smarty')->value$parameter";
+ return Smarty_Internal_Compile_Private_ForeachSection::compileSpecialVariable(array(), $compiler, $_index);
case 'capture':
- return "Smarty::\$_smarty_vars$parameter";
+ if (class_exists('Smarty_Internal_Compile_Capture')) {
+ return Smarty_Internal_Compile_Capture::compileSpecialVariable(array(), $compiler, $_index);
+ }
+ return '';
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;
}
- $compiled_ref = '$_COOKIE';
- break;
-
+ return '$_COOKIE';
case 'get':
case 'post':
case 'env':
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;
}
@@ -78,11 +85,13 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C
return "'$_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;
}
- if (strpos($_index[1], '$') === false && strpos($_index[1], '\'') === false ) {
+ if (strpos($_index[1], '$') === false && strpos($_index[1], '\'') === false) {
return "@constant('{$_index[1]}')";
} else {
return "@constant({$_index[1]})";
@@ -90,9 +99,9 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C
case 'config':
if (isset($_index[2])) {
- return "(is_array(\$tmp = \$_smarty_tpl->getConfigVariable($_index[1])) ? \$tmp[$_index[2]] : null)";
+ return "(is_array(\$tmp = \$_smarty_tpl->smarty->ext->_config->_getConfigVariable(\$_smarty_tpl, $_index[1])) ? \$tmp[$_index[2]] : null)";
} else {
- return "\$_smarty_tpl->getConfigVariable($_index[1])";
+ return "\$_smarty_tpl->smarty->ext->_config->_getConfigVariable(\$_smarty_tpl, $_index[1])";
}
case 'ldelim':
$_ldelim = $compiler->smarty->left_delimiter;
@@ -114,7 +123,7 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C
$compiled_ref = $compiled_ref . "[$_ind]";
}
}
+ return $compiled_ref;
}
- return $compiled_ref;
}
}