summaryrefslogtreecommitdiffstats
path: root/index.php
diff options
context:
space:
mode:
Diffstat (limited to 'index.php')
-rw-r--r--index.php125
1 files changed, 125 insertions, 0 deletions
diff --git a/index.php b/index.php
new file mode 100644
index 0000000..3728ccd
--- /dev/null
+++ b/index.php
@@ -0,0 +1,125 @@
+<?php
+
+$dest = @readlink($_SERVER['SCRIPT_FILENAME']);
+if (!empty($dest) && $dest !== $_SERVER['SCRIPT_FILENAME']) {
+ //error_log($dest . ' !== ' . $_SERVER['SCRIPT_FILENAME'] . ', chdir to ' . dirname($dest));
+ chdir(dirname($dest));
+}
+
+require_once 'config.php';
+
+
+/**
+ * Page class which all "modules" must be extending from
+ */
+abstract class Page
+{
+
+ protected function doPreprocess()
+ {
+
+ }
+
+ protected function doRender()
+ {
+
+ }
+
+ protected function doAjax()
+ {
+
+ }
+
+ public static function preprocess()
+ {
+ self::$instance->doPreprocess();
+ }
+
+ public static function render()
+ {
+ self::$instance->doRender();
+ }
+
+ public static function ajax()
+ {
+ self::$instance->doAjax();
+ }
+
+ /**
+ *
+ * @var \Page
+ */
+ private static $instance = false;
+
+ public static function set($name)
+ {
+ $name = preg_replace('/[^A-Za-z]/', '', $name);
+ $modulePath = 'modules/' . strtolower($name) . '.inc.php';
+ if (!file_exists($modulePath)) {
+ Util::traceError('Invalid module file: ' . $modulePath);
+ }
+ require_once $modulePath;
+ $className = 'Page_' . $name;
+ if (!class_exists($className) || get_parent_class($className) !== 'Page') {
+ Util::traceError('Module not found: ' . $name);
+ }
+ self::$instance = new $className();
+ }
+
+}
+
+// Error reporting (hopefully goind to stderr, not being printed on pages)
+error_reporting(E_ALL);
+
+// Autoload classes from ./inc which adhere to naming scheme <lowercasename>.inc.php
+function slxAutoloader($class)
+{
+ $file = 'inc/' . preg_replace('/[^a-z0-9]/', '', mb_strtolower($class)) . '.inc.php';
+ if (!file_exists($file))
+ return;
+ require_once $file;
+}
+
+spl_autoload_register('slxAutoloader');
+
+// Now determine which module to run
+Page::set(empty($_REQUEST['do']) ? 'Main' : $_REQUEST['do']);
+
+// Deserialize any messages to display
+if (isset($_REQUEST['message'])) {
+ Message::fromRequest();
+}
+
+// CSRF/XSS check
+if ($_SERVER['REQUEST_METHOD'] === 'POST') {
+ User::load();
+ if (!Util::verifyToken()) {
+ Util::redirect('?do=Main');
+ }
+}
+
+// Normal mode - preprocess first....
+Page::preprocess();
+
+// Generate Main menu
+User::load();
+Render::addTemplate('main-menu', array(
+ 'url' => urlencode($_SERVER['REQUEST_URI']),
+ 'user' => User::getName(),
+));
+
+Message::renderList();
+
+// Render page. If the module wants to output anything, it will be done here...
+Page::render();
+
+if (defined('CONFIG_DEBUG') && CONFIG_DEBUG) {
+ Message::addWarning('!! Debug-Modus aktiv !!');
+}
+
+if (defined('CONFIG_FOOTER')) {
+ Render::addTemplate('footer', array('text' => CONFIG_FOOTER));
+}
+
+// Send page to client.
+Render::output();