Completed
Push — master ( 3f527d...65c0bb )
by Jacob
21:28 queued 04:35
created

Router   A

Complexity

Total Complexity 31

Size/Duplication

Total Lines 135
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3
Metric Value
wmc 31
lcom 1
cbo 3
dl 0
loc 135
rs 9.8
1
<?
0 ignored issues
show
Security Best Practice introduced by
It is not recommend to use PHP's short opening tag <?, better use <?php, or <?= in case of outputting.

Short opening tags are disabled in PHP’s default configuration. In such a case, all content of this file is output verbatim to the browser without being parsed, or executed.

As a precaution to avoid these problems better use the long opening tag <?php.

Loading history...
2
3
Loader::load('utility', array(
4
	'Request',
5
	'URLDecode'));
6
7
abstract class Router
8
{
9
10
	public function __construct() {}
11
12
	public static function instance()
13
	{
14
		$router_name = self::get_router_name();
15
		$router = Loader::loadNew('router', $router_name);
16
		$router->route();
17
	}
18
19
	private static function get_router_name()
20
	{
21
		if(Request::isAJAX())
22
			return 'AJAXRouter';
23
		
24
		switch(URLDecode::getSite())
25
		{
26
			case 'ajax' :
27
				return 'AjaxRouter';
28
			break;
29
			case 'blog' :
30
				return 'BlogRouter';
31
			break;
32
			case 'home' :
33
				return 'HomeRouter';
34
			break;
35
			case 'lifestream' :
36
				return 'LifestreamRouter';
37
			break;
38
			case 'portfolio' :
39
				return 'PortfolioRouter';
40
			break;
41
			case 'site' :
42
				return 'SiteRouter';
43
			break;
44
			case 'waterfalls' :
45
				return 'WaterfallRouter';
46
			break;
47
		}
48
		
49
		Loader::loadNew('controller', '/Error404Controller')->activate();
50
	}
51
52
	protected function route()
53
	{
54
		$uri = URLDecode::getURI();
55
		
56
		$this->check_for_redirect($uri);
57
		
58
		$controller = $this->get_controller($uri);
59
		Loader::loadNew('controller', $controller)
60
			->activate();
61
	}
62
63
	abstract protected function get_redirect_array();
64
	abstract protected function get_direct_array();
65
66
	final protected function check_for_redirect($redirect_uri)
67
	{
68
		foreach($this->get_redirect_array() as $check)
69
		{
70
			$redirect_uri = preg_replace($check->pattern, $check->replace, $redirect_uri);
71
		}
72
		
73
		$redirect_uri = $this->check_for_special_redirect($redirect_uri);
74
		
75
		if($this->requires_trailing_slash() && substr($redirect_uri, -1) != '/')
76
			$redirect_uri .= '/';
77
		
78
        if (URLDecode::getHost() == 'waterfalls.jacobemerick.com') {
79
            $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
80
            $redirect_uri = $protocol . '://' . (!Loader::isLive() ? 'dev' : 'www') . '.waterfallsofthekeweenaw.com' . $redirect_uri;
81
        }
82
        
83
		if($redirect_uri == URLDecode::getURI())
84
			return;
85
		
86
		$controller_check = $redirect_uri;
87
		if(substr($redirect_uri, 0, 4) == 'http') {
88
      $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
89
			$controller_check = preg_replace('@^' . $protocol . '://([a-z\.]+)@', '', $redirect_uri);
90
		
91
		$controller = $this->get_controller($controller_check);
92
		if($controller == '/Error404Controller')
93
		{
94
			Loader::loadNew('controller', '/Error404Controller')
95
				->activate();
96
			exit;
97
		}
98
99
		if(substr($redirect_uri, 0, 4) != 'http')
100
		{
101
			$redirect_uri = substr($redirect_uri, 1);
102
			$redirect_uri = URLDecode::getBase() . $redirect_uri;
103
		}
104
		
105
		Loader::loadNew('controller', '/Error301Controller', (array) $redirect_uri)
106
			->activate();
107
	}
108
109
	protected function check_for_special_redirect($uri)
0 ignored issues
show
Bug introduced by
This code did not parse for me. Apparently, there is an error somewhere around this line:

Syntax error, unexpected T_PROTECTED
Loading history...
110
	{
111
		return $uri;
112
	}
113
114
	final private function get_controller($uri)
115
	{
116
		foreach($this->get_direct_array() as $check)
117
		{
118
			if($uri == $check->match)
119
				return "{$this->get_primary_folder()}/{$check->controller}";
120
			
121
			if(preg_match("@^{$check->match}$@", $uri))
122
				return "{$this->get_primary_folder()}/{$check->controller}";
123
		}
124
		
125
		return '/Error404Controller';
126
	}
127
128
	final private function get_primary_folder()
129
	{
130
		if(Request::isAjax())
131
			return 'ajax';
132
		
133
		return URLDecode::getSite();
134
	}
135
136
	private function requires_trailing_slash()
137
	{
138
		return (
139
			URLDecode::getExtension() != 'json' &&
140
            strstr(URLDecode::getURI(), '#') === false);
141
	}
142
143
}
144