mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-09 11:44:10 +09:00
Add 404 error handler and update permission data structure
This commit is contained in:
parent
e20c06bf00
commit
5fa72f8629
7 changed files with 49 additions and 29 deletions
|
|
@ -49,10 +49,9 @@ class ModuleActionParser
|
|||
$info->route->GET = [];
|
||||
$info->route->POST = [];
|
||||
$info->action = new \stdClass;
|
||||
$info->menu = new \stdClass;
|
||||
$info->grant = new \stdClass;
|
||||
$info->permission = new \stdClass;
|
||||
$info->permission_check = new \stdClass;
|
||||
$info->menu = new \stdClass;
|
||||
$info->error_handlers = [];
|
||||
|
||||
// Parse grants.
|
||||
foreach ($xml->grants->grant ?: [] as $grant)
|
||||
|
|
@ -64,19 +63,6 @@ class ModuleActionParser
|
|||
$info->grant->{$grant_name} = $grant_info;
|
||||
}
|
||||
|
||||
// Parse permissions not defined in the <actions> section.
|
||||
foreach ($xml->permissions->permission ?: [] as $permission)
|
||||
{
|
||||
$action_name = trim($permission['action']);
|
||||
$permission = trim($permission['target']);
|
||||
$info->permission->{$action_name} = $permission;
|
||||
|
||||
$check = new \stdClass;
|
||||
$check->key = trim($permission['check_var']) ?: trim($permission['check-var']);
|
||||
$check->type = trim($permission['check_type']) ?: trim($permission['check-type']);
|
||||
$info->permission_check->{$action_name} = $check;
|
||||
}
|
||||
|
||||
// Parse menus.
|
||||
foreach ($xml->menus->menu ?: [] as $menu)
|
||||
{
|
||||
|
|
@ -95,15 +81,12 @@ class ModuleActionParser
|
|||
// Parse permissions.
|
||||
$action_name = trim($action['name']);
|
||||
$permission = trim($action['permission']);
|
||||
$permission_info = (object)['target' => '', 'check_var' => '', 'check_type' => ''];
|
||||
if ($permission)
|
||||
{
|
||||
$info->permission->{$action_name} = $permission;
|
||||
if (isset($info->permission_check->{$action_name}))
|
||||
{
|
||||
$info->permission_check->{$action_name} = new \stdClass;
|
||||
}
|
||||
$info->permission_check->{$action_name}->key = trim($action['check_var']) ?: trim($action['check-var']);
|
||||
$info->permission_check->{$action_name}->type = trim($action['check_type']) ?: trim($action['check-type']);
|
||||
$permission_info->target = $permission;
|
||||
$permission_info->check_var = trim($action['check_var']) ?: trim($action['check-var']);
|
||||
$permission_info->check_type = trim($action['check_type']) ?: trim($action['check-type']);
|
||||
}
|
||||
|
||||
// Parse routes.
|
||||
|
|
@ -136,6 +119,7 @@ class ModuleActionParser
|
|||
$action_info = new \stdClass;
|
||||
$action_info->type = trim($action['type']);
|
||||
$action_info->grant = trim($action['grant']) ?: 'guest';
|
||||
$action_info->permission = $permission_info;
|
||||
$action_info->ruleset = trim($action['ruleset']);
|
||||
$action_info->method = $method;
|
||||
$action_info->route = $route_arg;
|
||||
|
|
@ -171,6 +155,28 @@ class ModuleActionParser
|
|||
{
|
||||
$info->simple_setup_index_act = $action_name;
|
||||
}
|
||||
|
||||
// Set error handler settings.
|
||||
$error_handlers = explode(',', trim($action['error_handlers']) ?: trim($action['error-handlers']));
|
||||
foreach ($error_handlers as $error_handler)
|
||||
{
|
||||
if (intval($error_handler) > 200)
|
||||
{
|
||||
$info->error_handlers[intval($error_handler)] = $action_name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Parse permissions not defined in the <actions> section.
|
||||
foreach ($xml->permissions->permission ?: [] as $permission)
|
||||
{
|
||||
$action_name = trim($permission['action']);
|
||||
if (isset($info->action->{$action_name}))
|
||||
{
|
||||
$info->action->{$action_name}->permission->target = trim($permission['target']);
|
||||
$info->action->{$action_name}->permission->check_var = trim($permission['check_var']) ?: trim($permission['check-var']);
|
||||
$info->action->{$action_name}->permission->check_type = trim($permission['check_type']) ?: trim($permission['check-type']);
|
||||
}
|
||||
}
|
||||
|
||||
// Return the complete result.
|
||||
|
|
|
|||
|
|
@ -83,6 +83,7 @@ class ModuleInfoParser
|
|||
$info->default_index_act = $action_info->default_index_act;
|
||||
$info->setup_index_act = $action_info->setup_index_act;
|
||||
$info->simple_setup_index_act = $action_info->simple_setup_index_act;
|
||||
$info->error_handlers = $action_info->error_handlers ?: [];
|
||||
|
||||
// Return the complete result.
|
||||
return $info;
|
||||
|
|
|
|||
|
|
@ -156,6 +156,13 @@ class Router
|
|||
$allargs = array_merge(['mid' => $prefix, 'act' => $internal_url], $args);
|
||||
return (object)['status' => 200, 'url' => $url, 'args' => $allargs];
|
||||
}
|
||||
|
||||
// If the module defines a 404 error handler, call it.
|
||||
if ($internal_url && isset($action_info->error_handlers[404]))
|
||||
{
|
||||
$allargs = array_merge(['mid' => $prefix, 'act' => $action_info->error_handlers[404]], $args);
|
||||
return (object)['status' => 200, 'url' => $url, 'args' => $allargs];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue