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)))); } }
$member->membership_type = $new_type_code; // save $member->save(); } // check if any multiple levels exist: if (isset($member->other_membership_types) && is_array($member->other_membership_types) && count($member->other_membership_types) > 0) { // loop foreach ($member->other_membership_types as $key => $memtypes) { // make sure its an object: $memtypes = mgm_convert_array_to_memberobj($memtypes, $user->ID); // verify if ($memtypes->membership_type == $type_code) { // set $memtypes->membership_type = $new_type_code; // save mgm_save_another_membership_fields($memtypes, $user->ID, $key); } } } // unset unset($member); } //unset $membership_types_obj->unset_membership_type($type_code); // set $membership_types_obj->set_name($type_name, $new_type_code); } else { $membership_types_obj->set_name($type_name, $type_code); } $membership_types_obj->save(); }
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['M_custom']); // local var extract($custom); // 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'] || 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); } // 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' => 'futurePayStatusChange', 'subscr_id' => 'futurePayId', 'txn_id' => 'ctransreceipt'); // 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 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'); // subject $subject = $system_obj->get_template('subscription_cancelled_email_template_subject', array('blogname' => $blogname), true); // body $message = $system_obj->get_template('subscription_cancelled_email_template_body', array('blogname' => $blogname, 'name' => $user->display_name, 'email' => $user->user_email, 'admin_email' => $system_obj->setting['admin_email']), true); // send email notification to user if (!$dpne) { //issue #862 $subject = mgm_replace_email_tags($subject, $user_id); $message = mgm_replace_email_tags($message, $user_id); // mail mgm_mail($user->user_email, $subject, $message); } // send email notification to system administrator if (!$dge) { $subject = "[{$blogname}] {$user->user_email} - {$new_status}"; $message = "\tUser display name: {$user->display_name}\n\n<br />\r\r\n\t\t\t\t\tUser email: {$user->user_email}\n\n<br />\r\r\n\t\t\t\t\tUser ID: {$user->ID}\n\n<br />\r\r\n\t\t\t\t\tMembership Type: {$membership_type}\n\n<br />\r\r\n\t\t\t\t\tNew status: {$new_status}\n\n<br />\r\r\n\t\t\t\t\tStatus message: {$member->status_str}\n\n<br />\t\t\t\t\t\r\r\n\t\t\t\t\tPayment Mode: Cancelled\n\n<br />\r\r\n\t\t\t\t\tPOST Data was: \n\n<br /><br /><pre>" . print_r($_POST, true) . '</pre>'; mgm_mail($system_obj->setting['admin_email'], $subject, $message); } // after cancellation hook do_action('mgm_membership_subscription_cancelled', array('user_id' => $user_id)); }
function _cancel_membership($user_id = NULL, $redirect = false) { // system $system_obj = mgm_get_class('system'); $s_packs = mgm_get_class('subscription_packs'); $duration_str = $s_packs->duration_str; $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; // if passthrough provided if (isset($_REQUEST['extra'])) { // get passthrough, stop further process if fails to parse $custom = $this->_get_transaction_passthrough($_REQUEST['extra']); // local var extract($custom); } elseif (isset($_REQUEST['SUBSCRIPTION_ID']) || isset($_REQUEST['SubscriptionID'])) { // get tran $tran = mgm_get_transaction_by_option('zombaio_subscription_id', isset($_REQUEST['SUBSCRIPTION_ID']) ? $_REQUEST['SUBSCRIPTION_ID'] : $_REQUEST['SubscriptionID']); // local var extract($tran['data']); } elseif (isset($_REQUEST['TRANSACTION_ID'])) { // get tran $tran = mgm_get_transaction_by_option('zombaio_transaction_id', $_REQUEST['TRANSACTION_ID']); // local var extract($tran['data']); } elseif (isset($_REQUEST['username'])) { // get user if ($user = get_user_by('login', $_REQUEST['username'])) { $user_id = $user->ID; } } // log // mgm_log($user_id, ($this->module . '_' . __FUNCTION__)); // no user id if (!$user_id) { // message $message = 'Could not read member in the following REQUEST data. Please debug or contact magic members to fix the problem making sure to pass on the following data. <br /><br /><pre>' . "\n\n" . print_r($_REQUEST, true) . '</pre>'; // notify admin, only if gateway emails on if (!$dge) { // mail mgm_mail($system_obj->get_setting('admin_email'), 'Error in Zombaio membership cancellation', $message); } else { // log mgm_log($message, $this->module . '_' . __FUNCTION__); } // exit exit; } // 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'] || isset($membership_type) && $member->membership_type != $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); } // tracking fields module_field => post_field $tracking_fields = array('txn_type' => 'Action', 'subscr_id' => array('SUBSCRIPTION_ID', 'SubscriptionID'), 'txn_id' => 'TRANSACTION_ID'); // save tracking fields $this->_save_tracking_fields($tracking_fields, $member, $_REQUEST); // 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; // log // mgm_log($member, ($this->module . '_' . __FUNCTION__)); // mgm_log($expire_date . ' ' . date('Y-m-d H:i:s'), ($this->module . '_' . __FUNCTION__)); // if today if (time() >= strtotime($expire_date)) { // 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 H:i:s'); // 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; } // log // mgm_log($member, ($this->module . '_' . __FUNCTION__)); // update user // 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'); // subject $subject = $system_obj->get_template('subscription_cancelled_email_template_subject', array('blogname' => $blogname), true); // body $message = $system_obj->get_template('subscription_cancelled_email_template_body', array('blogname' => $blogname, 'name' => $user->display_name, 'email' => $user->user_email, 'admin_email' => $system_obj->setting['admin_email']), true); // send email notification to user if (!$dpne) { //issue #862 $subject = mgm_replace_email_tags($subject, $user_id); $message = mgm_replace_email_tags($message, $user_id); // mail mgm_mail($user->user_email, $subject, $message); } // notify admin, only if gateway emails on if (!$dge) { $subject = "[{$blogname}] {$user->user_email} - {$new_status}"; $message = "\tUser display name: {$user->display_name}\n\n<br />\r\r\n\t\t\t\t\tUser email: {$user->user_email}\n\n<br />\r\r\n\t\t\t\t\tUser ID: {$user->ID}\n\n<br />\r\r\n\t\t\t\t\tMembership Type: {$membership_type}\n\n<br />\r\r\n\t\t\t\t\tNew status: {$new_status}\n\n<br />\r\r\n\t\t\t\t\tStatus message: {$member->status_str}\n\n<br />\t\t\t\t\t\r\r\n\t\t\t\t\tPayment Mode: Cancelled\n\n<br />\r\r\n\t\t\t\t\tPOST Data was: \n\n<br /><br /><pre>" . print_r($_POST, true) . '</pre>'; mgm_mail($system_obj->setting['admin_email'], $subject, $message); } // after cancellation hook do_action('mgm_membership_subscription_cancelled', array('user_id' => $user_id)); // redirect 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 _buy_membership($transid = null) { // system $system_obj = mgm_get_class('system'); $s_packs = mgm_get_class('subscription_packs'); // get details //if transaction id is available: if (is_numeric($transid)) { $custom = $this->_get_transaction_passthrough($transid); extract($custom); // mgm_log($custom); } else { //Purchase Another Membership Level problem : issue #: 752 $is_another_membership_purchase = 'N'; $parts = explode('_', $_REQUEST['custom']); $params = array('user_id' => 0, 'duration' => '', 'duration_type' => '', 'pack_id' => 0, 'is_another_membership_purchase' => 'N', 'membership_type' => ''); $i = 0; foreach ($params as $param => $default) { if (isset($parts[$i])) { ${$param} = $parts[$i]; } else { ${$param} = $default; } $i++; } } // get pack $pack = $s_packs->get_pack($pack_id); // membership_type -issue #1005 if (empty($membership_type)) { $membership_type = $pack['membership_type']; } // user if ($user = get_userdata($user_id)) { //Purchase Another Membership Level problem : issue #: 752 if ($is_another_membership_purchase == 'Y') { // another_subscription modification //issue #1073 $member = mgm_get_member_another_purchase($user_id, $membership_type); } else { // get member $member = mgm_get_member($user_id); } //pack currency over rides genral setting currency - issue #1602 if (isset($pack['currency']) && !empty($pack['currency'])) { $currency = $pack['currency']; } else { $currency = $system_obj->setting['currency']; } // check //uncommented the below line as it is not updating in upgrade subscription //if (!$member->duration) { $member->duration = $duration ? $duration : 1; // one year $member->duration_type = $duration_type ? $duration_type : 'y'; $member->amount = 0.0; //$member->currency = 'USD';//not sure y hardcoded $member->currency = $currency; $member->membership_type = $membership_type; //} // set pack $member->pack_id = $pack_id; $member->active_num_cycles = isset($num_cycles) && !empty($num_cycles) ? $num_cycles : $pack['num_cycles']; // set status $member->status = MGM_STATUS_ACTIVE; $member->account_desc = __('Free Account', 'mgm'); $member->last_pay_date = ''; //reset payment_info if already set: if (isset($member->payment_info)) { unset($member->payment_info); } //unset rebill: if (isset($member->rebilled)) { unset($member->rebilled); } //unset transaction_id: if (isset($member->transaction_id)) { unset($member->transaction_id); } // join date $time = time(); // set if (!isset($member->join_date) || isset($member->join_date) && empty($member->join_date)) { $member->join_date = $time; } // old content hide - issue #1227 if (isset($hide_old_content)) { $member->hide_old_content = $hide_old_content; } // type expanded $duration_exprs = $s_packs->get_duration_exprs(); // if not lifetime/date range if (in_array($member->duration_type, array_keys($duration_exprs))) { // take only date exprs // @TODO, time should be last expire date #773, 3 use cases must be tracked // expect new param in tran subscription_type: new, upgrade, downgrade, extend $expire_date_ts = !$member->expire_date ? $time : strtotime($member->expire_date); // time $expire_date_ts = strtotime("+{$member->duration} {$duration_exprs[$member->duration_type]}", $expire_date_ts); // formatted $expire_date = date('Y-m-d', $expire_date_ts); // date extended if (!$member->expire_date || $expire_date_ts > strtotime($member->expire_date)) { $member->expire_date = $expire_date; } } else { //if lifetime: if ($member->duration_type == 'l') { // el = lifetime $member->expire_date = ''; } //issue #1096 if ($member->duration_type == 'dr') { // el = /date range $member->expire_date = $duration_range_end_dt; } } //Purchase Another Membership Level problem : issue #: 752 if (bool_from_yn($is_another_membership_purchase)) { $custom = array('is_another_membership_purchase' => 'Y'); } // old status $old_status = $member->status; // set new status $member->status = $new_status = MGM_STATUS_ACTIVE; // whether to subscriber the user to Autoresponder - This should happen only once //issue #1073 if (!empty($transid) && $transid != null) { $acknowledge_ar = mgm_subscribe_to_autoresponder($member, $transid); } else { $acknowledge_ar = mgm_subscribe_to_autoresponder($member, null); } // update if (isset($custom['is_another_membership_purchase']) && bool_from_yn($custom['is_another_membership_purchase'])) { // get object - issue #1227 $obj_sp = mgm_get_class('subscription_packs')->get($member->pack_id); if ($obj_sp['hide_old_content']) { $member->hide_old_content = $obj_sp['hide_old_content']; } mgm_save_another_membership_fields($member, $user_id); // Multiple membership upgrade: first time if ($transid && isset($custom['multiple_upgrade_prev_packid']) && is_numeric($custom['multiple_upgrade_prev_packid'])) { mgm_multiple_upgrade_save_memberobject($custom, $transid); } } else { // update $member->save(); } // on status - issue #1468 switch ($member->status) { case MGM_STATUS_ACTIVE: //sending notification email to user if ($notify_user && $is_registration == 'Y') { $user_pass = mgm_decrypt_password($member->user_password, $user_id); do_action('mgm_register_user_notification', $user_id, $user_pass); } break; } // status change event do_action('mgm_user_status_change', $user_id, $new_status, $old_status, 'module_' . $this->module, $member->pack_id); //update coupon usage do_action('mgm_update_coupon_usage', array('user_id' => $user_id)); // role if (isset($role)) { $obj_role = new mgm_roles(); $obj_role->add_user_role($user_id, $role); } // update pack/transaction if (is_numeric($transid)) { mgm_update_transaction(array('module' => $this->module, 'status_text' => __('Success', 'mgm')), $transid); } // return action do_action('mgm_return_' . $this->module, array('user_id' => $user_id)); // backward compatibility do_action('mgm_return_subscription_payment_' . $this->module, array('user_id' => $user_id)); // new , individual do_action('mgm_return_subscription_payment', array('user_id' => $user_id, 'acknowledge_ar' => $acknowledge_ar, 'mgm_member' => $member)); // new, global: pass mgm_member object to consider multiple level purchases as well. } }
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)))); } }
/** * 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; }
/** * create purchase another button * * @param array userdata * @retun string html output */ function mgm_get_purchase_another_subscription_button($args = array()) { global $wpdb; //ceck settings $settings = mgm_get_class('system')->get_setting(); // check if (!isset($settings['enable_multiple_level_purchase']) || isset($settings['enable_multiple_level_purchase']) && !bool_from_yn($settings['enable_multiple_level_purchase'])) { return; } // current user $user = wp_get_current_user(); // validate if (!$user->ID) { // query string $user = mgm_get_user_from_querystring(); } // validate if (!$user->ID) { return __('No such user', 'mgm'); } // userdata $username = $user->user_login; $mgm_home = get_option('siteurl'); $member = mgm_get_member($user->ID); $system_obj = mgm_get_class('system'); $membership_type = mgm_get_user_membership_type($user->ID, 'code'); $packs_obj = mgm_get_class('subscription_packs'); $packs = $packs_obj->get_packs('upgrade'); $duration_str = $packs_obj->duration_str; $trial_taken = $member->trial_taken; // pack_ids $pack_ids = mgm_get_members_packids($member); $pack_membership_types = mgm_get_subscribed_membershiptypes($user->ID, $member); // query_arg $form_action = mgm_get_custom_url('transactions', false, array('action' => 'purchase_another', 'username' => $username)); //issue 1009 if (isset($settings['membership_details_url'])) { $membership_details_url = $settings['membership_details_url']; } else { $membership_details_url = get_admin_url() . 'profile.php?page=mgm/profile'; } // cancel $cancel_url = $membership_details_url; // $cancel_url = mgm_get_custom_url('membership_details'); // active modules $a_payment_modules = $system_obj->get_active_modules('payment'); // selected_subscription $selected_subs = mgm_get_selected_subscription($args); // second step, after post if (isset($_POST['submit'])) { // verify selected if (!isset($_POST['subs_opt'])) { // die return sprintf(__('Package not selected, <a href="%s">go back</a>.', 'mgm'), $_POST['form_action']); exit; } // get subs data $subs_opt_pack = mgm_decode_package($_POST['subs_opt']); extract($subs_opt_pack); // check $valid = false; // loop packs foreach ($packs as $pack) { // check //check pack id as well: issue#: 580 if ($pack['cost'] == $cost && $pack['duration'] == $duration && $pack['duration_type'] == $duration_type && $membership_type == $pack['membership_type'] && $pack_id == $pack['id']) { $valid = true; break; } } // error if (!$valid) { return __('Invalid data passed', 'mgm'); exit; } // get object $member = new mgm_member($user->ID); $temp_membership = $member->_default_fields(); $temp_membership['membership_type'] = $membership_type; $temp_membership['pack_id'] = $pack_id; //issue #860 //if (isset($_POST['mgm_upgrade_field']['autoresponder']) && ($_POST['mgm_upgrade_field']['autoresponder'])=='Y') { if (isset($_POST['mgm_upgrade_field']['autoresponder']) && substr($_POST['mgm_upgrade_field']['autoresponder'], 0, 1) == 'Y') { $temp_membership['subscribed'] = 'Y'; $temp_membership['autoresponder'] = $system_obj->active_modules['autoresponder']; } //issue #1236 if (isset($_POST['mgm_upgrade_field']['coupon']) && !empty($_POST['mgm_upgrade_field']['coupon'])) { //issue #1250 - Coupon validation if (!empty($_POST['form_action'])) { // check if its a valid coupon if (!($coupon = mgm_get_coupon_data($_POST['mgm_upgrade_field']['coupon']))) { //redirect back to the form $q_arg = array('error_field' => 'Coupon', 'error_type' => 'invalid', 'error_field_value' => $_POST['mgm_upgrade_field']['coupon']); $redirect = add_query_arg($q_arg, $_POST['form_action']); // redirect mgm_redirect($redirect); exit; } else { // membership type check // get subs if ($subs_pack = mgm_decode_package(mgm_post_var('subs_opt'))) { // values $coupon_values = mgm_get_coupon_values(NULL, $coupon['value'], true); // check if (isset($coupon_values['new_membership_type']) && $coupon_values['new_membership_type'] != $subs_pack['membership_type']) { $new_membership_type = mgm_get_membership_type_name($coupon_values['new_membership_type']); $q_arg = array('error_field' => 'Coupon', 'error_type' => 'invalid', 'membership_type' => $coupon_values['new_membership_type'], 'error_field_value' => $_POST['mgm_upgrade_field']['coupon']); $redirect = add_query_arg($q_arg, $_POST['form_action']); // redirect mgm_redirect($redirect); exit; } } } } } //inserted an incomplete entry for the selected subscription type mgm_save_another_membership_fields($temp_membership, $user->ID); // save coupon fields and update member object $member = mgm_save_partial_fields_purchase_more($user->ID, $membership_type, $cost); // coupon $purchase_another_coupon = false; // array if (isset($member->upgrade)) { if (is_array($member->upgrade) && isset($member->upgrade['coupon']['id'])) { $purchase_another_coupon = $member->upgrade['coupon']; } elseif (is_object($member->upgrade) && isset($member->upgrade->coupon->id)) { $purchase_another_coupon = mgm_object2array($member->upgrade->coupon); } // coupon mgm_get_purchase_another_coupon_pack($purchase_another_coupon, $pack); } //save custom fields -issue #1285 if (isset($_POST['mgm_upgrade_field']) && !empty($_POST['mgm_upgrade_field'])) { //member $cf_member = mgm_get_member($user->ID); //upgrade custom fileds $cfu_fileds = mgm_get_class('member_custom_fields')->get_fields_where(array('display' => array('on_multiple_membership_level_purchase' => true))); //loop fields foreach ($cfu_fileds as $cf_filed) { //skip coupon and autoresponder if (in_array($cf_filed['name'], array('coupon', 'autoresponder'))) { continue; } //check if (isset($_POST['mgm_upgrade_field'][$cf_filed['name']])) { // check upgrae and required if ((bool) $cf_filed['attributes']['required'] === true) { if (empty($_POST['mgm_upgrade_field'][$cf_filed['name']])) { //redirect back to the form $q_arg = array('error_field' => $cf_filed['label'], 'error_type' => 'empty', 'error_field_value' => $_POST['mgm_upgrade_field'][$cf_filed['name']]); $redirect = add_query_arg($q_arg, $_POST['form_action']); mgm_redirect($redirect); exit; } } //appending custom fields if (isset($cf_member->custom_fields->{$cf_filed}['name'])) { $cf_member->custom_fields->{$cf_filed}['name'] = $_POST['mgm_upgrade_field'][$cf_filed['name']]; } else { $cf_member->custom_fields->{$cf_filed}['name'] = $_POST['mgm_upgrade_field'][$cf_filed['name']]; } } } $cf_member->save(); } // start html $html = '<div>'; // free if (($pack['cost'] == 0 || $membership_type == 'free') && in_array('mgm_free', $a_payment_modules) && mgm_get_module('mgm_free')->is_enabled()) { $html .= sprintf('<div>%s - %s</div>', __('Create a free account ', 'mgm'), ucwords($membership_type)); $module = 'mgm_free'; // payments url $payments_url = mgm_get_custom_url('transactions'); // if tril module selected and cost is 0 and free moduleis not active if ($membership_type == 'trial') { if (in_array('mgm_trial', $a_payment_modules)) { $module = 'mgm_trial'; } } //Purchase Another Membership Level problem : issue #: 752 $redirect = add_query_arg(array('method' => 'payment_return', 'module' => $module, 'custom' => $user->ID . '_' . $duration . '_' . $duration_type . '_' . $pack_id . '_Y', 'redirector' => $redirector), $payments_url); // redirect if (!headers_sent()) { @header('location: ' . $redirect); exit; } // js redirect $html .= sprintf('<script type="text/javascript">window.location = "%s";</script><div>%s</div>', $redirect, $packs_obj->get_pack_desc($pack)); } else { $html .= sprintf('<div class="mgm_get_subs_btn">%s</div>', $packs_obj->get_pack_desc($pack)); // coupon if (isset($purchase_another_coupon['id'])) { $html .= sprintf('<div class="mgm_get_subs_btn">%s</div>', sprintf(__('Using Coupon "%s" - %s', 'mgm'), $purchase_another_coupon['name'], $purchase_another_coupon['description'])); } $html .= sprintf('<div class="mgm_get_subs_btn">%s</div>', __('Please Select from Available Payment Gateways', 'mgm')); } //bypass if payment gateway field is selected -issue #1764 if ((double) $pack['cost'] > 0 && isset($_POST['mgm_payment_gateways']) && !empty($_POST['mgm_payment_gateways'])) { //init $tran_id = 0; if (!$tran_id) { $tran_id = mgm_add_transaction($pack, array('is_another_membership_purchase' => true, 'user_id' => $user->ID)); } // module $mod_obj = mgm_get_module($_POST['mgm_payment_gateways'], 'payment'); // module end point $redirect = $mod_obj->_get_endpoint('html_redirect', false); // encode id: //encode transaction id $encode_tran_id = mgm_encode_id($tran_id); //args $redirect = add_query_arg(array('tran_id' => $encode_tran_id), $redirect); // do the redirect to payment mgm_redirect($redirect); } // init $payment_modules = array(); // when active if ($a_payment_modules) { // loop foreach ($a_payment_modules as $payment_module) { // not trial if (in_array($payment_module, array('mgm_free', 'mgm_trial'))) { continue; } //consider only the modules assigned to pack if (isset($pack['modules']) && !in_array($payment_module, (array) $pack['modules'])) { continue; } // store $payment_modules[] = $payment_module; } } // loop payment mods if not free if (count($payment_modules) && $cost) { // transaction $tran_id = 0; // loop foreach ($payment_modules as $module) { // module $mod_obj = mgm_get_module($module, 'payment'); // create transaction // if(!$tran_id) $tran_id = $mod_obj->_create_transaction($pack, array('is_another_membership_purchase' => true, 'user_id' => $user->ID)); if (!$tran_id) { $tran_id = mgm_add_transaction($pack, array('is_another_membership_purchase' => true, 'user_id' => $user->ID)); } // button $html .= sprintf('<div class="mgm_get_subs_btn">%s</div>', $mod_obj->get_button_subscribe(array('pack' => $pack, 'tran_id' => $tran_id))); } } else { if ($cost) { $html .= sprintf('<div class="mgm_get_subs_btn">%s</div>', __('There are no payment gateways available at this time.', 'mgm')); } } // html $html .= '</div>'; } else { // first step show upgrade options // html $html = sprintf('<p class="message register">%s</p>', __('Please Select from Available Membership Packages', 'mgm')); // upgrade_packages $upgrade_packages = ''; // pack to modules $pack_modules = array(); // loop foreach ($packs as $pack) { // default $checked = ''; // skip already purchased packs if (in_array($pack['id'], $pack_ids)) { continue; } //skip same membership level subscriptions if (in_array($pack['membership_type'], $pack_membership_types)) { continue; } // do not show trial or free as upgradre if ($pack['membership_type'] == 'trial' || $pack['membership_type'] == 'free') { continue; } // reset $checked = mgm_select_subscription($pack, $selected_subs); // skip other when a package sent as selected if ($selected_subs !== false) { if (empty($checked)) { continue; } } // checked if (!$checked) { $checked = (int) $pack['default'] == 1 ? ' checked="checked"' : ''; } // duration if ($pack['duration'] == 1) { $dur_str = rtrim($duration_str[$pack['duration_type']], 's'); } else { $dur_str = $duration_str[$pack['duration_type']]; } $css_group = mgm_get_css_group(); // encode pack $subs_opt_enc = mgm_encode_package($pack); // set $pack_modules[$subs_opt_enc] = $pack['modules']; //issue #867 if ($css_group != 'none') { //expand this if needed $css_link_format = '<link rel="stylesheet" href="%s" type="text/css" media="all" />'; $css_file = MGM_ASSETS_URL . 'css/' . $css_group . '/mgm.form.fields.css'; $upgrade_packages .= sprintf($css_link_format, $css_file); } // free if (($pack['cost'] == 0 || strtolower($pack['membership_type']) == 'free') && in_array('mgm_free', $a_payment_modules) && mgm_get_module('mgm_free')->enabled == 'Y') { // input $input = sprintf('<input type="radio" %s class="checkbox" name="subs_opt" value="%s" rel="mgm_subscription_options"/>', $checked, $subs_opt_enc); // html $upgrade_packages .= ' <div class="mgm_subs_wrapper ' . $pack['membership_type'] . '"> <div class="mgm_subs_option ' . $pack['membership_type'] . '"> ' . $input . ' </div> <div class="mgm_subs_pack_desc ' . $pack['membership_type'] . '"> ' . $packs_obj->get_pack_desc($pack) . ' </div> <div class="clearfix"></div> <div class="mgm_subs_desc ' . $pack['membership_type'] . '"> ' . mgm_stripslashes_deep($pack['description']) . ' </div> </div>'; } else { // input $input = sprintf('<input type="radio" %s class="checkbox" name="subs_opt" value="%s" rel="mgm_subscription_options"/>', $checked, $subs_opt_enc); // html $upgrade_packages .= ' <div class="mgm_subs_wrapper ' . $pack['membership_type'] . '"> <div class="mgm_subs_option ' . $pack['membership_type'] . '"> ' . $input . ' </div> <div class="mgm_subs_pack_desc ' . $pack['membership_type'] . '"> ' . $packs_obj->get_pack_desc($pack) . ' </div> <div class="clearfix"></div> <div class="mgm_subs_desc ' . $pack['membership_type'] . '"> ' . mgm_stripslashes_deep($pack['description']) . ' </div> </div>'; } } // add pack_modules as json data, may consider jquery data later if (!empty($pack_modules)) { $html .= sprintf('<script language="javascript">var mgm_pack_modules = %s</script>', json_encode($pack_modules)); } // show error if (!$upgrade_packages) { // html $html .= '<div class="mgm_subs_wrapper"> <div class="mgm_subs_pack_desc"> ' . __('Sorry, no packages available.', 'mgm') . ' </div> </div> <p> <input type="button" name="cancel" onclick="window.location=\'' . $cancel_url . '\'" value="' . __('Cancel', 'mgm') . '" class="button-primary" /> </p>'; } else { /* $error_field = mgm_request_var('error_field'); if(!empty($error_field)) { $errors = new WP_Error(); switch (mgm_request_var('error_type')) { case 'empty': $error_string = 'You must provide a '; break; case 'invalid': $error_string = 'Invalid '; break; } //issue #703 $errors->add( $error_field, __( '<strong>ERROR</strong>: '.$error_string, 'mgm' ).$error_field ); $html .= mgm_set_errors($errors, true); }*/ // check errors if any: $html .= mgm_subscription_purchase_errors(); // form $html .= '<form action="' . $form_action . '" method="post" class="mgm_form"><div class="mgm_get_pack_form_container">'; $html .= '<input type="hidden" name="form_action" value="' . $form_action . '" />'; $html .= $upgrade_packages; //issue #1285 $html .= mgm_get_custom_fields($user->ID, array('on_multiple_membership_level_purchase' => true), 'mgm_upgrade_field'); // html $html .= '<input type="hidden" name="ref" value="' . md5($member->amount . '_' . $member->duration . '_' . $member->duration_type . '_' . $member->membership_type) . '" />'; // set $html .= '<p> <input class="button" type="submit" name="submit" value="' . __('Next', 'mgm') . '" /> <input class="button" type="button" name="cancel" onclick="window.location=\'' . $cancel_url . '\'" value="' . __('Cancel', 'mgm') . '"/> </p>'; // html $html .= '</div></form>'; } } // return return $html; }
function _buy_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 = $system_obj->get_setting('currency'); } // find user $user = get_userdata($user_id); //another_subscription modification if (isset($custom['is_another_membership_purchase']) && bool_from_yn($custom['is_another_membership_purchase'])) { $member = mgm_get_member_another_purchase($user_id, $custom['membership_type']); } else { $member = mgm_get_member($user_id); } // Get the current AC join date if (!($join_date = $member->join_date)) { $member->join_date = time(); } // Set current AC join date // if there is no duration set in the user object then run the following code if (empty($duration_type)) { //if there is no duration type then use Months $duration_type = 'm'; } // membership type default if (empty($membership_type)) { //if there is no account type in the custom string then use the existing type $membership_type = md5($member->membership_type); } // validate parent method $membership_type_verified = $this->_validate_membership_type($membership_type, 'md5|plain'); // verified if (!$membership_type_verified) { if (strtolower($member->membership_type) != 'free') { // notify admin, only if gateway emails on if (!$dge) { mgm_notify_admin_membership_verification_failed($this->name); } // abort return; } else { $membership_type_verified = $member->membership_type; } } // set $membership_type = $membership_type_verified; // sub pack $subs_pack = $s_packs->get_pack($pack_id); // if trial on if ($subs_pack['trial_on']) { $member->trial_on = $subs_pack['trial_on']; $member->trial_cost = $subs_pack['trial_cost']; $member->trial_duration = $subs_pack['trial_duration']; $member->trial_duration_type = $subs_pack['trial_duration_type']; $member->trial_num_cycles = $subs_pack['trial_num_cycles']; } //pack currency over rides genral setting currency - issue #1602 if (isset($subs_pack['currency']) && $subs_pack['currency'] != $currency) { $currency = $subs_pack['currency']; } // duration $member->duration = $duration; $member->duration_type = strtolower($duration_type); $member->amount = $amount; $member->currency = $currency; $member->membership_type = $membership_type; $member->pack_id = $pack_id; // $member->payment_type = 'subscription'; $member->active_num_cycles = isset($num_cycles) && !empty($num_cycles) ? $num_cycles : $subs_pack['num_cycles']; $member->payment_type = (int) $member->active_num_cycles == 1 ? 'one-time' : 'subscription'; // payment info for unsubscribe $member->payment_info = new stdClass(); $member->payment_info->module = $this->code; // transaction type $member->payment_info->txn_type = 'subscription'; // subscriber id $member->payment_info->subscr_id = ''; // refer id $member->payment_info->txn_id = ''; // mgm transaction id $member->transaction_id = $_POST['custom']; // process response $new_status = $update_role = false; // process $process = 'Success'; // status switch ($process) { case 'Success': // set pending status $new_status = MGM_STATUS_PENDING; // starus string $member->status_str = __('Last payment is pending', 'mgm'); $time = time(); $last_pay_date = isset($member->last_pay_date) ? $member->last_pay_date : null; $member->last_pay_date = date('Y-m-d', $time); // for upgrading if ($member->status == MGM_STATUS_ACTIVE) { // mark for later status reset $member->status_reset_on = date('Y-m-d', strtotime($member->expire_date)); } // check subscription_option if (isset($subscription_option)) { // on option switch ($subscription_option) { // @ToDo, apply expire date login case 'create': // expire date will be based on current time // expire date will be based on current time case 'upgrade': // expire date will be based on current time // already on top break; case 'downgrade': // expire date will be based on expire_date if exists, current time other wise // expire date will be based on expire_date if exists, current time other wise case 'extend': // expire date will be based on expire_date if exists, current time other wise // extend/expire date // calc expiry - issue #1226 // membership extend functionality broken if we try to extend the same day so removed && $last_pay_date != date('Y-m-d', $time) check if (!empty($member->expire_date)) { $expiry = strtotime($member->expire_date); if ($expiry > 0 && $expiry > $time) { $time = $expiry; } } break; } } // type expanded $duration_exprs = $s_packs->get_duration_exprs(); // if not lifetime/date range if (in_array($member->duration_type, array_keys($duration_exprs))) { // take only date exprs //consider trial duration if trial period is applicable if (isset($trial_on) && $trial_on == 1) { //Do it only once if (!isset($member->rebilled) && isset($member->active_num_cycles) && $member->active_num_cycles != 1) { $time = strtotime("+{$trial_duration} {$duration_exprs[$trial_duration_type]}", $time); } } else { // time - issue #1068 $time = strtotime("+{$member->duration} {$duration_exprs[$member->duration_type]}", $time); } // formatted $time_str = date('Y-m-d', $time); // date extended if (!$member->expire_date || strtotime($time_str) > strtotime($member->expire_date)) { $member->expire_date = $time_str; } } else { //if lifetime: if ($member->duration_type == 'l') { // el = lifetime $member->expire_date = ''; } //issue #1096 if ($member->duration_type == 'dr') { // el = /date range $member->expire_date = $duration_range_end_dt; } } //update rebill: issue #: 489 if ($member->active_num_cycles != 1 && (int) $member->rebilled < (int) $member->active_num_cycles) { // rebill $member->rebilled = !$member->rebilled ? 1 : (int) $member->rebilled + 1; } // role update if ($role) { $update_role = true; } // transaction_id $transaction_id = $this->_get_transaction_id(); // hook args $args = array('user_id' => $user_id, 'transaction_id' => $transaction_id); // another membership if (isset($custom['is_another_membership_purchase']) && bool_from_yn($custom['is_another_membership_purchase'])) { $args['another_membership'] = $custom['membership_type']; } // after succesful payment hook do_action('mgm_membership_transaction_success', $args); // backward compatibility do_action('mgm_subscription_purchase_payment_success', $args); // new organized name do_action('mgm_return_subscription_payment_' . $this->module, $args); // autoresponder break; case 'Denied': $new_status = MGM_STATUS_NULL; $member->status_str = __('Last payment was refunded or denied', 'mgm'); break; case 'Pending': $new_status = MGM_STATUS_PENDING; $reason = 'Unknown'; $member->status_str = sprintf(__('Last payment is pending. Reason: %s', 'mgm'), $reason); break; default: $new_status = MGM_STATUS_ERROR; $member->status_str = sprintf(__('Last payment status: %s', 'mgm'), $_POST['payment_status']); break; } // old status $old_status = $member->status; // set new status $member->status = $new_status; // whether to acknowledge the user - This should happen only once $acknowledge_user = $this->send_payment_email($_POST['custom']); // whether to subscriber the user to Autoresponder - This should happen only once $acknowledge_ar = mgm_subscribe_to_autoresponder($member, $_POST['custom']); //another_subscription modification if (isset($custom['is_another_membership_purchase']) && bool_from_yn($custom['is_another_membership_purchase'])) { //issue #1227 if ($subs_pack['hide_old_content']) { $member->hide_old_content = $subs_pack['hide_old_content']; } mgm_save_another_membership_fields($member, $user_id); // Multiple membership upgrade: first time if (isset($member->transaction_id) && isset($custom['multiple_upgrade_prev_packid']) && is_numeric($custom['multiple_upgrade_prev_packid'])) { mgm_multiple_upgrade_save_memberobject($custom, $member->transaction_id); } } else { $member->save(); } // status change event do_action('mgm_user_status_change', $user_id, $new_status, $old_status, 'module_' . $this->module, $member->pack_id); //update coupon usage do_action('mgm_update_coupon_usage', array('user_id' => $user_id)); // role if ($update_role) { $obj_role = new mgm_roles(); $obj_role->add_user_role($user_id, $role); } // update transaction if (is_numeric($member->transaction_id)) { mgm_update_transaction(array('module' => $this->module, 'status' => $member->status, 'status_text' => $member->status_str), $member->transaction_id); } // return action do_action('mgm_return_' . $this->module, array('user_id' => $user_id)); // backward compatibility do_action('mgm_return_subscription_payment_' . $this->module, array('user_id' => $user_id)); // new , individual do_action('mgm_return_subscription_payment', array('user_id' => $user_id, 'acknowledge_ar' => $acknowledge_ar, 'mgm_member' => $member)); // new, global // read member again for internal updates if any // another_subscription modification if (isset($custom['is_another_membership_purchase']) && bool_from_yn($custom['is_another_membership_purchase'])) { $member = mgm_get_member_another_purchase($user_id, $custom['membership_type']); } else { $member = mgm_get_member($user_id); } // send email notification to client $blogname = get_option('blogname'); // notify if ($acknowledge_user) { // notify user, only if gateway emails on if (!$dpne) { // notify if (mgm_notify_user_membership_purchase($blogname, $user, $member, $custom, $subs_pack, $s_packs, $system_obj)) { // update as email sent $this->update_paymentemail_sent($alt_tran_id); } } // notify admin, only if gateway emails on if (!$dge) { // pack duration $pack_duration = $s_packs->get_pack_duration($subs_pack); // notify admin, mgm_notify_admin_membership_purchase($blogname, $user, $member, $pack_duration); } } }
function mgm_reset_cancelled_member($args) { // check if (isset($args['user_id'])) { // user_id $user_id = $args['user_id']; // get member //another_subscription modification if (isset($args['another_membership'])) { $member = mgm_get_member_another_purchase($user_id, $args['another_membership']); } else { $member = mgm_get_member($user_id); } // check if (isset($member->status_reset_as) && $member->status_reset_as == MGM_STATUS_CANCELLED) { // unset unset($member->status_reset_as, $member->status_reset_on); // update user //another_subscription modification if (isset($args['another_membership'])) { mgm_save_another_membership_fields($member, $user_id); } else { // update_user_option($user_id, 'mgm_member', $member, true); $member->save(); } } } }
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; }
/** * unsubscribe default callback */ function mgm_member_unsubscribe() { // user_id from post extract($_POST); // system $system_obj = mgm_get_class('system'); $packs_obj = mgm_get_class('subscription_packs'); $dge = bool_from_yn($system_obj->get_setting('disable_gateway_emails')); // find user $user = get_userdata($user_id); $member = mgm_get_member($user_id); // multiple membesrhip level update: if (isset($_POST['membership_type']) && $member->membership_type != $_POST['membership_type']) { $member = mgm_get_member_another_purchase($user_id, $_POST['membership_type']); } // get pack if ($member->pack_id) { $subs_pack = $packs_obj->get_pack($member->pack_id); } else { $subs_pack = $packs_obj->validate_pack($member->amount, $member->duration, $member->duration_type, $member->membership_type); } // types $duration_exprs = $packs_obj->get_duration_exprs(); // default expire date $expire_date = $member->expire_date; 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); } } // old status $old_status = $member->status; // if today if ($expire_date == date('Y-m-d')) { // set new status $member->status = $new_status = MGM_STATUS_CANCELLED; // status string $member->status_str = __('Subscription Cancelled', 'mgm'); $member->expire_date = date('Y-m-d'); } else { // date format $date_format = mgm_get_date_format('date_format'); // set new status $member->status = $new_status = MGM_STATUS_AWAITING_CANCEL; // status string $member->status_str = sprintf(__('Subscription awaiting cancellation on %s', 'mgm'), date($date_format, strtotime($expire_date))); // reset on $member->status_reset_on = $expire_date; $member->status_reset_as = MGM_STATUS_CANCELLED; } // multiple memberhip level update: if ($post_membership_type = mgm_post_var('membership_type') && $member->membership_type != $post_membership_type) { mgm_save_another_membership_fields($member, $user_id); } else { $member->save(); } // status change event do_action('mgm_user_status_change', $user_id, $new_status, $old_status, 'member_unsubscribe', $member->pack_id); // send email notification to client $blogname = get_option('blogname'); // email $subject = sprintf(__('[%s] Subscription Cancelled', 'mgm'), $blogname); $message = __('This is an automatic notification from %1$s to %2$s (%3$s). This is a notification to inform you that your subscription has been cancelled. For more information please contact %4$s', 'mgm'); $message = sprintf($message, $blogname, $user->display_name, $user->user_email, $system_obj->setting['admin_email']); // send email notification to user mgm_mail($user->user_email, $subject, $message); // notify admin, only if gateway emails on if (!$dge) { $subject = "[{$blogname}] {$user->user_email} - {$new_status}"; $message = "\tUser display name: {$user->display_name}\n\n<br />\r\r\n\t\t\t\tUser email: {$user->user_email}\n\n<br />\r\r\n\t\t\t\tUser ID: {$user->ID}\n\n<br />\r\r\n\t\t\t\tMembership Type: {$membership_type}\n\n<br />\r\r\n\t\t\t\tNew status: {$new_status}\n\n<br />\r\r\n\t\t\t\tStatus message: {$member->status_str}\n\n<br />\t\t\t\t\t\r\r\n\t\t\t\tPayment Mode: Cancelled\n\n<br />\r\r\n\t\t\t\tPOST Data was: \n\n<br /><br /><pre>" . print_r($_POST, true) . '</pre>'; mgm_mail($system_obj->setting['admin_email'], $subject, $message); } // after cancellation hook do_action('mgm_membership_subscription_cancelled', array('user_id' => $user_id)); // 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))); // redirect //mgm_redirect('wp-admin/profile.php?page=mgm/profile&unsubscribed=true&unsubscribe_errors='.urlencode($message)); mgm_redirect(mgm_get_custom_url('membership_details', false, array('unsubscribe_errors' => urlencode($message)))); }
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)); }