"Fossies" - the Fresh Open Source Software Archive

Member "smarty-3.1.34/libs/sysplugins/smarty_internal_method_configload.php" (28 Feb 2019, 7297 Bytes) of package /linux/www/smarty-3.1.34.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) PHP source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "smarty_internal_method_configload.php" see the Fossies "Dox" file reference documentation and the last Fossies "Diffs" side-by-side code changes report: 3.1.32_vs_3.1.33.

    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 \Exception
   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      * @throws \Exception
   55      */
   56     public function _loadConfigFile(Smarty_Internal_Data $data, $config_file, $sections = null, $scope = 0)
   57     {
   58         /* @var \Smarty $smarty */
   59         $smarty = $data->_getSmartyObj();
   60         /* @var \Smarty_Internal_Template $confObj */
   61         $confObj = new Smarty_Internal_Template($config_file, $smarty, $data, null, null, null, null, true);
   62         $confObj->caching = Smarty::CACHING_OFF;
   63         $confObj->source->config_sections = $sections;
   64         $confObj->source->scope = $scope;
   65         $confObj->compiled = Smarty_Template_Compiled::load($confObj);
   66         $confObj->compiled->render($confObj);
   67         if ($data->_isTplObj()) {
   68             $data->compiled->file_dependency[ $confObj->source->uid ] =
   69                 array($confObj->source->filepath, $confObj->source->getTimeStamp(), $confObj->source->type);
   70         }
   71     }
   72 
   73     /**
   74      * load config variables into template object
   75      *
   76      * @param \Smarty_Internal_Template $tpl
   77      * @param array                     $new_config_vars
   78      */
   79     public function _loadConfigVars(Smarty_Internal_Template $tpl, $new_config_vars)
   80     {
   81         $this->_assignConfigVars($tpl->parent->config_vars, $tpl, $new_config_vars);
   82         $tagScope = $tpl->source->scope;
   83         if ($tagScope >= 0) {
   84             if ($tagScope === Smarty::SCOPE_LOCAL) {
   85                 $this->_updateVarStack($tpl, $new_config_vars);
   86                 $tagScope = 0;
   87                 if (!$tpl->scope) {
   88                     return;
   89                 }
   90             }
   91             if ($tpl->parent->_isTplObj() && ($tagScope || $tpl->parent->scope)) {
   92                 $mergedScope = $tagScope | $tpl->scope;
   93                 if ($mergedScope) {
   94                     // update scopes
   95                     /* @var \Smarty_Internal_Template|\Smarty|\Smarty_Internal_Data $ptr */
   96                     foreach ($tpl->smarty->ext->_updateScope->_getAffectedScopes($tpl->parent, $mergedScope) as $ptr) {
   97                         $this->_assignConfigVars($ptr->config_vars, $tpl, $new_config_vars);
   98                         if ($tagScope && $ptr->_isTplObj() && isset($tpl->_cache[ 'varStack' ])) {
   99                             $this->_updateVarStack($tpl, $new_config_vars);
  100                         }
  101                     }
  102                 }
  103             }
  104         }
  105     }
  106 
  107     /**
  108      * Assign all config variables in given scope
  109      *
  110      * @param array                     $config_vars     config variables in scope
  111      * @param \Smarty_Internal_Template $tpl
  112      * @param array                     $new_config_vars loaded config variables
  113      */
  114     public function _assignConfigVars(&$config_vars, Smarty_Internal_Template $tpl, $new_config_vars)
  115     {
  116         // copy global config vars
  117         foreach ($new_config_vars[ 'vars' ] as $variable => $value) {
  118             if ($tpl->smarty->config_overwrite || !isset($config_vars[ $variable ])) {
  119                 $config_vars[ $variable ] = $value;
  120             } else {
  121                 $config_vars[ $variable ] = array_merge((array)$config_vars[ $variable ], (array)$value);
  122             }
  123         }
  124         // scan sections
  125         $sections = $tpl->source->config_sections;
  126         if (!empty($sections)) {
  127             foreach ((array)$sections as $tpl_section) {
  128                 if (isset($new_config_vars[ 'sections' ][ $tpl_section ])) {
  129                     foreach ($new_config_vars[ 'sections' ][ $tpl_section ][ 'vars' ] as $variable => $value) {
  130                         if ($tpl->smarty->config_overwrite || !isset($config_vars[ $variable ])) {
  131                             $config_vars[ $variable ] = $value;
  132                         } else {
  133                             $config_vars[ $variable ] = array_merge((array)$config_vars[ $variable ], (array)$value);
  134                         }
  135                     }
  136                 }
  137             }
  138         }
  139     }
  140 
  141     /**
  142      * Update config variables in template local variable stack
  143      *
  144      * @param \Smarty_Internal_Template $tpl
  145      * @param array                     $config_vars
  146      */
  147     public function _updateVarStack(Smarty_Internal_Template $tpl, $config_vars)
  148     {
  149         $i = 0;
  150         while (isset($tpl->_cache[ 'varStack' ][ $i ])) {
  151             $this->_assignConfigVars($tpl->_cache[ 'varStack' ][ $i ][ 'config' ], $tpl, $config_vars);
  152             $i++;
  153         }
  154     }
  155 
  156     /**
  157      * gets  a config variable value
  158      *
  159      * @param \Smarty|\Smarty_Internal_Data|\Smarty_Internal_Template $data
  160      * @param string                                                  $varName the name of the config variable
  161      * @param bool                                                    $errorEnable
  162      *
  163      * @return null|string  the value of the config variable
  164      */
  165     public function _getConfigVariable(Smarty_Internal_Data $data, $varName, $errorEnable = true)
  166     {
  167         $_ptr = $data;
  168         while ($_ptr !== null) {
  169             if (isset($_ptr->config_vars[ $varName ])) {
  170                 // found it, return it
  171                 return $_ptr->config_vars[ $varName ];
  172             }
  173             // not found, try at parent
  174             $_ptr = $_ptr->parent;
  175         }
  176         if ($data->smarty->error_unassigned && $errorEnable) {
  177             // force a notice
  178             $x = $$varName;
  179         }
  180         return null;
  181     }
  182 }