add module system
[GitHub/Stricted/Domain-Control-Panel.git] / lib / system / RequestHandler.class.php
1 <?php
2 namespace dns\system;
3
4 /**
5 * @author Jan Altensen (Stricted)
6 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
7 * @copyright 2013-2015 Jan Altensen (Stricted)
8 */
9 class RequestHandler {
10 /**
11 * init RequestHandler
12 */
13 public function __construct ($module = '') {
14 $className = "";
15 $pages = glob(DNS_DIR.'/lib/'.(empty($module) ? '' : $module.'/').'page/*Page.class.php');
16 if (isset($_GET["page"]) && !empty($_GET["page"])) {
17 if (strtolower($_GET["page"]) != "abstract") {
18 foreach ($pages as $page) {
19 $page = str_replace('Page.class.php', '', basename($page));
20 if (strtolower($_GET["page"]) == strtolower($page)) {
21 $class = "\\dns".(empty($module) ? '' : "\\".$module)."\\page\\".$page."Page";
22 if (class_exists($class) && is_subclass_of($class, '\\dns\\page\\AbstractPage')) {
23 $className = $class;
24 }
25 break;
26 }
27 }
28 }
29 }
30 else {
31 $className = '\\dns'.(empty($module) ? '' : '\\'.$module).'\\page\\IndexPage';
32 }
33
34 if (!User::isLoggedIn() && $className != '\dns\page\LoginPage' && $className != '\dns\page\ApiPage') {
35 DNS::getTPL()->display('login.tpl');
36 exit;
37 }
38
39 if (DNS::getSession()->username !== null) {
40 DNS::getTPL()->assign(array("username" => DNS::getSession()->username));
41 }
42
43 if (empty($className)) {
44 @header('HTTP/1.0 404 Not Found');
45 DNS::getTPL()->assign(array("activeMenuItem" => '', "error" => 'The link you are trying to reach is no longer available or invalid.'));
46 DNS::getTPL()->display('error.tpl');
47 exit;
48 }
49
50 // handle offline mode
51 if (defined('OFFLINE') && OFFLINE) {
52 $admin = User::isAdmin();
53 $available = false;
54
55 if (defined($className . '::AVAILABLE_DURING_OFFLINE_MODE') && constant($className . '::AVAILABLE_DURING_OFFLINE_MODE')) {
56 $available = true;
57 }
58
59 if (!$admin && !$available) {
60 @header('HTTP/1.1 503 Service Unavailable');
61 DNS::getTPL()->display('offline.tpl');
62 exit;
63 }
64 }
65
66 try {
67 new $className();
68 }
69 catch (\Exception $e) {
70 if ($e->getCode() == 404) {
71 @header('HTTP/1.0 404 Not Found');
72 }
73 else if ($e->getCode() == 403) {
74 @header('HTTP/1.0 403 Forbidden');
75 }
76
77 /* show error page */
78 DNS::getTPL()->assign(array("activeMenuItem" => '', "error" => $e->getMessage()));
79 DNS::getTPL()->display('error.tpl');
80 exit;
81 }
82 }
83 }