render_commerce_column($user_id);
}
if ($column_name !== 'aksrt_credits_balance') {
return $output;
}
if (!class_exists('\AKSRT\Credits\Credits')) {
return '—';
}
$balance = \AKSRT\Credits\Credits::balance($user_id);
return '' . esc_html((string) $balance) . '';
}
/**
* 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[] = 'VIP' . esc_html((string) $lv) . '';
}
}
if (class_exists('\AKSRT\Payment\Revenue')) {
$stats = \AKSRT\Payment\Revenue::get_instance()->get_stats($user_id);
$cash = (array) ($stats['cash'] ?? []);
$points = (array) ($stats['points'] ?? []);
if ((float) ($cash['total'] ?? 0) > 0 || (float) ($cash['pending'] ?? 0) > 0) {
$bits[] = sprintf(
/* translators: 1 total 2 pending */
esc_html__('现金分成 ¥%1$s(待结 ¥%2$s)', 'aksrt'),
number_format((float) ($cash['total'] ?? 0), 2),
number_format((float) ($cash['pending'] ?? 0), 2)
);
}
if ((float) ($points['total'] ?? 0) > 0 || (float) ($points['pending'] ?? 0) > 0) {
$bits[] = sprintf(
/* translators: 1 total 2 pending */
esc_html__('积分分成 %1$s(待结 %2$s)', 'aksrt'),
number_format((float) ($points['total'] ?? 0), 0),
number_format((float) ($points['pending'] ?? 0), 0)
);
}
if ($bits) {
$bits[] = '' . esc_html__('分成明细', 'aksrt') . '';
}
}
if (class_exists('\AKSRT\Payment\Rebate')) {
$list = \AKSRT\Payment\Rebate::get_instance()->get_list(['user_id' => $user_id, 'limit' => 1]);
$total_r = (int) ($list['total'] ?? 0);
if ($total_r > 0) {
$bits[] = sprintf(esc_html__('返佣 %d 笔', 'aksrt'), $total_r);
$bits[] = '' . esc_html__('返佣', 'aksrt') . '';
}
}
$bits[] = '' . esc_html__('下载记录', 'aksrt') . '';
$bits[] = '' . esc_html__('订单', 'aksrt') . '';
if (!$bits) {
return '—';
}
return '
' . implode('
', $bits) . '
';
}
public function make_balance_sortable(array $columns): array {
$columns['aksrt_credits_balance'] = 'aksrt_credits_balance';
return $columns;
}
public function sort_users_by_credits($query): void {
if (!is_admin()) {
return;
}
if ($query->get('orderby') !== 'aksrt_credits_balance') {
return;
}
$query->set('meta_key', 'aksrt_credits');
$query->set('orderby', 'meta_value_num');
}
// ========== 用户列表:行操作 ==========
public function add_row_actions(array $actions, \WP_User $user): array {
if (!$this->can_manage_credits()) {
return $actions;
}
$edit_url = get_edit_user_link($user->ID);
if ($edit_url) {
$currency_name = class_exists('\AKSRT\Settings\Settings') ? \AKSRT\Settings\Settings::get_currency_name() : __('积分', 'aksrt');
$actions['aksrt_edit_credits'] = sprintf(
'%s',
esc_url($edit_url),
esc_html(sprintf(__('调整%s', 'aksrt'), $currency_name))
);
}
$actions['aksrt_user_dl_logs'] = sprintf(
'%s',
esc_url(admin_url('admin.php?page=aksrt_download_logs&user_id=' . (int) $user->ID)),
esc_html__('下载记录', 'aksrt')
);
return $actions;
}
// ========== 用户编辑页:积分管理区块 ==========
public function render_user_credits_section(\WP_User $user): void {
if (!class_exists('\AKSRT\Credits\Credits')) {
return;
}
$balance = \AKSRT\Credits\Credits::balance((int) $user->ID);
$can_manage = $this->can_manage_credits();
$currency_name = class_exists('\AKSRT\Settings\Settings') ? \AKSRT\Settings\Settings::get_currency_name() : __('积分', 'aksrt');
?>
(int) $user->ID, 'page' => 1, 'per_page' => 20]);
$items = $log['items'] ?? [];
$reason_labels = [
'register' => __('注册赠送', 'aksrt'),
'signin' => __('每日签到', 'aksrt'),
'comment' => __('评论奖励', 'aksrt'),
'referral' => __('推广注册奖励', 'aksrt'),
'referral_new_user' => __('推广注册新用户奖励', 'aksrt'),
'download' => __('下载消费', 'aksrt'),
'admin' => __('管理员调整', 'aksrt'),
];
?>
|
|
|
|
|
|
|
|
0 ? '+' : '') . $delta); ?>
|
|
can_manage_credits() || !class_exists('\AKSRT\Credits\Credits')) {
return;
}
if (!current_user_can('edit_user', $user_id)) {
return;
}
if (!isset($_POST['_aksrt_credits_nonce'])) {
return;
}
$nonce = sanitize_text_field((string) $_POST['_aksrt_credits_nonce']);
if (!wp_verify_nonce($nonce, 'aksrt_user_credits_adjust_' . $user_id)) {
return;
}
$delta = isset($_POST['aksrt_credits_delta']) ? (int) $_POST['aksrt_credits_delta'] : 0;
$reason = isset($_POST['aksrt_credits_reason']) ? sanitize_text_field((string) wp_unslash($_POST['aksrt_credits_reason'])) : '';
if ($delta === 0) {
return;
}
$currency_name = class_exists('\AKSRT\Settings\Settings') ? \AKSRT\Settings\Settings::get_currency_name() : __('积分', 'aksrt');
if ($reason === '') {
set_transient('aksrt_admin_notice_' . get_current_user_id(), [[
'type' => 'error',
'msg' => sprintf(__('调整%s时请填写原因。', 'aksrt'), $currency_name),
]], 30);
return;
}
if ($delta > 0) {
$result = \AKSRT\Credits\Credits::add($user_id, $delta, 'admin', ['type' => 'user', 'id' => get_current_user_id()], $reason);
} else {
$result = \AKSRT\Credits\Credits::deduct($user_id, abs($delta), 'admin', ['type' => 'user', 'id' => get_current_user_id()], $reason);
}
if (is_wp_error($result)) {
set_transient('aksrt_admin_notice_' . get_current_user_id(), [[
'type' => 'error',
'msg' => $result->get_error_message(),
]], 30);
return;
}
set_transient('aksrt_admin_notice_' . get_current_user_id(), [[
'type' => 'success',
'msg' => sprintf(__('%s调整成功,当前余额:%d', 'aksrt'), $currency_name, (int) $result),
]], 30);
}
}