| 
<?php/**
 * Smarty Internal Plugin Compile Special Smarty Variable
 *
 * Compiles the special $smarty variables
 *
 * @package Smarty
 * @subpackage Compiler
 * @author Uwe Tews
 */
 
 /**
 * Smarty Internal Plugin Compile special Smarty Variable Class
 *
 * @package Smarty
 * @subpackage Compiler
 */
 class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_CompileBase
 {
 /**
 * Compiles code for the speical $smarty variables
 *
 * @param  array  $args     array with attributes from parser
 * @param  object $compiler compiler object
 * @return string compiled code
 */
 public function compile($args, $compiler, $parameter)
 {
 $_index = preg_split("/\]\[/",substr($parameter, 1, strlen($parameter)-2));
 $compiled_ref = ' ';
 $variable = trim($_index[0], "'");
 switch ($variable) {
 case 'foreach':
 return "\$_smarty_tpl->getVariable('smarty')->value$parameter";
 case 'section':
 return "\$_smarty_tpl->getVariable('smarty')->value$parameter";
 case 'capture':
 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';
 break;
 
 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);
 break;
 
 case 'template':
 return 'basename($_smarty_tpl->source->filepath)';
 
 case 'template_object':
 return '$_smarty_tpl';
 
 case 'current_dir':
 return 'dirname($_smarty_tpl->source->filepath)';
 
 case 'version':
 $_version = Smarty::SMARTY_VERSION;
 
 return "'$_version'";
 
 case 'const':
 if (isset($compiler->smarty->security_policy) && !$compiler->smarty->security_policy->allow_constants) {
 $compiler->trigger_template_error("(secure mode) constants not permitted");
 break;
 }
 
 return "@constant({$_index[1]})";
 
 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;
 
 return "'$_ldelim'";
 
 case 'rdelim':
 $_rdelim = $compiler->smarty->right_delimiter;
 
 return "'$_rdelim'";
 
 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]";
 }
 }
 
 return $compiled_ref;
 }
 
 }
 
 |