aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/phpbb
diff options
context:
space:
mode:
authorTristan Darricau <github@nicofuma.fr>2015-01-19 17:52:37 +0100
committerTristan Darricau <github@nicofuma.fr>2015-01-19 17:52:37 +0100
commita537bf9619b5b34f20e5a862910ef5680facd865 (patch)
tree67c92387aa1730de00bc96cbfb5fea40f35a32ad /phpBB/phpbb
parent52ab23626f8cc037d0b857bd987686b3229517f6 (diff)
parentadd3d3e76001c6f0355da37355b0ff89cc8b8f04 (diff)
downloadforums-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.php34
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;
+ }
}