127 lines
4.7 KiB
PHP
127 lines
4.7 KiB
PHP
<?php
|
|
/**
|
|
* AKSRT_Admin_Schema_Forum schema builder.
|
|
*
|
|
* @package AKSRT
|
|
*/
|
|
|
|
defined('ABSPATH') || exit;
|
|
|
|
class AKSRT_Admin_Schema_Forum {
|
|
|
|
public static function build(): array {
|
|
return [
|
|
'domain' => 'forum',
|
|
'title' => '社区&论坛',
|
|
'sections' => [
|
|
'basic' => AKSRT_Admin_Schema_Forum_Basic::build(),
|
|
'names' => AKSRT_Admin_Schema_Forum_Names::build(),
|
|
'homepage' => AKSRT_Admin_Schema_Forum_Homepage::build(),
|
|
'board_page' => AKSRT_Admin_Schema_Forum_Board_Page::build(),
|
|
'post_page' => AKSRT_Admin_Schema_Forum_Post_Page::build(),
|
|
'reply' => AKSRT_Admin_Schema_Forum_Reply::build(),
|
|
'permissions' => AKSRT_Admin_Schema_Forum_Permissions::build(),
|
|
'other' => AKSRT_Admin_Schema_Forum_Other::build(),
|
|
'upload' => AKSRT_Admin_Schema_Forum_Upload::build(),
|
|
'credits' => AKSRT_Admin_Schema_Forum_Credits::build(),
|
|
],
|
|
];
|
|
}
|
|
|
|
// ================================================================
|
|
// §8.1 Capability matrix schema builder
|
|
// ================================================================
|
|
|
|
/**
|
|
* Build groups for the capabilities section from cap_definitions().
|
|
*
|
|
* Each capability becomes a group with role columns as fields.
|
|
* Grouped by prefix: user_, new_post_, comment_.
|
|
*/
|
|
private static function build_cap_matrix_groups(): array {
|
|
if (!class_exists('AKSRT_Settings')) {
|
|
return [];
|
|
}
|
|
|
|
$defs = AKSRT_Settings::cap_definitions();
|
|
$cols = AKSRT_Settings::cap_role_columns();
|
|
|
|
$col_labels = [
|
|
'all' => __('所有人', 'aksrt'),
|
|
'logged' => __('已登录', 'aksrt'),
|
|
'level' => __('等级≥', 'aksrt'),
|
|
'vip' => __('VIP≥', 'aksrt'),
|
|
'auth' => __('已认证', 'aksrt'),
|
|
'moderator' => __('版主', 'aksrt'),
|
|
'plate_author' => __('超级版主', 'aksrt'),
|
|
'cat_moderator' => __('分区版主', 'aksrt'),
|
|
];
|
|
|
|
// Group caps by prefix
|
|
$buckets = [
|
|
'user' => ['title' => __('用户治理', 'aksrt'), 'caps' => []],
|
|
'post' => ['title' => __('投稿权限', 'aksrt'), 'caps' => []],
|
|
'comment' => ['title' => __('评论权限', 'aksrt'), 'caps' => []],
|
|
];
|
|
|
|
foreach ($defs as $cap_id => $def) {
|
|
if (str_starts_with($cap_id, 'comment_')) {
|
|
$buckets['comment']['caps'][$cap_id] = $def;
|
|
} elseif (str_starts_with($cap_id, 'new_post_')) {
|
|
$buckets['post']['caps'][$cap_id] = $def;
|
|
} else {
|
|
$buckets['user']['caps'][$cap_id] = $def;
|
|
}
|
|
}
|
|
|
|
$groups = [];
|
|
foreach ($buckets as $bucket_key => $bucket) {
|
|
if (empty($bucket['caps'])) continue;
|
|
|
|
$fields = [];
|
|
foreach ($bucket['caps'] as $cap_id => $def) {
|
|
$excludes = $def['exclude_roles'] ?? [];
|
|
$only_roles = $def['roles'] ?? null;
|
|
$defaults = $def['default'] ?? [];
|
|
|
|
// Each cap gets one field per role column
|
|
foreach ($cols as $col) {
|
|
if (in_array($col, $excludes, true)) continue;
|
|
if ($only_roles !== null && !in_array($col, $only_roles, true)
|
|
&& !in_array($col, ['all', 'logged', 'level', 'vip', 'auth'], true)) {
|
|
continue;
|
|
}
|
|
|
|
$field_key = 'user_caps.' . $cap_id . '.' . $col;
|
|
$is_spinner = in_array($col, ['level', 'vip'], true);
|
|
|
|
$field = [
|
|
'key' => $field_key,
|
|
'label' => $def['label'] . ' — ' . ($col_labels[$col] ?? $col),
|
|
'type' => $is_spinner ? 'number' : 'switch',
|
|
'default' => $defaults[$col] ?? ($is_spinner ? -1 : false),
|
|
'cap_id' => $cap_id,
|
|
'cap_col' => $col,
|
|
];
|
|
|
|
if ($is_spinner) {
|
|
$field['min'] = -1;
|
|
$field['max'] = $col === 'level' ? 10 : 2;
|
|
$field['help'] = __('-1 = 不限', 'aksrt');
|
|
}
|
|
|
|
$fields[] = $field;
|
|
}
|
|
}
|
|
|
|
$groups[] = [
|
|
'key' => 'cap_' . $bucket_key,
|
|
'title' => $bucket['title'],
|
|
'fields' => $fields,
|
|
];
|
|
}
|
|
|
|
return $groups;
|
|
}
|
|
}
|