]> git.mxchange.org Git - friendica.git/blob - vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_configload.php
Add Smarty to Composer
[friendica.git] / vendor / smarty / smarty / libs / sysplugins / smarty_internal_method_configload.php
1 <?php
2
3 /**
4  * Smarty Method ConfigLoad
5  *
6  * Smarty::configLoad() method
7  *
8  * @package    Smarty
9  * @subpackage PluginsInternal
10  * @author     Uwe Tews
11  */
12 class Smarty_Internal_Method_ConfigLoad
13 {
14     /**
15      * Valid for all objects
16      *
17      * @var int
18      */
19     public $objMap = 7;
20
21     /**
22      * load a config file, optionally load just selected sections
23      *
24      * @api  Smarty::configLoad()
25      * @link http://www.smarty.net/docs/en/api.config.load.tpl
26      *
27      * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data
28      * @param  string                                                 $config_file filename
29      * @param  mixed                                                  $sections    array of section names, single
30      *                                                                             section or null
31      *
32      * @return \Smarty|\Smarty_Internal_Data|\Smarty_Internal_Template
33      * @throws \SmartyException
34      */
35     public function configLoad(Smarty_Internal_Data $data, $config_file, $sections = null)
36     {
37         $this->_loadConfigFile($data, $config_file, $sections, null);
38         return $data;
39     }
40
41     /**
42      * load a config file, optionally load just selected sections
43      *
44      * @api  Smarty::configLoad()
45      * @link http://www.smarty.net/docs/en/api.config.load.tpl
46      *
47      * @param \Smarty|\Smarty_Internal_Data|\Smarty_Internal_Template $data
48      * @param  string                                                 $config_file filename
49      * @param  mixed                                                  $sections    array of section names, single
50      *                                                                             section or null
51      * @param int                                                     $scope       scope into which config variables
52      *                                                                             shall be loaded
53      *
54      * @return \Smarty|\Smarty_Internal_Data|\Smarty_Internal_Template
55      * @throws \SmartyException
56      */
57     public function _loadConfigFile(Smarty_Internal_Data $data, $config_file, $sections = null, $scope = 0)
58     {
59         /* @var \Smarty $smarty */
60         $smarty = $data->_getSmartyObj();
61         /* @var \Smarty_Internal_Template $confObj */
62         $confObj = new Smarty_Internal_Template($config_file, $smarty, $data, null, null, null, null, true);
63         $confObj->caching = Smarty::CACHING_OFF;
64         $confObj->source->config_sections = $sections;
65         $confObj->source->scope = $scope;
66         $confObj->compiled = Smarty_Template_Compiled::load($confObj);
67         $confObj->compiled->render($confObj);
68         if ($data->_isTplObj()) {
69             $data->compiled->file_dependency[ $confObj->source->uid ] =
70                 array($confObj->source->filepath, $confObj->source->getTimeStamp(), $confObj->source->type);
71         }
72     }
73
74     /**
75      * load config variables into template object
76      *
77      * @param \Smarty_Internal_Template $tpl
78      * @param  array                    $new_config_vars
79      *
80      */
81     public function _loadConfigVars(Smarty_Internal_Template $tpl, $new_config_vars)
82     {
83         $this->_assignConfigVars($tpl->parent->config_vars, $tpl, $new_config_vars);
84         $tagScope = $tpl->source->scope;
85         if ($tagScope >= 0) {
86             if ($tagScope == Smarty::SCOPE_LOCAL) {
87                 $this->_updateVarStack($tpl, $new_config_vars);
88                 $tagScope = 0;
89                 if (!$tpl->scope) {
90                     return;
91                 }
92             }
93             if ($tpl->parent->_isTplObj() && ($tagScope || $tpl->parent->scope)) {
94                 $mergedScope = $tagScope | $tpl->scope;
95                 if ($mergedScope) {
96                     // update scopes
97                     foreach ($tpl->smarty->ext->_updateScope->_getAffectedScopes($tpl->parent, $mergedScope) as $ptr) {
98                         $this->_assignConfigVars($ptr->config_vars, $tpl, $new_config_vars);
99                         if ($tagScope && $ptr->_isTplObj() && isset($tpl->_cache[ 'varStack' ])) {
100                             $this->_updateVarStack($tpl, $new_config_vars);
101                         }
102                     }
103                 }
104             }
105         }
106     }
107
108     /**
109      * Assign all config variables in given scope
110      *
111      * @param array                     $config_vars     config variables in scope
112      * @param \Smarty_Internal_Template $tpl
113      * @param  array                    $new_config_vars loaded config variables
114      */
115     public function _assignConfigVars(&$config_vars, Smarty_Internal_Template $tpl, $new_config_vars)
116     {
117         // copy global config vars
118         foreach ($new_config_vars[ 'vars' ] as $variable => $value) {
119             if ($tpl->smarty->config_overwrite || !isset($config_vars[ $variable ])) {
120                 $config_vars[ $variable ] = $value;
121             } else {
122                 $config_vars[ $variable ] = array_merge((array) $config_vars[ $variable ], (array) $value);
123             }
124         }
125         // scan sections
126         $sections = $tpl->source->config_sections;
127         if (!empty($sections)) {
128             foreach ((array) $sections as $tpl_section) {
129                 if (isset($new_config_vars[ 'sections' ][ $tpl_section ])) {
130                     foreach ($new_config_vars[ 'sections' ][ $tpl_section ][ 'vars' ] as $variable => $value) {
131                         if ($tpl->smarty->config_overwrite || !isset($config_vars[ $variable ])) {
132                             $config_vars[ $variable ] = $value;
133                         } else {
134                             $config_vars[ $variable ] = array_merge((array) $config_vars[ $variable ], (array) $value);
135                         }
136                     }
137                 }
138             }
139         }
140     }
141
142     /**
143      * Update config variables in template local variable stack
144      *
145      * @param \Smarty_Internal_Template $tpl
146      * @param array                     $config_vars
147      */
148     public function _updateVarStack(Smarty_Internal_Template $tpl, $config_vars)
149     {
150         $i = 0;
151         while (isset($tpl->_cache[ 'varStack' ][ $i ])) {
152             $this->_assignConfigVars($tpl->_cache[ 'varStack' ][ $i ][ 'config' ], $tpl, $config_vars);
153             $i ++;
154         }
155     }
156
157     /**
158      * gets  a config variable value
159      *
160      * @param \Smarty|\Smarty_Internal_Data|\Smarty_Internal_Template $data
161      * @param string                                                  $varName the name of the config variable
162      * @param bool                                                    $errorEnable
163      *
164      * @return null|string  the value of the config variable
165      */
166     public function _getConfigVariable(Smarty_Internal_Data $data, $varName, $errorEnable = true)
167     {
168         $_ptr = $data;
169         while ($_ptr !== null) {
170             if (isset($_ptr->config_vars[ $varName ])) {
171                 // found it, return it
172                 return $_ptr->config_vars[ $varName ];
173             }
174             // not found, try at parent
175             $_ptr = $_ptr->parent;
176         }
177         if ($data->smarty->error_unassigned && $errorEnable) {
178             // force a notice
179             $x = $$varName;
180         }
181         return null;
182     }
183 }