aboutsummaryrefslogtreecommitdiffstats
path: root/index.php
diff options
context:
space:
mode:
Diffstat (limited to 'index.php')
-rw-r--r--index.php49
1 files changed, 42 insertions, 7 deletions
diff --git a/index.php b/index.php
index 01d8eb2a1..ab722df2a 100644
--- a/index.php
+++ b/index.php
@@ -31,10 +31,17 @@ $install = ((file_exists('.htconfig.php') && filesize('.htconfig.php')) ? false
*
* Get the language setting directly from system variables, bypassing get_config()
* as database may not yet be configured.
+ *
+ * If possible, we use the value from the browser.
*
*/
-$lang = ((isset($a->config['system']['language'])) ? $a->config['system']['language'] : 'en');
+if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
+ $langs = preg_split("/[,-]/",$_SERVER['HTTP_ACCEPT_LANGUAGE'],2);
+ $lang = $langs[0];
+} else {
+ $lang = ((isset($a->config['system']['language'])) ? $a->config['system']['language'] : 'en');
+}
load_translation_table($lang);
@@ -102,8 +109,9 @@ if(! x($_SESSION,'sysmsg'))
$_SESSION['sysmsg'] = '';
/*
- * check_config() is responible for running update scripts. These automatically
- * update the DB schema whenever we push a new one out.
+ * check_config() is responsible for running update scripts. These automatically
+ * update the DB schema whenever we push a new one out. It also checks to see if
+ * any plugins have been added or removed and reacts accordingly.
*/
@@ -122,7 +130,7 @@ $a->apps = $arr['app_menu'];
/**
*
- * We have already parsed the server path into $->argc and $a->argv
+ * We have already parsed the server path into $a->argc and $a->argv
*
* $a->argv[0] is our module name. We will load the file mod/{$a->argv[0]}.php
* and use it for handling our URL request.
@@ -130,7 +138,7 @@ $a->apps = $arr['app_menu'];
* and in the following order:
*
* "module"_init
- * "module"_post (only if there are $_POST variables)
+ * "module"_post (only called if there are $_POST variables)
* "module"_afterpost
* "module"_content - the string return of this function contains our page body
*
@@ -140,15 +148,42 @@ $a->apps = $arr['app_menu'];
*/
if(strlen($a->module)) {
+
+ /**
+ *
+ * We will always have a module name.
+ * First see if we have a plugin which is masquerading as a module.
+ *
+ */
+
if(is_array($a->plugins) && in_array($a->module,$a->plugins) && file_exists("addon/{$a->module}/{$a->module}.php")) {
include_once("addon/{$a->module}/{$a->module}.php");
if(function_exists($a->module . '_module'))
$a->module_loaded = true;
}
+
+ /**
+ * If not, next look for a 'standard' program module in the 'mod' directory
+ */
+
if((! $a->module_loaded) && (file_exists("mod/{$a->module}.php"))) {
- include("mod/{$a->module}.php");
+ include_once("mod/{$a->module}.php");
$a->module_loaded = true;
}
+
+ /**
+ *
+ * The URL provided does not resolve to a valid module.
+ *
+ * On Dreamhost sites, quite often things go wrong for no apparent reason and they send us to '/internal_error.html'.
+ * We don't like doing this, but as it occasionally accounts for 10-20% or more of all site traffic -
+ * we are going to trap this and redirect back to the requested page. As long as you don't have a critical error on your page
+ * this will often succeed and eventually do the right thing.
+ *
+ * Otherwise we are going to emit a 404 not found.
+ *
+ */
+
if(! $a->module_loaded) {
if((x($_SERVER,'QUERY_STRING')) && ($_SERVER['QUERY_STRING'] === 'q=internal_error.html') && isset($dreamhost_error_hack)) {
logger('index.php: dreamhost_error_hack invoked. Original URI =' . $_SERVER['REQUEST_URI']);
@@ -199,7 +234,7 @@ if($a->module_loaded) {
}
-// let javascript take you home
+// If you're just visiting, let javascript take you home
if(x($_SESSION,'visitor_home'))
$homebase = $_SESSION['visitor_home'];