2013-07-14 22:15:45 +00:00
<? php
/**
* Smarty Internal Plugin Function Call Handler
*
2014-06-06 02:40:04 +00:00
* @package Smarty
2013-07-14 22:15:45 +00:00
* @subpackage PluginsInternal
2014-06-06 02:40:04 +00:00
* @author Uwe Tews
2013-07-14 22:15:45 +00:00
*/
/**
* This class does call function defined with the {function} tag
*
2014-06-06 02:40:04 +00:00
* @package Smarty
2013-07-14 22:15:45 +00:00
* @subpackage PluginsInternal
*/
class Smarty_Internal_Function_Call_Handler
{
/**
* This function handles calls to template functions defined by {function}
* It does create a PHP function at the first call
*
* @param string $_name template function name
* @param Smarty_Internal_Template $_template template object
* @param array $_params Smarty variables passed as call parameter
* @param string $_hash nocache hash value
* @param bool $_nocache nocache flag
*/
2013-07-15 18:18:28 +00:00
public static function call ( $_name , Smarty_Internal_Template $_template , $_params , $_hash , $_nocache )
2013-07-14 22:15:45 +00:00
{
if ( $_nocache ) {
$_function = "smarty_template_function_ { $_name } _nocache" ;
} else {
$_function = "smarty_template_function_ { $_hash } _ { $_name } " ;
}
if ( ! is_callable ( $_function )) {
$_code = "function { $_function } ( \$ _smarty_tpl, \$ params) {
\$ saved_tpl_vars = \$ _smarty_tpl->tpl_vars;
foreach ( \$ _smarty_tpl->smarty->template_functions[' { $_name } ']['parameter'] as \$ key => \$ value) { \$ _smarty_tpl->tpl_vars[ \$ key] = new Smarty_variable( \$ value);};
foreach ( \$ params as \$ key => \$ value) { \$ _smarty_tpl->tpl_vars[ \$ key] = new Smarty_variable( \$ value);}?>" ;
if ( $_nocache ) {
$_code .= preg_replace ( array ( "!<\?php echo \\ '/\*%%SmartyNocache: { $_template -> smarty -> template_functions [ $_name ][ 'nocache_hash' ] } %%\*/|/\*/%%SmartyNocache: { $_template -> smarty -> template_functions [ $_name ][ 'nocache_hash' ] } %%\*/ \\ ';\?>!" ,
2014-06-06 02:40:04 +00:00
"! \\ \'!" ), array ( '' , "'" ), $_template -> smarty -> template_functions [ $_name ][ 'compiled' ]);
2013-07-14 22:15:45 +00:00
$_template -> smarty -> template_functions [ $_name ][ 'called_nocache' ] = true ;
} else {
$_code .= preg_replace ( "/ { $_template -> smarty -> template_functions [ $_name ][ 'nocache_hash' ] } /" , $_template -> properties [ 'nocache_hash' ], $_template -> smarty -> template_functions [ $_name ][ 'compiled' ]);
}
$_code .= "<?php \$ _smarty_tpl->tpl_vars = \$ saved_tpl_vars;}" ;
eval ( $_code );
}
$_function ( $_template , $_params );
}
}