/** * 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; }
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; }
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; }
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', ' '), 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); }