1 <?php
2 /**
3 * Smarty Internal Plugin Compile Config Load
4 *
5 * Compiles the {config load} tag
6 *
7 * @package Smarty
8 * @subpackage Compiler
9 * @author Uwe Tews
10 */
12 /**
13 * Smarty Internal Plugin Compile Config Load Class
14 *
15 * @package Smarty
16 * @subpackage Compiler
17 */
18 class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase {
20 /**
21 * Attribute definition: Overwrites base class.
22 *
23 * @var array
24 * @see Smarty_Internal_CompileBase
25 */
26 public $required_attributes = array('file');
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 * Attribute definition: Overwrites base class.
36 *
37 * @var array
38 * @see Smarty_Internal_CompileBase
39 */
40 public $optional_attributes = array('section', 'scope');
42 /**
43 * Compiles code for the {config_load} tag
44 *
45 * @param array $args array with attributes from parser
46 * @param object $compiler compiler object
47 * @return string compiled code
48 */
49 public function compile($args, $compiler)
50 {
51 static $_is_legal_scope = array('local' => true,'parent' => true,'root' => true,'global' => true);
52 // check and get attributes
53 $_attr = $this->getAttributes($compiler, $args);
55 if ($_attr['nocache'] === true) {
56 $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
57 }
60 // save posible attributes
61 $conf_file = $_attr['file'];
62 if (isset($_attr['section'])) {
63 $section = $_attr['section'];
64 } else {
65 $section = 'null';
66 }
67 $scope = 'local';
68 // scope setup
69 if (isset($_attr['scope'])) {
70 $_attr['scope'] = trim($_attr['scope'], "'\"");
71 if (isset($_is_legal_scope[$_attr['scope']])) {
72 $scope = $_attr['scope'];
73 } else {
74 $compiler->trigger_template_error('illegal value for "scope" attribute', $compiler->lex->taglineno);
75 }
76 }
77 // create config object
78 $_output = "<?php \$_config = new Smarty_Internal_Config($conf_file, \$_smarty_tpl->smarty, \$_smarty_tpl);";
79 $_output .= "\$_config->loadConfigVars($section, '$scope'); ?>";
80 return $_output;
81 }
83 }
85 ?>