Subversion Repositories ALCASAR

Rev

Go to most recent revision | Details | Last modification | View Log

Rev Author Line No. Line
2809 rexy 1
<?php
2
/**
3
 * Smarty Internal Plugin Compile Include PHP
4
 * Compiles the {include_php} tag
5
 *
6
 * @package    Smarty
7
 * @subpackage Compiler
8
 * @author     Uwe Tews
9
 */
10
 
11
/**
12
 * Smarty Internal Plugin Compile Insert Class
13
 *
14
 * @package    Smarty
15
 * @subpackage Compiler
16
 */
17
class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase
18
{
19
    /**
20
     * Attribute definition: Overwrites base class.
21
     *
22
     * @var array
23
     * @see Smarty_Internal_CompileBase
24
     */
25
    public $required_attributes = array('file');
26
 
27
    /**
28
     * Attribute definition: Overwrites base class.
29
     *
30
     * @var array
31
     * @see Smarty_Internal_CompileBase
32
     */
33
    public $shorttag_order = array('file');
34
 
35
    /**
36
     * Attribute definition: Overwrites base class.
37
     *
38
     * @var array
39
     * @see Smarty_Internal_CompileBase
40
     */
41
    public $optional_attributes = array('once', 'assign');
42
 
43
    /**
44
     * Compiles code for the {include_php} tag
45
     *
46
     * @param array                                 $args     array with attributes from parser
47
     * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
48
     *
49
     * @return string
50
     * @throws \SmartyCompilerException
51
     * @throws \SmartyException
52
     */
53
    public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
54
    {
55
        if (!($compiler->smarty instanceof SmartyBC)) {
56
            throw new SmartyException("{include_php} is deprecated, use SmartyBC class to enable");
57
        }
58
        // check and get attributes
59
        $_attr = $this->getAttributes($compiler, $args);
60
        /**
61
         *
62
         *
63
         * @var Smarty_Internal_Template $_smarty_tpl
64
         * used in evaluated code
65
         */
66
        $_smarty_tpl = $compiler->template;
67
        $_filepath = false;
68
        $_file = null;
69
        eval('$_file = @' . $_attr[ 'file' ] . ';');
70
        if (!isset($compiler->smarty->security_policy) && file_exists($_file)) {
71
            $_filepath = $compiler->smarty->_realpath($_file, true);
72
        } else {
73
            if (isset($compiler->smarty->security_policy)) {
74
                $_dir = $compiler->smarty->security_policy->trusted_dir;
75
            } else {
76
                $_dir = $compiler->smarty->trusted_dir;
77
            }
78
            if (!empty($_dir)) {
79
                foreach ((array)$_dir as $_script_dir) {
80
                    $_path = $compiler->smarty->_realpath($_script_dir . DIRECTORY_SEPARATOR . $_file, true);
81
                    if (file_exists($_path)) {
82
                        $_filepath = $_path;
83
                        break;
84
                    }
85
                }
86
            }
87
        }
88
        if ($_filepath === false) {
89
            $compiler->trigger_template_error("{include_php} file '{$_file}' is not readable", null, true);
90
        }
91
        if (isset($compiler->smarty->security_policy)) {
92
            $compiler->smarty->security_policy->isTrustedPHPDir($_filepath);
93
        }
94
        if (isset($_attr[ 'assign' ])) {
95
            // output will be stored in a smarty variable instead of being displayed
96
            $_assign = $_attr[ 'assign' ];
97
        }
98
        $_once = '_once';
99
        if (isset($_attr[ 'once' ])) {
100
            if ($_attr[ 'once' ] === 'false') {
101
                $_once = '';
102
            }
103
        }
104
        if (isset($_assign)) {
105
            return "<?php ob_start();\ninclude{$_once} ('{$_filepath}');\n\$_smarty_tpl->assign({$_assign},ob_get_clean());\n?>";
106
        } else {
107
            return "<?php include{$_once} ('{$_filepath}');?>\n";
108
        }
109
    }
110
}