1<?php
2/**
3 * Smarty Internal Plugin Compile Config Load
4 * Compiles the {config load} tag
5 *
6 * @package    Smarty
7 * @subpackage Compiler
8 * @author     Uwe Tews
9 */
10
11/**
12 * Smarty Internal Plugin Compile Config Load Class
13 *
14 * @package    Smarty
15 * @subpackage Compiler
16 */
17class Smarty_Internal_Compile_Config_Load 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', 'section');
34
35    /**
36     * Attribute definition: Overwrites base class.
37     *
38     * @var array
39     * @see Smarty_Internal_CompileBase
40     */
41    public $optional_attributes = array('section', 'scope');
42
43    /**
44     * Attribute definition: Overwrites base class.
45     *
46     * @var array
47     * @see Smarty_Internal_CompileBase
48     */
49    public $option_flags = array('nocache', 'noscope');
50
51    /**
52     * Valid scope names
53     *
54     * @var array
55     */
56    public $valid_scopes = array(
57        'local'  => Smarty::SCOPE_LOCAL, 'parent' => Smarty::SCOPE_PARENT,
58        'root'   => Smarty::SCOPE_ROOT, 'tpl_root' => Smarty::SCOPE_TPL_ROOT,
59        'smarty' => Smarty::SCOPE_SMARTY, 'global' => Smarty::SCOPE_SMARTY
60    );
61
62    /**
63     * Compiles code for the {config_load} tag
64     *
65     * @param array                                 $args     array with attributes from parser
66     * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
67     *
68     * @return string compiled code
69     * @throws \SmartyCompilerException
70     */
71    public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
72    {
73        // check and get attributes
74        $_attr = $this->getAttributes($compiler, $args);
75        if ($_attr[ 'nocache' ] === true) {
76            $compiler->trigger_template_error('nocache option not allowed', null, true);
77        }
78        // save possible attributes
79        $conf_file = $_attr[ 'file' ];
80        if (isset($_attr[ 'section' ])) {
81            $section = $_attr[ 'section' ];
82        } else {
83            $section = 'null';
84        }
85        // scope setup
86        if ($_attr[ 'noscope' ]) {
87            $_scope = -1;
88        } else {
89            $_scope = $compiler->convertScope($_attr, $this->valid_scopes);
90        }
91        // create config object
92        $_output =
93            "<?php\n\$_smarty_tpl->smarty->ext->configLoad->_loadConfigFile(\$_smarty_tpl, {$conf_file}, {$section}, {$_scope});\n?>\n";
94        return $_output;
95    }
96}
97