1<?php 2/** 3 * Smarty Internal Plugin Compile Object Funtion 4 * 5 * Compiles code for registered objects as function 6 * 7 * @package Smarty 8 * @subpackage Compiler 9 * @author Uwe Tews 10 */ 11 12/** 13 * Smarty Internal Plugin Compile Object Function Class 14 * 15 * @package Smarty 16 * @subpackage Compiler 17 */ 18class Smarty_Internal_Compile_Private_Object_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 function plugin 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 * @param string $method name of method to call 36 * @return string compiled code 37 */ 38 public function compile($args, $compiler, $parameter, $tag, $method) 39 { 40 // check and get attributes 41 $_attr = $this->getAttributes($compiler, $args); 42 if ($_attr['nocache'] === true) { 43 $compiler->tag_nocache = true; 44 } 45 unset($_attr['nocache']); 46 $_assign = null; 47 if (isset($_attr['assign'])) { 48 $_assign = $_attr['assign']; 49 unset($_attr['assign']); 50 } 51 // method or property ? 52 if (method_exists($compiler->smarty->registered_objects[$tag][0], $method)) { 53 // convert attributes into parameter array string 54 if ($compiler->smarty->registered_objects[$tag][2]) { 55 $_paramsArray = array(); 56 foreach ($_attr as $_key => $_value) { 57 if (is_int($_key)) { 58 $_paramsArray[] = "$_key=>$_value"; 59 } else { 60 $_paramsArray[] = "'$_key'=>$_value"; 61 } 62 } 63 $_params = 'array(' . implode(",", $_paramsArray) . ')'; 64 $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params},\$_smarty_tpl)"; 65 } else { 66 $_params = implode(",", $_attr); 67 $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params})"; 68 } 69 } else { 70 // object property 71 $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}"; 72 } 73 74 if (empty($_assign)) { 75 // This tag does create output 76 $compiler->has_output = true; 77 $output = "<?php echo {$return};?>\n"; 78 } else { 79 $output = "<?php \$_smarty_tpl->assign({$_assign},{$return});?>\n"; 80 } 81 82 return $output; 83 } 84 85} 86