mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-08 04:18:52 +00:00
[ticket/11832] update_web_root_path helper and tests
PHPBB3-11832
This commit is contained in:
parent
f30b87519e
commit
6692db892f
3 changed files with 99 additions and 12 deletions
|
@ -2419,12 +2419,9 @@ function append_sid($url, $params = false, $is_amp = true, $session_id = false)
|
||||||
$params = false;
|
$params = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update the root path with the correct relative web path
|
||||||
$phpbb_filesystem = $phpbb_container->get('filesystem');
|
$phpbb_filesystem = $phpbb_container->get('filesystem');
|
||||||
$corrected_path = $phpbb_filesystem->get_web_root_path($symfony_request);
|
$url = $phpbb_filesystem->update_web_root_path($url, $symfony_request);
|
||||||
if ($corrected_path)
|
|
||||||
{
|
|
||||||
$url = substr($corrected_path . $url, strlen($phpbb_root_path));
|
|
||||||
}
|
|
||||||
|
|
||||||
$append_sid_overwrite = false;
|
$append_sid_overwrite = false;
|
||||||
|
|
||||||
|
|
|
@ -46,17 +46,40 @@ class phpbb_filesystem
|
||||||
return $this->phpbb_root_path;
|
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
|
* Get a relative root path from the current URL
|
||||||
*
|
*
|
||||||
* @param Request $symfony_request Symfony Request object
|
* @param Request $symfony_request Symfony Request object
|
||||||
* @return string
|
* @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)
|
if ($symfony_request === null)
|
||||||
{
|
{
|
||||||
return '';
|
return $this->phpbb_root_path;
|
||||||
}
|
}
|
||||||
|
|
||||||
static $path;
|
static $path;
|
||||||
|
@ -68,8 +91,7 @@ class phpbb_filesystem
|
||||||
$path_info = $symfony_request->getPathInfo();
|
$path_info = $symfony_request->getPathInfo();
|
||||||
if ($path_info === '/')
|
if ($path_info === '/')
|
||||||
{
|
{
|
||||||
$path = $this->phpbb_root_path;
|
return $path = $this->phpbb_root_path;
|
||||||
return $path;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$path_info = $this->clean_path($path_info);
|
$path_info = $this->clean_path($path_info);
|
||||||
|
@ -84,9 +106,7 @@ class phpbb_filesystem
|
||||||
$corrections -= 1;
|
$corrections -= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
$path = $this->phpbb_root_path . str_repeat('../', $corrections);
|
return $path = $this->phpbb_root_path . str_repeat('../', $corrections);
|
||||||
|
|
||||||
return $path;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
70
tests/filesystem/web_root_path_test.php
Normal file
70
tests/filesystem/web_root_path_test.php
Normal file
|
@ -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));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue