/** * ongoing member expired */ function mgm_ongoing_member_expired($user, $member, $spacks_obj, $data, $other_purchases = false, $process_inactive_users = false) { // only check for Active members iss#645 // if($member->status != MGM_STATUS_ACTIVE) return $member; // find expire date $expire_date = $member->expire_date; // duration exprs $duration_exprs = $spacks_obj->get_duration_exprs(); // active lifetime user: // $non_date_expr = array('l','dr'); $non_date_expr = array_keys($spacks_obj->get_duration_types('non_date_expr')); // log // mgm_log('non_date_expr: '. print_r($non_date_expr, true), __FUNCTION__); // exit lifetime users if (in_array($member->duration_type, $non_date_expr) || empty($expire_date)) { // before exit update life time users if wrongly processed earlier if ($member->duration_type == 'l' && $member->status == MGM_STATUS_EXPIRED) { // set new status $member->status = MGM_STATUS_ACTIVE; // status string $member->status_str = __('Life time membership extended', 'mgm'); // save if ($other_purchases) { mgm_save_another_membership_fields($member, $user->ID); } else { $member->save(); } // log // mgm_log(sprintf('life time member %d reactivated: %s', $user->ID, $member->status), __FUNCTION__); } // exit return $member; // lifetime and date_range } // check on expire date // days to expire $date_diff = strtotime($expire_date) - $data['current_timestamp']; $days_to_expire = floor($date_diff / (60 * 60 * 24)); $days_to_expire2 = abs($date_diff / (60 * 60 * 24)); $date_format_time = mgm_get_date_format('date_format_time'); // log /*mgm_log(sprintf('expire users: user: %d, days_to_expire1: %d, days_to_expire2: %d, expire_date: %s, current_date: %s', $user->ID, $days_to_expire, $days_to_expire2, $expire_date, date('Y-m-d H:i:s', $data['current_timestamp'])), (__FUNCTION__ . '_user_' . $user->ID));*/ // days match, support for expired check, negative days // commented the below line because the membership was expiring one day early. if ($days_to_expire <= 0) { // check pack $subs_pack = array(); // get pack if (isset($member->pack_id) && (int) $member->pack_id > 0) { $subs_pack = $spacks_obj->get_pack($member->pack_id); } // check pack if (empty($subs_pack)) { // fetch from old data $subs_pack = $spacks_obj->validate_pack($member->amount, $member->duration, $member->duration_type, $member->membership_type); } // ok if (isset($subs_pack['id'])) { //issue#: 478 $num_cycles = isset($member->active_num_cycles) && !empty($member->active_num_cycles) ? $member->active_num_cycles : $subs_pack['num_cycles']; // lifetime ongoing/fixed cycle ongoing // issue #: 418 if ($num_cycles == 0 || $num_cycles > 1 && (int) $member->rebilled <= (int) $num_cycles) { // 100 to dynamic // make sure scheduler considers it after expiry date only: if ($days_to_expire2 >= 1 && $days_to_expire < 0) { //This will check the next day after expiry date to consider payments happened on expiry date as well // member reached rebill cycle, expire now // set expired status if ($num_cycles > 1 && (int) $member->rebilled == $num_cycles) { // old status $old_status = $member->status; // set new status $member->status = $new_status = MGM_STATUS_EXPIRED; // set status $member->status_str = sprintf(__('Membership expired on %s - rebill cycle completed', 'mgm'), date($date_format_time, $data['current_timestamp'])); // reassign expiry membership pack if exists: issue#: 535 $member = apply_filters('mgm_reassign_member_subscription', $user->ID, $member, 'EXPIRE', true); } else { // #767, for ongoing membership, set Inactive members as Active, depends on settings if ($num_cycles == 0) { // change, checking all status to allow expire date extend for Active users // paid users if (!empty($member->last_pay_date)) { // change status for Inactive only if ($member->status == MGM_STATUS_NULL) { // inactive // only when set to process inactive user if ($process_inactive_users == true) { // old status $old_status = $member->status; // set new status $member->status = $new_status = MGM_STATUS_ACTIVE; // status string $member->status_str = __('Last payment cycle processed successfully', 'mgm'); } } elseif ($member->status == MGM_STATUS_ACTIVE) { // active // current cycle expire date if (!empty($member->expire_date)) { // date add $date_add = sprintf('+ %d %s', $subs_pack['duration'], $duration_exprs[$subs_pack['duration_type']]); // new expire date, calc by cycle so pack is used, $new_expire_date = mgm_get_current_rebill_cycle_expiry_date($member->expire_date, $date_add); // expire date should not overlap, #1223 if (strtotime($new_expire_date) > strtotime($member->expire_date)) { // set $member->expire_date = $new_expire_date; // last pay if (!empty($member->last_pay_date)) { $member->last_pay_date = date('Y-m-d', strtotime(str_replace('+', '-', $date_add), strtotime($member->expire_date))); } // status string $member->status_str = __('Last payment cycle processed successfully - membership expire extended using pack', 'mgm'); } } } // end paid active } else { // unpaid users // old status if ($member->status != MGM_STATUS_NULL) { // copy $old_status = $member->status; // set new status $member->status = $new_status = MGM_STATUS_NULL; // set status $member->status_str = __('Last payment incomplete', 'mgm'); } } // end unpaid } // end ongoing } // update member if ($other_purchases) { mgm_save_another_membership_fields($member, $user->ID); } else { $member->save(); } // action if (isset($new_status)) { do_action('mgm_user_status_change', $user->ID, $new_status, $old_status, 'schedular_reset_ongoing_memberships', $member->pack_id); } } } elseif ((int) $num_cycles == 1 && $data['current_timestamp'] > strtotime($expire_date)) { //one-time billing,double check for date calc bug #1126 // old status $old_status = $member->status; // set new status $member->status = $new_status = MGM_STATUS_EXPIRED; // set status $member->status_str = sprintf(__('Membership expired on %s - onetime billing completed', 'mgm'), date($date_format_time, $data['current_timestamp'])); // reassign expiry membership pack if exists: issue#: 535 $member = apply_filters('mgm_reassign_member_subscription', $user->ID, $member, 'EXPIRE', true); // update member if ($other_purchases) { mgm_save_another_membership_fields($member, $user->ID); } else { $member->save(); } // remove role from user: mgm_remove_userroles($user->ID, $member); // action do_action('mgm_user_status_change', $user->ID, $new_status, $old_status, 'schedular_reset_ongoing_memberships', $member->pack_id); } } else { // pack not found manual update, expire users if days negative if (empty($subs_pack) && $days_to_expire <= 0) { // old status $old_status = $member->status; // set new status $member->status = $new_status = MGM_STATUS_EXPIRED; // set status $member->status_str = sprintf(__('Membership expired on %s - no pack found', 'mgm'), date($date_format_time, $data['current_timestamp'])); // update member if ($other_purchases) { mgm_save_another_membership_fields($member, $user->ID); } else { $member->save(); } // remove role from user: mgm_remove_userroles($user->ID, $member); // action do_action('mgm_user_status_change', $user->ID, $new_status, $old_status, 'schedular_reset_ongoing_memberships', $member->pack_id); } } } // return return $member; }
private function _save_member_object($user_id, $member, $previous_membership) { // pack $pack = mgm_get_class('subscription_packs')->get_pack($member->pack_id); // multiple_level_purchase $multiple_level_purchase = bool_from_yn(mgm_get_class('system')->get_setting('enable_multiple_level_purchase')); // update options $update_options = mgm_post_var('update_opt'); // new level if (in_array('subscription', $update_options) && mgm_post_var('insert_new_level') == 'new') { // save flag $save = true; // guest if ($previous_membership->membership_type == "guest" && $previous_membership->amount == 0) { // check selected membership already selected: if ($previous_membership->membership_type == $member->membership_type) { $save = false; } } else { // old $old_subtypes = mgm_get_subscribed_membershiptypes($user_id); //check selected membership already selected: if (in_array($member->membership_type, $old_subtypes)) { $save = false; } else { if (isset($member->custom_fields)) { unset($member->custom_fields); } if (isset($member->other_membership_types) || empty($member->other_membership_types)) { unset($member->other_membership_types); } } } // save if ($save) { // multiple if ($multiple_level_purchase) { mgm_save_another_membership_fields($member, $user_id); } else { $member->save(); } } // assign role: $change_order = isset($_POST['highlight_role']) && isset($_POST['upd_subscription_pack']) && $_POST['upd_subscription_pack'] != '-' ? true : false; // set $obj_role = new mgm_roles(); $obj_role->add_user_role($user_id, $pack['role'], $change_order); } else { if (isset($_POST['ps_mem'][$user_id]) && !empty($_POST['ps_mem'][$user_id])) { if (isset($member->custom_fields)) { unset($member->custom_fields); } if (isset($member->other_membership_types) || empty($member->other_membership_types)) { unset($member->other_membership_types); } $prev_index = isset($_POST['ps_mem_index'][$user_id][$previous_membership->membership_type]) ? $_POST['ps_mem_index'][$user_id][$previous_membership->membership_type] : null; //uncomment mgm_save_another_membership_fields($member, $user_id, $prev_index); } else { $member->save(); } if ($member->status == MGM_STATUS_EXPIRED) { //remove role from user: mgm_remove_userroles($user_id, $member); } else { //if($member->membership_type != $previous_membership->membership_type) {//check this condition //mgm role object: $change_order = isset($_POST['highlight_role']) && isset($_POST['upd_subscription_pack']) && $_POST['upd_subscription_pack'] != '-' ? true : false; $obj_role = new mgm_roles(); //update role/change order $obj_role->add_user_role($user_id, $pack['role'], $change_order); //} } } return true; }