Skip to content

Commit b5daa91

Browse files
committed
[ticket/15659] Fix retrieve_block_vars()
PHPBB3-15659
1 parent 02cbb86 commit b5daa91

2 files changed

Lines changed: 106 additions & 0 deletions

File tree

phpBB/phpbb/template/context.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,11 @@ public function retrieve_block_vars($blockname, array $vararray)
274274
{
275275
$name = substr($blocks[$i], 0, $pos);
276276

277+
if (empty($block[$name]))
278+
{
279+
return array();
280+
}
281+
277282
if (strpos($blocks[$i], '[]') === $pos)
278283
{
279284
$index = count($block[$name]) - 1;
@@ -286,6 +291,11 @@ public function retrieve_block_vars($blockname, array $vararray)
286291
else
287292
{
288293
$name = $blocks[$i];
294+
if (empty($block[$name]))
295+
{
296+
return array();
297+
}
298+
289299
$index = count($block[$name]) - 1;
290300
}
291301
$block = $block[$name];

tests/template/context_test.php

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
<?php
2+
/**
3+
*
4+
* This file is part of the phpBB Forum Software package.
5+
*
6+
* @copyright (c) phpBB Limited <https://www.phpbb.com>
7+
* @license GNU General Public License, version 2 (GPL-2.0)
8+
*
9+
* For full copyright and license information, please see
10+
* the docs/CREDITS.txt file.
11+
*
12+
*/
13+
14+
class context_test extends phpbb_test_case
15+
{
16+
protected $context;
17+
protected function setUp()
18+
{
19+
$this->context = new \phpbb\template\context();
20+
21+
for ($i = 0; $i < 10; $i++)
22+
{
23+
$this->context->assign_block_vars('block' . $i, array(
24+
'FOO' . $i => 'foo' . $i,
25+
'BAR' . $i => 'bar' . $i,
26+
));
27+
28+
for ($j = 0; $j < 10; $j++)
29+
{
30+
$this->context->assign_block_vars('block' . $i . '.subblock', array(
31+
'SUBFOO' => 'subfoo' . $j,
32+
'SUBBAR' => 'subbar' . $j,
33+
));
34+
35+
for ($k = 0; $k < 10; $k++)
36+
{
37+
$this->context->assign_block_vars('block' . $i . '.subblock.subsubblock', array(
38+
'SUBSUBFOO' => 'subsubfoo' . $k,
39+
'SUBSUBBAR' => 'subsubbar' . $k,
40+
));
41+
}
42+
}
43+
}
44+
}
45+
46+
public function retrieve_block_vars_data()
47+
{
48+
return array(
49+
array('foo', array(), array()), // non-existent top-level block
50+
array('block1.foo', array(), array()), // non-existent sub-level block
51+
array('block1', array(), array( // top-level block, all vars
52+
'FOO1' => 'foo1',
53+
'BAR1' => 'bar1',
54+
)),
55+
array('block1', array('FOO1'), array( // top-level block, one var
56+
'FOO1' => 'foo1',
57+
)),
58+
array('block2.subblock', array(), array( // sub-level block, all vars
59+
'SUBFOO' => 'subfoo9',
60+
'SUBBAR' => 'subbar9',
61+
)),
62+
array('block2.subblock', array('SUBBAR'), array( // sub-level block, one var
63+
'SUBBAR' => 'subbar9',
64+
)),
65+
array('block2.subblock.subsubblock', array(), array( // sub-sub-level block, all vars
66+
'SUBSUBFOO' => 'subsubfoo9',
67+
'SUBSUBBAR' => 'subsubbar9',
68+
)),
69+
array('block2.subblock.subsubblock', array('SUBSUBBAR'), array( // sub-sub-level block, one var
70+
'SUBSUBBAR' => 'subsubbar9',
71+
)),
72+
array('block3.subblock[2]', array(), array( // sub-level, exact index, all vars
73+
'SUBFOO' => 'subfoo2',
74+
'SUBBAR' => 'subbar2',
75+
)),
76+
array('block3.subblock[2]', array('SUBBAR'), array( // sub-level, exact index, one var
77+
'SUBBAR' => 'subbar2',
78+
)),
79+
array('block3.subblock[3].subsubblock[5]', array(), array( // sub-sub-level, exact index, all vars
80+
'SUBSUBFOO' => 'subsubfoo5',
81+
'SUBSUBBAR' => 'subsubbar5',
82+
)),
83+
array('block3.subblock[4].subsubblock[6]', array('SUBSUBFOO'), array( // sub-sub-level, exact index, one var
84+
'SUBSUBFOO' => 'subsubfoo6',
85+
)),
86+
);
87+
}
88+
89+
/**
90+
* @dataProvider retrieve_block_vars_data
91+
*/
92+
public function test_retrieve_block_vars($blockname, $vararray, $result)
93+
{
94+
$this->assertEquals($result, $this->context->retrieve_block_vars($blockname, $vararray));
95+
}
96+
}

0 commit comments

Comments
 (0)