aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/phpbb/template/context.php
diff options
context:
space:
mode:
authorMarc Alexander <admin@m-a-styles.de>2017-05-29 12:13:41 +0200
committerMarc Alexander <admin@m-a-styles.de>2017-05-29 12:13:41 +0200
commit7dc288cb89b5519817a900a87cd8b68adcc08954 (patch)
tree2153122dc56af935040c19d547c104128062f506 /phpBB/phpbb/template/context.php
parent8fcdf1747cf7ef089f8f77e21640aca601233dc5 (diff)
parent37c48a59c318c12547c371f0d0a8bc84f5206dcf (diff)
downloadforums-7dc288cb89b5519817a900a87cd8b68adcc08954.tar
forums-7dc288cb89b5519817a900a87cd8b68adcc08954.tar.gz
forums-7dc288cb89b5519817a900a87cd8b68adcc08954.tar.bz2
forums-7dc288cb89b5519817a900a87cd8b68adcc08954.tar.xz
forums-7dc288cb89b5519817a900a87cd8b68adcc08954.zip
Merge remote-tracking branch 'javiexin/ticket/15068' into 3.2.x
Diffstat (limited to 'phpBB/phpbb/template/context.php')
-rw-r--r--phpBB/phpbb/template/context.php73
1 files changed, 73 insertions, 0 deletions
diff --git a/phpBB/phpbb/template/context.php b/phpBB/phpbb/template/context.php
index 5e4f71a2a9..392efd5933 100644
--- a/phpBB/phpbb/template/context.php
+++ b/phpBB/phpbb/template/context.php
@@ -87,6 +87,17 @@ class context
}
/**
+ * Retreive a single scalar value from a single key.
+ *
+ * @param string $varname Variable name
+ * @return mixed Variable value, or null if not set
+ */
+ public function retrieve_var($varname)
+ {
+ return isset($this->rootref[$varname]) ? $this->rootref[$varname] : null;
+ }
+
+ /**
* Returns a reference to template data array.
*
* This function is public so that template renderer may invoke it.
@@ -264,6 +275,68 @@ class context
}
/**
+ * Retrieve key variable pairs from the specified block
+ *
+ * @param string $blockname Name of block to retrieve $vararray from
+ * @param array $vararray An array of variable names, empty array retrieves all vars
+ * @return array of hashes with variable name as key and retrieved value or null as value
+ */
+ public function retrieve_block_vars($blockname, array $vararray)
+ {
+ // For nested block, $blockcount > 0, for top-level block, $blockcount == 0
+ $blocks = explode('.', $blockname);
+ $blockcount = sizeof($blocks) - 1;
+
+ $block = $this->tpldata;
+ for ($i = 0; $i <= $blockcount; $i++)
+ {
+ if (($pos = strpos($blocks[$i], '[')) !== false)
+ {
+ $name = substr($blocks[$i], 0, $pos);
+
+ if (strpos($blocks[$i], '[]') === $pos)
+ {
+ $index = sizeof($block[$name]) - 1;
+ }
+ else
+ {
+ $index = min((int) substr($blocks[$i], $pos + 1, -1), sizeof($block[$name]) - 1);
+ }
+ }
+ else
+ {
+ $name = $blocks[$i];
+ $index = sizeof($block[$name]) - 1;
+ }
+ $block = $block[$name];
+ $block = $block[$index];
+ }
+
+ $result = array();
+ if ($vararray === array())
+ {
+ // The calculated vars that depend on the block position are excluded from the complete block returned results
+ $excluded_vars = array('S_FIRST_ROW', 'S_LAST_ROW', 'S_BLOCK_NAME', 'S_NUM_ROWS', 'S_ROW_COUNT', 'S_ROW_NUM');
+
+ foreach ($block as $varname => $varvalue)
+ {
+ if ($varname === strtoupper($varname) && !is_array($varvalue) && !in_array($varname, $excluded_vars))
+ {
+ $result[$varname] = $varvalue;
+ }
+ }
+ }
+ else
+ {
+ foreach ($vararray as $varname)
+ {
+ $result[$varname] = isset($block[$varname]) ? $block[$varname] : null;
+ }
+ }
+ return $result;
+ }
+
+ /**
* Find the index for a specified key in the innermost specified block
*
* @param string $blockname the blockname, for example 'loop'