request_uri = $request; /* Language Detection */ $supported_languages = Settings::get('SUPPORTED_LANGUAGES'); if($supported_languages){ /* Prefix path support */ if(Settings::get('PREFIX_PATH') && Settings::get('ADMIN_PATH')) { $prefix_path = DS.Settings::get('PREFIX_PATH'); $admin_path = DS.Settings::get('ADMIN_PATH'); $admin_check = substr($this->request_uri,0,strlen($admin_path)); if($admin_check != $admin_path){ $demo_check = substr($this->request_uri,0,strlen($prefix_path)); if( $demo_check != $prefix_path) exit(header('Location: /comingsoon.html')); $this->request_uri = substr($this->request_uri, strlen($prefix_path)); } } $prefix_uri = $supported_languages[0]; $lang_check = substr($this->request_uri,0,3); foreach($supported_languages as $lang){ $lang ='/'.$lang; if($lang == $lang_check){ $this->request_uri = substr($this->request_uri, 3); $this->prefix_uri = $lang; break; } } } $this->routes = array(); } public function map($rule, $target = array() , $conditions = array()) { $this->routes[$rule] = new Route($rule, $this->request_uri, $target, $conditions); } private function set_route($route) { $this->route_found = true; $params = $route->params; $this->controller = $params['controller']; unset($params['controller']); if (isset($params['action'])) $this->action = $params['action']; unset($params['action']); if (isset($params['id'])) $this->id = $params['id']; $this->params = $params; if (empty($this->controller)) $this->controller = ROUTER_DEFAULT_CONTROLLER; if (empty($this->action)) $this->action = ROUTER_DEFAULT_ACTION; if (empty($this->id)) $this->id = null; $w = explode('_', $this->controller); foreach ($w as $k => $v) $w[$k] = ucfirst($v); $this->controller_name = implode('', $w); $this->controller = preg_replace('/[^A-Za-z0-9-]/', '', $this->controller); $this->action = preg_replace('/[^A-Za-z0-9-]/', '', $this->action); } public function execute() { // exit(0); foreach ($this->routes as $route) { if ($route->is_matched) { $this->set_route($route); break; } } } } class Route { public $is_matched = false; public $params; public $url; private $conditions; function __construct($url, $request_uri, $target, $conditions) { $this->url = $url; $this->params = array(); $this->conditions = $conditions; $p_names = array(); $p_values = array(); preg_match_all('@:([\w]+)@', $url, $p_names, PREG_PATTERN_ORDER); $p_names = $p_names[0]; $url_regex = preg_replace_callback('@:[\w]+@', array( $this, 'regex_url' ) , $url); $url_regex.= '/?'; if (preg_match('@^' . $url_regex . '$@', $request_uri, $p_values)) { array_shift($p_values); foreach ($p_names as $index => $value) $this->params[substr($value, 1) ] = urldecode($p_values[$index]); foreach ($target as $key => $value) $this->params[$key] = $value; $this->is_matched = true; } unset($p_names); unset($p_values); } function regex_url($matches) { $key = str_replace(':', '', $matches[0]); if (array_key_exists($key, $this->conditions)) { return '(' . $this->conditions[$key] . ')'; } else { return '([a-zA-Z0-9_\+\-%]+)'; } } }