diff --git a/src/Admin/Native/UsersMenus.php b/src/Admin/Native/UsersMenus.php index 5d7d4148..5f8d2be5 100644 --- a/src/Admin/Native/UsersMenus.php +++ b/src/Admin/Native/UsersMenus.php @@ -305,40 +305,141 @@ class UsersMenus { echo ''; } + /** + * 禁封限制页 — 1:1 对齐参考主题 zib_get_set_user_ban_modal: + * 禁封方式(拉入小黑屋/禁封用户)+ 禁封时间(1/7/14/30/100/永久)+ + * 选择禁封原因(预置徽章 + 其它原因)+ 禁封说明 + 删除全部内容 + + * 禁止用户申诉(含说明);已禁封用户展示状态信息与解封留言表单。 + * 参考主题无 scope 维度,禁封一律全局。 + */ private function render_restrictions_tab(): void { if (!class_exists('\AKSRT\User\Restriction')) { echo '
' . esc_html__('限制模块未初始化。', 'aksrt') . '
' . esc_html(sprintf( - /* translators: 1 total 2 active 3 banned */ - __('限制记录 %1$d · 生效中 %2$d · 封禁中 %3$d', 'aksrt'), - (int) ($stats['total'] ?? 0), - (int) ($stats['active'] ?? 0), - (int) ($stats['banned'] ?? 0) - )) . '
'; + $svc = \AKSRT\User\Restriction::get_instance(); - echo '' . esc_html__('请先通过“用户 ID”定位要禁封或解封的用户(也可从工单列表的“点击此处”进入)。', 'aksrt') . '
'; + } elseif ($current !== null) { + // —— 已禁封视图(参考主题解封弹窗同构):状态信息 + 解封留言表单 —— + $unban_title = $current['type'] === 'ban' ? __('解封用户', 'aksrt') : __('移出小黑屋', 'aksrt'); + $status_text = $current['type'] === 'ban' ? __('禁封中(禁止登录)', 'aksrt') : __('小黑屋禁封中', 'aksrt'); + $end_time = !empty($current['expires_at']) ? (string) $current['expires_at'] : __('永久', 'aksrt'); + echo '| ID | ' . esc_html__('用户', 'aksrt') . ' | ' . esc_html__('类型', 'aksrt') . ' | ' . esc_html__('范围', 'aksrt') . ' | ' . esc_html__('原因', 'aksrt') . ' | ' . esc_html__('过期', 'aksrt') . ' | ' . esc_html__('操作', 'aksrt') . ' | '; + echo '' . esc_html__('用户', 'aksrt') . ' | ' . esc_html__('禁封状态', 'aksrt') . ' | ' . esc_html__('开始时间', 'aksrt') . ' | ' . esc_html__('结束时间', 'aksrt') . ' | ' . esc_html__('原因', 'aksrt') . ' | ' . esc_html__('操作', 'aksrt') . ' | '; echo '
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ' . esc_html__('暂无限制记录', 'aksrt') . ' | ||||||||||||
| ' . esc_html__('暂无限制记录', 'aksrt') . ' | ||||||||||||
| ' . esc_html((string) $id) . ' | '; - echo '' . ($user ? esc_html($user->display_name) : esc_html((string) $user_id)) . ' | '; - echo '' . esc_html((string) ($row['type'] ?? '')) . ' | '; - echo '' . esc_html((string) ($row['scope'] ?? '')) . ' | '; - echo '' . esc_html((string) ($row['reason'] ?? '')) . ' | '; - echo '' . esc_html((string) ($row['expires_at'] ?? '—')) . ' | '; - echo '' . ($r_user ? esc_html($r_user->display_name) : esc_html((string) $r_user_id)) . ' | '; + echo '' . $status_html . ' | '; + echo '' . esc_html((string) ($r['created_at'] ?? '')) . ' | '; + echo '' . esc_html(!empty($r['expires_at']) ? (string) $r['expires_at'] : __('永久', 'aksrt')) . ' | '; + echo '' . nl2br(esc_html((string) ($r['reason'] ?? ''))) . ' | '; + echo ''; + if ($is_global && !$expired) { + echo '' . esc_html(($type === 'ban' ? __('解封', 'aksrt') : __('移出小黑屋', 'aksrt'))) . ''; + } + echo ' | '; } echo '|