1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-04-22 16:51:56 +02:00

[ticket/11832] update_web_root_path helper and tests

PHPBB3-11832
This commit is contained in:
Nathan Guse 2013-09-09 18:19:50 -05:00
parent f30b87519e
commit 6692db892f
3 changed files with 99 additions and 12 deletions
phpBB
tests/filesystem

@ -2419,12 +2419,9 @@ function append_sid($url, $params = false, $is_amp = true, $session_id = false)
$params = false;
}
// Update the root path with the correct relative web path
$phpbb_filesystem = $phpbb_container->get('filesystem');
$corrected_path = $phpbb_filesystem->get_web_root_path($symfony_request);
if ($corrected_path)
{
$url = substr($corrected_path . $url, strlen($phpbb_root_path));
}
$url = $phpbb_filesystem->update_web_root_path($url, $symfony_request);
$append_sid_overwrite = false;

@ -46,17 +46,40 @@ class phpbb_filesystem
return $this->phpbb_root_path;
}
/**
* Update a path to the correct relative root path
*
* This replaces $phpbb_root_path . some_url with
* get_web_root_path() . some_url OR if $phpbb_root_path
* is not at the beginning of $path, just prepends the
* web root path
*
* @param Request $symfony_request Symfony Request object
* @return string
*/
public function update_web_root_path($path, Request $symfony_request = null)
{
$web_root_path = $this->get_web_root_path($symfony_request);
if (strpos($path, $this->phpbb_root_path) === 0)
{
$path = substr($path, strlen($this->phpbb_root_path));
}
return $web_root_path . $path;
}
/**
* Get a relative root path from the current URL
*
* @param Request $symfony_request Symfony Request object
* @return string
*/
function get_web_root_path(Request $symfony_request = null)
public function get_web_root_path(Request $symfony_request = null)
{
if ($symfony_request === null)
{
return '';
return $this->phpbb_root_path;
}
static $path;
@ -68,8 +91,7 @@ class phpbb_filesystem
$path_info = $symfony_request->getPathInfo();
if ($path_info === '/')
{
$path = $this->phpbb_root_path;
return $path;
return $path = $this->phpbb_root_path;
}
$path_info = $this->clean_path($path_info);
@ -84,9 +106,7 @@ class phpbb_filesystem
$corrections -= 1;
}
$path = $this->phpbb_root_path . str_repeat('../', $corrections);
return $path;
return $path = $this->phpbb_root_path . str_repeat('../', $corrections);
}
/**

@ -0,0 +1,70 @@
<?php
/**
*
* @package testing
* @copyright (c) 2013 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
class phpbb_filesystem_web_root_path_test extends phpbb_test_case
{
protected $filesystem;
protected $phpbb_root_path = '';
public function setUp()
{
parent::setUp();
$this->set_phpbb_root_path();
$this->filesystem = new phpbb_filesystem($this->phpbb_root_path);
}
/**
* Set the phpbb_root_path
*
* This is necessary because dataProvider functions are called
* before setUp or setUpBeforeClass; so we must set the path
* any time we wish to use it in one of these functions (and
* also in general for everything else)
*/
public function set_phpbb_root_path()
{
$this->phpbb_root_path = __DIR__ . './../../phpBB/';
}
public function test_get_web_root_path()
{
// Symfony Request = null, so always should return phpbb_root_path
$this->assertEquals($this->phpbb_root_path, $this->filesystem->get_web_root_path());
}
public function update_web_root_path_data()
{
$this->set_phpbb_root_path();
return array(
array(
$this->phpbb_root_path . 'test.php',
$this->phpbb_root_path . 'test.php',
),
array(
'test.php',
$this->phpbb_root_path . 'test.php',
),
array(
$this->phpbb_root_path . $this->phpbb_root_path . 'test.php',
$this->phpbb_root_path . $this->phpbb_root_path . 'test.php',
),
);
}
/**
* @dataProvider update_web_root_path_data
*/
public function test_update_web_root_path($input, $expected)
{
$this->assertEquals($expected, $this->filesystem->update_web_root_path($input));
}
}