/**
 * get payment processed page html
 *
 * @param void
 * @return string
 * @since 1.5
 */
function mgm_get_payment_processed_page_html()
{
    // home url
    $home_url = trailingslashit(get_option('siteurl'));
    // current module
    $module = mgm_request_var('module', '', true);
    // check
    if (!mgm_is_valid_module($module) || empty($module)) {
        // redirect
        mgm_redirect($home_url);
    }
    // init
    $html = '';
    // refresh wait time
    $refresh_wait_time = 5;
    //in seconds
    // redirect url
    $redirect_url = '';
    // redirect
    $do_redirect = true;
    // refresh header for post redirecr
    if (isset($_GET['post_redirect'])) {
        // redirect url
        $redirect_url = strip_tags($_GET['post_redirect']);
    } elseif (isset($_GET['register_redirect'])) {
        // redirect url, if 1/true, redirect to profile, else its register & redirect url
        if ($_GET['register_redirect'] != 1) {
            $redirect_url = strip_tags($_GET['register_redirect']);
        } else {
            // auto login
            $system_obj = mgm_get_class('system');
            //issue# 1392
            $current_user_id = get_current_user_id();
            // check if set
            if ($autologin_redirect_url = $system_obj->get_setting('autologin_redirect_url')) {
                $page_title = '';
                $redirect_url = $autologin_redirect_url;
                //short code support
                if (!empty($current_user_id)) {
                    $user = get_userdata($current_user_id);
                    $redirect_url = str_replace('[username]', $user->user_login, $redirect_url);
                }
            } elseif (mgm_get_user_package_redirect_url($current_user_id) && $current_user_id) {
                $page_title = '';
                $redirect_url = mgm_get_user_package_redirect_url($current_user_id);
            } else {
                $page_title = 'Profile';
                $redirect_url = mgm_get_custom_url('profile');
            }
        }
        // check not logged in, #948 paypal fails to redirect
        if (!is_user_logged_in()) {
            // user login
            if (isset($_GET['trans_ref'])) {
                // re construct redirect url
                $redirect_url = mgm_get_custom_url('login', false, array('trans_ref' => strip_tags($_GET['trans_ref']), 'auto_login' => true, 'redirect_to' => $redirect_url));
            }
        }
    }
    // check and set
    if (!empty($redirect_url) && $do_redirect) {
        // alter
        $redirect_url = apply_filters('mgm_register_redirect', $redirect_url);
        // no headers
        if (!headers_sent()) {
            @header(sprintf('Refresh: %d;url=%s', $refresh_wait_time, $redirect_url));
        } else {
            $html .= sprintf('<script language="javascript">window.setTimeout(function(){window.location.href="%s";}, %d)</script>', $redirect_url, (int) $refresh_wait_time * 5);
        }
    }
    // module object
    $module_object = mgm_get_module($module, 'payment');
    // [domain]/subscribe/?method=payment_processed&module=mgm_paypal&status=success
    // [domain]/subscribe/?method=payment_processed&module=mgm_paypal&status=cancel
    // status and message
    $arr_shortcodes = array('transaction_amount' => '');
    // check
    if (!isset($_GET['status']) || $_GET['status'] == 'success') {
        // mgm_replace_oldlinks_with_tag is a patch for replacing the old link
        $message = $module_object->setting['success_message'] ? mgm_replace_oldlinks_with_tag($module_object->setting['success_message'], 'payment_success_message') : $system_obj->get_template('payment_success_message', array(), true);
        // get price
        if (isset($_GET['trans_ref'])) {
            // tarns
            $_GET['trans_ref'] = mgm_decode_id(strip_tags($_GET['trans_ref']));
            // get transaction data
            $trans = mgm_get_transaction($_GET['trans_ref']);
            // set amount
            if ($trans['module'] == 'manualpay') {
                $arr_shortcodes['transaction_amount'] = $trans['data']['cost'] . ' ' . $trans['data']['currency'];
            }
            // update googe analytics:
            $html .= apply_filters('mgm_payment_processed_page_analytics', $trans);
            // @todo, callback in template function
            // mgm_update_google_analytics($trans);	deprecated, use hook
        }
    } else {
        if (!isset($_GET['status']) || $_GET['status'] == 'cancel') {
            // set message
            $message = __('You have cancelled the transaction.', 'mgm');
        } else {
            // mgm_replace_oldlinks_with_tag is a patch for replacing the old link
            $message = $module_object->setting['failed_message'] ? mgm_replace_oldlinks_with_tag($module_object->setting['failed_message'], 'payment_failed_message') : $system_obj->get_template('payment_failed_message', array(), true);
        }
    }
    // parse short codes:
    // [transaction_amount] = amount paid
    foreach ($arr_shortcodes as $code => $value) {
        $message = str_replace('[' . $code . ']', $value, $message);
    }
    // html
    $html .= mgm_stripslashes_deep(mgm_get_message_template($message));
    // get error
    if (isset($_GET['errors'])) {
        // get errors
        $errors = explode('|', strip_tags($_GET['errors']));
        // html
        $html .= sprintf('<h3> %s </h3><div><ul>', __('Messages', 'mgm'));
        // loop
        foreach ($errors as $error) {
            $html .= sprintf('<li> %s </li>', $error);
        }
        // end
        $html .= '</ul></div>';
    }
    // auto redirect to post purchased
    if (isset($_GET['post_redirect'])) {
        // message
        $m = sprintf(__('You will be automatically redirected to the post you purchased within %d seconds. Please <a href="%s"> click here </a> to go to the page. ', 'mgm'), $refresh_wait_time, strip_tags($_GET['post_redirect']));
        // set
        $html .= sprintf('<b>%s</b>', $m);
    } elseif (isset($_GET['register_redirect'])) {
        // auto login redirect
        // message
        $m = sprintf(__('You will be automatically redirected to your %s page within %d seconds. Please <a href="%s"> click here </a> to go to the page. ', 'mgm'), $_GET['register_redirect'] == 1 ? __($page_title, 'mgm') : __('Post', 'mgm'), $refresh_wait_time, $redirect_url);
        // set
        $html .= sprintf('<b>%s</b>', $m);
    }
    // return
    return apply_filters('mgm_payment_processed_page_html', $html);
}
 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')));
     }
 }
/**
 * register widget : multiple instance
 * frontend instance
 *
 * @param array $args
 * @param array $widget_args
 * @return void
 * @since 1.0
 */
function mgm_sidebar_widget_registration($args, $widget_args = 1)
{
    global $wpdb, $user_ID, $current_user, $mgm_sidebar_widget;
    extract($args, EXTR_SKIP);
    if (is_numeric($widget_args)) {
        $widget_args = array('number' => $widget_args);
    }
    $widget_args = wp_parse_args($widget_args, array('number' => -1));
    extract($widget_args, EXTR_SKIP);
    // options init
    $options = $mgm_sidebar_widget->register_widget;
    // mgm_pr($options);
    // check
    if (!isset($options[$number])) {
        return;
    }
    //skip widget if BUDDYPRESS is loaded
    if (defined('BP_VERSION')) {
        return;
    }
    //skip registation page:
    if (in_array(trailingslashit(mgm_current_url()), array(trailingslashit(mgm_get_custom_url('register'))), trailingslashit(mgm_get_custom_url('register', true)))) {
        return;
    }
    // skip if on transactions page:
    foreach (mgm_get_payment_page_query_vars() as $query_var) {
        // set if
        if ($isset_query_var = mgm_get_query_var($query_var)) {
            return;
        }
    }
    // check
    if (isset($_GET['method']) && preg_match('/payment_/', $_GET['method'])) {
        return;
    }
    // set
    $title = isset($options[$number]['title']) ? $options[$number]['title'] : __('Magic Members - Register', 'mgm');
    $intro = isset($options[$number]['intro']) ? $options[$number]['intro'] : '';
    $use_custom_fields = isset($options[$number]['use_custom_fields']) ? $options[$number]['use_custom_fields'] : true;
    //Issue #777
    $default_subscription_pack = isset($options[$number]['default_subscription_pack']) ? $options[$number]['default_subscription_pack'] : false;
    // user looged in
    if (!$user_ID) {
        // if hide on custom register page
        $post_id = get_the_ID();
        // post custom register
        if ($post_id > 0) {
            // if match
            if (get_permalink($post_id) == mgm_get_custom_url('register')) {
                return "";
            }
        }
        // start actual widget
        echo $before_widget;
        if ($title) {
            echo $before_title . $title . $after_title;
        }
        // echo $intro;
        echo mgm_sidebar_user_register_form($use_custom_fields, $default_subscription_pack);
        echo $after_widget;
    }
}
/**
 * geust lockdown
 */
function mgm_guest_lockdown()
{
    // not for admin
    if (is_super_admin() || is_user_logged_in()) {
        return true;
    }
    // system
    $system_obj = mgm_get_class('system');
    // check
    if (bool_from_yn($system_obj->get_setting('enable_guest_lockdown'))) {
        // current url
        $current_url = mgm_get_current_url();
        // allowed urls
        $allowed_urls = array();
        // redirect
        if ($lockdown_redirect_url = $system_obj->get_setting('guest_lockdown_redirect_url')) {
            $allowed_urls[] = $lockdown_redirect_url;
        }
        // known urls
        $known_urls = array('login', 'register', 'lostpassword', 'transactions', 'purchase_content', 'purchase_subscription', 'payments');
        // login
        foreach ($known_urls as $url) {
            $allowed_urls[] = mgm_get_custom_url($url);
        }
        //issue #1224
        $upload_url = site_url('upload?file_upload=image');
        $allowed_urls[] = $upload_url;
        // As /payments is still being used in module urls
        $allowed_urls[] = untrailingslashit(get_option('siteurl')) . '/payments';
        // make unique
        $allowed_urls = array_unique($allowed_urls);
        // default redirect
        $redirect = true;
        // allowed
        foreach ($allowed_urls as $allowed_url) {
            // remove trailing slash as some of the payment gateway notify urls don't have trailing slash after transaction url
            $allowed_url = untrailingslashit($allowed_url);
            // match exact or pattenr
            if ($allowed_url == $current_url || preg_match("#^" . preg_quote($allowed_url, '/') . "#", $current_url)) {
                $redirect = false;
                break;
            }
        }
        // redirect
        if ($redirect) {
            // first
            if ($redirect_url = array_shift($allowed_urls)) {
                // leave favicon
                if (!preg_match('/\\.ico$/', $current_url)) {
                    // log
                    // mgm_log($current_url . ' == ' .$redirect_url, __FUNCTION__);
                    // redirect
                    wp_redirect($redirect_url);
                    exit;
                }
                return true;
            }
        }
    }
    // return
    return true;
}
 function get_template($name, $data = array(), $parse = false)
 {
     // by name
     switch ($name) {
         case 'tos':
         case 'subs_intro':
         case 'text_guest_purchase_pre_button':
         case 'text_guest_purchase_pre_register':
             return mgm_get_template($name, NULL, 'messages');
             break;
         case 'private_text':
         case 'private_text_no_access':
         case 'private_text_purchasable':
         case 'private_text_purchasable_login':
         case 'private_text_purchasable_pack_login':
         case 'private_text_postdelay_no_access':
             // parse enabled
             if ($parse) {
                 // parse
                 $message_content = mgm_get_template($name, $data, 'messages');
                 // set template
                 $template = mgm_get_template('private_text_template', NULL, 'templates');
                 // return
                 return str_replace('[message]', $message_content, $template);
             } else {
                 // parse disabled
                 return mgm_get_template($name, NULL, 'messages');
             }
             break;
         case 'login_errmsg_null':
         case 'login_errmsg_expired':
         case 'login_errmsg_trial_expired':
         case 'login_errmsg_pending':
         case 'login_errmsg_cancelled':
         case 'login_errmsg_default':
         case 'login_errmsg_date_range':
         case 'login_errmsg_multiple_logins':
             // parse enabled
             if ($parse) {
                 // argas
                 $q_args = array('action' => '[[ACTION]]');
                 //
                 if (bool_from_yn($this->setting['enable_email_as_username'])) {
                     $q_args = array_merge($q_args, array('user_id' => '[[USERID]]'));
                 } else {
                     $q_args = array_merge($q_args, array('username' => '[[USERNAME]]'));
                 }
                 // set url data
                 $data['subscription_url'] = add_query_arg($q_args, mgm_get_custom_url('transactions'));
                 // return
                 return mgm_get_template($name, $data, 'messages');
             } else {
                 // parse disabled
                 return mgm_get_template($name, NULL, 'messages');
             }
             break;
         case 'pack_desc_template':
         case 'pack_desc_lifetime_template':
         case 'pack_desc_date_range_template':
         case 'ppp_pack_template':
         case 'register_form_row_template':
         case 'profile_form_row_template':
         case 'register_form_row_autoresponder_template':
             // separate
             // parse enabled
             if ($parse) {
                 // return
                 return mgm_get_template($name, $data, 'templates');
             } else {
                 // parse disabled
                 return mgm_get_template($name, NULL, 'templates');
             }
             break;
         case 'reminder_email_template_subject':
         case 'reminder_email_template_body':
         case 'registration_email_template_subject':
         case 'registration_email_template_body':
         case 'new_user_notification_email_template_subject':
         case 'new_user_notification_email_template_body':
         case 'user_upgrade_notification_email_template_subject':
         case 'user_upgrade_notification_email_template_body':
         case 'payment_success_email_template_subject':
         case 'payment_success_email_template_body':
         case 'payment_success_subscription_email_template_body':
         case 'payment_failed_email_template_subject':
         case 'payment_failed_email_template_body':
         case 'payment_active_email_template_subject':
         case 'payment_active_email_template_body':
         case 'payment_pending_email_template_subject':
         case 'payment_pending_email_template_body':
         case 'payment_error_email_template_subject':
         case 'payment_error_email_template_body':
         case 'payment_unknown_email_template_subject':
         case 'payment_unknown_email_template_body':
         case 'subscription_cancelled_email_template_subject':
         case 'subscription_cancelled_email_template_body':
         case 'retrieve_password_email_template_subject':
         case 'retrieve_password_email_template_body':
         case 'lost_password_email_template_subject':
         case 'lost_password_email_template_body':
             // parse enabled
             if ($parse) {
                 return mgm_get_template($name, $data, 'emails');
             } else {
                 // parse disabled
                 return mgm_get_template($name, NULL, 'emails');
             }
             break;
         case 'payment_success_title':
         case 'payment_success_message':
         case 'payment_failed_title':
         case 'payment_failed_message':
             // parse enabled
             if ($parse) {
                 // set urls
                 $data['home_url'] = trailingslashit(get_option('siteurl'));
                 $data['site_url'] = trailingslashit(site_url());
                 $data['register_url'] = trailingslashit(mgm_get_custom_url('register'));
                 // login or profile
                 $data['login_url'] = trailingslashit(mgm_get_custom_url(is_user_logged_in() ? 'profile' : 'login'));
                 // return
                 return mgm_get_template($name, $data, 'messages');
             } else {
                 // parse disabled
                 return mgm_get_template($name, NULL, 'messages');
             }
             break;
         default:
             return sprintf(__('%s not defined.', 'mgm'), $name);
             break;
     }
 }
/**
 * Replace email short tags with contnet 
 *
 * @param string $message and $user_id 
 * @return string $message
 */
function mgm_replace_email_tags($message, $user_id = NULL)
{
    global $wpdb;
    // has user
    if (!$user_id) {
        // cusrrent user
        $current_user = wp_get_current_user();
        // set
        $user_id = $current_user->ID;
    } else {
        // get user
        $current_user = new WP_User($user_id);
    }
    // mgm member
    $member = mgm_get_member($user_id);
    $system_obj = mgm_get_class('system');
    // user
    if ($user_id > 0) {
        // display name
        if (isset($current_user->first_name) && !empty($current_user->first_name)) {
            $name = $current_user->first_name;
        } elseif (isset($member->custom_fields->first_name) && !empty($member->custom_fields->first_name)) {
            $name = $member->custom_fields->first_name;
        } else {
            $name = $current_user->display_name;
        }
        //first name
        if (isset($member->custom_fields->first_name) && !empty($member->custom_fields->first_name)) {
            $first_name = $member->custom_fields->first_name;
        }
        //last name
        if (isset($member->custom_fields->last_name) && !empty($member->custom_fields->last_name)) {
            $last_name = $member->custom_fields->last_name;
        }
        //user name
        $username = $current_user->user_login;
        //password
        $password = mgm_decrypt_password($member->user_password, $user_id);
        //client email
        $email = $current_user->user_email;
        //reason email
        $reason = $member->status_str;
        //expire_date
        $expire_date = $member->expire_date;
        //just fetch the key from db as it is already updated
        $key = $current_user->user_activation_key;
        //passwordlink
        $passwordlink = network_site_url("wp-login.php?action=rp&key={$key}&login=" . rawurlencode($username), 'login');
        //amount email -#issue 1069
        $amount = $member->amount;
        //membership_type email
        $membership_type = $member->membership_type;
    }
    //admin_email
    $admin_email = $system_obj->get_setting('admin_email');
    // blog name
    $blogname = get_option('blogname');
    // siteurl name
    $siteurl = network_site_url();
    //login_url
    $login_url = wp_login_url();
    //loginurl
    $loginurl = mgm_get_custom_url('login');
    // issue #1177
    $currency_sign = mgm_get_currency_symbols($system_obj->setting['currency']);
    //email short tags array
    $tags = array('name', 'username', 'password', 'login_url', 'admin_email', 'email', 'blogname', 'siteurl', 'loginurl', 'reason', 'expire_date', 'passwordlink', 'first_name', 'last_name', 'amount', 'membership_type', 'currency_sign');
    // loop
    foreach ($tags as $tag) {
        // check
        if (!isset(${$tag})) {
            ${$tag} = '';
        }
        // set
        $message = str_replace('[' . $tag . ']', ${$tag}, $message);
    }
    // return
    return $message;
}
    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))));
        }
    }
/**
 * get post purchase buttons
 * final step for post purchase
 *
 * @param void
 * @return $html
 */
function mgm_get_post_purchase_buttons()
{
    // get current user data - issue #1421
    $user = wp_get_current_user();
    // pack
    $pack = NULL;
    // addon options
    if ($addon_option_ids = mgm_post_var('addon_options')) {
        $addon_options = mgm_get_addon_options_only($addon_option_ids);
        // mgm_pr($addon_options);
    }
    // post purchase
    if (isset($_POST['post_id'])) {
        //issue #1250
        if (isset($_POST['mgm_postpurchase_field']['coupon']) && !empty($_POST['mgm_postpurchase_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_postpurchase_field']['coupon']))) {
                    //redirect back to the form
                    $q_arg = array('error_field' => 'Coupon', 'error_type' => 'invalid', 'error_field_value' => $_POST['mgm_postpurchase_field']['coupon']);
                    $redirect = add_query_arg($q_arg, $_POST['form_action']);
                    mgm_redirect($redirect);
                    exit;
                }
            }
        }
        // post id
        $post_id = $_POST['post_id'];
        // gete mgm data
        $post_obj = mgm_get_post($post_id);
        $cost = mgm_convert_to_currency($post_obj->purchase_cost);
        $product = $post_obj->product;
        $allowed_modules = $post_obj->allowed_modules;
        // post data
        $post = get_post($post_id);
        $title = $post->post_title;
        // item name -issue #1380
        $item_name = apply_filters('mgm_post_purchase_itemname', sprintf(__('Purchase Post - %s', 'mgm'), $title));
        // set pack
        $pack = array('duration' => 1, 'item_name' => $item_name, 'buypost' => 1, 'cost' => $cost, 'title' => $title, 'product' => $product, 'post_id' => $post_id, 'allowed_modules' => $allowed_modules);
    } else {
        if (isset($_POST['postpack_id'])) {
            // post pack purchase
            //issue #1250
            if (isset($_POST['mgm_postpurchase_field']['coupon']) && !empty($_POST['mgm_postpurchase_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_postpurchase_field']['coupon']))) {
                        //redirect back to the form
                        $q_arg = array('error_field' => 'Coupon', 'error_type' => 'invalid', 'error_field_value' => $_POST['mgm_postpurchase_field']['coupon']);
                        $redirect = add_query_arg($q_arg, $_POST['form_action']);
                        mgm_redirect($redirect);
                        exit;
                    }
                }
            }
            // post pack purchase
            $postpack_id = $_POST['postpack_id'];
            // pcak id
            $postpack_post_id = $_POST['postpack_post_id'];
            // post id where pack is listed, redirect here
            // get pack
            $postpack = mgm_get_postpack($postpack_id);
            $cost = mgm_convert_to_currency($postpack->cost);
            $product = json_decode($postpack->product, true);
            $modules = json_decode($postpack->modules, true);
            //mgm_pr($postpack);
            // item name -issue #1380
            $item_name = apply_filters('mgm_postpack_purchase_itemname', sprintf(__('Purchase Post Pack - %s', 'mgm'), $postpack->name));
            // post id
            $post_id = mgm_get_postpack_posts_csv($postpack_id);
            // set pack
            $pack = array('duration' => 1, 'item_name' => $item_name, 'buypost' => 1, 'cost' => $cost, 'title' => $postpack->name, 'product' => $product, 'post_id' => $post_id, 'postpack_id' => $postpack_id, 'postpack_post_id' => $postpack_post_id, 'allowed_modules' => $modules);
        }
    }
    // check
    if (!$pack) {
        return __('Error in Payment! No data available ');
        exit;
    }
    // guest token	-issue #1421
    if (isset($_POST['guest_purchase']) && $_POST['guest_purchase'] == TRUE && $user->ID <= 0) {
        $pack['guest_token'] = sanitize_title_for_query(mgm_create_token());
    }
    // addon options
    if (isset($addon_options) && !empty($addon_options)) {
        $pack['addon_options'] = $addon_options;
    }
    // get coupon
    $post_purchase_coupon = mgm_save_partial_fields(array('on_postpurchase' => true), 'mgm_postpurchase_field', $pack['cost'], false, 'postpurchase');
    // alter
    mgm_get_post_purchase_coupon_pack($post_purchase_coupon, $pack);
    // Eg: $_POST['mgm_payment_gateways'] = mgm_paypal
    $cf_payment_gateways = isset($_POST['mgm_payment_gateways']) && !empty($_POST['mgm_payment_gateways']) ? $_POST['mgm_payment_gateways'] : null;
    // bypass step2 if payment gateway is submitted: issue #: 469
    if (!is_null($cf_payment_gateways)) {
        // get pack
        // mgm_get_upgrade_coupon_pack($member, $selected_pack);
        // cost
        if ((double) $pack['cost'] > 0) {
            //get an object of the payment gateway:
            $mod_obj = mgm_get_module($cf_payment_gateways, 'payment');
            // tran options
            $tran_options = array('user_id' => $user->ID);
            // is register & purchase
            if (isset($_POST['post_id'])) {
                $tran_options['post_id'] = (int) $_POST['post_id'];
            }
            // postpack id
            if (isset($_POST['postpack_id'])) {
                $tran_options['postpack_id'] = (int) $_POST['postpack_id'];
            }
            // is register & purchase postpack
            if (isset($_POST['postpack_post_id']) && isset($_POST['postpack_id'])) {
                $tran_options['postpack_post_id'] = (int) $_POST['postpack_post_id'];
                $tran_options['postpack_id'] = (int) $_POST['postpack_id'];
            }
            // create transaction
            $tran_id = mgm_add_transaction($pack, $tran_options);
            // bypass directly to process return if manual payment:
            if ($cf_payment_gateways == 'mgm_manualpay') {
                // set
                $_POST['custom'] = $tran_id;
                // direct call to module return function:
                $mod_obj->process_return();
                // exit
                exit;
            }
            // encode id:
            $tran_id = mgm_encode_id($tran_id);
            $redirect = $mod_obj->_get_endpoint('html_redirect', true);
            $redirect = add_query_arg(array('tran_id' => $tran_id), $redirect);
            // redirect
            mgm_redirect($redirect);
            // this goes to subscribe, mgm_functions.php/mgm_get_subscription_buttons
            // exit
            exit;
        }
    }
    // get payment modules
    $a_payment_modules = mgm_get_class('system')->get_active_modules('payment');
    // 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;
            }
            // store
            $payment_modules[] = $payment_module;
        }
    }
    // init
    $button = '';
    // transaction
    $tran_id = NULL;
    $button_printed = 0;
    // loop modules
    foreach ($payment_modules as $module) {
        // object
        $mod_obj = mgm_get_module($module, 'payment');
        // check buypost support
        if (in_array('buypost', $mod_obj->supported_buttons)) {
            // create transaction
            if (!$tran_id) {
                $tran_id = mgm_add_transaction($pack);
            }
            // button code
            if (isset($pack['allowed_modules'])) {
                // Issue #1562: If no payment module is selected, display all supported modules
                if (!empty($pack['allowed_modules']) && FALSE === in_array($module, $pack['allowed_modules'])) {
                    continue;
                }
            }
            $button_code = $mod_obj->get_button_buypost(array('pack' => $pack, 'tran_id' => $tran_id), true);
            $button_printed++;
            // get button
            $button .= "<div class='mgm_custom_filed_table'>" . $button_code . "</div>";
        }
    }
    // none active
    if ($button_printed == 0) {
        $button .= sprintf('<p class="mgm-no-module"> %s </p>', __('No Payment module active for this Content Purchase.', 'mgm'));
    }
    // if Cost is zero, then process using free module.: issue#: 883
    if ($tran_id && $pack['cost'] == 0 && in_array('mgm_free', $a_payment_modules) && mgm_get_module('mgm_free')->is_enabled()) {
        // module
        $module = 'mgm_free';
        // payments url
        $payments_url = mgm_get_custom_url('transactions');
        // query_args
        $query_args = array('method' => 'payment_return', 'module' => $module, 'custom' => $tran_id);
        // redirector
        if (isset($_REQUEST['redirector'])) {
            // set
            $query_args['redirector'] = $_REQUEST['redirector'];
        }
        // redirect to module to mark the payment as complete
        $redirect = add_query_arg($query_args, $payments_url);
        // redirect
        mgm_redirect($redirect);
    }
    // html
    $return = '<div class="post_purchase_select_gateway">' . __('Please Select a Payment Gateway.', 'mgm') . '</div>' . $button;
    // return
    return $return;
}
/**
 * login widget : multiple instance
 * front end instance
 *
 * @param array $args
 * @param array $widget_args
 * @return void
 * @since 1.0
 */
function mgm_sidebar_widget_login($args, $widget_args = 1)
{
    global $user_ID, $current_user, $mgm_sidebar_widget;
    // if hide on custom login page
    $post_id = get_the_ID();
    // post custom register
    if ($post_id > 0) {
        // if match
        if (get_permalink($post_id) == mgm_get_custom_url('login')) {
            return "";
        }
    }
    // actual widget
    extract($args, EXTR_SKIP);
    if (is_numeric($widget_args)) {
        $widget_args = array('number' => $widget_args);
    }
    $widget_args = wp_parse_args($widget_args, array('number' => -1));
    extract($widget_args, EXTR_SKIP);
    // get widget options
    $options = $mgm_sidebar_widget->login_widget;
    // validate
    if (!isset($options[$number])) {
        return;
    }
    // home url
    $home_url = home_url();
    // get options
    $title_logged_in = isset($options[$number]['title_logged_in']) ? $options[$number]['title_logged_in'] : __('Magic Membership Details', 'mgm');
    $title_logged_out = isset($options[$number]['title_logged_out']) ? $options[$number]['title_logged_out'] : __('Login', 'mgm');
    $profile_text = isset($options[$number]['profile_text']) ? $options[$number]['profile_text'] : __('Profile', 'mgm');
    $membership_details_text = isset($options[$number]['membership_details_text']) ? $options[$number]['membership_details_text'] : __('Membership Details', 'mgm');
    $membership_contents_text = isset($options[$number]['membership_contents_text']) ? $options[$number]['membership_contents_text'] : __('Membership Contents', 'mgm');
    $logout_text = isset($options[$number]['logout_text']) ? $options[$number]['logout_text'] : __('Logout', 'mgm');
    $register_text = isset($options[$number]['register_text']) ? $options[$number]['register_text'] : __('Register', 'mgm');
    $lostpassword_text = isset($options[$number]['lostpassword_text']) ? $options[$number]['lostpassword_text'] : __('Lost your Password?', 'mgm');
    $logged_out_intro = isset($options[$number]['logged_out_intro']) ? stripslashes($options[$number]['logged_out_intro']) : '';
    // logged in user view
    if ($user_ID) {
        echo $before_widget;
        if (trim($title_logged_in)) {
            echo $before_title . $title_logged_in . $after_title;
        }
        //>=WP2.7 = DB9872
        if (get_option('db_version') >= 9872) {
            $logout_url = wp_logout_url($home_url);
        } else {
            //$logout_url = trailingslashit($home_url) . 'wp-login.php?action=logout';
            $logout_url = add_query_arg(array('action' => 'logout'), mgm_get_custom_field_array('login'));
        }
        // @todo check the actual reason
        $membership_details_link = mgm_get_custom_url('membership_details');
        $membership_contents_link = mgm_get_custom_url('membership_contents');
        $profile_link = mgm_get_custom_url('profile');
        // issue #945
        // $system_obj = mgm_get_class('system');
        // $membership_details_link 	= esc_html($system_obj->get_setting('membership_details_url'));
        // $membership_contents_link 	= esc_html($system_obj->get_setting('membership_contents_url'));
        // set tmpl
        $logged_in_template = isset($options[$number]['logged_in_template']) ? $options[$number]['logged_in_template'] : $mgm_sidebar_widget->default_text['logged_in_template'];
        $logged_in_template = str_replace('[display_name]', $current_user->display_name, $logged_in_template);
        $logged_in_template = str_replace('[membership_details_url]', $membership_details_link, $logged_in_template);
        $logged_in_template = str_replace('[membership_details_link]', sprintf('<a href="%s">%s</a>', $membership_details_link, $membership_details_text), $logged_in_template);
        $logged_in_template = str_replace('[membership_contents_url]', $membership_contents_link, $logged_in_template);
        $logged_in_template = str_replace('[membership_contents_link]', sprintf('<a href="%s">%s</a>', $membership_contents_link, $membership_contents_text), $logged_in_template);
        $logged_in_template = str_replace('[profile_url]', $profile_link, $logged_in_template);
        $logged_in_template = str_replace('[profile_link]', sprintf('<a href="%s">%s</a>', $profile_link, $profile_text), $logged_in_template);
        //Issue #825
        $logged_in_template = str_replace('[logout_url]', $logout_url, $logged_in_template);
        $logged_in_template = str_replace('[logout_link]', '<a href="' . $logout_url . '">' . $logout_text . '</a>', $logged_in_template);
        echo $logged_in_template;
        echo $after_widget;
    } else {
        echo $before_widget;
        if (trim($title_logged_out)) {
            echo $before_title . $title_logged_out . $after_title;
        }
        echo $logged_out_intro;
        echo mgm_sidebar_user_login_form($register_text, $lostpassword_text);
        echo $after_widget;
    }
}
/**
 * user unsubscribe
 */
function mgm_user_unsubscribe_info($user_id = NULL, $args = array())
{
    // current user
    if (!$user_id) {
        $user = wp_get_current_user();
    } else {
        // by user id
        $user = get_userdata($user_id);
    }
    // return when no user
    if (!isset($user->ID) || isset($user->ID) && (int) $user->ID == 0) {
        return sprintf(__('Please <a href="%s">login</a> to see your unsubscribe button.', 'mgm'), mgm_get_custom_url('login'));
    }
    // member
    $member = mgm_get_member($user->ID);
    // init
    $html = '';
    // button
    $html .= mgm_get_unsubscribe_status_button($member, $user);
    //other members count
    $subs_count = 0;
    // check
    if (isset($member->other_membership_types) && !empty($member->other_membership_types)) {
        // loop
        foreach ($member->other_membership_types as $key => $other_member) {
            //check
            if (!empty($other_member)) {
                //check
                if (is_array($other_member)) {
                    $other_member = mgm_convert_array_to_memberobj($other_member, $user->ID);
                }
                // status button
                $html .= mgm_get_other_unsubscribe_status_button($other_member, $user, $subs_count);
                //check
                if ($subs_count == 0) {
                    $subs_count++;
                }
            }
        }
    }
    //return
    return $html;
}
示例#11
0
echo mgm_get_custom_url('register', false, array('package' => $package_enc));
?>

						</div>
					</div>
					<div class="row brBottom">
						<div class="cell textalignleft width100px">	
							<?php 
_e('Wordpress URL', 'mgm');
?>

						</div>
						<div class="cell width5px">:</div>
						<div class="cell textalignleft">	
							<?php 
echo mgm_get_custom_url('register', true, array('package' => $package_enc));
?>

						</div>
					</div>
					<div class="row brBottom">
						<div class="cell textalignleft width100px">	
							<?php 
_e('Tag', 'mgm');
?>

						</div>
						<div class="cell width5px">:</div>
						<div class="cell textalignleft">	
							<?php 
echo sprintf('[user_register package=%s]', $package);
/**
 * account recover
 */
function mgm_get_complete_registration_url($key = 'email', $key_value)
{
    // get user
    if ($user = get_user_by($key, $key_value)) {
        // member
        $member = mgm_get_member($user->ID);
        // return
        if ($member->status == MGM_STATUS_NULL && empty($member->last_pay_date)) {
            $args = array('action' => 'complete_payment');
            if (bool_from_yn(mgm_get_config('enable_email_as_username'))) {
                $args = array_merge($args, array('user_id' => $user->ID));
            } else {
                $args = array_merge($args, array('username' => $user->user_login));
            }
            // return
            return add_query_arg($args, mgm_get_custom_url('transactions'));
        }
    }
    // false
    return false;
}
示例#13
0
    echo mgm_get_custom_url('register', false, array('membership' => $membership_enc));
    ?>

						</div>
					</div>
					<div class="row">		
						<div class="cell width125px">
							<?php 
    _e('Wordpress URL', 'mgm');
    ?>

						</div>
						<div class="cell width10px">:</div>
						<div class="cell">
							<?php 
    echo mgm_get_custom_url('register', true, array('membership' => $membership_enc));
    ?>

						</div>
					</div>
					<div class="row">		
						<div class="cell width125px"><?php 
    _e('Tag', 'mgm');
    ?>
</div>
						<div class="cell width10px">:</div>
						<div class="cell">
							<?php 
    echo sprintf('[user_register membership=%s]', $membership_type['code']);
    ?>
function mgm_registration_form_facebook_form($fb_registration_form, $callback_url = '')
{
    // system
    $system_obj = mgm_get_class('system');
    // return
    if (isset($_GET['connect']) && $_GET['connect'] == 'facebook_registration') {
        return $fb_registration_form;
    }
    // url
    if (empty($callback_url)) {
        $callback_url = mgm_get_custom_url('register', false, array('connect' => 'facebook_registration'));
    }
    $fields = "";
    // get custom fields on register page
    $cf_register_page = mgm_get_class('member_custom_fields')->get_fields_where(array('display' => array('on_register' => true)));
    // loop to create form template
    foreach ($cf_register_page as $field) {
        if ($field['name'] == 'subscription_options') {
            $opt = mgm_fb_subscription_options_callback($field, 'mgm_register_field', '');
        }
    }
    // registration fields
    $fields = 'fields=[
	            {"name":"name"},
	            {"name":"user_login", "description":"Username", "type":"text"},
	            {"name":"email"},
	            {"name":"mgm_subscription",    "description":"Subscription Options","type":"select",    "options":' . $opt . '}]';
    $fb_registration_form = '<div id="add"></div><div id="container">
        <label>User Registration using <span style="color: #5c75a9">Facebook Registration Plugin</span></label><br/>
        <div id="reg_form">';
    $fb_registration_form .= "<iframe src='http://www.facebook.com/plugins/registration.php?\r\r\n                    client_id=" . $system_obj->setting['facebook_id'] . "&\r\r\n                    redirect_uri=" . $callback_url . "&";
    $fb_registration_form .= $fields . " '";
    $fb_registration_form .= 'scrolling="auto"
                    frameborder="no"
                    style="border:none"
                    allowTransparency="true"
                    width="500"
                    height="600">
            </iframe>
        </div>
    </div>';
    return $fb_registration_form;
}
 function _get_button_data($pack, $tran_id = NULL)
 {
     // system setting
     $system_obj = mgm_get_class('system');
     $user_id = $pack['user_id'];
     $user = get_userdata($user_id);
     // item
     $item = $this->get_pack_item($pack);
     //pack currency over rides genral setting currency - issue #1602
     if (!isset($pack['currency']) || empty($pack['currency'])) {
         $pack['currency'] = $this->setting['currency'];
     }
     // set data
     $data = array('instId' => $this->setting['inst_id'], 'cartId' => $tran_id, 'currency' => $pack['currency'], 'lang' => $this->setting['lang'], 'email' => $user->user_email, 'desc' => $item['name'], 'hideContact' => 0);
     // hideCurrency = 0
     // address fields
     $this->_set_address_fields($user, $data);
     // unit types
     $unit_types = array('d' => 1, 'w' => 2, 'm' => 3, 'y' => 4);
     // unit types
     // subscription purchase with ongoing/limited
     if (!isset($pack['buypost']) && isset($pack['duration_type']) && $pack['num_cycles'] != 1) {
         // does not support one-time recurring
         // worldpay does not allow 1 time subscription @see #1278 issue notes
         // if ($pack['num_cycles'] != 1 && $pack['duration_type']) {// old style
         // type
         $data['M_payment_type'] = 'subscription';
         $data['option'] = 0;
         // check http://www.rbsworldpay.com/support/kb/bg/recurringpayments/rpfp.html -> Regular Agrrements -> Options
         $data['futurePayType'] = 'regular';
         // $data['startDate']   = date('Y-m-d', strtotime('+1 DAY'));@deprecated in favor of trial delay
         $data['startDelayMult'] = 1;
         // 1
         $data['startDelayUnit'] = 1;
         // day	To start the agreement 1 day after the agreement is setup
         // interval
         $data['intervalMult'] = $pack['duration'];
         $data['intervalUnit'] = $unit_types[$pack['duration_type']];
         // 1|3|4 = day|month|year
         // regular charge
         $data['normalAmount'] = $pack['cost'];
         // no of payments, limited
         if ((int) $pack['num_cycles'] > 0) {
             $data['noOfPayments'] = $pack['num_cycles'];
         }
         // trial
         if ($pack['trial_on']) {
             // set initialAmount as trial and normalAmount as recurring
             // #1223
             if ((double) $pack['trial_cost'] > 0.0) {
                 $data['amount'] = $pack['trial_cost'];
                 // instant payment
             }
             /*else{
             			$data['initialAmount'] = $pack['trial_cost'];// first payment
             		}*/
             $data['startDelayMult'] = $pack['trial_duration'];
             // to start the actual after trial settings
             $data['startDelayUnit'] = $unit_types[$pack['trial_duration_type']];
         }
         // signature field
         $amount_field = 'normalAmount';
     } else {
         // type of payment
         $data['M_payment_type'] = 'one-time';
         // signature field
         $amount_field = 'amount';
         // set amount
         $data['amount'] = $pack['cost'];
     }
     // signature
     if ($this->setting['md5_sig']) {
         $data['signatureFields'] = implode(':', array($amount_field, 'currency'));
         $data['signature'] = md5(implode(':', array($this->setting['md5_sig'], $pack['cost'], $pack['currency'])));
     }
     // custom
     $data['M_custom'] = $tran_id;
     // custom parameters:
     $trans_url = mgm_get_custom_url('transactions');
     // args
     $qry_args = array('module' => $this->code, 'method' => 'payment_return', 'transtatus' => 'success', 'transid' => mgm_encode_id($tran_id));
     // include success url to be parsed on Worldpay Gateway resultY.html(success) page
     // success thank you page
     $data['MC_success'] = add_query_arg($qry_args, $trans_url);
     //error page
     $qry_args['transtatus'] = 'error';
     // include error url to be parsed on Worldpay Gateway resultC.html(error/cancel) page
     $data['MC_error'] = add_query_arg($qry_args, $trans_url);
     $data['MC_redirectin'] = 7;
     //redirection in seconds
     $data['MC_sitename'] = get_option('blogname');
     //site name
     // test mode
     if ($this->status == 'test') {
         $data['testMode'] = 100;
     }
     // update currency - issue #1602
     /*		if($pack['currency'] != $this->setting['currency']){
     			$pack['currency'] = $this->setting['currency'];
     		}*/
     // add filter @todo test
     $data = apply_filters('mgm_payment_button_data', $data, $tran_id, $this->module, $pack);
     // update pack/transaction
     mgm_update_transaction(array('data' => json_encode($pack), 'module' => $this->module), $tran_id);
     // data
     return $data;
 }
示例#16
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))));
     }
 }
 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))));
     }
 }
/**
 * custom lost password form
 *
 */
function mgm_user_lostpassword_form($use_default_links = true)
{
    // current url
    $form_action = get_permalink();
    //use permalink() for #1233 XSS vulnerabilities
    // login
    $user_login = '';
    // submit
    if (isset($_POST['wp-submit-lp'])) {
        // check security before processing form
        if (!wp_verify_nonce(mgm_post_var('_mgmnonce_user_lostpassword'), 'user_lostpassword')) {
            mgm_security_error('user_lostpassword');
        }
        // get login - issue #1281
        $user_login = htmlentities(mgm_stripslashes_deep($_POST['user_login']), ENT_QUOTES, "UTF-8");
        // saniize
        $_POST['user_login'] = sanitize_text_field($_POST['user_login']);
        // password or errors
        $errors = mgm_retrieve_password();
        // validate
        if (!is_wp_error($errors)) {
            // redirect
            mgm_redirect(add_query_arg(array('lp_updated' => 'true'), $form_action));
            exit;
        }
    }
    // start form
    $html = "\n";
    // css
    $css_group = mgm_get_css_group();
    // issue #867
    if ($css_group != 'none') {
        $html .= '<link rel="stylesheet" href="' . MGM_ASSETS_URL . 'css/' . $css_group . '/mgm.messages.css" type="text/css" media="all" />';
    }
    //sys obj
    $system_obj = mgm_get_class('system');
    // header
    if ($system_obj->get_setting('enable_default_wp_lost_password') == "Y") {
        $html .= sprintf('<div class="mgm_message">%s</div>', __('Please enter your username or email address. You will receive a link to create a new password via email.', 'mgm'));
    } else {
        $html .= sprintf('<div class="mgm_message">%s</div>', __('Please enter your username or e-mail address. You will receive a new password via e-mail.', 'mgm'));
    }
    // updated
    if (isset($_GET['lp_updated'])) {
        // message
        $message = apply_filters('mgm_lostpassword_success_message', __('Check your e-mail for the confirmation link.', 'mgm'));
        // add
        $html .= sprintf('<div class="mgm_message"><div><strong>%s</strong></div></div>', $message);
    }
    // set error !
    if (isset($errors) && is_object($errors)) {
        // error
        $error_html = mgm_set_errors($errors, true);
        // checl
        if ($error_html && !empty($error_html)) {
            $html = $error_html . $html;
        }
    }
    // form
    $html .= '<form class="mgm_form" name="lostpasswordform" id="lostpasswordform" action="' . $form_action . '" method="post">
			  	<div>
					<label>' . __('Username or E-mail:', 'mgm') . '<br />
					<input type="text" name="user_login" id="user_login" class="input" value="' . esc_attr($user_login) . '" size="40" tabindex="10" /></label>
				</div>';
    // wp action kept
    // do_action('lostpassword_form');
    // custom
    $html .= apply_filters('mgm_lostpassword_form', $html);
    // buttons
    $buttons = array(sprintf('<input class="button mgm-lostpassword-button" type="submit" name="wp-submit-lp" id="wp-submit-lp" value="%s" tabindex="100" />', __('Get New Password', 'mgm')));
    // apply filters
    $buttons_s = implode(apply_filters('mgm_lostpassword_form_buttons_sep', ' &nbsp; '), apply_filters('mgm_lostpassword_form_buttons', $buttons));
    // append
    $buttons_html = sprintf('<div class="lostpassword-page-buttons">%s</div>', $buttons_s);
    // nonce
    $nonce = wp_nonce_field('user_lostpassword', '_mgmnonce_user_lostpassword', true, false);
    // form
    $html .= $buttons_html . '<input type="hidden" name="redirect_to" value="" /> ' . $nonce . '</form>';
    // after links
    $links = array();
    // login link
    $links[] = sprintf('<a class="mgm-login-link" href="%s">%s</a>', mgm_get_custom_url('login'), __('Log in', 'mgm'));
    // register link
    if (get_option('users_can_register')) {
        // add
        $links[] = sprintf('<a class="mgm-register-link" href="%s">%s</a>', mgm_get_custom_url('register'), __('Register', 'mgm'));
    }
    // apply filters
    $links_s = implode(apply_filters('mgm_lostpassword_form_after_links_sep', ' | '), apply_filters('mgm_lostpassword_form_after_links', $links));
    // add links
    $html .= sprintf('<div class="lostpassword-page-links">%s</div>', $links_s);
    // scripts & styles --------------------
    // focus
    $focus = 'user_login';
    // script
    $script = 'function wp_attempt_focus(){setTimeout( function(){ try{ d = document.getElementById("' . $focus . '"); d.focus();} catch(e){}}, 200);}';
    // focus
    if (@(!$error)) {
        $script .= 'wp_attempt_focus();';
    }
    // script
    $script = sprintf('<script type="text/javascript">%s</script>', apply_filters('mgm_lostpassword_form_inline_script', $script));
    // scripts
    $html .= apply_filters('mgm_lostpassword_form_scripts', $script);
    // style
    $style = '.lostpassword-page-links, .lostpassword-page-buttons{margin-top:10px; clear:both}';
    // style
    $style = sprintf('<style type="text/css">%s</style>', apply_filters('mgm_lostpassword_form_inline_style', $style));
    // style
    $html .= apply_filters('mgm_lostpassword_form_styles', $style);
    // apply filter and return
    return apply_filters('mgm_lostpassword_form_html', $html);
}