1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-07-31 14:00:31 +02:00

Merge pull request #3055 from marc1706/ticket/13192

[ticket/13192] Add method for generating valid user page links based on mod_rewrite

* marc1706/ticket/13192:
  [ticket/13192] Add test for app.php in external subfolder
  [ticket/13192] Use ltrim() instead of preg_replace()
  [ticket/13192] Order test cases consistently
  [ticket/13192] Remove app.php on mod rewrite even if app.php is outside root
  [ticket/13192] Pass correct parameters and rename method to get_valid_page
  [ticket/13192] Use get_valid_user_page in confirm_box() and cleanup globals
  [ticket/13192] Use get_valid_user_page method in build_url function
  [ticket/13192] Add method for generating valid user page links
This commit is contained in:
Tristan Darricau
2015-01-19 16:45:43 +01:00
3 changed files with 63 additions and 23 deletions

View File

@@ -455,4 +455,38 @@ class path_helper
return $url_parts['base'] . (($params) ? '?' . $this->glue_url_params($params) : '');
}
/**
* Get a valid page
*
* @param string $page The page to verify
* @param bool $mod_rewrite Whether mod_rewrite is enabled, default: false
*
* @return string A valid page based on given page and mod_rewrite
*/
public function get_valid_page($page, $mod_rewrite = false)
{
// We need to be cautious here.
// On some situations, the redirect path is an absolute URL, sometimes a relative path
// For a relative path, let's prefix it with $phpbb_root_path to point to the correct location,
// else we use the URL directly.
$url_parts = parse_url($page);
// URL
if ($url_parts === false || empty($url_parts['scheme']) || empty($url_parts['host']))
{
// Remove 'app.php/' from the page, when rewrite is enabled.
// Treat app.php as a reserved file name and remove on mod rewrite
// even if it might not be in the phpBB root.
if ($mod_rewrite && ($app_position = strpos($page, 'app.' . $this->php_ext . '/')) !== false)
{
$page = substr($page, 0, $app_position) . substr($page, $app_position + strlen('app.' . $this->php_ext . '/'));
}
// Remove preceding slashes from page name and prepend root path
$page = $this->get_phpbb_root_path() . ltrim($page, '/\\');
}
return $page;
}
}