mirror of
				https://github.com/smarty-php/smarty.git
				synced 2025-11-04 06:11:37 +01:00 
			
		
		
		
	
		
			
	
	
		
			56 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			56 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Runtime Methods updateScope
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @package    Smarty
							 | 
						||
| 
								 | 
							
								 * @subpackage PluginsInternal
							 | 
						||
| 
								 | 
							
								 * @author     Uwe Tews
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 **/
							 | 
						||
| 
								 | 
							
								class Smarty_Internal_Runtime_UpdateScope
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Update new assigned template variable in other effected scopes
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param \Smarty_Internal_Template $tpl     template object
							 | 
						||
| 
								 | 
							
								     * @param string $varName variable name
							 | 
						||
| 
								 | 
							
								     * @param int    $scope   scope to which bubble up variable value
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function updateScope(\Smarty_Internal_Template $tpl, $varName, $scope = Smarty::SCOPE_LOCAL)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        if (!$scope && !$tpl->scope) {
							 | 
						||
| 
								 | 
							
								            return;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        foreach (array($scope, $tpl->scope) as $s) {
							 | 
						||
| 
								 | 
							
								            $s = ($bubble_up = $s >= Smarty::SCOPE_BUBBLE_UP) ? $s - Smarty::SCOPE_BUBBLE_UP : $s;
							 | 
						||
| 
								 | 
							
								            if ($bubble_up && $s) {
							 | 
						||
| 
								 | 
							
								                $ptr = $tpl->parent;
							 | 
						||
| 
								 | 
							
								                if (isset($ptr)) {
							 | 
						||
| 
								 | 
							
								                    $ptr->tpl_vars[$varName] = $tpl->tpl_vars[$varName];
							 | 
						||
| 
								 | 
							
								                    $ptr = $ptr->parent;
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                if ($s == Smarty::SCOPE_PARENT) {
							 | 
						||
| 
								 | 
							
								                    continue;
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                while (isset($ptr) && $ptr->_objType == 2) {
							 | 
						||
| 
								 | 
							
								                    $ptr->tpl_vars[$varName] = $tpl->tpl_vars[$varName];
							 | 
						||
| 
								 | 
							
								                    $ptr = $ptr->parent;
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                if ($s == Smarty::SCOPE_TPL_ROOT) {
							 | 
						||
| 
								 | 
							
								                    continue;
							 | 
						||
| 
								 | 
							
								                } elseif ($s == Smarty::SCOPE_SMARTY) {
							 | 
						||
| 
								 | 
							
								                    $tpl->smarty->tpl_vars[$varName] = $tpl->tpl_vars[$varName];
							 | 
						||
| 
								 | 
							
								                } elseif ($s == Smarty::SCOPE_GLOBAL) {
							 | 
						||
| 
								 | 
							
								                    Smarty::$global_tpl_vars[$varName] = $tpl->tpl_vars[$varName];
							 | 
						||
| 
								 | 
							
								                } elseif ($s == Smarty::SCOPE_ROOT) {
							 | 
						||
| 
								 | 
							
								                    while (isset($ptr->parent)) {
							 | 
						||
| 
								 | 
							
								                        $ptr = $ptr->parent;
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                    $ptr->tpl_vars[$varName] = $tpl->tpl_vars[$varName];
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |