fix(vip): preserve layered membership expirations
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -515,6 +515,16 @@ trait VipServicePurchase {
|
||||
|
||||
$previous_level = (int) get_user_meta($user_id, 'aksrt_vip_level', true);
|
||||
$previous_expiry = (int) get_user_meta($user_id, 'aksrt_vip_expires', true);
|
||||
$finite_duration = $time > 0 || $days > 0;
|
||||
if ($previous_level > 0 && $previous_expiry === 0 && $level > $previous_level && $finite_duration) {
|
||||
// Preserve a permanent lower tier while a finite higher-tier upgrade is active.
|
||||
update_user_meta($user_id, 'aksrt_vip_base_level', $previous_level);
|
||||
update_user_meta($user_id, 'aksrt_vip_base_expires', 0);
|
||||
} else {
|
||||
// Only a finite higher-tier upgrade may keep a layered base membership.
|
||||
delete_user_meta($user_id, 'aksrt_vip_base_level');
|
||||
delete_user_meta($user_id, 'aksrt_vip_base_expires');
|
||||
}
|
||||
$fulfilled = false;
|
||||
// unit upgrade: raise level only, keep current expiry (zibll).
|
||||
if ($upgrade_mode === 'unit') {
|
||||
@@ -574,14 +584,15 @@ trait VipServicePurchase {
|
||||
|
||||
if ($days <= 0) {
|
||||
// Permanent.
|
||||
delete_user_meta($user_id, 'aksrt_vip_base_level');
|
||||
delete_user_meta($user_id, 'aksrt_vip_base_expires');
|
||||
update_user_meta($user_id, 'aksrt_vip_expires', 0);
|
||||
return;
|
||||
}
|
||||
|
||||
$current_exp = (int) get_user_meta($user_id, 'aksrt_vip_expires', true);
|
||||
if ($current_exp === 0 && $current_level > 0) {
|
||||
// Already permanent — keep permanent.
|
||||
return;
|
||||
if ($current_exp === 0 && $current_level > 0 && $level <= $current_level) {
|
||||
return; // keep an existing permanent level when not upgrading it
|
||||
}
|
||||
$base = max($current_exp, time());
|
||||
update_user_meta($user_id, 'aksrt_vip_expires', $base + ($days * DAY_IN_SECONDS));
|
||||
@@ -603,13 +614,15 @@ trait VipServicePurchase {
|
||||
delete_user_meta($user_id, 'aksrt_vip_level_expired');
|
||||
|
||||
if ($time <= 0) {
|
||||
delete_user_meta($user_id, 'aksrt_vip_base_level');
|
||||
delete_user_meta($user_id, 'aksrt_vip_base_expires');
|
||||
update_user_meta($user_id, 'aksrt_vip_expires', 0);
|
||||
return;
|
||||
}
|
||||
|
||||
$current_exp = (int) get_user_meta($user_id, 'aksrt_vip_expires', true);
|
||||
if ($current_exp === 0 && $current_level > 0) {
|
||||
return; // keep permanent
|
||||
if ($current_exp === 0 && $current_level > 0 && $level <= $current_level) {
|
||||
return; // keep an existing permanent level when not upgrading it
|
||||
}
|
||||
$base = max($current_exp, time());
|
||||
$modifier = $unit === 'month'
|
||||
|
||||
Reference in New Issue
Block a user