aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/phpbb
diff options
context:
space:
mode:
Diffstat (limited to 'phpBB/phpbb')
-rw-r--r--phpBB/phpbb/controller/helper.php22
-rw-r--r--phpBB/phpbb/db/migration/data/310/mod_rewrite.php25
-rw-r--r--phpBB/phpbb/filesystem.php115
3 files changed, 150 insertions, 12 deletions
diff --git a/phpBB/phpbb/controller/helper.php b/phpBB/phpbb/controller/helper.php
index 4d240f9380..3f6ef24ce0 100644
--- a/phpBB/phpbb/controller/helper.php
+++ b/phpBB/phpbb/controller/helper.php
@@ -36,10 +36,10 @@ class phpbb_controller_helper
protected $user;
/**
- * Request object
- * @var phpbb_request
+ * config object
+ * @var phpbb_config
*/
- protected $request;
+ protected $config;
/**
* phpBB root path
@@ -61,11 +61,11 @@ class phpbb_controller_helper
* @param string $phpbb_root_path phpBB root path
* @param string $php_ext PHP extension
*/
- public function __construct(phpbb_template $template, phpbb_user $user, phpbb_request_interface $request, $phpbb_root_path, $php_ext)
+ public function __construct(phpbb_template $template, phpbb_user $user, phpbb_config $config, $phpbb_root_path, $php_ext)
{
$this->template = $template;
$this->user = $user;
- $this->request = $request;
+ $this->config = $config;
$this->phpbb_root_path = $phpbb_root_path;
$this->php_ext = $php_ext;
}
@@ -109,14 +109,12 @@ class phpbb_controller_helper
$route = substr($route, 0, $route_delim);
}
- $request_uri = $this->request->variable('REQUEST_URI', '', false, phpbb_request::SERVER);
- $script_name = $this->request->variable('SCRIPT_NAME', '', false, phpbb_request::SERVER);
-
- // If the app.php file is being used (no rewrite) keep it in the URL.
- // Otherwise, don't include it.
+ // If enable_mod_rewrite is false, we not need to include app.php
$route_prefix = $this->phpbb_root_path;
- $parts = explode('/', $script_name);
- $route_prefix .= strpos($request_uri, $script_name) === 0 ? array_pop($parts) . '/' : '';
+ if (empty($this->config['enable_mod_rewrite']))
+ {
+ $route_prefix .= 'app.' . $this->php_ext . '/';
+ }
return append_sid($route_prefix . "$route" . $route_params, $params, $is_amp, $session_id);
}
diff --git a/phpBB/phpbb/db/migration/data/310/mod_rewrite.php b/phpBB/phpbb/db/migration/data/310/mod_rewrite.php
new file mode 100644
index 0000000000..85ce25abf3
--- /dev/null
+++ b/phpBB/phpbb/db/migration/data/310/mod_rewrite.php
@@ -0,0 +1,25 @@
+<?php
+/**
+*
+* @package migration
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-license.php GNU Public License v2
+*
+*/
+
+class phpbb_db_migration_data_310_mod_rewrite extends phpbb_db_migration
+{
+ static public function depends_on()
+ {
+ return array(
+ 'phpbb_db_migration_data_310_dev',
+ );
+ }
+
+ public function update_data()
+ {
+ return array(
+ array('config.add', array('enable_mod_rewrite', '0')),
+ );
+ }
+}
diff --git a/phpBB/phpbb/filesystem.php b/phpBB/phpbb/filesystem.php
index 27cab48fb0..5d70b88a29 100644
--- a/phpBB/phpbb/filesystem.php
+++ b/phpBB/phpbb/filesystem.php
@@ -6,6 +6,9 @@
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
+
+use Symfony\Component\HttpFoundation\Request;
+
/**
* @ignore
*/
@@ -20,6 +23,118 @@ if (!defined('IN_PHPBB'))
*/
class phpbb_filesystem
{
+ /** @var string */
+ protected $phpbb_root_path;
+
+ /** @var string */
+ protected $web_root_path;
+
+ /**
+ * Constructor
+ *
+ * @param string $phpbb_root_path
+ */
+ public function __construct($phpbb_root_path)
+ {
+ $this->phpbb_root_path = $phpbb_root_path;
+ }
+
+ /**
+ * Get the phpBB root path
+ *
+ * @return string
+ */
+ public function get_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
+ *
+ * @param Request $symfony_request Symfony Request object
+ * @return string
+ */
+ public function get_web_root_path(Request $symfony_request = null)
+ {
+ if ($symfony_request === null)
+ {
+ return $this->phpbb_root_path;
+ }
+
+ if (null !== $this->web_root_path)
+ {
+ return $this->web_root_path;
+ }
+
+ // Path info (e.g. /foo/bar)
+ $path_info = $this->clean_path($symfony_request->getPathInfo());
+
+ // Full request URI (e.g. phpBB/app.php/foo/bar)
+ $request_uri = $symfony_request->getRequestUri();
+
+ // Script name URI (e.g. phpBB/app.php)
+ $script_name = $symfony_request->getScriptName();
+
+ /*
+ * If the path info is empty (single /), then we're not using
+ * a route like app.php/foo/bar
+ */
+ if ($path_info === '/')
+ {
+ return $this->web_root_path = $this->phpbb_root_path;
+ }
+
+ // How many corrections might we need?
+ $corrections = substr_count($path_info, '/');
+
+ /*
+ * If the script name (e.g. phpBB/app.php) exists in the
+ * requestUri (e.g. phpBB/app.php/foo/template), then we
+ * are have a non-rewritten URL.
+ */
+ if (strpos($request_uri, $script_name) === 0)
+ {
+ /*
+ * Append ../ to the end of the phpbb_root_path as many times
+ * as / exists in path_info
+ */
+ return $this->web_root_path = $this->phpbb_root_path . str_repeat('../', $corrections);
+ }
+
+ /*
+ * If we're here it means we're at a re-written path, so we must
+ * correct the relative path for web URLs. We must append ../
+ * to the end of the root path as many times as / exists in path_info
+ * less one time (because the script, e.g. /app.php, doesn't exist in
+ * the URL)
+ */
+ return $this->web_root_path = $this->phpbb_root_path . str_repeat('../', $corrections - 1);
+ }
+
/**
* Eliminates useless . and .. components from specified path.
*