2009-11-06 14:35:00 +00:00
|
|
|
<?php
|
|
|
|
/**
|
2010-08-17 15:39:51 +00:00
|
|
|
* Smarty Internal Plugin Compile Special Smarty Variable
|
|
|
|
* Compiles the special $smarty variables
|
2011-09-16 14:19:56 +00:00
|
|
|
*
|
2014-06-06 02:40:04 +00:00
|
|
|
* @package Smarty
|
2010-08-17 15:39:51 +00:00
|
|
|
* @subpackage Compiler
|
2014-06-06 02:40:04 +00:00
|
|
|
* @author Uwe Tews
|
2010-08-17 15:39:51 +00:00
|
|
|
*/
|
|
|
|
|
2009-11-06 14:35:00 +00:00
|
|
|
/**
|
2010-08-17 15:39:51 +00:00
|
|
|
* Smarty Internal Plugin Compile special Smarty Variable Class
|
2011-09-16 14:19:56 +00:00
|
|
|
*
|
2014-06-06 02:40:04 +00:00
|
|
|
* @package Smarty
|
2011-09-16 14:19:56 +00:00
|
|
|
* @subpackage Compiler
|
2010-08-17 15:39:51 +00:00
|
|
|
*/
|
2013-07-14 22:15:45 +00:00
|
|
|
class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_CompileBase
|
|
|
|
{
|
2009-11-06 14:35:00 +00:00
|
|
|
/**
|
2014-06-06 02:40:04 +00:00
|
|
|
* Compiles code for the special $smarty variables
|
2011-09-16 14:19:56 +00:00
|
|
|
*
|
2013-07-14 22:15:45 +00:00
|
|
|
* @param array $args array with attributes from parser
|
|
|
|
* @param object $compiler compiler object
|
2014-06-06 02:40:04 +00:00
|
|
|
* @param $parameter
|
|
|
|
*
|
2010-08-17 15:39:51 +00:00
|
|
|
* @return string compiled code
|
|
|
|
*/
|
2015-07-01 10:46:51 +02:00
|
|
|
public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
|
2009-11-06 14:35:00 +00:00
|
|
|
{
|
2014-06-06 02:40:04 +00:00
|
|
|
$_index = preg_split("/\]\[/", substr($parameter, 1, strlen($parameter) - 2));
|
2009-11-06 14:35:00 +00:00
|
|
|
$compiled_ref = ' ';
|
2015-07-01 10:46:51 +02:00
|
|
|
$variable = $compiler->getId($_index[0]);
|
|
|
|
if ($variable === false) {
|
|
|
|
$compiler->trigger_template_error("special \$Smarty variable name index can not be variable", $compiler->lex->taglineno);
|
|
|
|
}
|
2014-12-29 21:59:23 +01:00
|
|
|
if (!isset($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedSpecialSmartyVar($variable, $compiler)) {
|
2015-07-01 10:46:51 +02:00
|
|
|
switch ($variable) {
|
2014-12-29 21:59:23 +01:00
|
|
|
case 'foreach':
|
2015-07-01 10:46:51 +02:00
|
|
|
return Smarty_Internal_Compile_Foreach::compileSpecialVariable(array(), $compiler, $_index);
|
2014-12-29 21:59:23 +01:00
|
|
|
case 'section':
|
2015-07-30 02:45:38 +02:00
|
|
|
return Smarty_Internal_Compile_Section::compileSpecialVariable(array(), $compiler, $_index);
|
|
|
|
case 'capture':
|
2014-12-29 21:59:23 +01:00
|
|
|
return "Smarty::\$_smarty_vars$parameter";
|
|
|
|
case 'now':
|
|
|
|
return 'time()';
|
|
|
|
case 'cookies':
|
|
|
|
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';
|
2010-01-14 19:12:14 +00:00
|
|
|
break;
|
2009-11-06 14:35:00 +00:00
|
|
|
|
2014-12-29 21:59:23 +01:00
|
|
|
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) {
|
|
|
|
$compiler->trigger_template_error("(secure mode) super globals not permitted");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
$compiled_ref = '$_' . strtoupper($variable);
|
2009-12-04 15:44:47 +00:00
|
|
|
break;
|
2009-11-06 14:35:00 +00:00
|
|
|
|
2014-12-29 21:59:23 +01:00
|
|
|
case 'template':
|
|
|
|
return 'basename($_smarty_tpl->source->filepath)';
|
2009-11-06 14:35:00 +00:00
|
|
|
|
2014-12-29 21:59:23 +01:00
|
|
|
case 'template_object':
|
|
|
|
return '$_smarty_tpl';
|
2012-02-19 18:53:10 +00:00
|
|
|
|
2014-12-29 21:59:23 +01:00
|
|
|
case 'current_dir':
|
|
|
|
return 'dirname($_smarty_tpl->source->filepath)';
|
2009-11-06 14:35:00 +00:00
|
|
|
|
2014-12-29 21:59:23 +01:00
|
|
|
case 'version':
|
|
|
|
$_version = Smarty::SMARTY_VERSION;
|
2013-07-14 22:15:45 +00:00
|
|
|
|
2014-12-29 21:59:23 +01:00
|
|
|
return "'$_version'";
|
2009-11-06 14:35:00 +00:00
|
|
|
|
2014-12-29 21:59:23 +01:00
|
|
|
case 'const':
|
|
|
|
if (isset($compiler->smarty->security_policy) && !$compiler->smarty->security_policy->allow_constants) {
|
|
|
|
$compiler->trigger_template_error("(secure mode) constants not permitted");
|
|
|
|
break;
|
|
|
|
}
|
2015-05-12 15:44:54 +02:00
|
|
|
if (strpos($_index[1], '$') === false && strpos($_index[1], '\'') === false ) {
|
2014-12-29 21:59:23 +01:00
|
|
|
return "@constant('{$_index[1]}')";
|
|
|
|
} else {
|
|
|
|
return "@constant({$_index[1]})";
|
|
|
|
}
|
2009-11-06 14:35:00 +00:00
|
|
|
|
2014-12-29 21:59:23 +01:00
|
|
|
case 'config':
|
|
|
|
if (isset($_index[2])) {
|
|
|
|
return "(is_array(\$tmp = \$_smarty_tpl->getConfigVariable($_index[1])) ? \$tmp[$_index[2]] : null)";
|
|
|
|
} else {
|
|
|
|
return "\$_smarty_tpl->getConfigVariable($_index[1])";
|
|
|
|
}
|
|
|
|
case 'ldelim':
|
|
|
|
$_ldelim = $compiler->smarty->left_delimiter;
|
2013-07-14 22:15:45 +00:00
|
|
|
|
2014-12-29 21:59:23 +01:00
|
|
|
return "'$_ldelim'";
|
2009-11-06 14:35:00 +00:00
|
|
|
|
2014-12-29 21:59:23 +01:00
|
|
|
case 'rdelim':
|
|
|
|
$_rdelim = $compiler->smarty->right_delimiter;
|
2013-07-14 22:15:45 +00:00
|
|
|
|
2014-12-29 21:59:23 +01:00
|
|
|
return "'$_rdelim'";
|
2009-11-06 14:35:00 +00:00
|
|
|
|
2014-12-29 21:59:23 +01:00
|
|
|
default:
|
|
|
|
$compiler->trigger_template_error('$smarty.' . trim($_index[0], "'") . ' is invalid');
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
if (isset($_index[1])) {
|
|
|
|
array_shift($_index);
|
|
|
|
foreach ($_index as $_ind) {
|
|
|
|
$compiled_ref = $compiled_ref . "[$_ind]";
|
|
|
|
}
|
2011-09-16 14:19:56 +00:00
|
|
|
}
|
|
|
|
}
|
2010-11-15 19:17:18 +00:00
|
|
|
return $compiled_ref;
|
2011-09-16 14:19:56 +00:00
|
|
|
}
|
|
|
|
}
|