function _cancel_membership($user_id, $redirect = false) { // system $system_obj = mgm_get_class('system'); $s_packs = mgm_get_class('subscription_packs'); $dge = bool_from_yn($system_obj->get_setting('disable_gateway_emails')); $dpne = bool_from_yn($system_obj->get_setting('disable_payment_notify_emails')); //issue #1521 $is_admin = is_super_admin() ? true : false; // find user $user = get_userdata($user_id); $member = mgm_get_member($user_id); // multiple membesrhip level update: $multiple_update = false; // check if (isset($_POST['membership_type']) && $member->membership_type != $_POST['membership_type']) { $multiple_update = true; $member = mgm_get_member_another_purchase($user_id, $_POST['membership_type']); } // get pack if ($member->pack_id) { $subs_pack = $s_packs->get_pack($member->pack_id); } else { $subs_pack = $s_packs->validate_pack($member->amount, $member->duration, $member->duration_type, $member->membership_type); } // reset payment info $member->payment_info->txn_type = 'subscription_cancel'; // types $duration_exprs = $s_packs->get_duration_exprs(); // default expire date $expire_date = $member->expire_date; // if lifetime: if ($member->duration_type == 'l') { $expire_date = date('Y-m-d'); } // if trial on if (isset($subs_pack['trial_on']) && (bool) $subs_pack['trial_on'] == true && isset($duration_exprs[$subs_pack['trial_duration_type']])) { // if cancel data is before trial end, set cancel on trial expire_date $trial_expire_date = strtotime('+' . $subs_pack['trial_duration'] . ' ' . $duration_exprs[$subs_pack['trial_duration_type']], $member->join_date); // if lower if (time() < $trial_expire_date) { $expire_date = date('Y-m-d', $trial_expire_date); } } // transaction_id $trans_id = $member->transaction_id; // if today if ($expire_date == date('Y-m-d')) { // status $new_status = MGM_STATUS_CANCELLED; $new_status_str = __('Subscription cancelled', 'mgm'); // set $member->status = $new_status; $member->status_str = $new_status_str; $member->expire_date = date('Y-m-d'); // reassign expiry membership pack if exists: issue#: 535 $member = apply_filters('mgm_reassign_member_subscription', $user_id, $member, 'CANCEL', true); } else { // date $date_format = mgm_get_date_format('date_format'); // status $new_status = MGM_STATUS_AWAITING_CANCEL; $new_status_str = sprintf(__('Subscription awaiting cancellation on %s', 'mgm'), date($date_format, strtotime($expire_date))); // set $member->status = $new_status; $member->status_str = $new_status_str; // set reset date $member->status_reset_on = $expire_date; $member->status_reset_as = MGM_STATUS_CANCELLED; } // multiple memberhip level update: if ($multiple_update) { mgm_save_another_membership_fields($member, $user_id); } else { $member->save(); } // transaction status mgm_update_transaction_status($trans_id, $new_status, $new_status_str); // send email notification to client $blogname = get_option('blogname'); // notify user if (!$dpne) { // notify user mgm_notify_user_membership_cancellation($blogname, $user, $member, $system_obj, $new_status, $membership_type); } // notify admin if (!$dge) { // notify admin mgm_notify_admin_membership_cancellation($blogname, $user, $member); } // after cancellation hook do_action('mgm_membership_subscription_cancelled', array('user_id' => $user_id)); // redirect only internal if ($redirect) { // message $lformat = mgm_get_date_format('date_format_long'); $message = sprintf(__("You have successfully unsubscribed. Your account has been marked for cancellation on %s", "mgm"), $expire_date == date('Y-m-d') ? 'Today' : date($lformat, strtotime($expire_date))); //issue #1521 if ($is_admin) { mgm_redirect(add_query_arg(array('user_id' => $user_id, 'unsubscribe_errors' => urlencode($message)), admin_url('user-edit.php'))); } // redirect mgm_redirect(mgm_get_custom_url('membership_details', false, array('unsubscribed' => 'true', 'unsubscribe_errors' => urlencode($message)))); } }
function _cancel_membership($user_id = null, $redirect = false) { // system $system_obj = mgm_get_class('system'); $s_packs = mgm_get_class('subscription_packs'); $dge = bool_from_yn($system_obj->get_setting('disable_gateway_emails')); $dpne = bool_from_yn($system_obj->get_setting('disable_payment_notify_emails')); //issue #1521 $is_admin = is_super_admin() ? true : false; // get passthrough, stop further process if fails to parse $custom = $this->_get_transaction_passthrough($_POST['COMPLUS']); // local var extract($custom); // currency if (!$currency) { $currency = $this->setting['currency']; } // find user $user = get_userdata($user_id); $member = mgm_get_member($user_id); // multiple membesrhip level update: $multiple_update = false; if (isset($_POST['membership_type']) && $member->membership_type != $_POST['membership_type'] || isset($is_another_membership_purchase) && $is_another_membership_purchase == 'Y') { $multiple_update = true; $multi_memtype = isset($_POST['membership_type']) ? $_POST['membership_type'] : $membership_type; $member = mgm_get_member_another_purchase($user_id, $multi_memtype); } // tracking fields module_field => post_field $tracking_fields = array('txn_type' => 'txn_type', 'subscr_id' => 'subscr_id', 'txn_id' => 'txn_id'); // save tracking fields $this->_save_tracking_fields($tracking_fields, $member); $expire_date = $member->expire_date; // if lifetime: if ($member->duration_type == 'l') { $expire_date = date('Y-m-d'); } // transaction_id $trans_id = $member->transaction_id; // if today if ($expire_date == date('Y-m-d')) { // status $new_status = MGM_STATUS_CANCELLED; $new_status_str = __('Subscription cancelled', 'mgm'); // set $member->status = $new_status; $member->status_str = $new_status_str; $member->expire_date = date('Y-m-d'); // reassign expiry membership pack if exists: issue#: 535 $member = apply_filters('mgm_reassign_member_subscription', $user_id, $member, 'CANCEL', true); } else { // date $date_format = mgm_get_date_format('date_format'); // status $new_status = MGM_STATUS_AWAITING_CANCEL; $new_status_str = sprintf(__('Subscription awaiting cancellation on %s', 'mgm'), date($date_format, strtotime($expire_date))); // set $member->status = $new_status; $member->status_str = $new_status_str; // set reset date $member->status_reset_on = $expire_date; $member->status_reset_as = MGM_STATUS_CANCELLED; } // multiple membesrhip level update: if ($multiple_update) { mgm_save_another_membership_fields($member, $user_id); } else { $member->save(); } // transaction status mgm_update_transaction_status($trans_id, $new_status, $new_status_str); // send email notification to client $blogname = get_option('blogname'); // notify user if (!$dpne) { // notify user mgm_notify_user_membership_cancellation($blogname, $user, $member, $system_obj, $new_status, $membership_type); } // notify admin if (!$dge) { // notify admin mgm_notify_admin_membership_cancellation($blogname, $user, $member); } // after cancellation hook do_action('mgm_membership_subscription_cancelled', array('user_id' => $user_id)); // redirect only internal if ($redirect) { // message $lformat = mgm_get_date_format('date_format_long'); $message = sprintf(__("You have successfully unsubscribed. Your account has been marked for cancellation on %s", "mgm"), $expire_date == date('Y-m-d') ? 'Today' : date($lformat, strtotime($expire_date))); //issue #1521 if ($is_admin) { mgm_redirect(add_query_arg(array('user_id' => $user_id, 'unsubscribe_errors' => urlencode($message)), admin_url('user-edit.php'))); } // redirect mgm_redirect(mgm_get_custom_url('membership_details', false, array('unsubscribed' => 'true', 'unsubscribe_errors' => urlencode($message)))); } }
function _cancel_membership($user_id = NULL, $redirect = false) { // system $system_obj = mgm_get_class('system'); $s_packs = mgm_get_class('subscription_packs'); $dge = bool_from_yn($system_obj->get_setting('disable_gateway_emails')); $dpne = bool_from_yn($system_obj->get_setting('disable_payment_notify_emails')); //issue #1521 $is_admin = is_super_admin() ? true : false; // passthrough var $alt_tran_id = $this->_get_alternate_transaction_id(); // get custom field values if not called with user id( internal) if (!$user_id) { // get passthrough, stop further process if fails to parse $custom = $this->_get_transaction_passthrough($alt_tran_id); // local var extract($custom); } // user $user = get_userdata($user_id); $member = mgm_get_member($user_id); // multiple membesrhip level update: $multiple_update = false; // check if (isset($_POST['membership_type']) && $member->membership_type != $_POST['membership_type'] || isset($membership_type) && $member->membership_type != $membership_type) { $multiple_update = true; $member = mgm_get_member_another_purchase($user_id, $_POST['membership_type']); } // skip if IPN POST for previous subscription: if (!empty($alt_tran_id) && !empty($member->transaction_id) && $alt_tran_id != $member->transaction_id) { return false; } // get pack if ($member->pack_id) { $subs_pack = $s_packs->get_pack($member->pack_id); } else { $subs_pack = $s_packs->validate_pack($member->amount, $member->duration, $member->duration_type, $member->membership_type); } // tracking fields module_field => post_field $tracking_fields = array('txn_type' => 'message_type', 'subscr_id' => array('order_number', 'sale_id'), 'txn_id' => array('order_number', 'sale_id')); // save tracking fields $this->_save_tracking_fields($tracking_fields, $member); // types $duration_exprs = $s_packs->get_duration_exprs(); // default expire date $expire_date = $member->expire_date; // if lifetime: if ($member->duration_type == 'l') { $expire_date = date('Y-m-d'); } // if trial on if ($subs_pack['trial_on'] && isset($duration_exprs[$subs_pack['trial_duration_type']])) { // if cancel data is before trial end, set cancel on trial expire_date $trial_expire_date = strtotime("+{$subs_pack['trial_duration']} {$duration_exprs[$subs_pack['trial_duration_type']]}", $member->join_date); // if lower if (time() < $trial_expire_date) { $expire_date = date('Y-m-d', $trial_expire_date); } } // transaction_id $trans_id = $member->transaction_id; // if today or set as instant cancel if ($expire_date == date('Y-m-d') || $this->setting['subs_cancel'] == 'instant') { // status $new_status = MGM_STATUS_CANCELLED; $new_status_str = __('Subscription cancelled', 'mgm'); // set $member->status = $new_status; $member->status_str = $new_status_str; $member->expire_date = date('Y-m-d'); // reassign expiry membership pack if exists: issue#: 535 $member = apply_filters('mgm_reassign_member_subscription', $user_id, $member, 'CANCEL', true); } else { // date $date_format = mgm_get_date_format('date_format'); // status $new_status = MGM_STATUS_AWAITING_CANCEL; $new_status_str = sprintf(__('Subscription awaiting cancellation on %s', 'mgm'), date($date_format, strtotime($expire_date))); // set $member->status = $new_status; $member->status_str = $new_status_str; // set reset date $member->status_reset_on = $expire_date; $member->status_reset_as = MGM_STATUS_CANCELLED; } // multiple membesrhip level update: if ($multiple_update) { mgm_save_another_membership_fields($member, $user_id); } else { $member->save(); } // transaction status mgm_update_transaction_status($trans_id, $new_status, $new_status_str); // send email notification to client $blogname = get_option('blogname'); // notify user if (!$dpne) { // notify user mgm_notify_user_membership_cancellation($blogname, $user, $member, $system_obj, $new_status, $membership_type); } // notify admin if (!$dge) { // notify admin mgm_notify_admin_membership_cancellation($blogname, $user, $member); } // after cancellation hook do_action('mgm_membership_subscription_cancelled', array('user_id' => $user_id)); // redirect only internal if ($redirect) { // message $lformat = mgm_get_date_format('date_format_long'); $message = sprintf(__("You have successfully unsubscribed. Your account has been marked for cancellation on %s", "mgm"), $expire_date == date('Y-m-d') ? 'Today' : date($lformat, strtotime($expire_date))); //issue #1521 if ($is_admin) { mgm_redirect(add_query_arg(array('user_id' => $user_id, 'unsubscribe_errors' => urlencode($message)), admin_url('user-edit.php'))); } // redirect mgm_redirect(add_query_arg(array('unsubscribed' => 'true', 'unsubscribe_errors' => urlencode($message)), mgm_get_custom_url('membership_details'))); } }
function _cancel_membership() { // system $system_obj = mgm_get_class('system'); $s_packs = mgm_get_class('subscription_packs'); $dge = bool_from_yn($system_obj->get_setting('disable_gateway_emails')); $dpne = bool_from_yn($system_obj->get_setting('disable_payment_notify_emails')); // get passthrough, stop further process if fails to parse $custom = $this->_get_transaction_passthrough($_POST['custom']); // local var extract($custom); // currency if (!$currency) { $currency = $this->setting['currency']; } // find user $user = get_userdata($user_id); $member = mgm_get_member($user_id); $multiple_update = false; // multiple membesrhip level update: if (isset($_POST['membership_type']) && $member->membership_type != $_POST['membership_type'] || isset($is_another_membership_purchase) && $is_another_membership_purchase == 'Y') { $multiple_update = true; $multi_memtype = isset($_POST['membership_type']) ? $_POST['membership_type'] : $membership_type; $member = mgm_get_member_another_purchase($user_id, $multi_memtype); } // tracking fields module_field => post_field $tracking_fields = array('txn_type' => 'rec_payment_type', 'subscr_id' => 'customer_id', 'txn_id' => 'rec_payment_id'); // save tracking fields $this->_save_tracking_fields($tracking_fields, $member); // expire $expire_date = $member->expire_date; // if lifetime: if ($member->duration_type == 'l') { $expire_date = date('Y-m-d'); } // transaction_id $trans_id = $member->transaction_id; // if today if ($expire_date == date('Y-m-d')) { // status $new_status = MGM_STATUS_CANCELLED; $new_status_str = __('Subscription cancelled', 'mgm'); // set $member->status = $new_status; $member->status_str = $new_status_str; $member->expire_date = date('Y-m-d'); // reassign expiry membership pack if exists: issue#: 535 $member = apply_filters('mgm_reassign_member_subscription', $user_id, $member, 'CANCEL', true); } else { // date $date_format = mgm_get_date_format('date_format'); // status $new_status = MGM_STATUS_AWAITING_CANCEL; $new_status_str = sprintf(__('Subscription awaiting cancellation on %s', 'mgm'), date($date_format, strtotime($expire_date))); // set $member->status = $new_status; $member->status_str = $new_status_str; // set reset date $member->status_reset_on = $expire_date; $member->status_reset_as = MGM_STATUS_CANCELLED; } // multiple membesrhip level update: if ($multiple_update) { mgm_save_another_membership_fields($member, $user_id); } else { $member->save(); } // transaction status mgm_update_transaction_status($trans_id, $new_status, $new_status_str); // send email notification to client $blogname = get_option('blogname'); // notify user if (!$dpne) { // notify user mgm_notify_user_membership_cancellation($blogname, $user, $member, $system_obj, $new_status, $membership_type); } // notify admin if (!$dge) { // notify admin mgm_notify_admin_membership_cancellation($blogname, $user, $member); } // after cancellation hook do_action('mgm_membership_subscription_cancelled', array('user_id' => $user_id)); }