function popover_register_process()
 {
     global $M_options;
     //include_once(ABSPATH . WPINC . '/registration.php');
     $error = new WP_Error();
     if (!wp_verify_nonce($_POST['nonce'], 'membership_register')) {
         $error->add('invalid', __('Invalid form submission.', 'membership'));
     }
     if (!validate_username($_POST['user_login'])) {
         $error->add('usernamenotvalid', __('The username is not valid, sorry.', 'membership'));
     }
     if (username_exists(sanitize_user($_POST['user_login']))) {
         $error->add('usernameexists', __('That username is already taken, sorry.', 'membership'));
     }
     if (!is_email($_POST['email'])) {
         $error->add('emailnotvalid', __('The email address is not valid, sorry.', 'membership'));
     }
     if (email_exists($_POST['email'])) {
         $error->add('emailexists', __('That email address is already taken, sorry.', 'membership'));
     }
     $error = apply_filters('membership_subscription_form_before_registration_process', $error);
     if (is_wp_error($error)) {
         $anyerrors = $error->get_error_messages();
     } else {
         $anyerrors = array();
     }
     if (empty($anyerrors)) {
         // Pre - error reporting check for final add user
         $user_id = wp_create_user(sanitize_user($_POST['user_login']), $_POST['password'], $_POST['email']);
         if (is_wp_error($user_id) && method_exists($user_id, 'get_error_message')) {
             $error->add('userid', $user_id->get_error_message());
         } else {
             $member = new M_Membership($user_id);
             if (defined('MEMBERSHIP_DEACTIVATE_USER_ON_REGISTRATION') && MEMBERSHIP_DEACTIVATE_USER_ON_REGISTRATION == true) {
                 $member->deactivate();
             } else {
                 $creds = array('user_login' => $_POST['user_login'], 'user_password' => $_POST['password'], 'remember' => true);
                 $is_ssl = isset($_SERVER['https']) && strtolower($_SERVER['https']) == 'on' ? true : false;
                 $user = wp_signon($creds, $is_ssl);
                 if (is_wp_error($user) && method_exists($user, 'get_error_message')) {
                     $error->add('userlogin', $user->get_error_message());
                 } else {
                     // Set the current user up
                     wp_set_current_user($user_id);
                 }
             }
             if (has_action('membership_susbcription_form_registration_notification')) {
                 do_action('membership_susbcription_form_registration_notification', $user_id, $_POST['password']);
             } else {
                 /*wp_new_user_notification($user_id, $_POST['password']);*/
             }
             do_action('membership_subscription_form_registration_process', $error, $user_id);
         }
     } else {
         do_action('membership_subscription_form_registration_process', $error, 0);
     }
     $anyerrors = $error->get_error_code();
     if (is_wp_error($error) && !empty($anyerrors)) {
         // we have an error - output
         $messages = $error->get_error_messages();
         //sendback error
         echo json_encode(array('errormsg' => $messages[0]));
     } else {
         // everything seems fine (so far), so we have our queued user so let's
         // move to picking a subscription - so send back the form.
         echo $this->popover_sendpayment_form($user_id);
     }
     exit;
 }
예제 #2
0
 function do_subscription_form()
 {
     global $wp_query, $M_options, $bp;
     if (isset($_REQUEST['action'])) {
         $page = addslashes($_REQUEST['action']);
     }
     if (empty($page)) {
         $page = 'subscriptionform';
     }
     $content = '';
     switch ($page) {
         case 'subscriptionform':
             $content = $this->output_subscriptionform();
             break;
         case 'registeruser':
             if (!is_user_logged_in()) {
                 $content = $this->output_registeruser();
             } else {
                 $content = $this->output_paymentpage();
             }
             break;
         case 'subscriptionsignup':
             if (!is_user_logged_in()) {
                 $content = $this->output_registeruser();
             } else {
                 $content = $this->output_paymentpage();
             }
             break;
         case 'validatepage1':
             // Page 1 of the form has been submitted - validate
             //include_once(ABSPATH . WPINC . '/registration.php');
             $required = array('user_login' => __('Username', 'membership'), 'user_email' => __('Email address', 'membership'), 'password' => __('Password', 'membership'), 'password2' => __('Password confirmation', 'membership'));
             $error = new WP_Error();
             foreach ($required as $key => $message) {
                 if (empty($_POST[$key])) {
                     $error->add($key, __('Please ensure that the ', 'membership') . "<strong>" . $message . "</strong>" . __(' information is completed.', 'membership'));
                 }
             }
             if ($_POST['password'] != $_POST['password2']) {
                 $error->add('passmatch', __('Please ensure the passwords match.', 'membership'));
             }
             if (!validate_username($_POST['user_login'])) {
                 $error->add('usernamenotvalid', __('The username is not valid, sorry.', 'membership'));
             }
             if (username_exists(sanitize_user($_POST['user_login']))) {
                 $error->add('usernameexists', __('That username is already taken, sorry.', 'membership'));
             }
             if (!is_email($_POST['user_email'])) {
                 $error->add('emailnotvalid', __('The email address is not valid, sorry.', 'membership'));
             }
             if (email_exists($_POST['user_email'])) {
                 $error->add('emailexists', __('That email address is already taken, sorry.', 'membership'));
             }
             $error = apply_filters('membership_subscription_form_before_registration_process', $error);
             $result = array('user_name' => $_POST['user_login'], 'orig_username' => $_POST['user_login'], 'user_email' => $_POST['user_email'], 'errors' => $error);
             $result = apply_filters('wpmu_validate_user_signup', $result);
             $error = $result['errors'];
             // Hack for now - eeek
             $anyerrors = $error->get_error_code();
             if (empty($anyerrors)) {
                 // No errors so far - error reporting check for final add user *note $error should always be an error object becuase we created it as such.
                 $user_id = wp_create_user(sanitize_user($_POST['user_login']), $_POST['password'], $_POST['user_email']);
                 if (is_wp_error($user_id) && method_exists($userid, 'get_error_message')) {
                     $error->add('userid', $user_id->get_error_message());
                 } else {
                     $member = new M_Membership($user_id);
                     if (defined('MEMBERSHIP_DEACTIVATE_USER_ON_REGISTRATION') && MEMBERSHIP_DEACTIVATE_USER_ON_REGISTRATION == true) {
                         $member->deactivate();
                     } else {
                         $creds = array('user_login' => $_POST['user_login'], 'user_password' => $_POST['password'], 'remember' => true);
                         if (!headers_sent()) {
                             $is_ssl = isset($_SERVER['https']) && strtolower($_SERVER['https']) == 'on' ? true : false;
                             $user = @wp_signon($creds, $is_ssl);
                             if (is_wp_error($user) && method_exists($user, 'get_error_message')) {
                                 $error->add('userlogin', $user->get_error_message());
                             } else {
                                 // Set the current user up
                                 wp_set_current_user($user_id);
                             }
                         } else {
                             // Set the current user up
                             wp_set_current_user($user_id);
                         }
                     }
                     if (has_action('membership_susbcription_form_registration_notification')) {
                         do_action('membership_susbcription_form_registration_notification', $user_id, $_POST['password']);
                     } else {
                         wp_new_user_notification($user_id, $_POST['password']);
                     }
                 }
                 do_action('membership_subscription_form_registration_process', $error, $user_id);
             } else {
                 do_action('membership_subscription_form_registration_process', $error, 0);
             }
             // Hack for now - eeek
             $anyerrors = $error->get_error_code();
             if (!empty($anyerrors)) {
                 // we have an error - output
                 // Show the page again so that it can display the errors
                 $content = $this->output_registeruser($error);
             } else {
                 $content = $this->output_paymentpage($user_id);
             }
             break;
         case 'validatepage1bp':
             global $bp;
             //include_once(ABSPATH . WPINC . '/registration.php');
             $required = array('signup_username' => __('Username', 'membership'), 'signup_email' => __('Email address', 'membership'), 'signup_password' => __('Password', 'membership'), 'signup_password_confirm' => __('Password confirmation', 'membership'));
             $error = new WP_Error();
             foreach ($required as $key => $message) {
                 if (empty($_POST[$key])) {
                     $error->add($key, __('Please ensure that the ', 'membership') . "<strong>" . $message . "</strong>" . __(' information is completed.', 'membership'));
                 }
             }
             if ($_POST['signup_password'] != $_POST['signup_password_confirm']) {
                 $error->add('passmatch', __('Please ensure the passwords match.', 'membership'));
             }
             if (!validate_username($_POST['signup_username'])) {
                 $error->add('usernamenotvalid', __('The username is not valid, sorry.', 'membership'));
             }
             if (username_exists(sanitize_user($_POST['signup_username']))) {
                 $error->add('usernameexists', __('That username is already taken, sorry.', 'membership'));
             }
             if (!is_email($_POST['signup_email'])) {
                 $error->add('emailnotvalid', __('The email address is not valid, sorry.', 'membership'));
             }
             if (email_exists($_POST['signup_email'])) {
                 $error->add('emailexists', __('That email address is already taken, sorry.', 'membership'));
             }
             // Initial fix provided by user: cmurtagh - modified to add extra checks and rejigged a bit
             // Run the buddypress validation
             do_action('bp_signup_validate');
             // Add any errors to the action for the field in the template for display.
             if (!empty($bp->signup->errors)) {
                 foreach ((array) $bp->signup->errors as $fieldname => $error_message) {
                     $error->add($fieldname, $error_message);
                 }
             }
             $meta_array = array();
             // xprofile required fields
             /* Now we've checked account details, we can check profile information */
             //if ( function_exists( 'xprofile_check_is_required_field' ) ) {
             if (function_exists('bp_is_active') && bp_is_active('xprofile')) {
                 /* Make sure hidden field is passed and populated */
                 if (isset($_POST['signup_profile_field_ids']) && !empty($_POST['signup_profile_field_ids'])) {
                     /* Let's compact any profile field info into an array */
                     $profile_field_ids = explode(',', $_POST['signup_profile_field_ids']);
                     /* Loop through the posted fields formatting any datebox values then validate the field */
                     foreach ((array) $profile_field_ids as $field_id) {
                         if (!isset($_POST['field_' . $field_id])) {
                             if (isset($_POST['field_' . $field_id . '_day'])) {
                                 $_POST['field_' . $field_id] = strtotime($_POST['field_' . $field_id . '_day'] . $_POST['field_' . $field_id . '_month'] . $_POST['field_' . $field_id . '_year']);
                             }
                         }
                         /* Create errors for required fields without values */
                         if (xprofile_check_is_required_field($field_id) && empty($_POST['field_' . $field_id])) {
                             $field = new BP_Xprofile_Field($field_id);
                             $error->add($field->name, __('Please ensure that the ', 'membership') . "<strong>" . $field->name . "</strong>" . __(' information is completed.', 'membership'));
                         }
                         $meta_array[$field_id] = $_POST['field_' . $field_id];
                     }
                 }
             }
             $error = apply_filters('membership_subscription_form_before_registration_process', $error);
             // Hack for now - eeek
             $anyerrors = $error->get_error_code();
             if (empty($anyerrors)) {
                 // No errors so far - error reporting check for final add user *note $error should always be an error object becuase we created it as such.
                 $user_id = wp_create_user(sanitize_user($_POST['signup_username']), $_POST['signup_password'], $_POST['signup_email']);
                 if (is_wp_error($user_id) && method_exists($userid, 'get_error_message')) {
                     $error->add('userid', $user_id->get_error_message());
                 } else {
                     $member = new M_Membership($user_id);
                     if (defined('MEMBERSHIP_DEACTIVATE_USER_ON_REGISTRATION') && MEMBERSHIP_DEACTIVATE_USER_ON_REGISTRATION == true) {
                         $member->deactivate();
                     } else {
                         $creds = array('user_login' => $_POST['signup_username'], 'user_password' => $_POST['signup_password'], 'remember' => true);
                         if (!headers_sent()) {
                             $is_ssl = isset($_SERVER['https']) && strtolower($_SERVER['https']) == 'on' ? true : false;
                             $user = @wp_signon($creds, $is_ssl);
                             if (is_wp_error($user) && method_exists($user, 'get_error_message')) {
                                 $error->add('userlogin', $user->get_error_message());
                             } else {
                                 // Set the current user up
                                 wp_set_current_user($user_id);
                             }
                         } else {
                             // Set the current user up
                             wp_set_current_user($user_id);
                         }
                     }
                     if (has_action('membership_susbcription_form_registration_notification')) {
                         do_action('membership_susbcription_form_registration_notification', $user_id, $_POST['signup_password']);
                     } else {
                         wp_new_user_notification($user_id, $_POST['signup_password']);
                     }
                     // Add the bp filter for usermeta signup
                     $meta_array = apply_filters('bp_signup_usermeta', $meta_array);
                     foreach ((array) $meta_array as $field_id => $field_content) {
                         if (function_exists('xprofile_set_field_data')) {
                             xprofile_set_field_data($field_id, $user_id, $field_content);
                         }
                     }
                 }
                 do_action('membership_subscription_form_registration_process', $error, $user_id);
             } else {
                 do_action('membership_subscription_form_registration_process', $error, 0);
             }
             // Hack for now - eeek
             $anyerrors = $error->get_error_code();
             if (!empty($anyerrors)) {
                 // Show the page so that it can display the errors
                 $content = $this->output_registeruser($error);
             } else {
                 // everything seems fine (so far), so we have our queued user so let's
                 // run the bp complete signup action
                 do_action('bp_complete_signup');
                 // display the payment forms
                 $content = $this->output_paymentpage($user_id);
             }
             break;
     }
     return $content;
 }
 function handle_paypal_return()
 {
     // PayPal IPN handling code
     if ((isset($_POST['payment_status']) || isset($_POST['txn_type'])) && isset($_POST['custom'])) {
         if (get_option($this->gateway . "_paypal_status") == 'live') {
             $domain = 'https://www.paypal.com';
         } else {
             $domain = 'https://www.sandbox.paypal.com';
         }
         $req = 'cmd=_notify-validate';
         if (!isset($_POST)) {
             $_POST = $HTTP_POST_VARS;
         }
         foreach ($_POST as $k => $v) {
             if (get_magic_quotes_gpc()) {
                 $v = stripslashes($v);
             }
             $req .= '&' . $k . '=' . $v;
         }
         $header = 'POST /cgi-bin/webscr HTTP/1.0' . "\r\n" . 'Content-Type: application/x-www-form-urlencoded' . "\r\n" . 'Content-Length: ' . strlen($req) . "\r\n" . "\r\n";
         @set_time_limit(60);
         if ($conn = @fsockopen($domain, 80, $errno, $errstr, 30)) {
             fputs($conn, $header . $req);
             socket_set_timeout($conn, 30);
             $response = '';
             $close_connection = false;
             while (true) {
                 if (feof($conn) || $close_connection) {
                     fclose($conn);
                     break;
                 }
                 $st = @fgets($conn, 4096);
                 if ($st === false) {
                     $close_connection = true;
                     continue;
                 }
                 $response .= $st;
             }
             $error = '';
             $lines = explode("\n", str_replace("\r\n", "\n", $response));
             // looking for: HTTP/1.1 200 OK
             if (count($lines) == 0) {
                 $error = 'Response Error: Header not found';
             } else {
                 if (substr($lines[0], -7) != ' 200 OK') {
                     $error = 'Response Error: Unexpected HTTP response';
                 } else {
                     // remove HTTP header
                     while (count($lines) > 0 && trim($lines[0]) != '') {
                         array_shift($lines);
                     }
                     // first line will be empty, second line will have the result
                     if (count($lines) < 2) {
                         $error = 'Response Error: No content found in transaction response';
                     } else {
                         if (strtoupper(trim($lines[1])) != 'VERIFIED') {
                             $error = 'Response Error: Unexpected transaction response';
                         }
                     }
                 }
             }
             if ($error != '') {
                 echo $error;
                 exit;
             }
         }
         // handle cases that the system must ignore
         //if ($_POST['payment_status'] == 'In-Progress' || $_POST['payment_status'] == 'Partially-Refunded') exit;
         $new_status = false;
         // process PayPal response
         switch ($_POST['payment_status']) {
             case 'Partially-Refunded':
                 break;
             case 'In-Progress':
                 break;
             case 'Completed':
             case 'Processed':
                 // case: successful payment
                 $amount = $_POST['mc_gross'];
                 $currency = $_POST['mc_currency'];
                 list($timestamp, $user_id, $sub_id, $key) = explode(':', $_POST['custom']);
                 $this->record_transaction($user_id, $sub_id, $amount, $currency, $timestamp, $_POST['txn_id'], $_POST['payment_status'], '');
                 // Added for affiliate system link
                 do_action('membership_payment_processed', $user_id, $sub_id, $amount, $currency, $_POST['txn_id']);
                 break;
             case 'Reversed':
                 // case: charge back
                 $note = 'Last transaction has been reversed. Reason: Payment has been reversed (charge back)';
                 $amount = $_POST['mc_gross'];
                 $currency = $_POST['mc_currency'];
                 list($timestamp, $user_id, $sub_id, $key) = explode(':', $_POST['custom']);
                 $this->record_transaction($user_id, $sub_id, $amount, $currency, $timestamp, $_POST['txn_id'], $_POST['payment_status'], $note);
                 $member = new M_Membership($user_id);
                 if ($member) {
                     $member->expire_subscription($sub_id);
                     $member->deactivate();
                 }
                 do_action('membership_payment_reversed', $user_id, $sub_id, $amount, $currency, $_POST['txn_id']);
                 break;
             case 'Refunded':
                 // case: refund
                 $note = 'Last transaction has been reversed. Reason: Payment has been refunded';
                 $amount = $_POST['mc_gross'];
                 $currency = $_POST['mc_currency'];
                 list($timestamp, $user_id, $sub_id, $key) = explode(':', $_POST['custom']);
                 $this->record_transaction($user_id, $sub_id, $amount, $currency, $timestamp, $_POST['txn_id'], $_POST['payment_status'], $note);
                 $member = new M_Membership($user_id);
                 if ($member) {
                     $member->expire_subscription($sub_id);
                 }
                 do_action('membership_payment_refunded', $user_id, $sub_id, $amount, $currency, $_POST['txn_id']);
                 break;
             case 'Denied':
                 // case: denied
                 $note = 'Last transaction has been reversed. Reason: Payment Denied';
                 $amount = $_POST['mc_gross'];
                 $currency = $_POST['mc_currency'];
                 list($timestamp, $user_id, $sub_id, $key) = explode(':', $_POST['custom']);
                 $this->record_transaction($user_id, $sub_id, $amount, $currency, $timestamp, $_POST['txn_id'], $_POST['payment_status'], $note);
                 $member = new M_Membership($user_id);
                 if ($member) {
                     $member->expire_subscription($sub_id);
                     $member->deactivate();
                 }
                 do_action('membership_payment_denied', $user_id, $sub_id, $amount, $currency, $_POST['txn_id']);
                 break;
             case 'Pending':
                 // case: payment is pending
                 $pending_str = array('address' => 'Customer did not include a confirmed shipping address', 'authorization' => 'Funds not captured yet', 'echeck' => 'eCheck that has not cleared yet', 'intl' => 'Payment waiting for aproval by service provider', 'multi-currency' => 'Payment waiting for service provider to handle multi-currency process', 'unilateral' => 'Customer did not register or confirm his/her email yet', 'upgrade' => 'Waiting for service provider to upgrade the PayPal account', 'verify' => 'Waiting for service provider to verify his/her PayPal account', '*' => '');
                 $reason = @$_POST['pending_reason'];
                 $note = 'Last transaction is pending. Reason: ' . (isset($pending_str[$reason]) ? $pending_str[$reason] : $pending_str['*']);
                 $amount = $_POST['mc_gross'];
                 $currency = $_POST['mc_currency'];
                 list($timestamp, $user_id, $sub_id, $key) = explode(':', $_POST['custom']);
                 $this->record_transaction($user_id, $sub_id, $amount, $currency, $timestamp, $_POST['txn_id'], $_POST['payment_status'], $note);
                 do_action('membership_payment_pending', $user_id, $sub_id, $amount, $currency, $_POST['txn_id']);
                 break;
             default:
                 // case: various error cases
         }
         //check for subscription details
         switch ($_POST['txn_type']) {
             case 'subscr_signup':
                 // start the subscription
                 list($timestamp, $user_id, $sub_id, $key) = explode(':', $_POST['custom']);
                 // create_subscription
                 $member = new M_Membership($user_id);
                 if ($member) {
                     $member->create_subscription($sub_id, $this->gateway);
                 }
                 do_action('membership_payment_subscr_signup', $user_id, $sub_id);
                 break;
             case 'subscr_modify':
                 // modify the subscription
                 list($timestamp, $user_id, $sub_id, $key) = explode(':', $_POST['custom']);
                 // create_subscription
                 $member = new M_Membership($user_id);
                 if ($member) {
                     // Remove the old subscription
                     $member->drop_subscription($sub_id);
                     // Join the new subscription
                     $member->create_subscription((int) $_POST['item_number'], $this->gateway);
                     // Timestamp the update
                     update_user_meta($user_id, '_membership_last_upgraded', time());
                 }
                 do_action('membership_payment_subscr_signup', $user_id, $sub_id);
                 break;
             case 'subscr_cancel':
                 // mark for removal
                 list($timestamp, $user_id, $sub_id, $key) = explode(':', $_POST['custom']);
                 $member = new M_Membership($user_id);
                 if ($member) {
                     $member->mark_for_expire($sub_id);
                 }
                 do_action('membership_payment_subscr_cancel', $user_id, $sub_id);
                 break;
             case 'new_case':
                 // a dispute
                 if ($_POST['case_type'] == 'dispute') {
                     // immediately suspend the account
                     $member = new M_Membership($user_id);
                     if ($member) {
                         $member->deactivate();
                     }
                 }
                 do_action('membership_payment_new_case', $user_id, $sub_id, $_POST['case_type']);
                 break;
         }
     } else {
         // Did not find expected POST variables. Possible access attempt from a non PayPal site.
         header('Status: 404 Not Found');
         echo 'Error: Missing POST variables. Identification is not possible.';
         exit;
     }
 }
 function handle_bitpay_return()
 {
     try {
         $post = file_get_contents("php://input");
         if (!$post) {
             return 'No post data';
         }
         $response = json_decode($post, true);
         if (is_string($response)) {
             return $response;
         }
         // error
         if (!array_key_exists('posData', $response)) {
             return 'No posData';
         }
         $posData = json_decode($response['posData'], true);
         if ($bpOptions['verifyPos'] and $posData['hash'] != bpHash(serialize($posData['posData']), $bpOptions['apiKey'])) {
             return 'Authentication failed (bad hash)';
         }
         $response['posData'] = $posData['posData'];
     } catch (Exception $e) {
         if ($bpOptions['useLogging']) {
             bpLog('Error: ' . $e->getMessage());
         }
         return array('error' => $e->getMessage());
     }
     if (isset($response['status'])) {
         switch ($response['status']) {
             case 'new':
                 // invoice just created, skip
                 break;
             case 'paid':
             case 'complete':
             case 'confirmed':
                 // payment has been paid, confirmed or marked complete
                 $note = 'Payment ' . $response['status'] . '! BitPay Invoice ID: ' . $response['id'];
                 $amount = $response['price'];
                 $currency = $response['currency'];
                 list($timestamp, $user_id, $sub_id, $key) = explode(':', $response['posData']);
                 // // Update to work with latest 3.5.x Membership version
                 // // and keep backward compatibility with older versions as well
                 // if (!class_exists('Membership_Gateway'))
                 // 	$isDuplicate = $this->duplicate_transaction($user_id, $sub_id, $amount, $currency, $timestamp, $response['id'], $response['status'], $note);
                 // else
                 // 	$isDuplicate = $this->_check_duplicate_transaction($user_id, $sub_id, $amount, $currency, $timestamp, $response['id'], $response['status'], $note);
                 // if(!$isDuplicate) {
                 // Update to work with latest 3.5.x Membership version
                 // and keep backward compatibility with older versions as well
                 if (!class_exists('Membership_Gateway')) {
                     $this->record_transaction($user_id, $sub_id, $amount, $currency, $timestamp, $response['id'], $response['status'], $note);
                 } else {
                     $this->_record_transaction($user_id, $sub_id, $amount, $currency, $timestamp, $response['id'], $response['status'], $note);
                 }
                 do_action('membership_payment_processed', $user_id, $sub_id, $amount, $currency, $response['id']);
                 // create_subscription
                 $member = new M_Membership($user_id);
                 if ($member) {
                     $member->create_subscription($sub_id, $this->gateway);
                 }
                 do_action('membership_payment_subscr_signup', $user_id, $sub_id);
                 // }
                 break;
             case 'invalid':
                 // payment has been deemed invalid. bad transaction!
                 $note = 'This payment has been marked as invalid. Do not process membership! BitPay Invoice ID: ' . $response['id'];
                 $amount = $response['price'];
                 $currency = $response['currency'];
                 list($timestamp, $user_id, $sub_id, $key) = explode(':', $response['posData']);
                 // Update to work with latest 3.5.x Membership version
                 // and keep backward compatibility with older versions as well
                 if (!class_exists('Membership_Gateway')) {
                     $this->record_transaction($user_id, $sub_id, $amount, $currency, $timestamp, $response['id'], $response['status'], $note);
                 } else {
                     $this->_record_transaction($user_id, $sub_id, $amount, $currency, $timestamp, $response['id'], $response['status'], $note);
                 }
                 $member = new M_Membership($user_id);
                 if ($member) {
                     $member->expire_subscription($sub_id);
                     $member->deactivate();
                 }
                 do_action('membership_payment_denied', $user_id, $sub_id, $amount, $currency, $response['id']);
                 break;
                 // Since we want instant membership activation, the paid status is combined with the confirmed
                 // and completed statuses above. In the future if you want to change that, remove the paid: switch
                 // above and uncomment this code:
                 /*case 'paid':
                 					// payment has been made but confirmation pending
                 					$pending_str = 'BitPay payment received. Awaiting confirmation. BitPay Invoice ID: ' . $response['id'];
                 					$reason = 'paid';
                 					$note = $pending_str;
                 					$amount = $response['price'];
                 					$currency = $response['currency'];
                 					$timestamp = $response['currentTime'];
                 
                 					// Update to work with latest 3.5.x Membership version
                 					// and keep backward compatibility with older versions as well
                 					if (!class_exists('Membership_Gateway'))
                 						$this->record_transaction($user_id, $sub_id, $amount, $currency, $timestamp, $response['id'], $response['status'], $note);
                 					else
                 						$this->_record_transaction($user_id, $sub_id, $amount, $currency, $timestamp, $response['id'], $response['status'], $note);
                 
                 					do_action('membership_payment_pending', $user_id, $sub_id, $amount, $currency, $response['id']);
                 					break;
                 				*/
             // Since we want instant membership activation, the paid status is combined with the confirmed
             // and completed statuses above. In the future if you want to change that, remove the paid: switch
             // above and uncomment this code:
             /*case 'paid':
             					// payment has been made but confirmation pending
             					$pending_str = 'BitPay payment received. Awaiting confirmation. BitPay Invoice ID: ' . $response['id'];
             					$reason = 'paid';
             					$note = $pending_str;
             					$amount = $response['price'];
             					$currency = $response['currency'];
             					$timestamp = $response['currentTime'];
             
             					// Update to work with latest 3.5.x Membership version
             					// and keep backward compatibility with older versions as well
             					if (!class_exists('Membership_Gateway'))
             						$this->record_transaction($user_id, $sub_id, $amount, $currency, $timestamp, $response['id'], $response['status'], $note);
             					else
             						$this->_record_transaction($user_id, $sub_id, $amount, $currency, $timestamp, $response['id'], $response['status'], $note);
             
             					do_action('membership_payment_pending', $user_id, $sub_id, $amount, $currency, $response['id']);
             					break;
             				*/
             default:
                 // case: various error cases
                 break;
         }
     } else {
         // Did not find expected POST variables. Possible access attempt from a non BitPay site.
         header('Status: 404 Not Found');
         echo 'Error: Missing POST variables. Identification is not possible.';
         exit;
     }
 }
예제 #5
0
 function popover_register_process()
 {
     global $M_options;
     //include_once(ABSPATH . WPINC . '/registration.php');
     $error = array();
     if (!wp_verify_nonce($_POST['nonce'], 'membership_register')) {
         $error[] = __('Invalid form submission.', 'membership');
     }
     if (username_exists(sanitize_user($_POST['user_login']))) {
         $error[] = __('That username is already taken, sorry.', 'membership');
     }
     if (email_exists($_POST['email'])) {
         $error[] = __('That email address is already taken, sorry.', 'membership');
     }
     $error = apply_filters('membership_subscription_form_before_registration_process', $error);
     if (empty($error)) {
         // Pre - error reporting check for final add user
         $user = wp_create_user(sanitize_user($_POST['user_login']), $_POST['password'], $_POST['email']);
         if (is_wp_error($user) && method_exists($user, 'get_error_message')) {
             $error[] = $user->get_error_message();
         } else {
             $member = new M_Membership($user);
             if (empty($M_options['enableincompletesignups']) || $M_options['enableincompletesignups'] != 'yes') {
                 $member->deactivate();
             }
             $creds = array('user_login' => $_POST['user_login'], 'user_password' => $_POST['password'], 'remember' => true);
             $is_ssl = isset($_SERVER['https']) && $_SERVER['https'] == 'on' ? true : false;
             $user = wp_signon($creds, $is_ssl);
             if (is_wp_error($user) && method_exists($user, 'get_error_message')) {
                 $error[] = $user->get_error_message();
             }
             if (has_action('membership_susbcription_form_registration_notification')) {
                 do_action('membership_susbcription_form_registration_notification', $user->ID, $_POST['password']);
             } else {
                 wp_new_user_notification($user->ID, $_POST['password']);
             }
         }
     }
     do_action('membership_subscription_form_registration_process', $error, $user->ID);
     if (!empty($error)) {
         //sendback error
         echo json_encode(array('errormsg' => $error[0]));
     } else {
         // everything seems fine (so far), so we have our queued user so let's
         // move to picking a subscription - so send back the form.
         echo $this->popover_sendpayment_form($user->ID);
     }
     exit;
 }
예제 #6
0
 function do_subscription_shortcode($atts, $content = null, $code = "")
 {
     global $nxt_query;
     $error = array();
     $page = addslashes($_REQUEST['action']);
     $M_options = get_option('membership_options', array());
     switch ($page) {
         case 'validatepage1':
             // Page 1 of the form has been submitted - validate
             include_once ABSPATH . nxtINC . '/registration.php';
             $required = array('user_login' => __('Username', 'membership'), 'user_email' => __('Email address', 'membership'), 'user_email2' => __('Email address confirmation', 'membership'), 'password' => __('Password', 'membership'), 'password2' => __('Password confirmation', 'membership'));
             $error = array();
             foreach ($required as $key => $message) {
                 if (empty($_POST[$key])) {
                     $error[] = __('Please ensure that the ', 'membership') . "<strong>" . $message . "</strong>" . __(' information is completed.', 'membership');
                 }
             }
             if ($_POST['user_email'] != $_POST['user_email2']) {
                 $error[] = __('Please ensure the email addresses match.', 'membership');
             }
             if ($_POST['password'] != $_POST['password2']) {
                 $error[] = __('Please ensure the passwords match.', 'membership');
             }
             if (username_exists(sanitize_user($_POST['user_login']))) {
                 $error[] = __('That username is already taken, sorry.', 'membership');
             }
             if (email_exists($_POST['user_email'])) {
                 $error[] = __('That email address is already taken, sorry.', 'membership');
             }
             if (function_exists('get_site_option')) {
                 $terms = get_site_option('signup_tos_data');
             } else {
                 $terms = '';
             }
             if (!empty($terms)) {
                 if (empty($_POST['tosagree'])) {
                     $error[] = __('You need to agree to the terms of service to register.', 'membership');
                 }
             }
             $error = apply_filters('membership_subscription_form_before_registration_process', $error);
             if (empty($error)) {
                 // Pre - error reporting check for final add user
                 $user_id = nxt_create_user(sanitize_user($_POST['user_login']), $_POST['password'], $_POST['user_email']);
                 if (is_nxt_error($user_id) && method_exists($userid, 'get_error_message')) {
                     $error[] = $userid->get_error_message();
                 } else {
                     $member = new M_Membership($user_id);
                     if (empty($M_options['enableincompletesignups']) || $M_options['enableincompletesignups'] != 'yes') {
                         $member->deactivate();
                     }
                     if (has_action('membership_susbcription_form_registration_notification')) {
                         do_action('membership_susbcription_form_registration_notification', $user_id, $_POST['password']);
                     } else {
                         nxt_new_user_notification($user_id, $_POST['password']);
                     }
                 }
             }
             do_action('membership_subscription_form_registration_process', $error, $user_id);
             if (!empty($error)) {
                 $content .= "<div class='error'>";
                 $content .= implode('<br/>', $error);
                 $content .= "</div>";
                 $content .= $this->show_subpage_one(true);
             } else {
                 // everything seems fine (so far), so we have our queued user so let's
                 // look at picking a subscription.
                 $content .= $this->show_subpage_two($user_id);
             }
             break;
         case 'validatepage1bp':
             global $bp;
             include_once ABSPATH . nxtINC . '/registration.php';
             $required = array('signup_username' => __('Username', 'membership'), 'signup_email' => __('Email address', 'membership'), 'signup_password' => __('Password', 'membership'), 'signup_password_confirm' => __('Password confirmation', 'membership'));
             $error = array();
             foreach ($required as $key => $message) {
                 if (empty($_POST[$key])) {
                     $error[] = __('Please ensure that the ', 'membership') . "<strong>" . $message . "</strong>" . __(' information is completed.', 'membership');
                 }
             }
             if ($_POST['signup_password'] != $_POST['signup_password_confirm']) {
                 $error[] = __('Please ensure the passwords match.', 'membership');
             }
             if (username_exists(sanitize_user($_POST['signup_username']))) {
                 $error[] = __('That username is already taken, sorry.', 'membership');
             }
             if (email_exists($_POST['signup_email'])) {
                 $error[] = __('That email address is already taken, sorry.', 'membership');
             }
             $meta_array = array();
             // xprofile required fields
             /* Now we've checked account details, we can check profile information */
             if (function_exists('xprofile_check_is_required_field')) {
                 /* Make sure hidden field is passed and populated */
                 if (isset($_POST['signup_profile_field_ids']) && !empty($_POST['signup_profile_field_ids'])) {
                     /* Let's compact any profile field info into an array */
                     $profile_field_ids = explode(',', $_POST['signup_profile_field_ids']);
                     /* Loop through the posted fields formatting any datebox values then validate the field */
                     foreach ((array) $profile_field_ids as $field_id) {
                         if (!isset($_POST['field_' . $field_id])) {
                             if (isset($_POST['field_' . $field_id . '_day'])) {
                                 $_POST['field_' . $field_id] = strtotime($_POST['field_' . $field_id . '_day'] . $_POST['field_' . $field_id . '_month'] . $_POST['field_' . $field_id . '_year']);
                             }
                         }
                         /* Create errors for required fields without values */
                         if (xprofile_check_is_required_field($field_id) && empty($_POST['field_' . $field_id])) {
                             $field = new BP_Xprofile_Field($field_id);
                             $error[] = __('Please ensure that the ', 'membership') . "<strong>" . $field->name . "</strong>" . __(' information is completed.', 'membership');
                         }
                         $meta_array[$field_id] = $_POST['field_' . $field_id];
                     }
                 }
             }
             $error = apply_filters('membership_subscription_form_before_registration_process', $error);
             if (empty($error)) {
                 // Pre - error reporting check for final add user
                 $user_id = nxt_create_user(sanitize_user($_POST['signup_username']), $_POST['signup_password'], $_POST['signup_email']);
                 if (is_nxt_error($user_id) && method_exists($userid, 'get_error_message')) {
                     $error[] = $userid->get_error_message();
                 } else {
                     $member = new M_Membership($user_id);
                     if (empty($M_options['enableincompletesignups']) || $M_options['enableincompletesignups'] != 'yes') {
                         $member->deactivate();
                     }
                     if (has_action('membership_susbcription_form_registration_notification')) {
                         do_action('membership_susbcription_form_registration_notification', $user_id, $_POST['password']);
                     } else {
                         nxt_new_user_notification($user_id, $_POST['signup_password']);
                     }
                     foreach ((array) $meta_array as $field_id => $field_content) {
                         if (function_exists('xprofile_set_field_data')) {
                             xprofile_set_field_data($field_id, $user_id, $field_content);
                         }
                     }
                 }
             }
             do_action('membership_subscription_form_registration_process', $error, $user_id);
             if (!empty($error)) {
                 $content .= "<div class='error'>";
                 $content .= implode('<br/>', $error);
                 $content .= "</div>";
                 $content .= $this->show_subpage_one(true);
             } else {
                 // everything seems fine (so far), so we have our queued user so let's
                 // look at picking a subscription.
                 $content .= $this->show_subpage_two($user_id);
             }
             break;
         case 'validatepage2':
             $content = apply_filters('membership_subscription_form_subscription_process', $content, $error);
             break;
         case 'page2':
         case 'page1':
         default:
             if (!is_user_logged_in()) {
                 $content .= $this->show_subpage_one();
             } else {
                 // logged in check for sub
                 $user = nxt_get_current_user();
                 $member = new M_Membership($user->ID);
                 if ($member->is_member()) {
                     // This person is a member - display already registered stuff
                     $content .= $this->show_subpage_member();
                 } else {
                     // Show page two;
                     $content .= $this->show_subpage_two($user->ID);
                 }
             }
             break;
     }
     $content = apply_filters('membership_subscription_form', $content);
     return $content;
 }