aboutsummaryrefslogtreecommitdiffstats
path: root/include/smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php
diff options
context:
space:
mode:
authorplegall <plg@piwigo.org>2015-12-10 14:02:22 +0100
committerplegall <plg@piwigo.org>2015-12-10 14:02:22 +0100
commitfa10e0945ecd45bfe78a2c8fb015a43092b4944b (patch)
tree19cf59c08877e43325efbe9a2584114011a25522 /include/smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php
parent16f6a54fa719cc79ff942e4bb8139d7ca09ed997 (diff)
bug #385 update to smarty-3.1.28-dev (from Github)
Diffstat (limited to 'include/smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php')
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php55
1 files changed, 55 insertions, 0 deletions
diff --git a/include/smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php b/include/smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php
new file mode 100644
index 000000000..3d80c859a
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php
@@ -0,0 +1,55 @@
+<?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];
+ }
+ }
+ }
+ }
+}