smarty_internal_compile_private_print_expression.php (6647B)
1 <?php 2 /** 3 * Smarty Internal Plugin Compile Print Expression 4 * Compiles any tag which will output an expression or variable 5 * 6 * @package Smarty 7 * @subpackage Compiler 8 * @author Uwe Tews 9 */ 10 11 /** 12 * Smarty Internal Plugin Compile Print Expression Class 13 * 14 * @package Smarty 15 * @subpackage Compiler 16 */ 17 class Smarty_Internal_Compile_Private_Print_Expression 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('assign'); 26 /** 27 * Attribute definition: Overwrites base class. 28 * 29 * @var array 30 * @see Smarty_Internal_CompileBase 31 */ 32 public $option_flags = array('nocache', 'nofilter'); 33 34 /** 35 * Compiles code for generating output from any expression 36 * 37 * @param array $args array with attributes from parser 38 * @param object $compiler compiler object 39 * @param array $parameter array with compilation parameter 40 * 41 * @throws SmartyException 42 * @return string compiled code 43 */ 44 public function compile($args, $compiler, $parameter) 45 { 46 // check and get attributes 47 $_attr = $this->getAttributes($compiler, $args); 48 // nocache option 49 if ($_attr['nocache'] === true) { 50 $compiler->tag_nocache = true; 51 } 52 if (isset($_attr['assign'])) { 53 // assign output to variable 54 $output = "<?php \$_smarty_tpl->assign({$_attr['assign']},{$parameter['value']});?>"; 55 } else { 56 // display value 57 $output = $parameter['value']; 58 // tag modifier 59 if (!empty($parameter['modifierlist'])) { 60 $output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifierlist'], 'value' => $output)); 61 } 62 if (!$_attr['nofilter']) { 63 // default modifier 64 if (!empty($compiler->smarty->default_modifiers)) { 65 if (empty($compiler->default_modifier_list)) { 66 $modifierlist = array(); 67 foreach ($compiler->smarty->default_modifiers as $key => $single_default_modifier) { 68 preg_match_all('/(\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'|"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|:|[^:]+)/', $single_default_modifier, $mod_array); 69 for ($i = 0, $count = count($mod_array[0]); $i < $count; $i ++) { 70 if ($mod_array[0][$i] != ':') { 71 $modifierlist[$key][] = $mod_array[0][$i]; 72 } 73 } 74 } 75 $compiler->default_modifier_list = $modifierlist; 76 } 77 $output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => $compiler->default_modifier_list, 'value' => $output)); 78 } 79 // autoescape html 80 if ($compiler->template->smarty->escape_html) { 81 $output = "htmlspecialchars({$output}, ENT_QUOTES, '" . addslashes(Smarty::$_CHARSET) . "')"; 82 } 83 // loop over registered filters 84 if (!empty($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE])) { 85 foreach ($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE] as $key => $function) { 86 if (!is_array($function)) { 87 $output = "{$function}({$output},\$_smarty_tpl)"; 88 } elseif (is_object($function[0])) { 89 $output = "\$_smarty_tpl->smarty->registered_filters[Smarty::FILTER_VARIABLE]['{$key}'][0]->{$function[1]}({$output},\$_smarty_tpl)"; 90 } else { 91 $output = "{$function[0]}::{$function[1]}({$output},\$_smarty_tpl)"; 92 } 93 } 94 } 95 // auto loaded filters 96 if (isset($compiler->smarty->autoload_filters[Smarty::FILTER_VARIABLE])) { 97 foreach ((array) $compiler->template->smarty->autoload_filters[Smarty::FILTER_VARIABLE] as $name) { 98 $result = $this->compile_output_filter($compiler, $name, $output); 99 if ($result !== false) { 100 $output = $result; 101 } else { 102 // not found, throw exception 103 throw new SmartyException("Unable to load filter '{$name}'"); 104 } 105 } 106 } 107 if (isset($compiler->template->variable_filters)) { 108 foreach ($compiler->template->variable_filters as $filter) { 109 if (count($filter) == 1 && ($result = $this->compile_output_filter($compiler, $filter[0], $output)) !== false) { 110 $output = $result; 111 } else { 112 $output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => array($filter), 'value' => $output)); 113 } 114 } 115 } 116 } 117 118 $compiler->has_output = true; 119 $output = "<?php echo {$output};?>"; 120 } 121 122 return $output; 123 } 124 125 /** 126 * @param object $compiler compiler object 127 * @param string $name name of variable filter 128 * @param string $output embedded output 129 * 130 * @return string 131 */ 132 private function compile_output_filter($compiler, $name, $output) 133 { 134 $plugin_name = "smarty_variablefilter_{$name}"; 135 $path = $compiler->smarty->loadPlugin($plugin_name, false); 136 if ($path) { 137 if ($compiler->template->caching) { 138 $compiler->template->required_plugins['nocache'][$name][Smarty::FILTER_VARIABLE]['file'] = $path; 139 $compiler->template->required_plugins['nocache'][$name][Smarty::FILTER_VARIABLE]['function'] = $plugin_name; 140 } else { 141 $compiler->template->required_plugins['compiled'][$name][Smarty::FILTER_VARIABLE]['file'] = $path; 142 $compiler->template->required_plugins['compiled'][$name][Smarty::FILTER_VARIABLE]['function'] = $plugin_name; 143 } 144 } else { 145 // not found 146 return false; 147 } 148 149 return "{$plugin_name}({$output},\$_smarty_tpl)"; 150 } 151 }