1: | <?php
|
2: | |
3: | |
4: | |
5: | |
6: | |
7: | |
8: | |
9: |
|
10: |
|
11: | |
12: | |
13: | |
14: | |
15: | |
16: |
|
17: | class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBase
|
18: | {
|
19: | |
20: | |
21: | |
22: | |
23: | |
24: | |
25: | |
26: | |
27: | |
28: | |
29: |
|
30: | public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
|
31: | {
|
32: |
|
33: | $_attr = $this->getAttributes($compiler, $args);
|
34: | $output = $parameter[ 'value' ];
|
35: |
|
36: | foreach ($parameter[ 'modifierlist' ] as $single_modifier) {
|
37: |
|
38: | $modifier = $single_modifier[ 0 ];
|
39: | $single_modifier[ 0 ] = $output;
|
40: | $params = implode(',', $single_modifier);
|
41: |
|
42: | if (isset($compiler->known_modifier_type[ $modifier ])) {
|
43: | $modifier_types = array($compiler->known_modifier_type[ $modifier ]);
|
44: | } else {
|
45: | $modifier_types = array(1, 2, 3, 4, 5, 6);
|
46: | }
|
47: | foreach ($modifier_types as $type) {
|
48: | switch ($type) {
|
49: | case 1:
|
50: |
|
51: | if (isset($compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIER ][ $modifier ])) {
|
52: | if (is_callable($compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIER ][ $modifier ][ 0 ])) {
|
53: | $output =
|
54: | sprintf(
|
55: | 'call_user_func_array($_smarty_tpl->registered_plugins[ \'%s\' ][ %s ][ 0 ], array( %s ))',
|
56: | Smarty::PLUGIN_MODIFIER,
|
57: | var_export($modifier, true),
|
58: | $params
|
59: | );
|
60: | $compiler->known_modifier_type[ $modifier ] = $type;
|
61: | break 2;
|
62: | }
|
63: | }
|
64: | break;
|
65: | case 2:
|
66: |
|
67: | if (isset($compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIERCOMPILER ][ $modifier ][ 0 ])) {
|
68: | $output =
|
69: | call_user_func(
|
70: | $compiler->smarty->registered_plugins[ Smarty::PLUGIN_MODIFIERCOMPILER ][ $modifier ][ 0 ],
|
71: | $single_modifier,
|
72: | $compiler->smarty
|
73: | );
|
74: | $compiler->known_modifier_type[ $modifier ] = $type;
|
75: | break 2;
|
76: | }
|
77: | break;
|
78: | case 3:
|
79: |
|
80: | if ($compiler->smarty->loadPlugin('smarty_modifiercompiler_' . $modifier)) {
|
81: |
|
82: | if (!is_object($compiler->smarty->security_policy)
|
83: | || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)
|
84: | ) {
|
85: | $plugin = 'smarty_modifiercompiler_' . $modifier;
|
86: | $output = $plugin($single_modifier, $compiler);
|
87: | }
|
88: | $compiler->known_modifier_type[ $modifier ] = $type;
|
89: | break 2;
|
90: | }
|
91: | break;
|
92: | case 4:
|
93: |
|
94: | if ($function = $compiler->getPlugin($modifier, Smarty::PLUGIN_MODIFIER)) {
|
95: |
|
96: | if (!is_object($compiler->smarty->security_policy)
|
97: | || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)
|
98: | ) {
|
99: | $output = "{$function}({$params})";
|
100: | }
|
101: | $compiler->known_modifier_type[ $modifier ] = $type;
|
102: | break 2;
|
103: | }
|
104: | break;
|
105: | case 5:
|
106: |
|
107: | if (is_callable($modifier)) {
|
108: |
|
109: | if (!is_object($compiler->smarty->security_policy)
|
110: | || $compiler->smarty->security_policy->isTrustedPhpModifier($modifier, $compiler)
|
111: | ) {
|
112: | $output = "{$modifier}({$params})";
|
113: | }
|
114: | $compiler->known_modifier_type[ $modifier ] = $type;
|
115: | break 2;
|
116: | }
|
117: | break;
|
118: | case 6:
|
119: |
|
120: | if (isset($compiler->default_handler_plugins[ Smarty::PLUGIN_MODIFIER ][ $modifier ])
|
121: | || (is_callable($compiler->smarty->default_plugin_handler_func)
|
122: | && $compiler->getPluginFromDefaultHandler($modifier, Smarty::PLUGIN_MODIFIER))
|
123: | ) {
|
124: | $function = $compiler->default_handler_plugins[ Smarty::PLUGIN_MODIFIER ][ $modifier ][ 0 ];
|
125: |
|
126: | if (!is_object($compiler->smarty->security_policy)
|
127: | || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)
|
128: | ) {
|
129: | if (!is_array($function)) {
|
130: | $output = "{$function}({$params})";
|
131: | } else {
|
132: | if (is_object($function[ 0 ])) {
|
133: | $output = $function[ 0 ] . '->' . $function[ 1 ] . '(' . $params . ')';
|
134: | } else {
|
135: | $output = $function[ 0 ] . '::' . $function[ 1 ] . '(' . $params . ')';
|
136: | }
|
137: | }
|
138: | }
|
139: | if (isset($compiler->required_plugins[ 'nocache' ][ $modifier ][ Smarty::PLUGIN_MODIFIER ][ 'file' ])
|
140: | ||
|
141: | isset($compiler->required_plugins[ 'compiled' ][ $modifier ][ Smarty::PLUGIN_MODIFIER ][ 'file' ])
|
142: | ) {
|
143: |
|
144: | $compiler->known_modifier_type[ $modifier ] = 4;
|
145: | } else {
|
146: | $compiler->known_modifier_type[ $modifier ] = $type;
|
147: | }
|
148: | break 2;
|
149: | }
|
150: | }
|
151: | }
|
152: | if (!isset($compiler->known_modifier_type[ $modifier ])) {
|
153: | $compiler->trigger_template_error("unknown modifier '{$modifier}'", null, true);
|
154: | }
|
155: | }
|
156: | return $output;
|
157: | }
|
158: | }
|
159: | |