1<?php 2/** 3 * Smarty Internal Plugin Compile Registered Function 4 * 5 * Compiles code for the execution of a registered function 6 * 7 * @package Smarty 8 * @subpackage Compiler 9 * @author Uwe Tews 10 */ 11 12/** 13 * Smarty Internal Plugin Compile Registered Function Class 14 * 15 * @package Smarty 16 * @subpackage Compiler 17 */ 18class Smarty_Internal_Compile_Private_Registered_Function extends Smarty_Internal_CompileBase 19{ 20 /** 21 * Attribute definition: Overwrites base class. 22 * 23 * @var array 24 * @see Smarty_Internal_CompileBase 25 */ 26 public $optional_attributes = array('_any'); 27 28 /** 29 * Compiles code for the execution of a registered function 30 * 31 * @param array $args array with attributes from parser 32 * @param object $compiler compiler object 33 * @param array $parameter array with compilation parameter 34 * @param string $tag name of function 35 * @return string compiled code 36 */ 37 public function compile($args, $compiler, $parameter, $tag) 38 { 39 // This tag does create output 40 $compiler->has_output = true; 41 // check and get attributes 42 $_attr = $this->getAttributes($compiler, $args); 43 if ($_attr['nocache']) { 44 $compiler->tag_nocache = true; 45 } 46 unset($_attr['nocache']); 47 if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION][$tag])) { 48 $tag_info = $compiler->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION][$tag]; 49 } else { 50 $tag_info = $compiler->default_handler_plugins[Smarty::PLUGIN_FUNCTION][$tag]; 51 } 52 // not cachable? 53 $compiler->tag_nocache = $compiler->tag_nocache || !$tag_info[1]; 54 // convert attributes into parameter array string 55 $_paramsArray = array(); 56 foreach ($_attr as $_key => $_value) { 57 if (is_int($_key)) { 58 $_paramsArray[] = "$_key=>$_value"; 59 } elseif ($compiler->template->caching && in_array($_key,$tag_info[2])) { 60 $_value = str_replace("'","^#^",$_value); 61 $_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^"; 62 } else { 63 $_paramsArray[] = "'$_key'=>$_value"; 64 } 65 } 66 $_params = 'array(' . implode(",", $_paramsArray) . ')'; 67 $function = $tag_info[0]; 68 // compile code 69 if (!is_array($function)) { 70 $output = "<?php echo {$function}({$_params},\$_smarty_tpl);?>\n"; 71 } elseif (is_object($function[0])) { 72 $output = "<?php echo \$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION]['{$tag}'][0][0]->{$function[1]}({$_params},\$_smarty_tpl);?>\n"; 73 } else { 74 $output = "<?php echo {$function[0]}::{$function[1]}({$_params},\$_smarty_tpl);?>\n"; 75 } 76 77 return $output; 78 } 79 80} 81