Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php/*** Smarty Internal Plugin Compile Modifier* Compiles code for modifier execution** @package Smarty* @subpackage Compiler* @author Uwe Tews*//*** Smarty Internal Plugin Compile Modifier Class** @package Smarty* @subpackage Compiler*/class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBase{/*** Compiles code for modifier execution** @param array $args array with attributes from parser* @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object* @param array $parameter array with compilation parameter** @return string compiled code* @throws \SmartyCompilerException* @throws \SmartyException*/public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter){// check and get attributes$_attr = $this->getAttributes($compiler, $args);$output = $parameter[ 'value' ];// loop over list of modifiersforeach ($parameter[ 'modifierlist' ] as $single_modifier) {/* @var string $modifier */$modifier = $single_modifier[ 0 ];$single_modifier[ 0 ] = $output;$params = implode(',', $single_modifier);// check if we know already the type of modifierif (isset($compiler->known_modifier_type[ $modifier ])) {$modifier_types = array($compiler->known_modifier_type[ $modifier ]);} else {$modifier_types = array(1, 2, 3, 4, 5, 6);}foreach ($modifier_types as $type) {switch ($type) {case 1:// registered modifierif (isset($compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIER ][ $modifier ])) {if (is_callable($compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIER ][ $modifier ][ 0 ])) {$output =sprintf('call_user_func_array($_smarty_tpl->registered_plugins[ \'%s\' ][ %s ][ 0 ], array( %s ))',Smarty::PLUGIN_MODIFIER,var_export($modifier, true),$params);$compiler->known_modifier_type[ $modifier ] = $type;break 2;}}break;case 2:// registered modifier compilerif (isset($compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIERCOMPILER ][ $modifier ][ 0 ])) {$output =call_user_func($compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIERCOMPILER ][ $modifier ][ 0 ],$single_modifier,$compiler->smarty);$compiler->known_modifier_type[ $modifier ] = $type;break 2;}break;case 3:// modifiercompiler pluginif ($compiler->smarty->loadPlugin('smarty_modifiercompiler_' . $modifier)) {// check if modifier allowedif (!is_object($compiler->smarty->security_policy)|| $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)) {$plugin = 'smarty_modifiercompiler_' . $modifier;$output = $plugin($single_modifier, $compiler);}$compiler->known_modifier_type[ $modifier ] = $type;break 2;}break;case 4:// modifier pluginif ($function = $compiler->getPlugin($modifier, Smarty::PLUGIN_MODIFIER)) {// check if modifier allowedif (!is_object($compiler->smarty->security_policy)|| $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)) {$output = "{$function}({$params})";}$compiler->known_modifier_type[ $modifier ] = $type;break 2;}break;case 5:// PHP functionif (is_callable($modifier)) {// check if modifier allowedif (!is_object($compiler->smarty->security_policy)|| $compiler->smarty->security_policy->isTrustedPhpModifier($modifier, $compiler)) {trigger_error('Using php-function "' . $modifier . '" as a modifier is deprecated and will be ' .'removed in a future release. Use Smarty::registerPlugin to explicitly register ' .'a custom modifier.', E_USER_DEPRECATED);$output = "{$modifier}({$params})";}$compiler->known_modifier_type[ $modifier ] = $type;break 2;}break;case 6:// default plugin handlerif (isset($compiler->default_handler_plugins[ Smarty::PLUGIN_MODIFIER ][ $modifier ])|| (is_callable($compiler->smarty->default_plugin_handler_func)&& $compiler->getPluginFromDefaultHandler($modifier, Smarty::PLUGIN_MODIFIER))) {$function = $compiler->default_handler_plugins[ Smarty::PLUGIN_MODIFIER ][ $modifier ][ 0 ];// check if modifier allowedif (!is_object($compiler->smarty->security_policy)|| $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)) {if (!is_array($function)) {$output = "{$function}({$params})";} else {if (is_object($function[ 0 ])) {$output = $function[ 0 ] . '->' . $function[ 1 ] . '(' . $params . ')';} else {$output = $function[ 0 ] . '::' . $function[ 1 ] . '(' . $params . ')';}}}if (isset($compiler->required_plugins[ 'nocache' ][ $modifier ][ Smarty::PLUGIN_MODIFIER ][ 'file' ])||isset($compiler->required_plugins[ 'compiled' ][ $modifier ][ Smarty::PLUGIN_MODIFIER ][ 'file' ])) {// was a plugin$compiler->known_modifier_type[ $modifier ] = 4;} else {$compiler->known_modifier_type[ $modifier ] = $type;}break 2;}}}if (!isset($compiler->known_modifier_type[ $modifier ])) {$compiler->trigger_template_error("unknown modifier '{$modifier}'", null, true);}}return $output;}}