blob: 8e06975bfbf43975e11873ff75c920bb7324ef1b (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
<?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 going 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(),
'admin' => User::isAdmin(),
));
Message::renderList();
// Render page. If the module wants to output anything, it will be done here...
Page::render();
Render::addTemplate('footer');
if (defined('CONFIG_DEBUG') && CONFIG_DEBUG) {
Message::addWarning('!! Debug-Modus aktiv !!');
}
// Send page to client.
Render::output();
|