refactor(assets): vendor 资产迁入标准目录并全仓去除 zibll 标识

- assets/vendor 全量迁移: fontawesome5→assets/fontawesome5, css→assets/css,
  js→assets/js/runtime(避开 14 个同名自有文件), img 合并去重→assets/img,
  fonts→assets/fonts; 删除 assets/vendor
- libs 五个与 widgets/third-party 字节相同的库不重复入库, loader paths 改指向
- 运行时切换: _win.uri=assets 根, loader baseUrl=/js/runtime, enlighter 注入
  路径同步; PHP 7 个引用文件切换并改名 $zibll_*→$runtime_*
- 去品牌: Qinver 头注释/品牌 console.log/演示链接清除, 默认文案中性化
- 功能标识符改名: zib__→aksrt__, zib_ajax→aksrt_ajax, window.zib→
  window.aksrtLegacy, zibllblock/*→aksrtblock/*, .zib-widget→.aksrt-panel,
  .zib-slider→.aksrt-slider, zib_menu_options meta 键等
- 自有 CSS 改名: legacy-utilities/compat-vars/footer shell
- admin SPA 重建; 契约测试同步(路径/断言/文件更名)
- 例外保留: tests/visual 对照环境与 fixtures 前缀(外部 Zibll 产品引用)

验证: php -l 133 个改动文件通过; runtime 86 个 JS node --check 通过;
契约测试 68/70(2 个失败经 stash 对照确认为存量问题)
This commit is contained in:
kate522 committed 2026-08-22 16:16:30 +08:00
1 parent 4f2391fb64
commit 9375b1c30c
591 files changed
+1690 -11041

No files matched your search

+1 -1
View File
@@ -311,7 +311,7 @@ trait DBMigratorPart2 {
) {$charset_collate};";
dbDelta($sql_coupon_usage);
// ── charge_card (zibll-style typed card_pass) ──
// ── charge_card (legacy-style typed card_pass) ──
$sql_charge_card = "CREATE TABLE {$prefix}aksrt_charge_card (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
card VARCHAR(60) NOT NULL DEFAULT '',
+4 -4
View File
@@ -116,7 +116,7 @@ class DomainModel {
public static function default_pay_meta(): array {
return [
'pay_type' => self::PAY_TYPE_NO,
'pay_modo' => '0', // '0' cash | 'points' credits (Zibll)
'pay_modo' => '0', // '0' cash | 'points' credits (legacy)
'price' => 0.0,
'points_price' => 0,
'original_price' => 0.0,
@@ -124,7 +124,7 @@ class DomainModel {
'vip2_price' => 0.0,
'vip1_points' => 0,
'vip2_points' => 0,
'pay_limit' => 0, // 0 all | 1 VIP1+ | 2 VIP2 only (Zibll)
'pay_limit' => 0, // 0 all | 1 VIP1+ | 2 VIP2 only (legacy)
'version' => '',
'size' => '',
'license' => '',
@@ -143,9 +143,9 @@ class DomainModel {
'purchase_limit' => 0,
'free_preview' => '',
'show_sales' => true,
// Zibll: free daily quota overbuy price (cash or points by pay_modo).
// legacy: free daily quota overbuy price (cash or points by pay_modo).
'download_limit_over_price' => 0.0,
// Content cashier: coupon + buyer-facing 推广折扣 (zibll posts_zibpay).
// Content cashier: coupon + buyer-facing 推广折扣 (legacy posts_aksrtpay).
'coupon_s' => false,
'coupon_desc' => '',
'pay_rebate_discount' => 0.0,
+3 -3
View File
@@ -23,13 +23,13 @@ trait FrontSubmitPay {
}
// Only touch pay meta when the form sent pay fields.
$has_pay_payload = isset($data['aksrt_pay']) || isset($data['pay_enabled']) || isset($data['zibpay_s']) || isset($data['pay_type']);
$has_pay_payload = isset($data['aksrt_pay']) || isset($data['pay_enabled']) || isset($data['aksrtpay_s']) || isset($data['pay_type']);
if (!$has_pay_payload) {
return ['success' => true];
}
$raw = is_array($data['aksrt_pay'] ?? null) ? $data['aksrt_pay'] : [];
$enabled = !empty($data['pay_enabled']) || !empty($data['zibpay_s']);
$enabled = !empty($data['pay_enabled']) || !empty($data['aksrtpay_s']);
$existing = function_exists('aksrt_get_pay_meta') ? aksrt_get_pay_meta($post_id) : DomainModel::default_pay_meta();
$meta = is_array($existing) ? $existing : DomainModel::default_pay_meta();
@@ -172,7 +172,7 @@ trait FrontSubmitPay {
if (!is_array($row)) {
continue;
}
// Accept zibll-ish keys + AKSRT keys.
// Accept legacy-ish keys + AKSRT keys.
$url = (string) ($row['url'] ?? $row['link'] ?? '');
$url = esc_url_raw(trim($url));
if ($url === '') {
+4 -4
View File
@@ -27,7 +27,7 @@ class PostMetaBox {
add_action('quick_edit_custom_box', [$this, 'render_quick_edit'], 10, 2);
add_action('bulk_edit_custom_box', [$this, 'render_quick_edit'], 10, 2);
add_action('admin_footer-edit.php', [$this, 'admin_quick_edit_script']);
// Pay-type dropdown on posts list (zibll zibpay_type filter).
// Pay-type dropdown on posts list (legacy aksrtpay_type filter).
add_action('restrict_manage_posts', [$this, 'render_pay_type_filter']);
add_action('pre_get_posts', [$this, 'filter_posts_by_pay_type']);
}
@@ -163,7 +163,7 @@ class PostMetaBox {
<small class="description"><?php esc_html_e('用于列表多图模式,填写附件 ID(逗号分隔)。', 'aksrt'); ?></small>
</p>
<p><strong><?php esc_html_e('侧栏布局(Zibll show_layout)', 'aksrt'); ?></strong></p>
<p><strong><?php esc_html_e('侧栏布局(legacy show_layout)', 'aksrt'); ?></strong></p>
<?php
$show_layout = (string) get_post_meta($post->ID, '_aksrt_show_layout', true);
if (!in_array($show_layout, ['no_sidebar', 'sidebar_left', 'sidebar_right'], true)) {
@@ -351,7 +351,7 @@ class PostMetaBox {
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
if (!current_user_can('edit_post', $post_id)) return;
// Zibll show_layout.
// legacy show_layout.
$show_layout = isset($_POST['aksrt_show_layout']) ? sanitize_key((string) wp_unslash($_POST['aksrt_show_layout'])) : '';
if (!in_array($show_layout, ['no_sidebar', 'sidebar_left', 'sidebar_right'], true)) {
$show_layout = '';
@@ -471,7 +471,7 @@ class PostMetaBox {
}
/**
* Content-pay sales summary for posts list (zibll 销售数据 column parity).
* Content-pay sales summary for posts list (legacy 销售数据 column parity).
*/
private function render_sales_column(int $post_id): void {
if (!function_exists('aksrt_get_pay_meta') || !class_exists('AKSRT\\Core\\DomainModel')) {
+1 -1
View File
@@ -1,6 +1,6 @@
<?php
/**
* 文章导航页设置 AJAX(zibll action/post_navs.php parity).
* 文章导航页设置 AJAX(legacy action/post_navs.php parity).
*
* @package AKSRT
*/
+6 -6
View File
@@ -106,7 +106,7 @@ class ResourceMetaBox {
<option value="0" <?php selected((string) ($meta['pay_modo'] ?? '0'), '0'); ?>><?php esc_html_e('现金', 'aksrt'); ?></option>
<option value="points" <?php selected((string) ($meta['pay_modo'] ?? '0'), 'points'); ?>><?php esc_html_e('积分', 'aksrt'); ?></option>
</select>
<p class="aksrt-pmb__hint"><?php esc_html_e('对齐 zibll pay_modo:现金价或积分价结算。', 'aksrt'); ?></p>
<p class="aksrt-pmb__hint"><?php esc_html_e('对齐 legacy pay_modo:现金价或积分价结算。', 'aksrt'); ?></p>
</div>
</div>
@@ -141,7 +141,7 @@ class ResourceMetaBox {
<option value="1" <?php selected((int) ($meta['pay_limit'] ?? 0), 1); ?>><?php esc_html_e('仅 VIP1 及以上', 'aksrt'); ?></option>
<option value="2" <?php selected((int) ($meta['pay_limit'] ?? 0), 2); ?>><?php esc_html_e('仅 VIP2', 'aksrt'); ?></option>
</select>
<p class="aksrt-pmb__hint"><?php esc_html_e('对齐 zibll pay_limit:限制购买人群(会员专属资源)。', 'aksrt'); ?></p>
<p class="aksrt-pmb__hint"><?php esc_html_e('对齐 legacy pay_limit:限制购买人群(会员专属资源)。', 'aksrt'); ?></p>
</div>
</div>
@@ -302,7 +302,7 @@ class ResourceMetaBox {
<label for="aksrt_pay_limit_over_price"><?php esc_html_e('超额下载补价', 'aksrt'); ?></label>
<div>
<input type="number" id="aksrt_pay_limit_over_price" name="aksrt_pay_limit_over_price" value="<?php echo esc_attr((string) ($meta['download_limit_over_price'] ?? 0)); ?>" min="0" step="0.01">
<p class="aksrt-pmb__hint"><?php esc_html_e('免费日限额用尽后允许购买的补价(现金/积分随支付方式)。0 = 不允许超额购买。对齐 zibll download_limit_over_price。', 'aksrt'); ?></p>
<p class="aksrt-pmb__hint"><?php esc_html_e('免费日限额用尽后允许购买的补价(现金/积分随支付方式)。0 = 不允许超额购买。对齐 legacy download_limit_over_price。', 'aksrt'); ?></p>
</div>
</div>
@@ -314,7 +314,7 @@ class ResourceMetaBox {
<label for="aksrt_pay_coupon_s" style="font-weight:400;padding:0;"><?php esc_html_e('允许使用优惠码(全站开关关闭时仍可对本篇启用)', 'aksrt'); ?></label>
</div>
<textarea id="aksrt_pay_coupon_desc" name="aksrt_pay_coupon_desc" style="min-height:60px;" placeholder="<?php esc_attr_e('本篇优惠码说明,可留空', 'aksrt'); ?>"><?php echo esc_textarea((string) ($meta['coupon_desc'] ?? '')); ?></textarea>
<p class="aksrt-pmb__hint"><?php esc_html_e('对齐 zibll coupon_s / coupon_desc。积分支付不使用优惠码。', 'aksrt'); ?></p>
<p class="aksrt-pmb__hint"><?php esc_html_e('对齐 legacy coupon_s / coupon_desc。积分支付不使用优惠码。', 'aksrt'); ?></p>
</div>
</div>
@@ -322,7 +322,7 @@ class ResourceMetaBox {
<label for="aksrt_pay_rebate_discount"><?php esc_html_e('推广优惠金额', 'aksrt'); ?></label>
<div>
<input type="number" id="aksrt_pay_rebate_discount" name="aksrt_pay_rebate_discount" value="<?php echo esc_attr((string) ($meta['pay_rebate_discount'] ?? 0)); ?>" min="0" step="0.01">
<p class="aksrt-pmb__hint"><?php esc_html_e('有有效推荐人且开启推广返佣时,现金购买可先减此金额(买家侧推广折扣,对齐 zibll pay_rebate_discount)。0 = 不启用。', 'aksrt'); ?></p>
<p class="aksrt-pmb__hint"><?php esc_html_e('有有效推荐人且开启推广返佣时,现金购买可先减此金额(买家侧推广折扣,对齐 legacy pay_rebate_discount)。0 = 不启用。', 'aksrt'); ?></p>
</div>
</div>
@@ -535,7 +535,7 @@ class ResourceMetaBox {
update_post_meta($post_id, DomainModel::PAY_META_KEY, $pay_meta);
// 同步标量字段用于查询(模仿 zibll 的 zibpay_type 同步)
// 同步标量字段用于查询(模仿 legacy 的 aksrtpay_type 同步)
update_post_meta($post_id, DomainModel::PAY_TYPE_KEY, (string) $pay_meta['pay_type']);
$query_price = ($pay_meta['pay_modo'] === 'points')
? (float) $pay_meta['points_price']
+15 -15
View File
@@ -13,14 +13,14 @@ trait ScriptsPart1b {
$base_uri = get_template_directory_uri();
$version = AKSRT_VERSION;
$zibll_uri = $base_uri . '/assets/vendor/zibll';
$fa5_uri = $base_uri . '/assets/vendor/fontawesome5';
$runtime_uri = $base_uri . '/assets';
$fa5_uri = $base_uri . '/assets/fontawesome5';
// Zibll's frontend runtime is the single public dependency stack.
// The legacy frontend runtime is the single public dependency stack.
wp_deregister_script('jquery');
wp_register_script(
'jquery',
$zibll_uri . '/js/libs/jquery.min.js',
$runtime_uri . '/js/runtime/libs/jquery.min.js',
[],
'1.9.1',
false
@@ -35,10 +35,10 @@ trait ScriptsPart1b {
false
);
wp_enqueue_style('_bootstrap', $zibll_uri . '/css/bootstrap.min.css', [], '3.4.1');
wp_enqueue_style('_bootstrap', $runtime_uri . '/css/bootstrap.min.css', [], '3.4.1');
wp_enqueue_style('_fontawesome', $fa5_uri . '/css/all.min.css', [], '5.15.4');
wp_enqueue_style('_main', $zibll_uri . '/css/main.min.css', ['_bootstrap', '_fontawesome'], $version);
wp_enqueue_script('bootstrap', $zibll_uri . '/js/libs/bootstrap.min.js', ['jquery'], '3.4.1', true);
wp_enqueue_style('_main', $runtime_uri . '/css/main.min.css', ['_bootstrap', '_fontawesome'], $version);
wp_enqueue_script('bootstrap', $runtime_uri . '/js/runtime/libs/bootstrap.min.js', ['jquery'], '3.4.1', true);
wp_enqueue_style('aksrt-style', get_stylesheet_uri(), ['_main'], $version);
$lazy_animation = class_exists('\AKSRT\Settings\Settings')
@@ -103,7 +103,7 @@ trait ScriptsPart1b {
);
};
// AKSRT domain styles load after Zibll main.css. The old aggregate is
// AKSRT domain styles load after legacy main.css. The old aggregate is
// intentionally not used because it contains the removed navigation CSS.
$enqueue_module('base');
$enqueue_module('header-userbox');
@@ -154,7 +154,7 @@ trait ScriptsPart1b {
);
}
// VIP modal (zibll .pay-vip)
// VIP modal (legacy .pay-vip)
if ($vip_on) {
$vip_css = get_template_directory() . '/assets/css/frontend/vip-modal.css';
if (file_exists($vip_css)) {
@@ -243,7 +243,7 @@ trait ScriptsPart1b {
if ($is_single_post) {
// Prefer discrete enqueues over CSS @import (cache-bust + parallel load).
$single_parts = [
'zibll-utilities',
'legacy-utilities',
'single-post/shell',
'single-post/content',
'single-post/code-blocks',
@@ -269,7 +269,7 @@ trait ScriptsPart1b {
// Keep aggregator handle for any third-party deps that target it.
$enqueue_module('single-post');
$enqueue_module('post-card'); // 相关推荐使用 post-card 局部样式
// Comments pack (zibll 1:1 discrete files).
// Comments pack (legacy 1:1 discrete files).
$comment_parts = ['comments/shell', 'comments/mobile-item'];
$comment_dep = $deps[0] ?? $core_dep;
foreach ($comment_parts as $part) {
@@ -498,8 +498,8 @@ trait ScriptsPart1b {
);
}
// 网址导航页(zibll links.php)
// 文章导航页(zibll postsnavs.php)
// 网址导航页(legacy links.php)
// 文章导航页(legacy postsnavs.php)
if (is_page_template('templates/pages/page-posts-navs.php')) {
$page_navs_js = get_template_directory() . '/assets/js/page-navs.js';
if (file_exists($page_navs_js)) {
@@ -682,7 +682,7 @@ trait ScriptsPart1b {
$enqueue_module('pages');
}
// Resource archives use the canonical Zibll article-card stylesheet.
// Resource archives use the canonical legacy article-card stylesheet.
if ($is_resource_archive || $is_single_resource || ($is_cms_mode && ($is_home_or_archive || $is_static_page) && !$is_fixed_homepage)) {
if (!$is_home_or_archive && !$is_single_post && !$is_static_page) {
$enqueue_module('post-card');
@@ -779,7 +779,7 @@ trait ScriptsPart1b {
);
}
// Badges UI: user center + public profile (zibll medal modal/list).
// Badges UI: user center + public profile (legacy medal modal/list).
if (class_exists('\AKSRT\User\Badges') && \AKSRT\User\Badges::enabled()) {
$is_badge_surface = $is_profile_page
|| is_author()
+12 -12
View File
@@ -32,16 +32,16 @@ trait ScriptsPart1c {
$needs_post_list_media = wp_style_is('aksrt-post-card', 'enqueued');
$zibll_uri = $base_uri . '/assets/vendor/zibll';
$zibll_loader_path = get_template_directory() . '/assets/vendor/zibll/js/loader.js';
$zibll_main_path = get_template_directory() . '/assets/vendor/zibll/js/main.min.js';
$zibll_loader_version = file_exists($zibll_loader_path) ? (string) filemtime($zibll_loader_path) : $version;
$zibll_runtime_version = file_exists($zibll_main_path) ? (string) filemtime($zibll_main_path) : $version;
$runtime_uri = $base_uri . '/assets';
$runtime_loader_path = get_template_directory() . '/assets/js/runtime/loader.js';
$runtime_main_path = get_template_directory() . '/assets/js/runtime/main.min.js';
$runtime_loader_version = file_exists($runtime_loader_path) ? (string) filemtime($runtime_loader_path) : $version;
$runtime_version = file_exists($runtime_main_path) ? (string) filemtime($runtime_main_path) : $version;
wp_enqueue_script(
'loader_js',
$zibll_uri . '/js/loader.js',
$runtime_uri . '/js/runtime/loader.js',
['jquery', 'bootstrap'],
$zibll_loader_version,
$runtime_loader_version,
true
);
wp_localize_script(
@@ -50,8 +50,8 @@ trait ScriptsPart1c {
[
'views' => '',
'www' => home_url('/'),
'uri' => $zibll_uri,
'ver' => $zibll_runtime_version,
'uri' => $runtime_uri,
'ver' => $runtime_version,
'pay_mark' => '¥',
'pay_currency_unit' => __('元', 'aksrt'),
'imgbox' => false,
@@ -108,7 +108,7 @@ trait ScriptsPart1c {
true
);
// AKSRT-only modules register after the Zibll loader; navigation is owned by main.min.js.
// AKSRT-only modules register after the legacy loader; navigation is owned by main.min.js.
wp_enqueue_script(
'aksrt-rehydrate',
$base_uri . '/assets/js/rehydrate.js',
@@ -170,7 +170,7 @@ trait ScriptsPart1c {
'aksrt-core-comments' => 'comments.js',
'aksrt-core-comment-fixed' => 'comment-fixed-input.js',
'aksrt-core-comment-move' => 'comment-move-form.js',
// Shared zibll-parity list/modal engines (before pagination consumers).
// Shared legacy-parity list/modal engines (before pagination consumers).
'aksrt-core-ajax-list' => 'ajax-list.js',
'aksrt-core-modal-telemetry' => 'modal-telemetry.js',
'aksrt-core-request' => 'request.js',
@@ -489,7 +489,7 @@ trait ScriptsPart1c {
}
// Page navigation (TOC highlight, smooth scroll, doc search)
// 评论回复脚本:由 assets/js/core/comment-move-form.js 提供(zibll 同款机制),
// 评论回复脚本:由 assets/js/core/comment-move-form.js 提供(legacy 同款机制),
// 不加载 WP comment-reply,避免两套 moveForm 冲突。
$runtime_routes = $this->resolve_frontend_routes();
+1 -1
View File
@@ -125,7 +125,7 @@ trait ScriptsPart2 {
$classes[] = 'auth-page';
}
// Zibll site-layout-1/2/3 (no sidebar / right / left).
// legacy site-layout-1/2/3 (no sidebar / right / left).
if (function_exists('aksrt_body_layout_classes')) {
foreach (aksrt_body_layout_classes() as $layout_class) {
$classes[] = $layout_class;
+1 -1
View File
@@ -11,7 +11,7 @@ trait SetupPart2 {
/**
* 隐藏默认WordPress菜单项目 + zibll 风格运营菜单分隔线
* 隐藏默认WordPress菜单项目 + 原主题风格运营菜单分隔线
*/
public function hide_default_menus(): void {
// 移除评论默认菜单(已移除该操作以恢复 Comments 菜单)
+2 -2
View File
@@ -29,7 +29,7 @@ class Shortcodes {
add_shortcode('reply', [$this, 'render_reply']);
add_shortcode('vip', [$this, 'render_vip']);
add_shortcode('payshow', [$this, 'render_payshow']);
// Zibll-compatible hidecontent alias (type=payshow|reply|login|vip|password|…)
// legacy-compatible hidecontent alias (type=payshow|reply|login|vip|password|…)
add_shortcode('hidecontent', [$this, 'render_hidecontent']);
add_shortcode('content', [$this, 'render_content_gate']);
// 文章归档 / 个人资料卡 → Templates 模板
@@ -139,7 +139,7 @@ class Shortcodes {
}
/**
* Zibll [hidecontent type="payshow|reply|login|…"]…[/hidecontent]
* legacy [hidecontent type="payshow|reply|login|…"]…[/hidecontent]
*/
public function render_hidecontent(array $atts = [], string $content = ''): string {
$atts = shortcode_atts([