mirror of
https://github.com/phpbb/phpbb.git
synced 2025-07-31 05:50:42 +02:00
Merge remote-tracking branch 'javiexin/ticket/15068' into 3.2.x
This commit is contained in:
@@ -86,6 +86,17 @@ class context
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*
|
||||
@@ -263,6 +274,68 @@ class context
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
*
|
||||
|
Reference in New Issue
Block a user