-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
RouteType.php
147 lines (127 loc) · 3.72 KB
/
RouteType.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
<?php
/**
* Arikaim
*
* @link http://www.arikaim.com
* @copyright Copyright (c) Konstantin Atanasov <info@arikaim.com>
* @license http://www.arikaim.com/license
*
*/
namespace Arikaim\Core\Routes;
/**
* Route types
*/
class RouteType
{
const INSTALL_PAGE_URL_PATH = 'admin/install';
const UNKNOW_TYPE = 0;
const HOME_PAGE_URL = 1;
const ADMIN_PAGE_URL = 2;
const SYSTEM_API_URL = 3;
const API_URL = 4;
const ADMIN_API_URL = 5;
const INSTALL_PAGE = 6;
/**
* Get route type
*
* @param string $path
* @param array $options
* @return int
*/
public static function getType(string $url, array $options = []): int
{
$url = \rtrim(\str_replace(BASE_PATH,'',$url),'/');
if (\substr($url,-13) == Self::INSTALL_PAGE_URL_PATH) {
return Self::INSTALL_PAGE;
}
$segments = \explode('/',$url);
$count = \count($segments);
// check for system api
$segments[1] = $segments[1] ?? '';
$segments[2] = $segments[2] ?? '';
$segments[3] = $segments[3] ?? '';
$adminPagePath = $options['adminPagePath'] ?? 'admin';
if ($segments[1] == 'core' && $segments[2] == 'api') {
return Self::SYSTEM_API_URL;
}
// check for api
if ($segments[1] == 'api') {
return ($segments[3] == 'admin' || $segments[2] == 'admin') ? Self::ADMIN_API_URL : Self::API_URL;
}
// check for admin
if (($segments[1] == $adminPagePath) && ($count <= 3)) {
return Self::ADMIN_PAGE_URL;
}
// check for home page
if ($count == 1 || $count == 2) {
if (empty($segments[1]) == true && empty($segments[2])== true) {
return Self::HOME_PAGE_URL;
}
if (Self::isLanguageSegment([$segments[0],$segments[1]]) == true) {
return Self::HOME_PAGE_URL;
}
}
return Self::UNKNOW_TYPE;
}
/**
* Return true if last url segment is language
*
* @param array $urlSegments
* @return boolean
*/
public static function isLanguageSegment(array $urlSegments): bool
{
return (\strlen(\last($urlSegments)) == 2);
}
/**
* Return true if request url is system api
*
* @param string $url
* @return boolean
*/
public static function isSystemApiUrl(string $url): bool
{
return (\substr(\str_replace(BASE_PATH,'',$url),0,10) == '/core/api/');
}
/**
* Return true if request is for installation
*
* @param string|null $uri
* @return boolean
*/
public static function isApiInstallRequest(?string $uri = null): bool
{
$uri = $uri ?? $_SERVER['REQUEST_URI'] ?? '';
return (\substr(\str_replace(BASE_PATH,'',$uri),0,18) == '/core/api/install/');
}
/**
* Check for install page url
*
* @param string|null $uri
* @return boolean
*/
public static function isInstallPage(?string $uri = null): bool
{
$uri = $uri ?? $_SERVER['REQUEST_URI'] ?? '';
return (\substr($uri,-13) == Self::INSTALL_PAGE_URL_PATH);
}
/**
* Get install page url
*
* @return string
*/
public static function getInstallPageUrl() : string
{
return DOMAIN . BASE_PATH . '/' . Self::INSTALL_PAGE_URL_PATH;
}
/**
* Return true if api url pattern is valid
*
* @param string $pattern
* @return boolean
*/
public static function isValidApiRoutePattern(string $pattern): bool
{
return (\substr($pattern,0,4) == '/api');
}
}