source: trunk/include/smarty/libs/sysplugins/smarty_internal_compile_insert.php @ 23384

Last change on this file since 23384 was 23384, checked in by rvelices, 11 years ago

smarty 3 - first pass for tests

File size: 5.1 KB
Line 
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 */
19class 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?>
Note: See TracBrowser for help on using the repository browser.