Test Failed
Push — master ( f0483f...e0ecd2 )
by Justin
04:07
created

index.php (1 issue)

Labels
Severity
1
<?php
2
3
$start_time = microtime(true);
4
5
//define root path
6
define('ROOT_PATH', dirname(__FILE__) . "/");
7
8
error_reporting(E_ALL);
9
10
//start session
11
session_start();
12
13
require("system/core/init.php");
14
15
//reset OpCache in debug mode
16
if (CLEAR_OP_CACHE) {
17
	//http://php.net/manual/en/function.opcache-reset.php
18
	//http://php.net/manual/en/function.opcache-invalidate.php
19
	opcache_reset();
20
}
21
22
//throw event
23
Events::throwEvent("start_session");
24
25
//get domain
26
$domain = Domain::getCurrent();
27
28
//check, if redirect is enabled
29
if ($domain->isRedirectUrl()) {
30
	if ($domain->getRedirectCode() == 301) {
31
		header("HTTP/1.1 301 Moved Permanently");
32
	} else if ($domain->getRedirectCode() == 302) {
33
		header("HTTP/1.1 302 Found");
34
	}
35
36
	header("Location: " + $domain->getRedirectUrl());
37
	header("Connection: close");
38
39
	exit;
40
}
41
42
//check, if gzip compression is enabled
43
if (Settings::get("gzip_compression", false)) {
44
	//use gzip compression
45
	ob_start();
46
}
47
48
//TODO: remove this code in production
49
if (isset($_REQUEST['clear_cache'])) {
50
	//clear cache
51
	Cache::clear();
52
53
	//clear gettext cache
54
	PHPUtils::clearGetTextCache();
55
56
	echo "Clear cache!<br />";
57
}
58
59
//create new instance of registry
60
$registry = Registry::singleton();
61
62
//get domain
63
$domain = new Domain();
64
$domain->load();
65
$registry->storeObject("domain", $domain);
66
$registry->setSetting("domain_name", DomainUtils::getCurrentDomain());
67
68
$mobile_detection_start_time = microtime(true);
69
70
//mobile detection
71
$registry->setSetting("isMobile", Browser::isMobile());
72
$registry->setSetting("isDesktop", !Browser::isMobile());
73
74
$mobile_detection_end_time = microtime(true);
75
$mobile_detection_exec_time = $mobile_detection_end_time - $mobile_detection_start_time;
76
77
//get prefered language
78
$registry->setSetting("pref_lang", Lang::getPrefLangToken());
79
$registry->setSetting("lang_token", Lang::getLangToken(Lang::listSupportedLangTokens()));
80
81
//set default language domain
82
Translator::getBackend()->setDefaultDomain("core");
83
84
//get user
85
$user = User::current();
86
$registry->storeObject("user", $user);
87
88
//get my groups
89
$groups = new Groups();
90
$groups->loadMyGroups($user->getID());
91
$registry->storeObject("groups", $groups);
92
93
//get permission checker
94
$registry->storeObject("permission_checker", PermissionChecker::current());
95
96
$page = new Page();
97
$page->load();
98
99
//load folder
100
$folder = new Folder($page->getFolder());
101
$folder->load($page->getFolder());
102
103
//check, if user has folder permissions
104
if (!$folder->checkPermissions(PermissionChecker::current())) {
105
	//user dont has permissions to access folder
106
	$page->load("error403");
107
}
108
109
//set folder
110
$registry->setSetting("folder", $page->getFolder());
111
112
//create page type
113
$page_type = PageLoader::loadInstance($page->getPageType());
114
$page_type->setPage($page);
115
116
//check, if user has page permissions
117
if (!$page_type->checkPermissions(PermissionChecker::current())) {
118
	//user dont has custom permissions to access page
119
	$page->load("error403");
120
121
	//create page type
122
	$page_type = PageLoader::loadInstance($page->getPageType());
123
	$page_type->setPage($page);
124
}
125
126
//check page rights
127
$page_rights = new PageRights($page);
128
$page_rights->load();
129
130
//permission to see a published page
131
$page_permission = "see";
132
133
//check, if page is not published
134
if (!$page->isPublished()) {
135
	//another permission is required, because page is not published yet
136
	$page_permission = "see_draft";
137
}
138
139
if (!$page_rights->checkRights($user->getID(), $groups->listGroupIDs(), $page_permission)) {
140
	//user dont has custom permissions to access page
141
	$page->load("error403");
142
143
	//create page type
144
	$page_type = PageLoader::loadInstance($page->getPageType());
145
	$page_type->setPage($page);
146
}
147
148
$registry->storeObject("page", $page);
149
$registry->storeObject("folder", $folder);
150
$registry->storeObject("page_type", $page_type);
151
152
//set content type
153
header("Content-Type: " . $page_type->getContentType());
154
$page_type->setCustomHeader();
155
156
//get current style
157
$registry->setSetting("current_style_name", StyleController::getCurrentStyle($registry, $page, $page_type));
158
159
160
//set login & logout url
161
$redirect_url = urlencode(DomainUtils::getURL());
162
163
if (isset($_REQUEST['redirect_url']) && !empty($_REQUEST['redirect_url'])) {
164
	$redirect_url = $_REQUEST['redirect_url'];
165
}
166
167
$registry->setSetting("login_url", DomainUtils::getBaseURL() . "/" . Settings::get("login_page", "login") . "?action=login&redirect_url=" . $redirect_url);
168
$registry->setSetting("logout_url", DomainUtils::getBaseURL() . "/" . Settings::get("logout_page", "logout") . "?csrf_token=" . urlencode(Security::getCSRFToken()));
169
170
//get (global) main menu
171
$menuID = (int) ($page->getGlobalMenuID() != -1) ? $page->getGlobalMenuID() : ($folder->hasCustomMainMenu() ? $folder->getMainMenu() : Settings::get("main_menuID"));
172
$menu = new Menu($menuID, "menu");
173
$menu->loadMenu($menuID, $folder);
174
$registry->storeObject("main_menu", $menu);
175
176
//get (global) main menu
177
$localMenuID = (int) ($page->getLocalMenuID() != -1) ? $page->getLocalMenuID() : ($folder->hasCustomLocalMenu() ? $folder->getLocalMenu() : Settings::get("local_menuID"));
178
$localMenu = new Menu($menuID, "localmenu");
179
$localMenu->loadMenu($localMenuID, $folder);
180
$registry->storeObject("local_menu", $localMenu);
181
182
$registry->setSetting("header", "");
183
$registry->setSetting("footer", "");
184
185
Events::throwEvent("Show page", array(
186
	'registry' => &$registry
187
));
188
189
//show page here
190
if ($page_type->showDesign()) {
191
	//show page with design
192
	StyleController::showPage($registry, $page, $page_type);
193
} else {
194
	//only show content
195
	echo $page_type->getContent();
196
197
	if ($page_type->exitAfterOutput()) {
198
		//flush gzip cache
199
		ob_end_flush();
200
201
		exit;
202
	}
203
}
204
205
$end_time = microtime(true);
206
$exec_time = $end_time - $start_time;
207
208
if ($page_type->showHTMLComments()) {
209
	//benchmark code
210
	if (ACTIVATE_BENCHMARK) {
211
		echo "<!-- page was generated in " . $exec_time . " seconds -->\n";
212
		echo "<!-- mobile detection executed in " . $mobile_detection_exec_time . " seconds, isMobile: " . ($registry->getSetting("isMobile") ? "true" : "false") . " -->\n";
213
214
		//benchmark dwoo template engine
215
		foreach (DwooTemplate::listFileBenchmark() as $file=>$exec_time) {
216
			echo "<!-- Dwoo benchmark file '" . $file . "': " . $exec_time . " seconds -->\n";
217
		}
218
219
		foreach (CSSBuilder::listBenchmarks() as $key=>$exec_time) {
220
			echo "<!-- css generation of file '" . $key . "': " . $exec_time . " seconds -->\n";
221
		}
222
223
		foreach (JSBuilder::listBenchmarks() as $key=>$exec_time) {
224
			echo "<!-- js generation of file '" . $key . "': " . $exec_time . " seconds -->\n";
225
		}
226
	}
227
228
	if (DEBUG_MODE) {
229
		echo "<!-- userID: " . User::current()->getID() . ", username: " . User::current()->getUsername() . " -->\n";
230
		echo "<!-- " . Database::getInstance()->countQueries() . " sql queries executed -->\n";
231
		echo "<!-- pref_lang: " . $registry->getSetting("pref_lang") . " -->\n";
232
		echo "<!-- lang_token: " . $registry->getSetting("lang_token") . " -->\n";
233
234
		if (DEBUG_SQL_QUERIES) {
235
			foreach (Database::getInstance()->listQueryHistory() as $query_array) {
236
				echo "<!-- query: " . $query_array['query'] . " -->\n";
237
			}
238
		}
239
	}
240
}
241
242
//flush gzip cache
243
ob_end_flush();
244
ob_end_flush();
245
flush();
246
247
//update online list
248
User::current()->updateOnlineList();
249
250
//https://stackoverflow.com/questions/4806637/continue-processing-after-closing-connection
251
ignore_user_abort(true);
0 ignored issues
show
true of type true is incompatible with the type string expected by parameter $value of ignore_user_abort(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

251
ignore_user_abort(/** @scrutinizer ignore-type */ true);
Loading history...
252
253
//execute tasks
254
if (!Settings::get("cronjon_enabled", true)) {
255
	Tasks::schedule(Settings::get("max_tasks_on_site", 3));
256
}
257
258
?>