Revert "Convert more path utility functions to just wrap the request object."

We're not ready for this yet.

This reverts commit a2f83000b4.
8.0.x
Larry Garfield 2012-03-31 20:17:44 -05:00
parent 674dae32c7
commit a764bd3fbb
3 changed files with 49 additions and 14 deletions

View File

@ -551,6 +551,13 @@ function drupal_environment_initialize() {
$_SERVER['HTTP_HOST'] = '';
}
// When clean URLs are enabled, emulate ?q=foo/bar using REQUEST_URI. It is
// not possible to append the query string using mod_rewrite without the B
// flag (this was added in Apache 2.2.8), because mod_rewrite unescapes the
// path before passing it on to PHP. This is a problem when the path contains
// e.g. "&" or "%" that have special meanings in URLs and must be encoded.
$_GET['q'] = request_path();
// Enforce E_STRICT, but allow users to set levels not part of E_STRICT.
error_reporting(E_STRICT | E_ALL | error_reporting());
@ -1512,7 +1519,7 @@ function request_uri() {
* @param Request $new_request
* The new request object to store. If you are not index.php, you probably
* should not be using this parameter.
* @return Symfony\Component\HttpFoundation\Request
* @return Request
* The current request object.
*/
function request(Request $new_request = NULL) {
@ -2610,9 +2617,6 @@ function language_default() {
/**
* Returns the requested URL path of the page being viewed.
*
* @todo Eliminate this function in favor of direct access to the request
* object.
*
* Examples:
* - http://example.com/node/306 returns "node/306".
* - http://example.com/drupalfolder/node/306 returns "node/306" while
@ -2628,7 +2632,45 @@ function language_default() {
* @see current_path()
*/
function request_path() {
return request()->getPathInfo();
static $path;
if (isset($path)) {
return $path;
}
if (isset($_GET['q'])) {
// This is a request with a ?q=foo/bar query string. $_GET['q'] is
// overwritten in drupal_path_initialize(), but request_path() is called
// very early in the bootstrap process, so the original value is saved in
// $path and returned in later calls.
$path = $_GET['q'];
}
elseif (isset($_SERVER['REQUEST_URI'])) {
// This request is either a clean URL, or 'index.php', or nonsense.
// Extract the path from REQUEST_URI.
$request_path = strtok($_SERVER['REQUEST_URI'], '?');
$base_path_len = strlen(rtrim(dirname($_SERVER['SCRIPT_NAME']), '\/'));
// Unescape and strip $base_path prefix, leaving q without a leading slash.
$path = substr(urldecode($request_path), $base_path_len + 1);
// If the path equals the script filename, either because 'index.php' was
// explicitly provided in the URL, or because the server added it to
// $_SERVER['REQUEST_URI'] even when it wasn't provided in the URL (some
// versions of Microsoft IIS do this), the front page should be served.
if ($path == basename($_SERVER['PHP_SELF'])) {
$path = '';
}
}
else {
// This is the front page.
$path = '';
}
// Under certain conditions Apache's RewriteRule directive prepends the value
// assigned to $_GET['q'] with a slash. Moreover we can always have a trailing
// slash in place, hence we need to normalize $_GET['q'].
$path = trim($path, '/');
return $path;
}
/**

View File

@ -2735,10 +2735,6 @@ function drupal_get_path($type, $name) {
/**
* Returns the base URL path (i.e., directory) of the Drupal installation.
*
* @todo Eliminate this function in favor of direct access to the request. Or,
* better yet, eliminate the need for this function outside of the
* URL Generator.
*
* base_path() adds a "/" to the beginning and end of the returned path if the
* path is not empty. At the very least, this will return "/".
*
@ -2747,7 +2743,7 @@ function drupal_get_path($type, $name) {
* - http://example.com/drupal/folder returns "/drupal/folder/".
*/
function base_path() {
return request()->getBasePath() . '/';
return $GLOBALS['base_path'];
}
/**

View File

@ -334,10 +334,7 @@ function drupal_match_path($path, $patterns) {
/**
* Return the current URL path of the page being viewed.
*
* @todo Eliminate this function in favor of direct access to the request
* object.
*
* Examples:
* Examples:
* - http://example.com/node/306 returns "node/306".
* - http://example.com/drupalfolder/node/306 returns "node/306" while
* base_path() returns "/drupalfolder/".