3 use dns\system\cache\builder\ControllerCacheBuilder
;
6 * @author Jan Altensen (Stricted)
7 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
8 * @copyright 2013-2016 Jan Altensen (Stricted)
10 class RequestHandler
{
11 protected $pattern = "";
12 protected $routeData = array();
17 public function __construct ($module = '') {
18 $this->pattern
= '~/?(?:(?P<controller>[A-Za-z0-9\-]+)(?:/(?P<id>\d+)(?:-(?P<title>[^/]+))?)?)?~x';
19 $controllers = ControllerCacheBuilder
::getInstance()->getData(array('module' => $module));
21 if (DNS
::getSession()->username
!== null) {
22 DNS
::getTPL()->assign(array("username" => DNS
::getSession()->username
));
25 DNS
::getTPL()->assign(array("username" => ''));
29 if (!empty($_SERVER['QUERY_STRING'])) {
30 $this->matches($_SERVER['QUERY_STRING']);
31 $this->registerRouteData();
34 $className = '\\dns'.(empty($module) ?
'' : '\\'.$module).'\\page\\IndexPage';
37 if (isset($this->routeData
['controller']) && !empty($this->routeData
['controller'])) {
38 $controller = strtolower($this->routeData
['controller']);
39 if (isset($controllers[$controller]) && !empty($controllers[$controller])) {
40 $className = $controllers[$controller];
43 @header
('HTTP/1.0 404 Not Found');
44 DNS
::getTPL()->assign(array("activeMenuItem" => '', "error" => 'The link you are trying to reach is no longer available or invalid.'));
45 DNS
::getTPL()->display('error.tpl');
50 if (!User
::isLoggedIn() && $className != '\dns\page\LoginPage' && $className != '\dns\page\ApiPage') {
51 DNS
::getTPL()->display('login.tpl');
55 // handle offline mode
56 if (defined('OFFLINE') && OFFLINE
) {
57 $admin = User
::isAdmin();
60 if (defined($className . '::AVAILABLE_DURING_OFFLINE_MODE') && constant($className . '::AVAILABLE_DURING_OFFLINE_MODE')) {
64 if (!$admin && !$available) {
65 @header
('HTTP/1.1 503 Service Unavailable');
66 DNS
::getTPL()->display('offline.tpl');
74 catch (\Exception
$e) {
75 if ($e->getCode() == 404) {
76 @header
('HTTP/1.0 404 Not Found');
78 else if ($e->getCode() == 403) {
79 @header
('HTTP/1.0 403 Forbidden');
83 DNS
::getTPL()->assign(array("activeMenuItem" => '', "error" => $e->getMessage()));
84 DNS
::getTPL()->display('error.tpl');
90 * Registers route data within $_GET and $_REQUEST.
92 protected function registerRouteData() {
93 foreach ($this->routeData
as $key => $value) {
95 $_REQUEST[$key] = $value;
99 public function matches($requestURL) {
100 if (preg_match($this->pattern
, $requestURL, $matches)) {
101 foreach ($matches as $key => $value) {
102 if (!is_numeric($key)) {
103 $this->routeData
[$key] = $value;