diff options
author | Tristan Darricau <github@nicofuma.fr> | 2015-01-19 17:52:37 +0100 |
---|---|---|
committer | Tristan Darricau <github@nicofuma.fr> | 2015-01-19 17:52:37 +0100 |
commit | a537bf9619b5b34f20e5a862910ef5680facd865 (patch) | |
tree | 67c92387aa1730de00bc96cbfb5fea40f35a32ad /phpBB/phpbb | |
parent | 52ab23626f8cc037d0b857bd987686b3229517f6 (diff) | |
parent | add3d3e76001c6f0355da37355b0ff89cc8b8f04 (diff) | |
download | forums-a537bf9619b5b34f20e5a862910ef5680facd865.tar forums-a537bf9619b5b34f20e5a862910ef5680facd865.tar.gz forums-a537bf9619b5b34f20e5a862910ef5680facd865.tar.bz2 forums-a537bf9619b5b34f20e5a862910ef5680facd865.tar.xz forums-a537bf9619b5b34f20e5a862910ef5680facd865.zip |
Merge branch 'develop-ascraeus' into develop
* develop-ascraeus:
[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
Diffstat (limited to 'phpBB/phpbb')
-rw-r--r-- | phpBB/phpbb/path_helper.php | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/phpBB/phpbb/path_helper.php b/phpBB/phpbb/path_helper.php index b49d8d13c2..5400c1c5a6 100644 --- a/phpBB/phpbb/path_helper.php +++ b/phpBB/phpbb/path_helper.php @@ -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; + } } |