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