The theme was renamed Zibll/子比 → AKSRT → Jio, but upstream branding survived the sweeps in CSS classes, the SVG sprite prefix, a persisted widget field ID, JS events, admin Vue class names, test infrastructure and docblocks. Renames: - zib-widget / zib-widget-wrap / zib-slider → jio-widget-box / jio-widget-box-wrap / jio-slider-box (jio-widget is taken by the modern widget shell, jio-box-* by the card primitives) - zib-partners-scroll + zps-* → jio-partners-scroll + jps-* - zib-combo-info-card + zci-* → jio-combo-info-card + jci-* - zibsvg- → jiosvg-, including the exported picker helpers and the fa-zibsvg- family-prefix guard - zibpay_type → pay_type; the dual-read fallback in PostQuery collapses to a single key - [zibajax="submit"] dropped (no PHP emitter); zib_ajax.success → jio_ajax.success - aks-* admin Vue classes → jio-* - zib_palette() → palette() User-facing vendor traces are gone: the floating "more" button default no longer ships a zibll.com link or 子比主题 marketing copy, the notice widget ships no preset promo entries, and the four 官网教程 links are removed from the post-list admin schema. Test infrastructure renamed to neutral names (docker-compose.reference.yml, Caddyfile, article-baseline.json, modern-widgets-contract.test.cjs) with their DB/volume/env/slug identifiers following. Kept intentionally, documented in tests/fixtures/README.md: the golden fixture reference fingerprint (a SHA-256 record of an external directory, read by validate-widget-golden / generate-widget-golden-fixture / audit-widget-system), the doesNotMatch guards that prove the old tokens are gone, and the reference theme's own meta key in the visual fixtures. No backward-compat or data migration: saved widget configs holding old icon keys or the old field ID silently lose them, per the project's rewrite-over-compatibility rule. Verified: 132/132 node contract tests, php tests/widget-system/run.php (146 assertions), audit-admin-contracts, audit-psr4-paths and validate-widget-golden all green; tracked bundles regenerated and in sync. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
66 lines
2.7 KiB
PHP
66 lines
2.7 KiB
PHP
<?php
|
||
/**
|
||
* 登录后禁封状态页:
|
||
* 红盒提示 + 禁封信息行 + 申诉权限 + 退出登录/申诉按钮。
|
||
* 由 Restriction::restrict_frontend_access()(template_redirect)渲染。
|
||
*
|
||
* Contract: get_template_part(..., null, $args)
|
||
* user WP_User 被封禁用户
|
||
* info array Restriction::get_ban_info() 的禁封信息行
|
||
*
|
||
* @package Jio
|
||
*/
|
||
|
||
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('jio_null_image_url') ? jio_null_image_url('null.svg') : '';
|
||
$logout_url = wp_logout_url(home_url());
|
||
$appeal_link = function_exists('jio_get_user_ban_appeal_link')
|
||
? jio_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('抱歉,您的账号当前处于禁封状态,暂时无法登录', 'jio'); ?></div>
|
||
<div class="mb20 muted-box text-left" style="max-width: 600px; margin: auto;">
|
||
<?php
|
||
echo $ban_set_row(__('用户名', 'jio'), $user->display_name); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- row builder escapes.
|
||
echo $ban_set_row(__('状态', 'jio'), (string) ($info['status'] ?? ''));
|
||
echo $ban_set_row(__('开始时间', 'jio'), (string) ($info['start'] ?? ''));
|
||
echo $ban_set_row(__('结束时间', 'jio'), (string) ($info['end'] ?? ''));
|
||
echo $ban_set_row(__('原因', 'jio'), (string) ($info['reason'] ?? ''));
|
||
echo $ban_set_row(__('说明', 'jio'), (string) ($info['desc'] ?? ''));
|
||
if (!empty($info['no_appeal'])) {
|
||
echo $ban_set_row(__('申诉权限', 'jio'), __('本次禁封您将不能发起申诉', 'jio'));
|
||
echo $ban_set_row(__('禁止申诉说明', 'jio'), (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('退出登录', 'jio'); ?></a>
|
||
<?php echo $appeal_link; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- helper escapes internally. ?>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</main>
|