feat(admin): host the ban/report settings page in the SPA schema

The users-interaction sidebar entry 禁封/举报 was a redirect stub; it is
now a schema-driven settings page replicating the reference theme
field-for-field:

- user_ban_s / user_report_s switches, ban_preset_reason and
  ban_appeal_keys as repeatable group rows ({t}), ban_appeal_desc and
  user_report_desc HTML textareas with the reference default copy, and
  user_report_img_s — keys, labels, help texts, defaults and ordering
  all mirrored in SchemaUsers.php and the SPA report.js schema
- UserRuntime::ban_settings()/report_settings() and
  BanAppeal::settings() read the new group-array values with fallback
  to the previous line/comma formats
- delete the self-built SPA queue pages (UsersBan, UsersReport,
  ReportDetailDrawer, UsersMessages) that the reference theme does not
  have; legacy /users/report bookmarks still redirect to the native page
- contract tests: lock the schema keys/labels, the schemaPage mount and
  the deleted-file state; drop reads of removed components
This commit is contained in:
kate522 committed 2026-09-19 22:24:55 +08:00
1 parent c0e0912eee
commit 381256ed59
12 files changed
+191 -1236

No files matched your search

+10 -3
View File
@@ -34,10 +34,17 @@ class BanAppeal {
*/
public static function settings(): array {
$all = class_exists('\AKSRT\Settings\Settings') ? (array) \AKSRT\Settings\Settings::get_all() : [];
$keys_raw = (string) ($all['ban_appeal_keys'] ?? '');
$keys = array_values(array_filter(array_map('trim', preg_split('/[,,\n]/', $keys_raw) ?: [])));
// 申诉资料:group 数组 [{t:...}](对齐参考主题)或旧版逗号分隔文本
$keys_raw = $all['ban_appeal_keys'] ?? null;
if (is_array($keys_raw)) {
$keys = array_values(array_filter(array_map(static function ($row): string {
return trim((string) ($row['t'] ?? ''));
}, $keys_raw)));
} else {
$keys = array_values(array_filter(array_map('trim', preg_split('/[,,\n]/', (string) $keys_raw) ?: [])));
}
return [
'enabled' => !isset($all['user_report_enabled']) || !empty($all['user_report_enabled']),
'enabled' => (bool) ($all['user_report_s'] ?? (isset($all['user_report_enabled']) ? $all['user_report_enabled'] : true)),
'desc' => (string) ($all['ban_appeal_desc'] ?? ''),
'keys' => $keys,
];