feat(admin,forum): download logs, hidecontent, VIP tiers, users commerce

Add aksrt_download_logs workbench, zibll hidecontent alias + topic
partial-hide path, VIP1/VIP2 price matrix for topics, and users list
commerce snapshot column with deep links.
This commit is contained in:
kate522 committed 2026-07-15 11:13:48 +08:00
1 parent cf6ad0e972
commit 8d31e65ccd
14 files changed
+611 -32

No files matched your search

@@ -44,10 +44,14 @@ class AKSRT_User_Credits_Admin {
public function add_balance_column(array $columns): array {
$currency_name = class_exists('AKSRT_Settings') ? AKSRT_Settings::get_currency_name() : __('积分', 'aksrt');
$columns['aksrt_credits_balance'] = sprintf(__('%s余额', 'aksrt'), $currency_name);
$columns['aksrt_user_commerce'] = __('资产/分成', 'aksrt');
return $columns;
}
public function render_balance_column(string $output, string $column_name, int $user_id): string {
if ($column_name === 'aksrt_user_commerce') {
return $this->render_commerce_column($user_id);
}
if ($column_name !== 'aksrt_credits_balance') {
return $output;
}
@@ -59,6 +63,55 @@ class AKSRT_User_Credits_Admin {
return '<strong>' . esc_html((string) $balance) . '</strong>';
}
/**
* Compact commerce snapshot: VIP, revenue, rebate, download logs link.
*/
private function render_commerce_column(int $user_id): string {
$bits = [];
if (function_exists('aksrt_get_user_vip_level')) {
$lv = (int) aksrt_get_user_vip_level($user_id);
if ($lv > 0) {
$bits[] = '<span class="aksrt-vip-badge">VIP' . esc_html((string) $lv) . '</span>';
}
}
if (class_exists('AKSRT_Revenue')) {
$stats = AKSRT_Revenue::get_instance()->get_stats($user_id);
$pending = (float) ($stats['pending'] ?? 0);
$total = (float) ($stats['total'] ?? 0);
if ($total > 0 || $pending > 0) {
$bits[] = sprintf(
/* translators: 1 total 2 pending */
esc_html__('分成 ¥%1$s(待结 ¥%2$s)', 'aksrt'),
number_format($total, 2),
number_format($pending, 2)
);
$bits[] = '<a href="' . esc_url(admin_url('admin.php?page=aksrt_income')) . '">' . esc_html__('明细', 'aksrt') . '</a>';
}
}
if (class_exists('AKSRT_Rebate')) {
$list = AKSRT_Rebate::get_instance()->get_list(['user_id' => $user_id, 'limit' => 1]);
$total_r = (int) ($list['total'] ?? 0);
if ($total_r > 0) {
$sum = 0.0;
// Lightweight sum via stats if available; else show count.
if (method_exists(AKSRT_Rebate::get_instance(), 'get_stats')) {
// global stats only — show link with count
$bits[] = sprintf(esc_html__('返佣 %d 笔', 'aksrt'), $total_r);
} else {
$bits[] = sprintf(esc_html__('返佣 %d 笔', 'aksrt'), $total_r);
}
$bits[] = '<a href="' . esc_url(admin_url('admin.php?page=aksrt_rebate')) . '">' . esc_html__('返佣', 'aksrt') . '</a>';
}
}
$bits[] = '<a href="' . esc_url(admin_url('admin.php?page=aksrt_download_logs&user_id=' . $user_id)) . '">' . esc_html__('下载记录', 'aksrt') . '</a>';
$bits[] = '<a href="' . esc_url(admin_url('admin.php?page=aksrt_orders&s=' . $user_id)) . '">' . esc_html__('订单', 'aksrt') . '</a>';
if (!$bits) {
return '—';
}
return '<div style="font-size:12px;line-height:1.5;">' . implode('<br>', $bits) . '</div>';
}
public function make_balance_sortable(array $columns): array {
$columns['aksrt_credits_balance'] = 'aksrt_credits_balance';
return $columns;
@@ -91,6 +144,11 @@ class AKSRT_User_Credits_Admin {
esc_html(sprintf(__('调整%s', 'aksrt'), $currency_name))
);
}
$actions['aksrt_user_dl_logs'] = sprintf(
'<a href="%s">%s</a>',
esc_url(admin_url('admin.php?page=aksrt_download_logs&user_id=' . (int) $user->ID)),
esc_html__('下载记录', 'aksrt')
);
return $actions;
}