diff options
Diffstat (limited to 'index.php')
-rw-r--r-- | index.php | 125 |
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(); |