feat(pay): zibll-style pay_modo/points/pay_limit, VIP quota, and local speed stream
Expand post pay meta with cash/points modes and member purchase limits, enforce free-download daily quotas, and stream local files with VIP speed caps while keeping remote links on redirect.
This commit is contained in:
1 parent
8b50687e9d
commit
1c8e4d3919
6 files changed
+311
-33
No files matched your search
@@ -72,6 +72,16 @@ class AKSRT_Content_Visibility {
|
||||
}
|
||||
|
||||
$has_free_access = $price <= 0 && $pay_type !== AKSRT_Domain_Model::PAY_TYPE_VIP;
|
||||
// Prefer points_price when pay_modo=points.
|
||||
if (is_array($pay_meta) && (($pay_meta['pay_modo'] ?? '0') === 'points')) {
|
||||
$price = (float) ($pay_meta['points_price'] ?? $price);
|
||||
$state['price'] = $price;
|
||||
$has_free_access = $price <= 0 && $pay_type !== AKSRT_Domain_Model::PAY_TYPE_VIP;
|
||||
}
|
||||
$pay_limit = (int) ($pay_meta['pay_limit'] ?? 0);
|
||||
if (!in_array($pay_limit, [0, 1, 2], true)) {
|
||||
$pay_limit = 0;
|
||||
}
|
||||
$has_paid_order = false;
|
||||
|
||||
if ($uid > 0 && class_exists('AKSRT_Order')) {
|
||||
@@ -83,14 +93,50 @@ class AKSRT_Content_Visibility {
|
||||
}
|
||||
|
||||
$has_vip_access = false;
|
||||
$user_vip_level = 0;
|
||||
if ($uid > 0) {
|
||||
if (function_exists('aksrt_get_user_vip_level')) {
|
||||
$user_vip_level = aksrt_get_user_vip_level($uid);
|
||||
}
|
||||
if (function_exists('aksrt_is_vip_exempt') && aksrt_is_vip_exempt($uid)) {
|
||||
$has_vip_access = true;
|
||||
} elseif (function_exists('aksrt_is_vip') && $pay_type === AKSRT_Domain_Model::PAY_TYPE_VIP) {
|
||||
$has_vip_access = aksrt_is_vip($uid);
|
||||
$user_vip_level = max($user_vip_level, 2);
|
||||
} elseif (function_exists('aksrt_is_vip') && ($pay_type === AKSRT_Domain_Model::PAY_TYPE_VIP || $pay_limit > 0)) {
|
||||
$has_vip_access = $user_vip_level >= max(1, $pay_limit);
|
||||
} elseif ($user_vip_level > 0) {
|
||||
$has_vip_access = $pay_limit <= 0 || $user_vip_level >= $pay_limit;
|
||||
}
|
||||
}
|
||||
|
||||
// Member-only purchase restriction (Zibll pay_limit).
|
||||
if ($pay_limit > 0 && $pay_type !== AKSRT_Domain_Model::PAY_TYPE_NO) {
|
||||
$state['need_vip'] = true;
|
||||
$state['pay_limit'] = $pay_limit;
|
||||
$allowed_member = $has_vip_access && $user_vip_level >= $pay_limit;
|
||||
if ($pay_type === AKSRT_Domain_Model::PAY_TYPE_DOWNLOAD) {
|
||||
$download_cost = function_exists('aksrt_resource_download_cost')
|
||||
? (int) aksrt_resource_download_cost($resource_post)
|
||||
: (int) ceil($price);
|
||||
$state['download_cost'] = max(0, $download_cost);
|
||||
$state['need_login'] = $uid <= 0;
|
||||
$state['need_purchase'] = $allowed_member && $state['download_cost'] > 0 && !$has_paid_order;
|
||||
$state['has_paid_access'] = $allowed_member && ($has_paid_order || $state['download_cost'] <= 0 || $has_vip_access);
|
||||
$state['can_view'] = true;
|
||||
$state['can_download'] = $allowed_member && ($uid > 0) && ($has_paid_order || $state['download_cost'] <= 0 || $has_vip_access);
|
||||
if (!$allowed_member) {
|
||||
$state['can_download'] = false;
|
||||
$state['has_paid_access'] = false;
|
||||
}
|
||||
return $state;
|
||||
}
|
||||
|
||||
$state['has_paid_access'] = $allowed_member || $has_paid_order;
|
||||
$state['can_view'] = $state['has_paid_access'];
|
||||
$state['can_download'] = false;
|
||||
$state['need_purchase'] = !$state['has_paid_access'];
|
||||
return $state;
|
||||
}
|
||||
|
||||
if ($pay_type === AKSRT_Domain_Model::PAY_TYPE_DOWNLOAD) {
|
||||
$download_cost = function_exists('aksrt_resource_download_cost')
|
||||
? (int) aksrt_resource_download_cost($resource_post)
|
||||
|
||||
Reference in new issue
Block a user