1<?php 2/** 3 * Smarty Internal Plugin Compile Object Function 4 * Compiles code for registered objects as function 5 * 6 * @package Smarty 7 * @subpackage Compiler 8 * @author Uwe Tews 9 */ 10 11/** 12 * Smarty Internal Plugin Compile Object Function Class 13 * 14 * @package Smarty 15 * @subpackage Compiler 16 */ 17class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_CompileBase 18{ 19 /** 20 * Attribute definition: Overwrites base class. 21 * 22 * @var array 23 * @see Smarty_Internal_CompileBase 24 */ 25 public $optional_attributes = array('_any'); 26 27 /** 28 * Compiles code for the execution of function plugin 29 * 30 * @param array $args array with attributes from parser 31 * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object 32 * @param array $parameter array with compilation parameter 33 * @param string $tag name of function 34 * @param string $method name of method to call 35 * 36 * @return string compiled code 37 * @throws \SmartyCompilerException 38 * @throws \SmartyException 39 */ 40 public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter, $tag, $method) 41 { 42 // check and get attributes 43 $_attr = $this->getAttributes($compiler, $args); 44 unset($_attr[ 'nocache' ]); 45 $_assign = null; 46 if (isset($_attr[ 'assign' ])) { 47 $_assign = $_attr[ 'assign' ]; 48 unset($_attr[ 'assign' ]); 49 } 50 // method or property ? 51 if (is_callable(array($compiler->smarty->registered_objects[ $tag ][ 0 ], $method))) { 52 // convert attributes into parameter array string 53 if ($compiler->smarty->registered_objects[ $tag ][ 2 ]) { 54 $_paramsArray = array(); 55 foreach ($_attr as $_key => $_value) { 56 if (is_int($_key)) { 57 $_paramsArray[] = "$_key=>$_value"; 58 } else { 59 $_paramsArray[] = "'$_key'=>$_value"; 60 } 61 } 62 $_params = 'array(' . implode(',', $_paramsArray) . ')'; 63 $output = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params},\$_smarty_tpl)"; 64 } else { 65 $_params = implode(',', $_attr); 66 $output = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params})"; 67 } 68 } else { 69 // object property 70 $output = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}"; 71 } 72 if (!empty($parameter[ 'modifierlist' ])) { 73 $output = $compiler->compileTag( 74 'private_modifier', 75 array(), 76 array('modifierlist' => $parameter[ 'modifierlist' ], 'value' => $output) 77 ); 78 } 79 if (empty($_assign)) { 80 return "<?php echo {$output};?>\n"; 81 } else { 82 return "<?php \$_smarty_tpl->assign({$_assign},{$output});?>\n"; 83 } 84 } 85} 86