Example #1
0
 /**
  * Adds new subscriber to subscriber table
  *
  * @since 1.0.0
  *
  * @param deprecated $hash
  * @param string $email address of user "logged" in
  * @param int $customer_id 
  * @param array $meta_args Arguments passed from type of subscriber
  * @param string $login optional login name to use instead of email address
  * @return mixed $wpdb insert ID or false
  */
 function leaky_paywall_new_subscriber($hash = 'deprecated', $email, $customer_id, $meta_args, $login = '')
 {
     if (!is_email($email)) {
         return false;
     }
     $settings = get_leaky_paywall_settings();
     if (is_multisite_premium() && !is_main_site($meta_args['site'])) {
         $site = '_' . $meta_args['site'];
     } else {
         $site = '';
     }
     unset($meta_args['site']);
     $mode = 'off' === $settings['test_mode'] ? 'live' : 'test';
     $expires = '0000-00-00 00:00:00';
     if ($user = get_user_by('email', $email)) {
         //the user already exists
         //grab the ID for later
         $user_id = $user->ID;
         $userdata = get_userdata($user_id);
     } else {
         //the user doesn't already exist
         //create a new user with their email address as their username
         //grab the ID for later
         if (empty($login)) {
             $parts = explode('@', $email);
             $login = $parts[0];
         }
         //Avoid collisions
         while ($user = get_user_by('login', $login)) {
             $login = $user->user_login . '_' . substr(uniqid(), 5);
         }
         $password = wp_generate_password();
         $userdata = array('user_login' => $login, 'user_email' => $email, 'user_pass' => $password, 'user_registered' => date_i18n('Y-m-d H:i:s'));
         $userdata = apply_filters('leaky_paywall_userdata_before_user_create', $userdata);
         $user_id = wp_insert_user($userdata);
     }
     if (!empty($user_id)) {
         if (!empty($meta_args['interval']) && isset($meta_args['interval_count']) && 1 <= $meta_args['interval_count']) {
             $expires = date_i18n('Y-m-d 23:59:59', strtotime('+' . $meta_args['interval_count'] . ' ' . $meta_args['interval']));
             //we're generous, give them the whole day!
         } else {
             if (!empty($meta_args['expires'])) {
                 $expires = $meta_args['expires'];
             }
         }
         $meta = array('level_id' => $meta_args['level_id'], 'subscriber_id' => $customer_id, 'price' => $meta_args['price'], 'description' => $meta_args['description'], 'plan' => $meta_args['plan'], 'created' => date('Y-m-d H:i:s'), 'expires' => $expires, 'payment_gateway' => $meta_args['payment_gateway'], 'payment_status' => $meta_args['payment_status']);
         $meta = apply_filters('leaky_paywall_new_subscriber_meta', $meta, $email, $customer_id, $meta_args);
         // remove any extra underscores from site variable
         $site = str_replace('__', '_', $site);
         foreach ($meta as $key => $value) {
             update_user_meta($user_id, '_issuem_leaky_paywall_' . $mode . '_' . $key . $site, $value);
         }
         do_action('leaky_paywall_new_subscriber', $user_id, $email, $meta, $customer_id, $meta_args);
         // We only need to send a new user email to newly created users. If userdata is an object, then the user already exists in the system and they have already received a new user email.
         if (is_array($userdata)) {
             leaky_paywall_email_subscription_status($user_id, 'new', $userdata);
         }
         return $user_id;
     }
     return false;
 }
Example #2
0
 function leaky_paywall_process_free_registration()
 {
     if (isset($_POST['leaky_paywall_user_login']) && wp_verify_nonce($_POST['leaky_paywall_register_nonce'], 'leaky_paywall-register-nonce')) {
         $user_login = $_POST['leaky_paywall_user_login'];
         $user_email = $_POST['leaky_paywall_user_email'];
         $user_first = $_POST['leaky_paywall_user_first'];
         $user_last = $_POST['leaky_paywall_user_last'];
         $user_pass = $_POST['leaky_paywall_user_pass'];
         $pass_confirm = $_POST['leaky_paywall_user_pass_confirm'];
         $level_id = $_POST['leaky_paywall_register_level_id'];
         // this is required for username checks
         require_once ABSPATH . WPINC . '/user.php';
         $settings = get_leaky_paywall_settings();
         $return = '';
         if ($level = get_leaky_paywall_subscription_level($level_id)) {
             if (!empty($level['price'])) {
                 leaky_paywall_errors()->add('subscriptoin_level_not_free', __('Requested subscription level is not free', 'issuem-leaky-paywall'));
             }
         } else {
             leaky_paywall_errors()->add('invalid_subscription_level', __('Not a valid subscription level', 'issuem-leaky-paywall'));
         }
         if (username_exists($user_login)) {
             // Username already registered
             leaky_paywall_errors()->add('username_unavailable', __('Username already taken', 'issuem-leaky-paywall'));
         }
         if (!validate_username($user_login)) {
             // invalid username
             leaky_paywall_errors()->add('username_invalid', __('Invalid username', 'issuem-leaky-paywall'));
         }
         if (empty($user_login)) {
             // empty username
             leaky_paywall_errors()->add('username_empty', __('Please enter a username', 'issuem-leaky-paywall'));
         }
         if (!is_email($user_email)) {
             //invalid email
             leaky_paywall_errors()->add('email_invalid', __('Invalid email', 'issuem-leaky-paywall'));
         }
         if (email_exists($user_email)) {
             //Email address already registered
             leaky_paywall_errors()->add('email_used', __('Email already registered', 'issuem-leaky-paywall'));
         }
         if ($user_pass == '') {
             // passwords do not match
             leaky_paywall_errors()->add('password_empty', __('Please enter a password', 'issuem-leaky-paywall'));
         }
         if ($user_pass != $pass_confirm) {
             // passwords do not match
             leaky_paywall_errors()->add('password_mismatch', __('Passwords do not match', 'issuem-leaky-paywall'));
         }
         $errors = leaky_paywall_errors()->get_error_messages();
         // only create the user in if there are no errors
         if (empty($errors)) {
             $userdata = array('user_login' => $user_login, 'user_pass' => $user_pass, 'user_email' => $user_email, 'first_name' => $user_first, 'last_name' => $user_last, 'user_registered' => date_i18n('Y-m-d H:i:s'));
             $userdata = apply_filters('leaky_paywall_userdata_before_user_create', $userdata);
             $user_id = wp_insert_user($userdata);
             if ($user_id) {
                 leaky_paywall_email_subscription_status($user_id, 'new', $userdata);
                 $args = array('level_id' => $level_id, 'subscriber_id' => '', 'subscriber_email' => $user_email, 'price' => $level['price'], 'description' => $level['label'], 'payment_gateway' => 'free_registration', 'payment_status' => 'active', 'interval' => $level['interval'], 'interval_count' => $level['interval_count']);
                 if (isset($level['site'])) {
                     $args['site'] = $level['site'];
                 }
                 //Mimic PayPal's Plan...
                 if (!empty($level['recurring']) && 'on' == $level['recurring']) {
                     $args['plan'] = $level['interval_count'] . ' ' . strtoupper(substr($level['interval'], 0, 1));
                 }
                 $args['subscriber_email'] = $user_email;
                 leaky_paywall_update_subscriber(NULL, $user_email, 'free-' . time(), $args);
                 do_action('leaky_paywall_after_free_user_created', $user_id, $_POST);
                 // log the new user in
                 wp_setcookie($user_login, $user_pass, true);
                 wp_set_current_user($user_id, $user_login);
                 do_action('wp_login', $user_login);
                 // send the newly created user to the appropriate page after logging them in
                 if (!empty($settings['page_for_after_subscribe'])) {
                     wp_safe_redirect(get_page_link($settings['page_for_after_subscribe']));
                 } else {
                     if (!empty($settings['page_for_profile'])) {
                         wp_safe_redirect(get_page_link($settings['page_for_profile']));
                     } else {
                         if (!empty($settings['page_for_subscription'])) {
                             wp_safe_redirect(get_page_link($settings['page_for_subscription']));
                         }
                     }
                 }
                 exit;
             }
         }
     }
 }
/**
 * Regsiter a new user
 *
 * @since 4.0.0
 */
function leaky_paywall_process_registration()
{
    if (!isset($_POST['leaky_paywall_register_nonce'])) {
        return;
    }
    if (!wp_verify_nonce($_POST['leaky_paywall_register_nonce'], 'leaky-paywall-register-nonce')) {
        return;
    }
    $settings = get_leaky_paywall_settings();
    global $user_ID;
    $level_id = isset($_POST['level_id']) ? absint($_POST['level_id']) : false;
    // get the selected payment method
    if (!isset($_POST['gateway'])) {
        $gateway = 'paypal';
    } else {
        $gateway = sanitize_text_field($_POST['gateway']);
    }
    /** 
     * Validate the Form
     */
    // validate user data
    $user_data = leaky_paywall_validate_user_data();
    // Validate extra fields in gateways
    do_action('leaky_paywall_form_errors', $_POST);
    // retrieve all error messages, if any
    $errors = leaky_paywall_errors()->get_error_messages();
    // only create the user if there are no errors
    if (!empty($errors)) {
        return;
    }
    // create a new user
    if ($user_data['need_new']) {
        $user_data['id'] = wp_insert_user(array('user_login' => $user_data['login'], 'user_pass' => $user_data['password'], 'user_email' => $user_data['email'], 'first_name' => $user_data['first_name'], 'last_name' => $user_data['last_name'], 'display_name' => $user_data['first_name'] . ' ' . $user_data['last_name'], 'user_registered' => date('Y-m-d H:i:s')));
    }
    if (empty($user_data['id'])) {
        return;
    }
    // add details about the subscription to newly created subscriber
    if ($user_data['id']) {
        $meta = array('level_id' => $level_id, 'price' => sanitize_text_field($_POST['level_price']), 'description' => sanitize_text_field($_POST['description']), 'plan' => sanitize_text_field($_POST['plan_id']), 'created' => date('Y-m-d H:i:s'), 'subscriber_id' => '', 'payment_gateway' => $gateway);
        $level = get_leaky_paywall_subscription_level($level_id);
        $mode = 'off' === $settings['test_mode'] ? 'live' : 'test';
        if (is_multisite_premium() && !empty($level['site']) && !is_main_site($level['site'])) {
            $site = '_' . $level['site'];
        } else {
            $site = '';
        }
        // set free level subscribers to active
        if ($meta['price'] == '0') {
            $meta['payment_status'] = 'active';
        }
        foreach ($meta as $key => $value) {
            update_user_meta($user_data['id'], '_issuem_leaky_paywall_' . $mode . '_' . $key . $site, $value);
        }
        do_action('leaky_paywall_form_processing', $_POST, $user_data['id'], $meta['price'], $mode, $site);
        if ($meta['price'] > '0') {
            if (!empty($discount)) {
                // record usage of discount code
            }
            $subscription_data = array('amount' => sanitize_text_field($_POST['level_price']), 'description' => sanitize_text_field($_POST['description']), 'user_id' => $user_data['id'], 'user_name' => $user_data['login'], 'user_email' => $user_data['email'], 'first_name' => $user_data['first_name'], 'last_name' => $user_data['last_name'], 'level_id' => $meta['level_id'], 'level_price' => sanitize_text_field($_POST['level_price']), 'plan_id' => sanitize_text_field($_POST['plan_id']), 'currency' => $settings['leaky_paywall_currency'], 'length' => sanitize_text_field($_POST['interval_count']), 'length_unit' => sanitize_text_field($_POST['interval']), 'recurring' => sanitize_text_field($_POST['recurring']), 'site' => sanitize_text_field($_POST['site']), 'new_user' => $user_data['need_new'], 'post_data' => $_POST);
            // send all data to the gateway for processing
            leaky_paywall_send_to_gateway($gateway, apply_filters('leaky_paywall_subscription_data', $subscription_data));
        } else {
            // process a free subscription
            $subscription_data = array('length' => sanitize_text_field($_POST['interval_count']), 'length_unit' => sanitize_text_field($_POST['interval']), 'site' => $site, 'mode' => $mode);
            leaky_paywall_set_expiration_date($user_data['id'], $subscription_data);
            // send email notification
            // @todo add a free version of the email notification, not just new
            leaky_paywall_email_subscription_status($user_data['id'], 'new', $user_data);
            do_action('leaky_paywall_after_free_user_created', $user_data['id'], $_POST);
            // log the new user in
            wp_setcookie($user_data['login'], $user_data['password'], true);
            wp_set_current_user($user_data['id'], $user_data['login']);
            do_action('wp_login', $user_data['login']);
            // send the newly created user to the appropriate page after logging them in
            if (!empty($settings['page_for_after_subscribe'])) {
                wp_safe_redirect(get_page_link($settings['page_for_after_subscribe']));
            } else {
                if (!empty($settings['page_for_profile'])) {
                    wp_safe_redirect(get_page_link($settings['page_for_profile']));
                } else {
                    if (!empty($settings['page_for_subscription'])) {
                        wp_safe_redirect(get_page_link($settings['page_for_subscription']));
                    }
                }
            }
            exit;
        }
        // @todo: move login and redirect code here so that it doesn't have to be included in each payment gateway
    }
}