Commit 08e398ec by Scott Vivian

Refactor qa-index.php (mainly coding style)

parent b1d9d397
...@@ -32,13 +32,13 @@ ...@@ -32,13 +32,13 @@
// If this is an special non-page request, branch off here // If this is an special non-page request, branch off here
if (@$_POST['qa']=='ajax') if (isset($_POST['qa']) && $_POST['qa'] == 'ajax')
require 'qa-ajax.php'; require 'qa-ajax.php';
elseif (@$_GET['qa']=='image') elseif (isset($_GET['qa']) && $_GET['qa'] == 'image')
require 'qa-image.php'; require 'qa-image.php';
elseif (@$_GET['qa']=='blob') elseif (isset($_GET['qa']) && $_GET['qa'] == 'blob')
require 'qa-blob.php'; require 'qa-blob.php';
else { else {
...@@ -47,41 +47,41 @@ ...@@ -47,41 +47,41 @@
require 'qa-base.php'; require 'qa-base.php';
/**
// Determine the request and root of the installation, and the requested start position used by many pages * Determine the request and root of the installation, and the requested start position used by many pages.
*
* Apache and Nginx behave slightly differently:
* Apache qa-rewrite unescapes characters, converts `+` to ` `, cuts off at `#` or `&`
* Nginx qa-rewrite unescapes characters, retains `+`, contains true path
*/
function qa_index_set_request() function qa_index_set_request()
/*
Apache and Nginx behave slightly differently:
- Apache qa-rewrite unescapes characters, converts `+` to ` `, cuts off at `#` or `&`
- Nginx qa-rewrite unescapes characters, retains `+`, contains true path
*/
{ {
if (qa_to_override(__FUNCTION__)) { $args=func_get_args(); return qa_call_override(__FUNCTION__, $args); } if (qa_to_override(__FUNCTION__)) { $args=func_get_args(); return qa_call_override(__FUNCTION__, $args); }
$relativedepth=0; $relativedepth = 0;
if (isset($_GET['qa-rewrite'])) { // URLs rewritten by .htaccess or nginx if (isset($_GET['qa-rewrite'])) { // URLs rewritten by .htaccess or Nginx
$urlformat=QA_URL_FORMAT_NEAT; $urlformat = QA_URL_FORMAT_NEAT;
$qa_rewrite = strtr(qa_gpc_to_string($_GET['qa-rewrite']), '+', ' '); // strtr required by Nginx $qa_rewrite = strtr(qa_gpc_to_string($_GET['qa-rewrite']), '+', ' '); // strtr required by Nginx
$requestparts=explode('/', $qa_rewrite); $requestparts = explode('/', $qa_rewrite);
unset($_GET['qa-rewrite']); unset($_GET['qa-rewrite']);
if (!empty($_SERVER['REQUEST_URI'])) { // workaround for the fact that Apache unescapes characters while rewriting if (!empty($_SERVER['REQUEST_URI'])) { // workaround for the fact that Apache unescapes characters while rewriting
$origpath=$_SERVER['REQUEST_URI']; $origpath = $_SERVER['REQUEST_URI'];
$_GET=array(); $_GET = array();
$questionpos=strpos($origpath, '?'); $questionpos = strpos($origpath, '?');
if (is_numeric($questionpos)) { if (is_numeric($questionpos)) {
$params=explode('&', substr($origpath, $questionpos+1)); $params = explode('&', substr($origpath, $questionpos+1));
foreach ($params as $param) foreach ($params as $param) {
if (preg_match('/^([^\=]*)(\=(.*))?$/', $param, $matches)) { if (preg_match('/^([^\=]*)(\=(.*))?$/', $param, $matches)) {
$argument=strtr(urldecode($matches[1]), '.', '_'); // simulate PHP's $_GET behavior $argument = strtr(urldecode($matches[1]), '.', '_'); // simulate PHP's $_GET behavior
$_GET[$argument]=qa_string_to_gpc(urldecode(@$matches[3])); $_GET[$argument] = qa_string_to_gpc(urldecode(@$matches[3]));
} }
}
$origpath=substr($origpath, 0, $questionpos); $origpath = substr($origpath, 0, $questionpos);
} }
// Generally we assume that $_GET['qa-rewrite'] has the right path depth, but this won't be the case if there's // Generally we assume that $_GET['qa-rewrite'] has the right path depth, but this won't be the case if there's
...@@ -89,72 +89,74 @@ ...@@ -89,72 +89,74 @@
// If 'REQUEST_URI' and 'qa-rewrite' already match (as on Nginx), we can skip this. // If 'REQUEST_URI' and 'qa-rewrite' already match (as on Nginx), we can skip this.
$normalizedpath = urldecode($origpath); $normalizedpath = urldecode($origpath);
if (substr($normalizedpath, -strlen($qa_rewrite)) !== $qa_rewrite) { if (substr($normalizedpath, -strlen($qa_rewrite)) !== $qa_rewrite) {
$keepparts=count($requestparts); $keepparts = count($requestparts);
$requestparts=explode('/', urldecode($origpath)); // new request calculated from $_SERVER['REQUEST_URI'] $requestparts = explode('/', urldecode($origpath)); // new request calculated from $_SERVER['REQUEST_URI']
// loop forwards so we capture all parts // loop forwards so we capture all parts
for ($part=0, $max=count($requestparts); $part<$max; $part++) { for ($part = 0, $max = count($requestparts); $part < $max; $part++) {
if (is_numeric(strpos($requestparts[$part], '&')) || is_numeric(strpos($requestparts[$part], '#'))) { if (is_numeric(strpos($requestparts[$part], '&')) || is_numeric(strpos($requestparts[$part], '#'))) {
$keepparts += count($requestparts) - $part - 1; // this is how many parts remain $keepparts += count($requestparts) - $part - 1; // this is how many parts remain
break; break;
} }
} }
$requestparts=array_slice($requestparts, -$keepparts); // remove any irrelevant parts from the beginning $requestparts = array_slice($requestparts, -$keepparts); // remove any irrelevant parts from the beginning
} }
} }
$relativedepth=count($requestparts); $relativedepth = count($requestparts);
}
} elseif (isset($_GET['qa'])) { elseif (isset($_GET['qa'])) {
if (strpos($_GET['qa'], '/')===false) { if (strpos($_GET['qa'], '/') === false) {
$urlformat=( (empty($_SERVER['REQUEST_URI'])) || (strpos($_SERVER['REQUEST_URI'], '/index.php')!==false) ) $urlformat = ( empty($_SERVER['REQUEST_URI']) || strpos($_SERVER['REQUEST_URI'], '/index.php') !== false )
? QA_URL_FORMAT_SAFEST : QA_URL_FORMAT_PARAMS; ? QA_URL_FORMAT_SAFEST : QA_URL_FORMAT_PARAMS;
$requestparts=array(qa_gpc_to_string($_GET['qa'])); $requestparts = array(qa_gpc_to_string($_GET['qa']));
for ($part=1; $part<10; $part++) for ($part = 1; $part < 10; $part++) {
if (isset($_GET['qa_'.$part])) { if (isset($_GET['qa_'.$part])) {
$requestparts[]=qa_gpc_to_string($_GET['qa_'.$part]); $requestparts[] = qa_gpc_to_string($_GET['qa_'.$part]);
unset($_GET['qa_'.$part]); unset($_GET['qa_'.$part]);
} }
}
} else { }
$urlformat=QA_URL_FORMAT_PARAM; else {
$requestparts=explode('/', qa_gpc_to_string($_GET['qa'])); $urlformat = QA_URL_FORMAT_PARAM;
$requestparts = explode('/', qa_gpc_to_string($_GET['qa']));
} }
unset($_GET['qa']); unset($_GET['qa']);
}
} else { else {
$phpselfunescaped=strtr($_SERVER['PHP_SELF'], '+', ' '); // seems necessary, and plus does not work with this scheme $phpselfunescaped = strtr($_SERVER['PHP_SELF'], '+', ' '); // seems necessary, and plus does not work with this scheme
$indexpath='/index.php/'; $indexpath = '/index.php/';
$indexpos=strpos($phpselfunescaped, $indexpath); $indexpos = strpos($phpselfunescaped, $indexpath);
if (is_numeric($indexpos)) { if (is_numeric($indexpos)) {
$urlformat=QA_URL_FORMAT_INDEX; $urlformat = QA_URL_FORMAT_INDEX;
$requestparts=explode('/', substr($phpselfunescaped, $indexpos+strlen($indexpath))); $requestparts = explode('/', substr($phpselfunescaped, $indexpos + strlen($indexpath)));
$relativedepth=1+count($requestparts); $relativedepth = 1 + count($requestparts);
}
} else { else {
$urlformat=null; // at home page so can't identify path type $urlformat = null; // at home page so can't identify path type
$requestparts=array(); $requestparts = array();
} }
} }
foreach ($requestparts as $part => $requestpart) // remove any blank parts foreach ($requestparts as $part => $requestpart) { // remove any blank parts
if (!strlen($requestpart)) if (!strlen($requestpart))
unset($requestparts[$part]); unset($requestparts[$part]);
}
reset($requestparts); reset($requestparts);
$key=key($requestparts); $key = key($requestparts);
$replacement=array_search(@$requestparts[$key], qa_get_request_map()); $replacement = isset($requestparts[$key]) ? array_search($requestparts[$key], qa_get_request_map()) : false;
if ($replacement!==false) if ($replacement !== false)
$requestparts[$key]=$replacement; $requestparts[$key] = $replacement;
qa_set_request( qa_set_request(
implode('/', $requestparts), implode('/', $requestparts),
($relativedepth>1) ? str_repeat('../', $relativedepth-1) : './', ($relativedepth > 1 ? str_repeat('../', $relativedepth - 1) : './'),
$urlformat $urlformat
); );
} }
...@@ -164,24 +166,21 @@ ...@@ -164,24 +166,21 @@
// Branch off to appropriate file for further handling // Branch off to appropriate file for further handling
$requestlower=strtolower(qa_request()); $requestlower = strtolower(qa_request());
if ($requestlower=='install') if ($requestlower == 'install')
require QA_INCLUDE_DIR.'qa-install.php'; require QA_INCLUDE_DIR.'qa-install.php';
elseif ($requestlower == 'url/test/'.QA_URL_TEST_STRING)
elseif ($requestlower==('url/test/'.QA_URL_TEST_STRING))
require QA_INCLUDE_DIR.'qa-url-test.php'; require QA_INCLUDE_DIR.'qa-url-test.php';
else { else {
// enable gzip compression for output (needs to come early)
// skip admin pages since some of these contain lengthy processes
if (QA_HTML_COMPRESSION && substr($requestlower, 0, 6) != 'admin/') {
if (extension_loaded('zlib') && !headers_sent())
ob_start('ob_gzhandler');
}
// Enable gzip compression for output (needs to come early) if (substr($requestlower, 0, 5) == 'feed/')
if (QA_HTML_COMPRESSION) // on by default
if (substr($requestlower, 0, 6)!='admin/') // not for admin pages since some of these contain lengthy processes
if (extension_loaded('zlib') && !headers_sent())
ob_start('ob_gzhandler');
if (substr($requestlower, 0, 5)=='feed/')
require QA_INCLUDE_DIR.'qa-feed.php'; require QA_INCLUDE_DIR.'qa-feed.php';
else else
require QA_INCLUDE_DIR.'qa-page.php'; require QA_INCLUDE_DIR.'qa-page.php';
...@@ -189,8 +188,3 @@ ...@@ -189,8 +188,3 @@
} }
qa_report_process_stage('shutdown'); qa_report_process_stage('shutdown');
/*
Omit PHP closing tag to help avoid accidental output
*/
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment