use zend router
[GitHub/Stricted/Domain-Control-Panel.git] / lib / system / RequestHandler.class.php
CommitLineData
2aa91ff2
S
1<?php
2namespace dns\system;
ff49a0be 3use dns\system\cache\builder\ControllerCacheBuilder;
44d399bc
S
4use Zend\Mvc\Router\Http\Literal;
5use Zend\Mvc\Router\Http\Regex;
6use Zend\Mvc\Router\SimpleRouteStack;
7use Zend\ServiceManager\ServiceManager;
2aa91ff2
S
8
9/**
10 * @author Jan Altensen (Stricted)
11 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
d4779364 12 * @copyright 2013-2016 Jan Altensen (Stricted)
2aa91ff2
S
13 */
14class RequestHandler {
ff49a0be
S
15 protected $pattern = "";
16 protected $routeData = array();
ff49a0be 17
2aa91ff2
S
18 /**
19 * init RequestHandler
20 */
2f234923 21 public function __construct ($module = '') {
ff49a0be
S
22 if (DNS::getSession()->username !== null) {
23 DNS::getTPL()->assign(array("username" => DNS::getSession()->username));
2aa91ff2
S
24 }
25 else {
ff49a0be 26 DNS::getTPL()->assign(array("username" => ''));
2aa91ff2
S
27 }
28
44d399bc
S
29 $router = new SimpleRouteStack();
30
31 $router->addRoute('', Literal::factory([ 'route' => '', 'defaults' => [ 'controller' => 'dns\page\IndexPage' ] ]));
32 $router->addRoute('Index', Literal::factory([ 'route' => 'Index', 'defaults' => [ 'controller' => 'dns\page\IndexPage' ] ]));
33 $router->addRoute('index', Literal::factory([ 'route' => 'index', 'defaults' => [ 'controller' => 'dns\page\IndexPage' ] ]));
34 $router->addRoute('Login', Literal::factory([ 'route' => 'Login', 'defaults' => [ 'controller' => 'dns\page\LoginPage' ] ]));
35 $router->addRoute('Logout', Literal::factory([ 'route' => 'Logout', 'defaults' => [ 'controller' => 'dns\page\LogoutPage' ] ]));
36 $router->addRoute('DomainList', Literal::factory([ 'route' => 'DomainList', 'defaults' => [ 'controller' => 'dns\page\DomainListPage' ] ]));
37 $router->addRoute('DomainAdd', Literal::factory([ 'route' => 'DomainAdd', 'defaults' => [ 'controller' => 'dns\page\DomainAddPage' ] ]));
38 //$router->addRoute('DomainAdd', Regex::factory([ 'regex' => 'DomainEdit/(?P<id>\d+)(/)?', 'defaults' => [ 'controller' => 'dns\page\DomainEditPage' ], 'spec' => '/DomainEdit/%id%' ]));
2aa91ff2 39
44d399bc
S
40 $match = $router->match(new Request());
41 if ($match !== null) {
42 foreach ($match->getParams() as $key => $value) {
43 $_GET[$key] = $value;
44 $_REQUEST[$key] = $value;
ff49a0be 45 }
44d399bc
S
46
47 $className = $match->getParam("controller");
48
49 if (!User::isLoggedIn() && $className != 'dns\page\LoginPage' && $className != 'dns\page\ApiPage') {
50 echo $className;
51 DNS::getTPL()->display('login.tpl');
ff49a0be
S
52 exit;
53 }
2aa91ff2 54
44d399bc
S
55 if (defined('OFFLINE') && OFFLINE) {
56 $admin = User::isAdmin();
57 $available = false;
58
59 if (defined($className . '::AVAILABLE_DURING_OFFLINE_MODE') && constant($className . '::AVAILABLE_DURING_OFFLINE_MODE')) {
60 $available = true;
61 }
62
63 if (!$admin && !$available) {
64 @header('HTTP/1.1 503 Service Unavailable');
65 DNS::getTPL()->display('offline.tpl');
66 exit;
67 }
2aa91ff2
S
68 }
69
44d399bc
S
70 try {
71 new $className();
72 }
73 catch (\Exception $e) {
74 if ($e->getCode() == 404) {
75 @header('HTTP/1.0 404 Not Found');
76 }
77 else if ($e->getCode() == 403) {
78 @header('HTTP/1.0 403 Forbidden');
79 }
80
81 // show error page
82 DNS::getTPL()->assign(array("activeMenuItem" => '', "error" => $e->getMessage()));
83 DNS::getTPL()->display('error.tpl');
2aa91ff2
S
84 exit;
85 }
86 }
44d399bc
S
87 else {
88 @header('HTTP/1.0 404 Not Found');
89 DNS::getTPL()->assign(array("activeMenuItem" => '', "error" => 'The link you are trying to reach is no longer available or invalid.'));
2aa91ff2
S
90 DNS::getTPL()->display('error.tpl');
91 exit;
92 }
93 }
94}