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))));
     }
 }
예제 #2
0
 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')));
     }
 }
예제 #3
0
 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));
 }
예제 #4
0
 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))));
     }
 }
예제 #5
0
    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))));
        }
    }
예제 #6
0
 /**
  * API helper method update transaction status
  *
  * @param int $id
  * @param string $status
  * @param string $status_text
  * @return int $affected
  * @deprecated 
  * @see mgm_update_transaction_status()
  */
 function _update_transaction_status($id, $status, $status_text)
 {
     // return
     return mgm_update_transaction_status($id, $status, $status_text);
 }
예제 #7
0
 function _buy_post()
 {
     global $wpdb;
     // system
     $system_obj = mgm_get_class('system');
     $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($_REQUEST['custom']);
     // local var
     extract($custom);
     // find user
     if ($user_id) {
         $user = get_userdata($user_id);
     }
     // blog
     $blogname = get_option('blogname');
     //getting purchase post title and & price - issue #981
     $post_obj = mgm_get_post($post_id);
     $purchase_cost = mgm_convert_to_currency($post_obj->purchase_cost);
     $post = get_post($post_id);
     $post_title = $post->post_title;
     // tran
     $tran_success = false;
     // status success
     $tran_success = true;
     // status
     $status_str = __('Last payment was successful', 'mgm');
     // emails not for guest
     if ($user_id) {
         // subject
         $subject = $system_obj->get_template('payment_success_email_template_subject', array('blogname' => $blogname), true);
         // body
         $message = $system_obj->get_template('payment_success_email_template_body', array('blogname' => $blogname, 'name' => $user->display_name, 'post_title' => $post_title, 'purchase_cost' => $purchase_cost, 'email' => $user->user_email, 'admin_email' => $system_obj->setting['admin_email']), true);
         //update coupon usage - issue #1421
         do_action('mgm_update_coupon_usage', array('user_id' => $user_id));
     }
     // transation id
     $transaction_id = $this->_get_transaction_id('custom', $_REQUEST);
     // hook args
     $args = array('post_id' => $post_id, 'transaction_id' => $transaction_id);
     // user purchase
     if (isset($user_id) && (int) $user_id > 0) {
         $args['user_id'] = $user_id;
     } else {
         // guest purchase
         $args['guest_token'] = $guest_token;
     }
     // after succesful payment hook
     do_action('mgm_buy_post_transaction_success', $args);
     // backward compatibility
     do_action('mgm_post_purchase_payment_success', $args);
     // new organized name
     // do action
     do_action('mgm_return_post_purchase_payment_' . $this->module, array('post_id' => $post_id));
     // new, individual
     do_action('mgm_return_post_purchase_payment', array('post_id' => $post_id));
     // new, global
     // notify user
     if (!$dpne) {
         // mail
         if ($user_id && $this->send_payment_email($_REQUEST['custom'])) {
             //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 an email to the buyer
             //update as email sent
             $this->update_paymentemail_sent($_REQUEST['custom']);
         }
     }
     // mark as purchased
     if (isset($guest_token)) {
         // issue #1421
         if (isset($coupon_id) && isset($coupon_code)) {
             do_action('mgm_update_coupon_usage', array('guest_token' => $guest_token, 'coupon_id' => $coupon_id));
             $this->_set_purchased(NULL, $post_id, $guest_token, $_REQUEST['custom'], $coupon_code);
         } else {
             $this->_set_purchased(NULL, $post_id, $guest_token, $_REQUEST['custom']);
         }
     } else {
         $this->_set_purchased($user_id, $post_id, NULL, $_REQUEST['custom']);
     }
     // status
     $status = __('The post was purchased successfully', 'mgm');
     // transaction status
     mgm_update_transaction_status($_REQUEST['custom'], $status, $status_str);
     // notify admin, only if gateway emails on
     if (!$dge) {
         // not for guest
         if ($user_id) {
             // subject
             $subject = "[" . $blogname . "] Admin Notification: " . $user->user_email . " purchased post " . $post_id;
             // message
             $message = "User display name: {$user->display_name}<br />\r\r\n\t\t\t\t\t\t\tUser email: {$user->user_email}<br />\r\r\n\t\t\t\t\t\t\tUser ID: {$user->ID}<br />Status: " . $status . "<br />\r\r\n\t\t\t\t\t\t\tAction: Purchase post:" . $subject . "<br /><br />" . $message;
         } else {
             $subject = "[" . $blogname . "] Admin Notification: Guest[IP: " . mgm_get_client_ip_address() . "] purchased post " . $post_id;
             $message = "Guest Purchase";
         }
         // mail
         mgm_mail($system_obj->setting['admin_email'], $subject, $message);
     }
 }
 function _member_update_status(&$member, $user_id, $system_obj)
 {
     // return
     $return = array('old_status' => $member->status);
     // set new status
     $member->status = $return['new_status'] = mgm_post_var('upd_status');
     // override_rebill_status_check
     $override_rebill_status_check = mgm_post_var('override_rebill_status_check');
     // disable payment/rebill status check
     if (bool_from_yn($override_rebill_status_check)) {
         $member->last_payment_check = 'disabled';
     }
     // active for manualpay
     if ($member->status == MGM_STATUS_ACTIVE) {
         // for manual pay
         if ($member->payment_info->module == 'mgm_manualpay') {
             // MARK status reset for manual pay upgrade
             $member->status_reset_on = NULL;
             // unset
             unset($member->status_reset_on);
             // mark as paid
             $member->status_str = __('Last payment was successful', 'mgm');
             // send user notification: issue#: 537
             if ($return['old_status'] == MGM_STATUS_PENDING) {
                 // transaction status -issue #1287
                 mgm_update_transaction_status($member->transaction_id, $member->status, $member->status_str);
                 // userdata
                 $userdata = get_userdata($user_id);
                 $blogname = get_option('blogname');
                 //issue #1263
                 if ($member->subscribed == 'Y') {
                     do_action('mgm_return_subscription_payment', array('user_id' => $user_id, 'acknowledge_ar' => true, 'mgm_member' => $member));
                 }
                 // subject
                 $subject = $system_obj->get_template('payment_active_email_template_subject', array('blogname' => $blogname), true);
                 // param
                 $b_args = array('blogname' => $blogname, 'name' => mgm_stripslashes_deep($userdata->display_name), 'email' => $userdata->user_email, 'admin_email' => $system_obj->get_setting('admin_email'));
                 // body
                 $message = $system_obj->get_template('payment_active_email_template_body', $b_args, true);
                 //issue #862
                 $subject = mgm_replace_email_tags($subject, $user_id);
                 $message = mgm_replace_email_tags($message, $user_id);
                 // mail
                 mgm_mail($userdata->user_email, $subject, $message);
                 //send an email to the buyer
                 // send notification - issue #1758
                 if ($system_obj->setting['enable_new_user_email_notifiction_after_user_active'] == 'Y') {
                     $user_pass = mgm_decrypt_password($member->user_password, $user_id);
                     do_action('mgm_register_user_notification', $user_id, $user_pass);
                 }
                 // unset
                 unset($userdata, $message);
             }
         } else {
             // mark as paid
             $member->status_str = __('Last rebill cycle processed manually', 'mgm');
         }
     }
     // return
     return $return;
 }
예제 #9
0
 function process_return()
 {
     // only save once success, there may be multiple try
     if (isset($_REQUEST['custom']) && !empty($_REQUEST['custom'])) {
         // process
         $transid = mgm_get_var('transid', '', true);
         $transid = mgm_decode_id($transid);
         $this->process_notify($transid);
         // query arg
         $query_arg = array('status' => 'success');
         // is a post redirect?
         $post_redirect = $this->_get_post_redirect($_REQUEST['custom']);
         // set post redirect
         if ($post_redirect !== false) {
             $query_arg['post_redirect'] = $post_redirect;
         }
         //autoredirection to profile page
         if (is_numeric($transid)) {
             // update transaction
             mgm_update_transaction_status($transid, MGM_STATUS_ACTIVE, '');
             // is a register redirect?
             $register_redirect = $this->_auto_login($transid);
             // set register redirect
             if ($register_redirect !== false) {
                 $query_arg['register_redirect'] = $register_redirect;
             }
         }
         // redirect
         mgm_redirect(add_query_arg($query_arg, $this->_get_thankyou_url()));
     } else {
         // teat as error
         $errors = 'error in processing your request';
         // redirect
         mgm_redirect(add_query_arg(array('status' => 'error', 'errors' => $errors), $this->_get_thankyou_url()));
     }
 }
 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));
 }