1: <?php
2:
3: 4: 5: 6: 7: 8: 9: 10:
11:
12: 13: 14: 15: 16: 17:
18: class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase
19: {
20: 21: 22: 23: 24: 25:
26: public $required_attributes = array('name');
27: 28: 29: 30: 31: 32:
33: public $shorttag_order = array('name');
34: 35: 36: 37: 38: 39:
40: public $optional_attributes = array('_any');
41:
42: 43: 44: 45: 46: 47: 48: 49:
50: public function compile($args, $compiler)
51: {
52:
53: $_attr = $this->getAttributes($compiler, $args);
54:
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:
63: eval('$_name = ' . $_attr['name'] . ';');
64: if (isset($_attr['assign'])) {
65:
66: $_assign = $_attr['assign'];
67:
68: $compiler->template->tpl_vars[trim($_attr['assign'], "'")] = new Smarty_Variable(null, true);
69: }
70: if (isset($_attr['script'])) {
71:
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:
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:
107: if (!is_callable($_function)) {
108:
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:
115: unset($_attr['name'], $_attr['assign'], $_attr['script'], $_attr['nocache']);
116:
117: $_paramsArray = array();
118: foreach ($_attr as $_key => $_value) {
119: $_paramsArray[] = "'$_key' => $_value";
120: }
121: $_params = 'array(' . implode(", ", $_paramsArray) . ')';
122:
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:
138: return $_output;
139: }
140: }
141: