Files
kate522 a4af024f32 feat(ban): align ban prompts with the reference theme modals and block page
对照参考主题(Zibll)修正四项偏差,申诉链路从页面整体迁移至弹窗:

- feat(ban): 新增三个 1:1 复刻弹窗(REST /user-ban/{info,appeal,log}-modal):
  查看禁封状态(多彩头 c-gray + 信息行 + 申诉按钮)、禁封申诉(edit-header
  gavel/c-blue + 信息框 + 资料项 data[key] 输入 + 审核中态 + 禁止申诉态)、
  禁封记录(多彩头 c-yellow + 计数 + 逐条卡片);user-ban.js 增加
  data-aksrt-ban-info/appeal/log 委托与 admin-ajax 申诉提交
- feat(ban): 禁封/解封弹窗的「当前用户已有N次禁封记录」静态文案改为可点击
  黄链(N>1),打开禁封记录弹窗;解封视图信息行改复用统一数据源
- refactor(ban): 治理展示态收敛至 Restriction::state_badges()(封号=c-red
  违规已封号 / 小黑屋=c-yellow 小黑屋禁封中 / 禁言=c-gray 禁言中,颜色与
  字段统一管理)+ get_ban_info()(状态/起止时间/原因/说明/申诉权限,
  三弹窗与禁封页共用)
- feat(ban): 登录行为对齐参考主题——移除登录期拦截(enforce_login_ban)
  与 complete_login 禁封闸门,封号用户可正常登录;新增 template_redirect
  前台禁封页(1:1 zib_user_ban_restrict_login/zib_die_page:红盒提示 +
  信息行 + 申诉权限 + 退出登录/申诉按钮,模板 templates/parts/user/ban-block.php)
- feat(profile): 公开主页禁封状态从资料卡下方提示框改为占据身份行元信息位
  的 badg 徽章(参考主题 author_header_identity 语义);用户中心元信息改为
  but 按钮(徽章+箭头)打开查看禁封状态弹窗;评论拒绝态链接同源
- refactor: 移除申诉页面模板(page-ban-appeal.php)及其资产/注册/入队、
  get_profile_notice/profile_notice 链、state_labels/state_notices/
  login_ban_message、UserRuntime 的 public_notice/ban_notice_text 死配置、
  report_settings 死键、无消费方的 aksrt_ban_appeal_status 端点
- feat(ban): BanAppeal::ajax_submit 兼容弹窗 data[key] 表单结构
  (逐项清洗入库,申诉说明取 data['申诉说明'],旧平铺字段保持兼容)
- chore: 重新构建 public.css/public.min.css(三个新弹窗几何与头部样式)
- test: 契约测试重写(徽章元信息位、三弹窗与记录链接、禁封页、允许登录 +
  前台拦截、死代码移除断言),全量 362 项通过
2026-09-22 19:14:02 +08:00

66 lines
2.8 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* 登录后禁封状态页 — 1:1 复刻参考主题 zib_user_ban_restrict_login(zib_die_page):
* 红盒提示 + 禁封信息行 + 申诉权限 + 退出登录/申诉按钮。
* 由 Restriction::restrict_frontend_access()(template_redirect)渲染。
*
* Contract: get_template_part(..., null, $args)
* user WP_User 被封禁用户
* info array Restriction::get_ban_info() 的禁封信息行
*
* @package AKSRT
*/
defined('ABSPATH') || exit;
$args = is_array($args ?? null) ? $args : [];
$user = $args['user'] ?? null;
$info = is_array($args['info'] ?? null) ? $args['info'] : [];
if (!($user instanceof WP_User)) {
return;
}
$user_id = (int) $user->ID;
$null_img = function_exists('aksrt_null_image_url') ? aksrt_null_image_url('null.svg') : '';
$logout_url = wp_logout_url(home_url());
$appeal_link = function_exists('aksrt_get_user_ban_appeal_link')
? aksrt_get_user_ban_appeal_link($user_id, 'but c-blue padding-lg hollow')
: '';
$ban_set_row = static function (string $label, string $value): string {
if ($value === '') {
return '';
}
return '<div class="mb10 flex"><div class="author-set-left" style="min-width: 80px;">' . esc_html($label) . '</div><div class="author-set-right mt6">' . esc_html($value) . '</div></div>';
};
?>
<main class="container flex ac">
<div class="f404 flex1">
<?php if ($null_img !== '') : ?>
<img src="<?php echo esc_url($null_img); ?>" alt="">
<?php endif; ?>
<div class="f404-msg mt20">
<div class="c-red box-body separator mb30"><?php esc_html_e('抱歉,您的账号当前处于禁封状态,暂时无法登录', 'aksrt'); ?></div>
<div class="mb20 muted-box text-left" style="max-width: 600px; margin: auto;">
<?php
echo $ban_set_row(__('用户名', 'aksrt'), $user->display_name); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- row builder escapes.
echo $ban_set_row(__('状态', 'aksrt'), (string) ($info['status'] ?? ''));
echo $ban_set_row(__('开始时间', 'aksrt'), (string) ($info['start'] ?? ''));
echo $ban_set_row(__('结束时间', 'aksrt'), (string) ($info['end'] ?? ''));
echo $ban_set_row(__('原因', 'aksrt'), (string) ($info['reason'] ?? ''));
echo $ban_set_row(__('说明', 'aksrt'), (string) ($info['desc'] ?? ''));
if (!empty($info['no_appeal'])) {
echo $ban_set_row(__('申诉权限', 'aksrt'), __('本次禁封您将不能发起申诉', 'aksrt'));
echo $ban_set_row(__('禁止申诉说明', 'aksrt'), (string) ($info['no_appeal_desc'] ?? ''));
}
?>
</div>
<div class="mt20 text-center">
<a href="<?php echo esc_url($logout_url); ?>" class="but c-yellow padding-lg hollow mr20"><?php esc_html_e('退出登录', 'aksrt'); ?></a>
<?php echo $appeal_link; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- helper escapes internally. ?>
</div>
</div>
</div>
</main>