mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-11 13:58:54 +00:00
Merge branch '3.3.x'
This commit is contained in:
commit
6d1284495b
2 changed files with 204 additions and 44 deletions
|
@ -148,11 +148,6 @@ class path_helper
|
||||||
*/
|
*/
|
||||||
public function get_web_root_path()
|
public function get_web_root_path()
|
||||||
{
|
{
|
||||||
if ($this->symfony_request === null)
|
|
||||||
{
|
|
||||||
return $this->phpbb_root_path;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (null !== $this->web_root_path)
|
if (null !== $this->web_root_path)
|
||||||
{
|
{
|
||||||
return $this->web_root_path;
|
return $this->web_root_path;
|
||||||
|
@ -215,7 +210,7 @@ class path_helper
|
||||||
$this->symfony_request->get('_referer'),
|
$this->symfony_request->get('_referer'),
|
||||||
$absolute_board_url
|
$absolute_board_url
|
||||||
);
|
);
|
||||||
return $this->web_root_path = $this->phpbb_root_path . $referer_web_root_path;
|
return $this->web_root_path = $referer_web_root_path;
|
||||||
}
|
}
|
||||||
|
|
||||||
// How many corrections might we need?
|
// How many corrections might we need?
|
||||||
|
@ -233,7 +228,7 @@ class path_helper
|
||||||
|
|
||||||
// Prepend ../ to the phpbb_root_path as many times as / exists in path_info
|
// Prepend ../ to the phpbb_root_path as many times as / exists in path_info
|
||||||
$this->web_root_path = filesystem_helper::clean_path(
|
$this->web_root_path = filesystem_helper::clean_path(
|
||||||
'./' . str_repeat('../', $corrections) . $this->phpbb_root_path
|
'./' . str_repeat('../', max(0, $corrections)) . $this->phpbb_root_path
|
||||||
);
|
);
|
||||||
return $this->web_root_path;
|
return $this->web_root_path;
|
||||||
}
|
}
|
||||||
|
@ -261,7 +256,7 @@ class path_helper
|
||||||
$relative_referer_path = substr($relative_referer_path, 0, $has_params);
|
$relative_referer_path = substr($relative_referer_path, 0, $has_params);
|
||||||
}
|
}
|
||||||
$corrections = substr_count($relative_referer_path, '/');
|
$corrections = substr_count($relative_referer_path, '/');
|
||||||
return $this->phpbb_root_path . str_repeat('../', $corrections - 1);
|
return $this->phpbb_root_path . str_repeat('../', max(0, $corrections - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
// If not, it's a bit more complicated. We go to the parent directory
|
// If not, it's a bit more complicated. We go to the parent directory
|
||||||
|
|
|
@ -31,7 +31,8 @@ class phpbb_path_helper_test extends phpbb_test_case
|
||||||
),
|
),
|
||||||
$this->createMock('\phpbb\request\request'),
|
$this->createMock('\phpbb\request\request'),
|
||||||
$this->phpbb_root_path,
|
$this->phpbb_root_path,
|
||||||
'php'
|
'php',
|
||||||
|
'adm/'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,33 +51,45 @@ class phpbb_path_helper_test extends phpbb_test_case
|
||||||
|
|
||||||
public function test_get_web_root_path()
|
public function test_get_web_root_path()
|
||||||
{
|
{
|
||||||
// Symfony Request = null, so always should return phpbb_root_path
|
|
||||||
$this->assertEquals($this->phpbb_root_path, $this->path_helper->get_web_root_path());
|
$this->assertEquals($this->phpbb_root_path, $this->path_helper->get_web_root_path());
|
||||||
|
|
||||||
|
// Second call will use class property
|
||||||
|
$this->assertEquals($this->phpbb_root_path, $this->path_helper->get_web_root_path());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_get_adm_relative_path()
|
||||||
|
{
|
||||||
|
$this->assertEquals( 'adm/', $this->path_helper->get_adm_relative_path());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_get_php_ext()
|
||||||
|
{
|
||||||
|
$this->assertSame('php', $this->path_helper->get_php_ext());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function basic_update_web_root_path_data()
|
public function basic_update_web_root_path_data()
|
||||||
{
|
{
|
||||||
$this->set_phpbb_root_path();
|
$this->set_phpbb_root_path();
|
||||||
|
|
||||||
return array(
|
return [
|
||||||
array(
|
[
|
||||||
'http://www.test.com/test.php',
|
'http://www.test.com/test.php',
|
||||||
'http://www.test.com/test.php',
|
'http://www.test.com/test.php',
|
||||||
'/',
|
'/',
|
||||||
),
|
],
|
||||||
array(
|
[
|
||||||
$this->phpbb_root_path . 'test.php',
|
$this->phpbb_root_path . 'test.php',
|
||||||
$this->phpbb_root_path . 'test.php',
|
$this->phpbb_root_path . 'test.php',
|
||||||
),
|
],
|
||||||
array(
|
[
|
||||||
'test.php',
|
'test.php',
|
||||||
'test.php',
|
'test.php',
|
||||||
),
|
],
|
||||||
array(
|
[
|
||||||
$this->phpbb_root_path . $this->phpbb_root_path . 'test.php',
|
$this->phpbb_root_path . $this->phpbb_root_path . 'test.php',
|
||||||
filesystem_helper::clean_path($this->phpbb_root_path . $this->phpbb_root_path . 'test.php'),
|
filesystem_helper::clean_path($this->phpbb_root_path . $this->phpbb_root_path . 'test.php'),
|
||||||
),
|
],
|
||||||
);
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -87,6 +100,25 @@ class phpbb_path_helper_test extends phpbb_test_case
|
||||||
$this->assertEquals($expected, $this->path_helper->update_web_root_path($input));
|
$this->assertEquals($expected, $this->path_helper->update_web_root_path($input));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function test_update_web_root_path_app()
|
||||||
|
{
|
||||||
|
$path_helper = $this->getMockBuilder('\phpbb\path_helper')
|
||||||
|
->setConstructorArgs([
|
||||||
|
new \phpbb\symfony_request(
|
||||||
|
new phpbb_mock_request()
|
||||||
|
),
|
||||||
|
$this->createMock('\phpbb\request\request'),
|
||||||
|
$this->phpbb_root_path,
|
||||||
|
'php',
|
||||||
|
'adm/'
|
||||||
|
])
|
||||||
|
->setMethods(['get_web_root_path'])
|
||||||
|
->getMock();
|
||||||
|
$path_helper->method('get_web_root_path')
|
||||||
|
->willReturn('/var/www/phpbb/app.php/');
|
||||||
|
$this->assertEquals('/var/www/phpbb/app.php/foo', $path_helper->update_web_root_path($this->phpbb_root_path . 'app.php/foo'));
|
||||||
|
}
|
||||||
|
|
||||||
public function update_web_root_path_data()
|
public function update_web_root_path_data()
|
||||||
{
|
{
|
||||||
$this->set_phpbb_root_path();
|
$this->set_phpbb_root_path();
|
||||||
|
@ -157,6 +189,13 @@ class phpbb_path_helper_test extends phpbb_test_case
|
||||||
'/phpbb3-fork/phpBB/app.php',
|
'/phpbb3-fork/phpBB/app.php',
|
||||||
'',
|
'',
|
||||||
),
|
),
|
||||||
|
array(
|
||||||
|
'./../'.$this->phpbb_root_path . 'test.php',
|
||||||
|
'',
|
||||||
|
'/phpbb3-fork/phpBB/foo',
|
||||||
|
'/phpbb3-fork/phpBB/app.php',
|
||||||
|
'',
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -186,6 +225,46 @@ class phpbb_path_helper_test extends phpbb_test_case
|
||||||
$this->assertEquals($correction . $input, $path_helper->update_web_root_path($input));
|
$this->assertEquals($correction . $input, $path_helper->update_web_root_path($input));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function remove_web_root_path_data()
|
||||||
|
{
|
||||||
|
$filesystem = new \phpbb\filesystem\filesystem();
|
||||||
|
$this->set_phpbb_root_path($filesystem);
|
||||||
|
|
||||||
|
return [
|
||||||
|
[
|
||||||
|
'web/root/path/some_url',
|
||||||
|
'web/root/path/some_url'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'/var/www/phpbb/test.php',
|
||||||
|
$this->phpbb_root_path . 'test.php'
|
||||||
|
]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider remove_web_root_path_data
|
||||||
|
*/
|
||||||
|
public function test_remove_web_root_path($input, $expected)
|
||||||
|
{
|
||||||
|
$path_helper = $this->getMockBuilder('\phpbb\path_helper')
|
||||||
|
->setConstructorArgs([
|
||||||
|
new \phpbb\symfony_request(
|
||||||
|
new phpbb_mock_request()
|
||||||
|
),
|
||||||
|
$this->createMock('\phpbb\request\request'),
|
||||||
|
$this->phpbb_root_path,
|
||||||
|
'php',
|
||||||
|
'adm/'
|
||||||
|
])
|
||||||
|
->setMethods(['get_web_root_path'])
|
||||||
|
->getMock();
|
||||||
|
$path_helper->method('get_web_root_path')
|
||||||
|
->willReturn('/var/www/phpbb/');
|
||||||
|
|
||||||
|
$this->assertEquals($expected, $path_helper->remove_web_root_path($input));
|
||||||
|
}
|
||||||
|
|
||||||
public function clean_url_data()
|
public function clean_url_data()
|
||||||
{
|
{
|
||||||
return array(
|
return array(
|
||||||
|
@ -379,6 +458,40 @@ class phpbb_path_helper_test extends phpbb_test_case
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function test_get_web_root_path_ajax()
|
||||||
|
{
|
||||||
|
$symfony_request = $this->getMockBuilder('\phpbb\symfony_request')
|
||||||
|
->setConstructorArgs([new phpbb_mock_request()])
|
||||||
|
->setMethods(['get', 'getSchemeAndHttpHost', 'getBasePath', 'getPathInfo'])
|
||||||
|
->getMock();
|
||||||
|
$symfony_request->method('get')
|
||||||
|
->with('_referer')
|
||||||
|
->willReturn('http://www.phpbb.com/community/route1/route2/');
|
||||||
|
$symfony_request->method('getSchemeAndHttpHost')
|
||||||
|
->willReturn('http://www.phpbb.com');
|
||||||
|
$symfony_request->method('getBasePath')
|
||||||
|
->willReturn('/community');
|
||||||
|
$symfony_request->expects($this->any())
|
||||||
|
->method('getPathInfo')
|
||||||
|
->will($this->returnValue('foo/bar'));
|
||||||
|
|
||||||
|
$request = $this->createMock('phpbb\request\request');
|
||||||
|
$request->method('is_ajax')
|
||||||
|
->willReturn(true);
|
||||||
|
$request->method('escape')
|
||||||
|
->willReturnArgument(0);
|
||||||
|
|
||||||
|
$path_helper = new \phpbb\path_helper(
|
||||||
|
$symfony_request,
|
||||||
|
$request,
|
||||||
|
$this->phpbb_root_path,
|
||||||
|
'php',
|
||||||
|
'adm/'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals($this->phpbb_root_path . '../../', $path_helper->get_web_root_path());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dataProvider append_url_params_data
|
* @dataProvider append_url_params_data
|
||||||
*/
|
*/
|
||||||
|
@ -389,63 +502,78 @@ class phpbb_path_helper_test extends phpbb_test_case
|
||||||
|
|
||||||
public function get_web_root_path_from_ajax_referer_data()
|
public function get_web_root_path_from_ajax_referer_data()
|
||||||
{
|
{
|
||||||
return array(
|
return [
|
||||||
array(
|
[
|
||||||
'http://www.phpbb.com/community/route1/route2/',
|
'http://www.phpbb.com/community/route1/route2/',
|
||||||
'http://www.phpbb.com/community',
|
'http://www.phpbb.com/community',
|
||||||
'../../',
|
'../../',
|
||||||
),
|
],
|
||||||
array(
|
[
|
||||||
|
'http://www.phpbb.com/community/route1/route2/?f=9',
|
||||||
|
'http://www.phpbb.com/community',
|
||||||
|
'../../',
|
||||||
|
],
|
||||||
|
[
|
||||||
'http://www.phpbb.com/community/route1/route2',
|
'http://www.phpbb.com/community/route1/route2',
|
||||||
'http://www.phpbb.com/community',
|
'http://www.phpbb.com/community',
|
||||||
'../',
|
'../',
|
||||||
),
|
],
|
||||||
array(
|
[
|
||||||
'http://www.phpbb.com/community/route1',
|
'http://www.phpbb.com/community/route1',
|
||||||
'http://www.phpbb.com/community',
|
'http://www.phpbb.com/community',
|
||||||
'',
|
'',
|
||||||
),
|
],
|
||||||
array(
|
[
|
||||||
'http://www.phpbb.com/community/',
|
'http://www.phpbb.com/community/',
|
||||||
'http://www.phpbb.com/community',
|
'http://www.phpbb.com/community',
|
||||||
'',
|
'',
|
||||||
),
|
],
|
||||||
array(
|
[
|
||||||
'http://www.phpbb.com/notcommunity/route1/route2/',
|
'http://www.phpbb.com/notcommunity/route1/route2/',
|
||||||
'http://www.phpbb.com/community',
|
'http://www.phpbb.com/community',
|
||||||
'../../../community/',
|
'../../../community/',
|
||||||
),
|
],
|
||||||
array(
|
[
|
||||||
|
'http://www.phpbb.com/notcommunity/route1/route2/?f=9',
|
||||||
|
'http://www.phpbb.com/community',
|
||||||
|
'../../../community/',
|
||||||
|
],
|
||||||
|
[
|
||||||
'http://www.phpbb.com/notcommunity/route1/route2',
|
'http://www.phpbb.com/notcommunity/route1/route2',
|
||||||
'http://www.phpbb.com/community',
|
'http://www.phpbb.com/community',
|
||||||
'../../community/',
|
'../../community/',
|
||||||
),
|
],
|
||||||
array(
|
[
|
||||||
'http://www.phpbb.com/notcommunity/route1',
|
'http://www.phpbb.com/notcommunity/route1',
|
||||||
'http://www.phpbb.com/community',
|
'http://www.phpbb.com/community',
|
||||||
'../community/',
|
'../community/',
|
||||||
),
|
],
|
||||||
array(
|
[
|
||||||
'http://www.phpbb.com/notcommunity/',
|
'http://www.phpbb.com/notcommunity/',
|
||||||
'http://www.phpbb.com/community',
|
'http://www.phpbb.com/community',
|
||||||
'../community/',
|
'../community/',
|
||||||
),
|
],
|
||||||
array(
|
[
|
||||||
'http://www.phpbb.com/foobar',
|
'http://www.phpbb.com/foobar',
|
||||||
'http://www.phpbb.com',
|
'http://www.phpbb.com',
|
||||||
'',
|
'',
|
||||||
),
|
],
|
||||||
array(
|
[
|
||||||
'http://www.foobar.com',
|
'http://www.foobar.com',
|
||||||
'http://www.phpbb.com',
|
'http://www.phpbb.com',
|
||||||
'/www.phpbb.com/',
|
'/www.phpbb.com/',
|
||||||
),
|
],
|
||||||
array(
|
[
|
||||||
'foobar',
|
'foobar',
|
||||||
'http://www.phpbb.com/community',
|
'http://www.phpbb.com/community',
|
||||||
'',
|
'',
|
||||||
)
|
],
|
||||||
);
|
[
|
||||||
|
'https://www.phpbb.com',
|
||||||
|
'https://www.phpbb.com',
|
||||||
|
''
|
||||||
|
]
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -480,4 +608,41 @@ class phpbb_path_helper_test extends phpbb_test_case
|
||||||
{
|
{
|
||||||
$this->assertEquals($this->phpbb_root_path . $expected, $this->path_helper->get_valid_page($page, $mod_rewrite));
|
$this->assertEquals($this->phpbb_root_path . $expected, $this->path_helper->get_valid_page($page, $mod_rewrite));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function is_router_used_data()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
[
|
||||||
|
'index.php',
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'app.php',
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider is_router_used_data
|
||||||
|
*/
|
||||||
|
public function test_is_router_used($script_name, $expected)
|
||||||
|
{
|
||||||
|
$symfony_request = $this->getMockBuilder('\phpbb\symfony_request')
|
||||||
|
->setConstructorArgs([new phpbb_mock_request()])
|
||||||
|
->setMethods(['getScriptName'])
|
||||||
|
->getMock();
|
||||||
|
$symfony_request->method('getScriptName')
|
||||||
|
->willReturn($script_name);
|
||||||
|
|
||||||
|
$path_helper = new \phpbb\path_helper(
|
||||||
|
$symfony_request,
|
||||||
|
$this->createMock('\phpbb\request\request'),
|
||||||
|
$this->phpbb_root_path,
|
||||||
|
'php',
|
||||||
|
'adm/'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertSame($expected, $path_helper->is_router_used());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue