[gosa.git] / gosa-core / include / smarty / sysplugins / smarty_internal_compile_private_modifier.php
1 <?php\r
2 /**\r
3 * Smarty Internal Plugin Compile Modifier\r
4 * \r
5 * Compiles code for modifier execution\r
6 * \r
7 * @package Smarty\r
8 * @subpackage Compiler\r
9 * @author Uwe Tews \r
10 */\r
11 \r
12 /**\r
13 * Smarty Internal Plugin Compile Modifier Class\r
14 */\r
15 class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBase {\r
16 /**\r
17 * Compiles code for modifier execution\r
18 * \r
19 * @param array $args array with attributes from parser\r
20 * @param object $compiler compiler object\r
21 * @return string compiled code\r
22 */\r
23 public function compile($args, $compiler)\r
24 {\r
25 $this->compiler = $compiler;\r
26 $this->smarty = $this->compiler->smarty;\r
27 $this->required_attributes = array('value', 'modifierlist'); \r
28 // check and get attributes\r
29 $_attr = $this->_get_attributes($args);\r
30 $output = $_attr['value']; \r
31 // loop over list of modifiers\r
32 foreach ($_attr['modifierlist'] as $single_modifier) {\r
33 preg_match_all('/(((\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'|[^:"]*"[^"\\\\]*(?:\\\\.[^"\\\\]*)*")[^:]*)+|::?|[^:]+)/', $single_modifier, $mod_array);\r
34 $modifier = $mod_array[0][0];\r
35 for ($i = 0, $count = count($mod_array[0]);$i < $count;$i++) {\r
36 if ($mod_array[0][$i] == ':') {\r
37 $mod_array[0][$i] = ',';\r
38 } \r
39 if ($mod_array[0][$i] == '::') {\r
40 $mod_array[0][$i-1] = $mod_array[0][$i-1] . $mod_array[0][$i] . $mod_array[0][$i + 1];\r
41 unset($mod_array[0][$i], $mod_array[0][$i + 1]);\r
42 $i++;\r
43 } \r
44 } \r
45 unset($mod_array[0][0]);\r
46 $params = $output . implode('', $mod_array[0]); \r
47 // check for registered modifier\r
48 if (isset($compiler->smarty->registered_plugins['modifier'][$modifier])) {\r
49 $function = $compiler->smarty->registered_plugins['modifier'][$modifier][0];\r
50 if (!is_array($function)) {\r
51 $output = "{$function}({$params})";\r
52 } else {\r
53 if (is_object($function[0])) {\r
54 $output = '$_smarty_tpl->smarty->registered_plugins[\'modifier\'][\'' . $modifier . '\'][0][0]->' . $function[1] . '(' . $params . ')';\r
55 } else {\r
56 $output = $function[0] . '::' . $function[1] . '(' . $params . ')';\r
57 } \r
58 } \r
59 // check for plugin modifiercompiler\r
60 } else if ($compiler->smarty->loadPlugin('smarty_modifiercompiler_' . $modifier)) {\r
61 $plugin = 'smarty_modifiercompiler_' . $modifier;\r
62 foreach($mod_array[0] as $key => $value) {\r
63 if ($value == ',') {\r
64 unset ($mod_array[0][$key]);\r
65 } \r
66 } \r
67 $args = array_merge((array)$output, $mod_array[0]);\r
68 $output = $plugin($args, $compiler); \r
69 // check for plugin modifier\r
70 } else if ($function = $this->compiler->getPlugin($modifier, 'modifier')) {\r
71 $output = "{$function}({$params})"; \r
72 // check if trusted PHP function\r
73 } else if (is_callable($modifier)) {\r
74 // check if modifier allowed\r
75 if (!$this->compiler->template->security || $this->smarty->security_handler->isTrustedModifier($modifier, $this->compiler)) {\r
76 $output = "{$modifier}({$params})";\r
77 } \r
78 } else {\r
79 $this->compiler->trigger_template_error ("unknown modifier \"" . $modifier . "\"");\r
80 } \r
81 } \r
82 return $output;\r
83 } \r
84 } \r
85 \r
86 ?>