<?php class OsRouterHelper { public static function build_pre_route_link($route, $params = array()){ return self::build_link($route, array_merge(array('pre_route'=> 1), $params)); } public static function add_extension($string = '', $extension = '.php'){ if(substr($string, -strlen($extension))===$extension) return $string; else return $string.$extension; } public static function build_link($route, $params = array()){ $params_query = ''; if($params){ $params_query = '&'.http_build_query($params); } if(is_array($route) && (count($route) == 2)) $route = OsRouterHelper::build_route_name($route[0], $route[1]); return admin_url('admin.php?page=latepoint&route_name='.$route.$params_query); } public static function build_admin_post_link($route, $params = array()){ $params_query = ''; if($params){ $params_query = '&'.http_build_query($params); } if(is_array($route) && (count($route) == 2)) $route = OsRouterHelper::build_route_name($route[0], $route[1]); return admin_url('admin-post.php?action=latepoint_route_call&route_name='.$route.$params_query); } public static function link_has_route($route_name, $link){ $link_params = wp_parse_url($link); if(empty($link_params['query'])) return false; parse_str($link_params['query'], $link_query_params); return ($link_query_params && isset($link_query_params['route_name']) && ($link_query_params['route_name'] == $route_name)); } public static function build_front_link($route, $params = array()){ $params_query = ''; if($params){ $params_query = '&'.http_build_query($params); } if(is_array($route) && (count($route) == 2)) $route = OsRouterHelper::build_route_name($route[0], $route[1]); return site_url('index.php?latepoint_is_custom_route=true&route_name='.$route.$params_query); } public static function build_route_name($controller, $action){ return $controller.'__'.$action; } public static function convert_route_name_to_controller_and_action($route_name): array{ list($controller_name, $action) = explode('__', $route_name); if(empty($controller_name) || empty($action)) return []; $controller_name = str_replace('_', '', ucwords($controller_name, '_')); $controller_class_name = 'Os'.$controller_name.'Controller'; if(class_exists($controller_class_name)) { $controller_obj = new $controller_class_name(); if(method_exists($controller_obj, $action)) { // check if action is valid return ['controller' => $controller_obj, 'action' => $action]; }else{ return []; } }else{ return []; } } public static function call_by_route_name($route_name, $return_format = 'html'){ OsDebugHelper::log_route($route_name, $return_format); $route_data = self::convert_route_name_to_controller_and_action($route_name); if(!empty($route_data)){ $controller_obj = $route_data['controller']; $action = $route_data['action']; if($return_format) $controller_obj->set_return_format($return_format); // check if user is allowed to access this route if($controller_obj->can_current_user_access_action($action)){ $controller_obj->route_name = $route_name; $controller_obj->$action(); }else{ if($controller_obj->get_return_format() == 'json'){ $controller_obj->send_json( ['status' => LATEPOINT_STATUS_ERROR, 'message' => __('Not Authorized', 'latepoint')] ); }else{ echo '<div class="latepoint-not-authorized"><div class="not-authorized-message">'.esc_html__('Not Authorized', 'latepoint').'</div></div>'; } } }else{ esc_html_e('Page Not Found', 'latepoint'); } } public static function get_request_param($name, $default = false){ if(isset($_GET[$name])){ $param = sanitize_text_field(wp_unslash($_GET[$name])); }elseif(isset($_POST[$name])){ $param = sanitize_text_field(wp_unslash($_POST[$name])); }else{ $param = $default; } return $param; } }