1 | <?php |
---|
2 | |
---|
3 | /** |
---|
4 | * Smarty Internal Plugin Compile Insert |
---|
5 | * |
---|
6 | * Compiles the {insert} tag |
---|
7 | * |
---|
8 | * @package Smarty |
---|
9 | * @subpackage Compiler |
---|
10 | * @author Uwe Tews |
---|
11 | */ |
---|
12 | |
---|
13 | /** |
---|
14 | * Smarty Internal Plugin Compile Insert Class |
---|
15 | * |
---|
16 | * @package Smarty |
---|
17 | * @subpackage Compiler |
---|
18 | */ |
---|
19 | class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase { |
---|
20 | |
---|
21 | /** |
---|
22 | * Attribute definition: Overwrites base class. |
---|
23 | * |
---|
24 | * @var array |
---|
25 | * @see Smarty_Internal_CompileBase |
---|
26 | */ |
---|
27 | public $required_attributes = array('name'); |
---|
28 | /** |
---|
29 | * Attribute definition: Overwrites base class. |
---|
30 | * |
---|
31 | * @var array |
---|
32 | * @see Smarty_Internal_CompileBase |
---|
33 | */ |
---|
34 | public $shorttag_order = array('name'); |
---|
35 | /** |
---|
36 | * Attribute definition: Overwrites base class. |
---|
37 | * |
---|
38 | * @var array |
---|
39 | * @see Smarty_Internal_CompileBase |
---|
40 | */ |
---|
41 | public $optional_attributes = array('_any'); |
---|
42 | |
---|
43 | /** |
---|
44 | * Compiles code for the {insert} tag |
---|
45 | * |
---|
46 | * @param array $args array with attributes from parser |
---|
47 | * @param object $compiler compiler object |
---|
48 | * @return string compiled code |
---|
49 | */ |
---|
50 | public function compile($args, $compiler) |
---|
51 | { |
---|
52 | // check and get attributes |
---|
53 | $_attr = $this->getAttributes($compiler, $args); |
---|
54 | // never compile as nocache code |
---|
55 | $compiler->suppressNocacheProcessing = true; |
---|
56 | $compiler->tag_nocache = true; |
---|
57 | $_smarty_tpl = $compiler->template; |
---|
58 | $_name = null; |
---|
59 | $_script = null; |
---|
60 | |
---|
61 | $_output = '<?php '; |
---|
62 | // save posible attributes |
---|
63 | eval('$_name = ' . $_attr['name'] . ';'); |
---|
64 | if (isset($_attr['assign'])) { |
---|
65 | // output will be stored in a smarty variable instead of being displayed |
---|
66 | $_assign = $_attr['assign']; |
---|
67 | // create variable to make shure that the compiler knows about its nocache status |
---|
68 | $compiler->template->tpl_vars[trim($_attr['assign'], "'")] = new Smarty_Variable(null, true); |
---|
69 | } |
---|
70 | if (isset($_attr['script'])) { |
---|
71 | // script which must be included |
---|
72 | $_function = "smarty_insert_{$_name}"; |
---|
73 | $_smarty_tpl = $compiler->template; |
---|
74 | $_filepath = false; |
---|
75 | eval('$_script = ' . $_attr['script'] . ';'); |
---|
76 | if (!isset($compiler->smarty->security_policy) && file_exists($_script)) { |
---|
77 | $_filepath = $_script; |
---|
78 | } else { |
---|
79 | if (isset($compiler->smarty->security_policy)) { |
---|
80 | $_dir = $compiler->smarty->security_policy->trusted_dir; |
---|
81 | } else { |
---|
82 | $_dir = $compiler->smarty->trusted_dir; |
---|
83 | } |
---|
84 | if (!empty($_dir)) { |
---|
85 | foreach((array)$_dir as $_script_dir) { |
---|
86 | $_script_dir = rtrim($_script_dir, '/\\') . DS; |
---|
87 | if (file_exists($_script_dir . $_script)) { |
---|
88 | $_filepath = $_script_dir . $_script; |
---|
89 | break; |
---|
90 | } |
---|
91 | } |
---|
92 | } |
---|
93 | } |
---|
94 | if ($_filepath == false) { |
---|
95 | $compiler->trigger_template_error("{insert} missing script file '{$_script}'", $compiler->lex->taglineno); |
---|
96 | } |
---|
97 | // code for script file loading |
---|
98 | $_output .= "require_once '{$_filepath}' ;"; |
---|
99 | require_once $_filepath; |
---|
100 | if (!is_callable($_function)) { |
---|
101 | $compiler->trigger_template_error(" {insert} function '{$_function}' is not callable in script file '{$_script}'", $compiler->lex->taglineno); |
---|
102 | } |
---|
103 | } else { |
---|
104 | $_filepath = 'null'; |
---|
105 | $_function = "insert_{$_name}"; |
---|
106 | // function in PHP script ? |
---|
107 | if (!is_callable($_function)) { |
---|
108 | // try plugin |
---|
109 | if (!$_function = $compiler->getPlugin($_name, 'insert')) { |
---|
110 | $compiler->trigger_template_error("{insert} no function or plugin found for '{$_name}'", $compiler->lex->taglineno); |
---|
111 | } |
---|
112 | } |
---|
113 | } |
---|
114 | // delete {insert} standard attributes |
---|
115 | unset($_attr['name'], $_attr['assign'], $_attr['script'], $_attr['nocache']); |
---|
116 | // convert attributes into parameter array string |
---|
117 | $_paramsArray = array(); |
---|
118 | foreach ($_attr as $_key => $_value) { |
---|
119 | $_paramsArray[] = "'$_key' => $_value"; |
---|
120 | } |
---|
121 | $_params = 'array(' . implode(", ", $_paramsArray) . ')'; |
---|
122 | // call insert |
---|
123 | if (isset($_assign)) { |
---|
124 | if ($_smarty_tpl->caching) { |
---|
125 | $_output .= "echo Smarty_Internal_Nocache_Insert::compile ('{$_function}',{$_params}, \$_smarty_tpl, '{$_filepath}',{$_assign});?>"; |
---|
126 | } else { |
---|
127 | $_output .= "\$_smarty_tpl->assign({$_assign} , {$_function} ({$_params},\$_smarty_tpl), true);?>"; |
---|
128 | } |
---|
129 | } else { |
---|
130 | $compiler->has_output = true; |
---|
131 | if ($_smarty_tpl->caching) { |
---|
132 | $_output .= "echo Smarty_Internal_Nocache_Insert::compile ('{$_function}',{$_params}, \$_smarty_tpl, '{$_filepath}');?>"; |
---|
133 | } else { |
---|
134 | $_output .= "echo {$_function}({$_params},\$_smarty_tpl);?>"; |
---|
135 | } |
---|
136 | } |
---|
137 | return $_output; |
---|
138 | } |
---|
139 | |
---|
140 | } |
---|
141 | |
---|
142 | ?> |
---|