Code

Updated to clean smarty 3.0rc4
[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 ?>