/** * Handles login redirections. * * @package s2Member\Login_Redirects * @since 3.5 * * @attaches-to ``add_action('wp_login');`` * * @param string $username Expects Username. * @param WP_User $user Expects a WP_User object instance. * * @return null Or exits script execution after a redirection takes place. */ public static function login_redirect($username = '', $user = NULL) { foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action('ws_plugin__s2member_before_login_redirect', get_defined_vars()); unset($__refs, $__v); // Housekeeping. $ci = $GLOBALS['WS_PLUGIN__']['s2member']['o']['ruris_case_sensitive'] ? '' : 'i'; if (is_string($username) && $username && is_object($user) && !empty($user->ID) && ($user_id = $user->ID)) { update_user_option($user_id, 's2member_last_login_time', time()); $logins = (int) get_user_option('s2member_login_counter', $user_id) + 1; update_user_option($user_id, 's2member_login_counter', $logins); if (!get_user_option('s2member_registration_ip', $user_id)) { update_user_option($user_id, 's2member_registration_ip', $_SERVER['REMOTE_ADDR']); } if ($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_password']) { delete_user_setting('default_password_nag'); update_user_option($user_id, 'default_password_nag', FALSE, TRUE); } $ok = TRUE; // Initialize IP restriction being OK here. This is for filters. if ($username !== 'demo' && !is_super_admin($user_id) && !apply_filters('ws_plugin__s2member_disable_login_ip_restrictions', $user->has_cap('edit_posts') ? TRUE : FALSE, get_defined_vars())) { $ok = c_ws_plugin__s2member_ip_restrictions::ip_restrictions_ok($_SERVER['REMOTE_ADDR'], strtolower($username)); } if ($GLOBALS['WS_PLUGIN__']['s2member']['o']['login_redirection_always_http']) { // Alter value of `redirect_to`? if (!empty($_REQUEST['redirect_to']) && is_string($_REQUEST['redirect_to']) && strpos($_REQUEST['redirect_to'], 'wp-admin') === FALSE) { $_REQUEST['redirect_to'] = preg_replace('/^https\\:\\/\\//i', 'http://', $_REQUEST['redirect_to']); if (stripos($_REQUEST['redirect_to'], 'http://') !== 0) { $redirect_uri = $_REQUEST['redirect_to']; // e.g., `/path/with/?query=args` $home_path = trim((string) @parse_url(home_url('/'), PHP_URL_PATH), '/'); $http_home_base = trim(preg_replace('/\\/' . preg_quote($home_path, '/') . '\\/$/' . $ci, '', home_url('/', 'http')), '/'); $_REQUEST['redirect_to'] = $http_home_base . '/' . ltrim($redirect_uri, '/'); } } } if ($redirect = apply_filters('ws_plugin__s2member_login_redirect', $user->has_cap('edit_posts') ? FALSE : TRUE, get_defined_vars())) { $obey_redirect_to = apply_filters('ws_plugin__s2member_obey_login_redirect_to', TRUE, get_defined_vars()); if ($obey_redirect_to && (empty($_REQUEST['redirect_to']) || !is_string($_REQUEST['redirect_to']) || $_REQUEST['redirect_to'] === admin_url() || preg_match('/^\\/?wp-admin\\/?$/' . $ci, $_REQUEST['redirect_to']))) { $obey_redirect_to = FALSE; } else { if ($obey_redirect_to && !empty($_REQUEST['redirect_to_automatic']) && is_string($redirect)) { $obey_redirect_to = FALSE; } } // Do not obey automatic redirects when a custom redirection filter applies. // ↑ NOTE: this will apply to s2Member Pro's One-Time-Offers (Upon Login) also. if (!$obey_redirect_to) { foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action('ws_plugin__s2member_during_login_redirect', get_defined_vars()); unset($__refs, $__v); // Housekeeping. $is_lwp = FALSE; // Initialize LWP detection flag. if ($redirect && is_string($redirect)) { $redirect = $redirect; } else { if ($login_redirection_url = c_ws_plugin__s2member_login_redirects::login_redirection_url($user)) { $is_lwp = TRUE; // Flag as being a hard-coded LWP URL in this case. $redirect = $login_redirection_url; // Special redirection URL. } else { if ($GLOBALS['WS_PLUGIN__']['s2member']['o']['login_welcome_page']) { $is_lwp = TRUE; // Flag as being a hard-coded LWP URL in this case. $redirect = get_page_link($GLOBALS['WS_PLUGIN__']['s2member']['o']['login_welcome_page']); } else { $redirect = home_url('/'); } } } // Default to the home page. if ($GLOBALS['WS_PLUGIN__']['s2member']['o']['login_redirection_always_http']) { $redirect = preg_replace('/^https\\:\\/\\//i', 'http://', $redirect); if (stripos($redirect, 'http://') !== 0) { $redirect_uri = $redirect; // e.g., `/path/with/?query=args` $home_path = trim((string) @parse_url(home_url('/'), PHP_URL_PATH), '/'); $http_home_base = trim(preg_replace('/\\/' . preg_quote($home_path, '/') . '\\/$/' . $ci, '', home_url('/', 'http')), '/'); $redirect = $http_home_base . '/' . ltrim($redirect_uri, '/'); } } if ($is_lwp) { // Allow offsite redirection? wp_redirect($redirect); } else { wp_safe_redirect($redirect); } // Default behavior. exit; // Stop here; redirecting now. } } } do_action('ws_plugin__s2member_after_login_redirect', get_defined_vars()); }
/** * Saves Custom Fields after an admin updates Profile. * * @package s2Member\Users_List * @since 3.5 * * @attaches-to ``add_action("edit_user_profile_update");`` * @attaches-to ``add_action("personal_options_update");`` * * @param int|str $user_id Expects a numeric WordPress User ID passed in by the Action Hook. * @return null */ public static function users_list_update_cols($user_id = FALSE) { global $current_site, $current_blog; foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action("ws_plugin__s2member_before_users_list_update_cols", get_defined_vars()); unset($__refs, $__v); $user = new WP_User($user_id); $current_user = is_user_logged_in() ? wp_get_current_user() : false; if (is_object($user) && !empty($user->ID) && ($user_id = $user->ID) && is_object($current_user) && !empty($current_user->ID)) { if (current_user_can("edit_users") && (!is_multisite() || is_super_admin() || is_user_member_of_blog($user_id))) { if (!empty($_POST) && is_array($_p = c_ws_plugin__s2member_utils_strings::trim_deep(stripslashes_deep($_POST)))) { $old_user = unserialize(serialize($user)); $old_role = c_ws_plugin__s2member_user_access::user_access_role($old_user); $role = isset($_p["role"]) && $_p["role"] !== $old_role ? $_p["role"] : $old_role; $level = c_ws_plugin__s2member_user_access::user_access_role_to_level($role); $user->roles = isset($_p["role"]) && $_p["role"] !== $old_role ? array($_p["role"]) : $old_user->roles; $user->user_email = isset($_p["email"]) && is_email($_p["email"]) && $_p["email"] !== $old_user->user_email && !email_exists($_p["email"]) ? $_p["email"] : $old_user->user_email; $user->first_name = isset($_p["first_name"]) && $_p["first_name"] !== $old_user->first_name ? $_p["first_name"] : $old_user->first_name; $user->last_name = isset($_p["last_name"]) && $_p["last_name"] !== $old_user->last_name ? $_p["last_name"] : $old_user->last_name; $auto_eot_time = !empty($_p["ws_plugin__s2member_profile_s2member_auto_eot_time"]) ? strtotime($_p["ws_plugin__s2member_profile_s2member_auto_eot_time"]) : ""; if ($role !== $old_role) { // In this case, we need to fire Hook: `ws_plugin__s2member_during_collective_mods`. do_action("ws_plugin__s2member_during_collective_mods", $user_id, get_defined_vars(), "user-role-change", "modification", $role, $user, $old_user); } if (isset($_p["ws_plugin__s2member_profile_s2member_originating_blog"]) && is_multisite() && is_super_admin()) { update_user_meta($user_id, "s2member_originating_blog", $_p["ws_plugin__s2member_profile_s2member_originating_blog"]); } if (isset($_p["ws_plugin__s2member_profile_s2member_subscr_gateway"])) { update_user_option($user_id, "s2member_subscr_gateway", $_p["ws_plugin__s2member_profile_s2member_subscr_gateway"]); } if (isset($_p["ws_plugin__s2member_profile_s2member_subscr_id"])) { update_user_option($user_id, "s2member_subscr_id", $_p["ws_plugin__s2member_profile_s2member_subscr_id"]); } if (isset($_p["ws_plugin__s2member_profile_s2member_custom"])) { update_user_option($user_id, "s2member_custom", $_p["ws_plugin__s2member_profile_s2member_custom"]); } if (isset($_p["ws_plugin__s2member_profile_s2member_registration_ip"])) { update_user_option($user_id, "s2member_registration_ip", $_p["ws_plugin__s2member_profile_s2member_registration_ip"]); } if (isset($_p["ws_plugin__s2member_profile_s2member_notes"])) { update_user_option($user_id, "s2member_notes", $_p["ws_plugin__s2member_profile_s2member_notes"]); } if (isset($_p["ws_plugin__s2member_profile_s2member_auto_eot_time"]) && isset($auto_eot_time)) { update_user_option($user_id, "s2member_auto_eot_time", $auto_eot_time); } if (isset($_p["ws_plugin__s2member_profile_s2member_ccaps"])) { foreach ($user->allcaps as $cap => $cap_enabled) { if (preg_match("/^access_s2member_ccap_/", $cap)) { $user->remove_cap($ccap = $cap); } } if (!empty($_p["ws_plugin__s2member_profile_s2member_ccaps"])) { foreach (preg_split("/[\r\n\t\\s;,]+/", $_p["ws_plugin__s2member_profile_s2member_ccaps"]) as $ccap) { if (strlen($ccap = trim(strtolower(preg_replace("/[^a-z_0-9]/i", "", $ccap))))) { $user->add_cap("access_s2member_ccap_" . $ccap); } } } } if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"]) { foreach (json_decode($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field) { $field_var = preg_replace("/[^a-z0-9]/i", "_", strtolower($field["id"])); $field_id_class = preg_replace("/_/", "-", $field_var); if (isset($_p["ws_plugin__s2member_profile_" . $field_var])) { if (is_array($_p["ws_plugin__s2member_profile_" . $field_var]) && !empty($_p["ws_plugin__s2member_profile_" . $field_var]) || is_string($_p["ws_plugin__s2member_profile_" . $field_var]) && strlen($_p["ws_plugin__s2member_profile_" . $field_var])) { $fields[$field_var] = $_p["ws_plugin__s2member_profile_" . $field_var]; } else { unset($fields[$field_var]); } } else { unset($fields[$field_var]); } } } if (!empty($fields)) { update_user_option($user_id, "s2member_custom_fields", $fields); } else { delete_user_option($user_id, "s2member_custom_fields"); } if ($level > 0) { $pr_times = get_user_option("s2member_paid_registration_times", $user_id); $pr_times["level"] = empty($pr_times["level"]) ? time() : $pr_times["level"]; $pr_times["level" . $level] = empty($pr_times["level" . $level]) ? time() : $pr_times["level" . $level]; update_user_option($user_id, "s2member_paid_registration_times", $pr_times); // Update now. } if (!empty($_p["ws_plugin__s2member_profile_opt_in"]) && !empty($role) && $level >= 0) { c_ws_plugin__s2member_list_servers::process_list_servers($role, $level, $user->user_login, !empty($_p["pass1"]) ? $_p["pass1"] : "", $user->user_email, $user->first_name, $user->last_name, false, true, true, $user_id); } if (!empty($_p["ws_plugin__s2member_profile_ip_restrictions"])) { c_ws_plugin__s2member_ip_restrictions::delete_reset_specific_ip_restrictions(strtolower($user->user_login)); } if (!empty($_p["ws_plugin__s2member_profile_reset_pass_resend"]) && c_ws_plugin__s2member_utils_conds::pro_is_installed()) { c_ws_plugin__s2member_email_configs::reset_pass_resend_new_user_notification($user_id, !empty($_p["pass1"]) ? $_p["pass1"] : "", array("user"), $user->user_email); } foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action("ws_plugin__s2member_during_users_list_update_cols", get_defined_vars()); unset($__refs, $__v); } } else { if ($current_user->ID === $user->ID) { if (!empty($_POST) && is_array($_p = c_ws_plugin__s2member_utils_strings::trim_deep(stripslashes_deep($_POST)))) { $role = c_ws_plugin__s2member_user_access::user_access_role($user); $level = c_ws_plugin__s2member_user_access::user_access_role_to_level($role); if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"]) { if ($fields_applicable = c_ws_plugin__s2member_custom_reg_fields::custom_fields_configured_at_level($level, "profile")) { $_existing_fields = get_user_option("s2member_custom_fields", $user_id); foreach (json_decode($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field) { $field_var = preg_replace("/[^a-z0-9]/i", "_", strtolower($field["id"])); $field_id_class = preg_replace("/_/", "-", $field_var); if (!in_array($field["id"], $fields_applicable) || strpos($field["editable"], "no") === 0) { if (isset($_existing_fields[$field_var]) && (is_array($_existing_fields[$field_var]) && !empty($_existing_fields[$field_var]) || is_string($_existing_fields[$field_var]) && strlen($_existing_fields[$field_var]))) { $fields[$field_var] = $_existing_fields[$field_var]; } else { // Else ``unset()``. unset($fields[$field_var]); } } else { if ($field["required"] === "yes" && (!isset($_p["ws_plugin__s2member_profile_" . $field_var]) || !is_array($_p["ws_plugin__s2member_profile_" . $field_var]) && !is_string($_p["ws_plugin__s2member_profile_" . $field_var]) || is_array($_p["ws_plugin__s2member_profile_" . $field_var]) && empty($_p["ws_plugin__s2member_profile_" . $field_var]) || is_string($_p["ws_plugin__s2member_profile_" . $field_var]) && !strlen($_p["ws_plugin__s2member_profile_" . $field_var]))) { if (isset($_existing_fields[$field_var]) && (is_array($_existing_fields[$field_var]) && !empty($_existing_fields[$field_var]) || is_string($_existing_fields[$field_var]) && strlen($_existing_fields[$field_var]))) { $fields[$field_var] = $_existing_fields[$field_var]; } else { // Else ``unset()``. unset($fields[$field_var]); } } else { if (isset($_p["ws_plugin__s2member_profile_" . $field_var])) { if (is_array($_p["ws_plugin__s2member_profile_" . $field_var]) && !empty($_p["ws_plugin__s2member_profile_" . $field_var]) || is_string($_p["ws_plugin__s2member_profile_" . $field_var]) && strlen($_p["ws_plugin__s2member_profile_" . $field_var])) { $fields[$field_var] = $_p["ws_plugin__s2member_profile_" . $field_var]; } else { unset($fields[$field_var]); } } else { unset($fields[$field_var]); } } } } if (!empty($fields)) { update_user_option($user_id, "s2member_custom_fields", $fields); } else { delete_user_option($user_id, "s2member_custom_fields"); } } } foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action("ws_plugin__s2member_during_users_list_update_cols", get_defined_vars()); unset($__refs, $__v); } } } } foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action("ws_plugin__s2member_after_users_list_update_cols", get_defined_vars()); unset($__refs, $__v); return; }
/** * Resets/deletes all IP Restrictions via AJAX. * * @package s2Member\IP_Restrictions * @since 3.5 * * @attaches-to ``add_action("wp_ajax_ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax");`` * * @return null Exits script execution after returning data for AJAX caller. */ public static function delete_reset_all_ip_restrictions_via_ajax() { do_action("ws_plugin__s2member_before_delete_reset_all_ip_restrictions_via_ajax", get_defined_vars()); status_header(200); header("Content-Type: text/plain; charset=UTF-8"); while (@ob_end_clean()) { } // Clean any existing output buffers. if (current_user_can("create_users")) { if (!empty($_POST["ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax"])) { if ($nonce = $_POST["ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax"]) { if (wp_verify_nonce($nonce, "ws-plugin--s2member-delete-reset-all-ip-restrictions-via-ajax")) { if (c_ws_plugin__s2member_ip_restrictions::delete_reset_all_ip_restrictions()) { $success = true; } } } } } exit(apply_filters("ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax", isset($success) && $success ? "1" : "0", get_defined_vars())); }
/** * Resets/deletes all IP Restrictions via AJAX. * * @package s2Member\IP_Restrictions * @since 3.5 * * @attaches-to ``add_action("wp_ajax_ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax");`` * * @return null Exits script execution after returning data for AJAX caller. */ public static function delete_reset_all_ip_restrictions_via_ajax() { do_action("ws_plugin__s2member_before_delete_reset_all_ip_restrictions_via_ajax", get_defined_vars()); /**/ status_header(200); /* Send a 200 OK status header. */ header("Content-Type: text/plain; charset=utf-8"); /* Content-Type with UTF-8. */ eval('while (@ob_end_clean ());'); /* End/clean all output buffers that may exist. */ /**/ if (current_user_can("create_users")) { /* Check priveledges. Ability to create Users? */ /**/ if (!empty($_POST["ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax"])) { if ($nonce = $_POST["ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax"]) { if (wp_verify_nonce($nonce, "ws-plugin--s2member-delete-reset-all-ip-restrictions-via-ajax")) { /**/ if (c_ws_plugin__s2member_ip_restrictions::delete_reset_all_ip_restrictions()) { $success = true; } } } } } /* Yes, all IP Restrictions were deleted/reset. */ /**/ exit(apply_filters("ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax", isset($success) && $success ? "1" : "0", get_defined_vars())); }
/** * Handles login redirections. * * @package s2Member\Login_Redirects * @since 3.5 * * @attaches-to ``add_action("wp_login");`` * * @param str $username Expects Username. * @param WP_User $user Expects a WP_User object instance. * @return null Or exits script execution after a redirection takes place. */ public static function login_redirect($username = FALSE, $user = FALSE) { foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action("ws_plugin__s2member_before_login_redirect", get_defined_vars()); unset($__refs, $__v); if (is_string($username) && $username && is_object($user) && !empty($user->ID) && ($user_id = $user->ID)) { update_user_option($user_id, "s2member_last_login_time", time()); if (!get_user_option("s2member_registration_ip", $user_id)) { update_user_option($user_id, "s2member_registration_ip", $_SERVER["REMOTE_ADDR"]); } if (($logins = (int) get_user_option("s2member_login_counter", $user_id) + 1) >= 1 || ($logins = 1)) { update_user_option($user_id, "s2member_login_counter", $logins); } if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_password"]) { delete_user_setting("default_password_nag") . update_user_option($user_id, "default_password_nag", false, true); } $disable_login_ip_restrictions = apply_filters("ws_plugin__s2member_disable_login_ip_restrictions", false, get_defined_vars()); if (($ok = true) && !is_super_admin($user_id) && $username !== "demo" && !$disable_login_ip_restrictions) { $ok = c_ws_plugin__s2member_ip_restrictions::ip_restrictions_ok($_SERVER["REMOTE_ADDR"], $username); } if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_redirection_always_http"]) { // Alter value of `redirect_to`? if (!empty($_REQUEST["redirect_to"]) && is_string($_REQUEST["redirect_to"]) && strpos($_REQUEST["redirect_to"], "wp-admin") === FALSE) { $_REQUEST["redirect_to"] = preg_replace("/^https\\:\\/\\//i", "http://", $_REQUEST["redirect_to"]); if (stripos($_REQUEST["redirect_to"], "http://") !== 0) { // Force an absolute URL in this case. $_REQUEST["redirect_to"] = home_url($_REQUEST["redirect_to"], "http"); } } } if ($redirect = apply_filters("ws_plugin__s2member_login_redirect", $user->has_cap("edit_posts") ? false : true, get_defined_vars())) { $obey_redirect_to = apply_filters("ws_plugin__s2member_obey_login_redirect_to", true, get_defined_vars()); if (!$obey_redirect_to || empty($_REQUEST["redirect_to"]) || !is_string($_REQUEST["redirect_to"]) || $_REQUEST["redirect_to"] === admin_url() || preg_match("/^\\/?wp-admin\\/?\$/", $_REQUEST["redirect_to"])) { foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action("ws_plugin__s2member_during_login_redirect", get_defined_vars()); unset($__refs, $__v); if ($redirect && is_string($redirect)) { $redirect = $redirect; } else { if ($redirection_url = c_ws_plugin__s2member_login_redirects::login_redirection_url($user)) { $redirect = $redirection_url; } else { // Else we use the Login Welcome Page configured for s2Member. $redirect = get_page_link($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_welcome_page"]); } } if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_redirection_always_http"]) { $redirect = preg_replace("/^https\\:\\/\\//i", "http://", $redirect); if (stripos($redirect, "http://") !== 0) { // Force an absolute URL in this case. $redirect = home_url($redirect, "http"); } } wp_redirect($redirect) . exit; } } } foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action("ws_plugin__s2member_after_login_redirect", get_defined_vars()); unset($__refs, $__v); return; }
/** * Modifies an existing User. * * @package s2Member\API_Remote_Ops * @since 110713 * * @param array An input array of Remote Operation parameters. * @return str Returns a serialized array with an `ID` element object on success, * else returns a string beginning with `Error:` on failure; which will include details regarding the error. */ public static function modify_user($op = NULL) { if (!empty($op["op"]) && $op["op"] === "modify_user" && !empty($op["data"]) && is_array($op["data"])) { if (!empty($op["data"]["user_id"]) && ($_user = new WP_User((int) $op["data"]["user_id"])) && !empty($_user->ID)) { $user = $_user; } else { if (!empty($op["data"]["user_login"]) && ($_user = new WP_User((string) $op["data"]["user_login"])) && !empty($_user->ID)) { $user = $_user; } else { return "Error: Modification failed. Unable to obtain WP_User object instance with data supplied (i.e. ID/Username not found)."; } } if (is_multisite() && !is_user_member_of_blog($user->ID)) { return "Error: Modification failed. Unable to obtain WP_User object instance with data supplied (i.e. ID/Username not a part of this Blog)."; } if (is_super_admin($user->ID) || $user->has_cap("administrator")) { return "Error: Modification failed. This API will not modify Administrators."; } $userdata["ID"] = $user->ID; if (!empty($op["data"]["user_email"])) { if (is_email((string) $op["data"]["user_email"]) && !email_exists((string) $op["data"]["user_email"])) { $userdata["user_email"] = (string) $op["data"]["user_email"]; } } if (!empty($op["data"]["user_pass"])) { if ($user->user_login !== "demo") { $userdata["user_pass"] = (string) $op["data"]["user_pass"]; } } if (!empty($op["data"]["first_name"])) { $userdata["first_name"] = (string) $op["data"]["first_name"]; } if (!empty($op["data"]["display_name"])) { $userdata["display_name"] = (string) $op["data"]["display_name"]; } if (!empty($op["data"]["last_name"])) { $userdata["last_name"] = (string) $op["data"]["last_name"]; } if (isset($op["data"]["s2member_level"]) && (int) $op["data"]["s2member_level"] === 0) { if (c_ws_plugin__s2member_user_access::user_access_role($user) !== get_option("default_role")) { $userdata["role"] = get_option("default_role"); } } else { if (!empty($op["data"]["s2member_level"]) && (int) $op["data"]["s2member_level"] > 0) { if (c_ws_plugin__s2member_user_access::user_access_role($user) !== "s2member_level" . (int) $op["data"]["s2member_level"]) { $userdata["role"] = "s2member_level" . (int) $op["data"]["s2member_level"]; } } } wp_update_user($userdata); $old_user = unserialize(serialize($user)); $user = new WP_User($user->ID); $role = c_ws_plugin__s2member_user_access::user_access_role($user); $level = c_ws_plugin__s2member_user_access::user_access_role_to_level($role); if (!empty($op["data"]["auto_opt_out_transition"])) { $_p["ws_plugin__s2member_custom_reg_auto_opt_out_transitions"] = TRUE; } if (!empty($userdata["role"])) { do_action("ws_plugin__s2member_during_collective_mods", $user->ID, get_defined_vars(), "user-role-change", "modification", $role, $user, $old_user); } if (!empty($op["data"]["s2member_ccaps"]) && preg_match("/^-all/", str_replace("+", "", (string) $op["data"]["s2member_ccaps"]))) { foreach ($user->allcaps as $cap => $cap_enabled) { if (preg_match("/^access_s2member_ccap_/", $cap)) { $user->remove_cap($ccap = $cap); } } } if (!empty($op["data"]["s2member_ccaps"]) && preg_replace("/^-all[\r\n\t\\s;,]*/", "", str_replace("+", "", (string) $op["data"]["s2member_ccaps"]))) { foreach (preg_split("/[\r\n\t\\s;,]+/", preg_replace("/^-all[\r\n\t\\s;,]*/", "", str_replace("+", "", (string) $op["data"]["s2member_ccaps"]))) as $ccap) { if (strlen($ccap = trim(strtolower(preg_replace("/[^a-z_0-9]/i", "", $ccap))))) { $user->add_cap("access_s2member_ccap_" . $ccap); } } } if (isset($op["data"]["s2member_originating_blog"]) && is_multisite()) { update_user_meta($user->ID, "s2member_originating_blog", (int) $op["data"]["s2member_originating_blog"]); } if (isset($op["data"]["s2member_subscr_gateway"])) { update_user_option($user->ID, "s2member_subscr_gateway", (string) $op["data"]["s2member_subscr_gateway"]); } if (isset($op["data"]["s2member_subscr_id"])) { update_user_option($user->ID, "s2member_subscr_id", (string) $op["data"]["s2member_subscr_id"]); } if (isset($op["data"]["s2member_custom"])) { update_user_option($user->ID, "s2member_custom", (string) $op["data"]["s2member_custom"]); } if (isset($op["data"]["s2member_registration_ip"])) { update_user_option($user->ID, "s2member_registration_ip", (string) $op["data"]["s2member_registration_ip"]); } if (isset($op["data"]["s2member_notes"])) { update_user_option($user->ID, "s2member_notes", trim(get_user_option("s2member_notes", $user->ID) . "\n\n" . (string) $op["data"]["s2member_notes"])); } if (isset($op["data"]["s2member_auto_eot_time"])) { update_user_option($user->ID, "s2member_auto_eot_time", !empty($op["data"]["s2member_auto_eot_time"]) ? strtotime((string) $op["data"]["s2member_auto_eot_time"]) : ""); } if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"]) { $_existing_fields = get_user_option("s2member_custom_fields", $user->ID); foreach (json_decode($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field) { $field_var = preg_replace("/[^a-z0-9]/i", "_", strtolower($field["id"])); $field_id_class = preg_replace("/_/", "-", $field_var); if (!isset($op["data"]["custom_fields"][$field_var])) { if (isset($_existing_fields[$field_var]) && (is_array($_existing_fields[$field_var]) && !empty($_existing_fields[$field_var]) || is_string($_existing_fields[$field_var]) && strlen($_existing_fields[$field_var]))) { $fields[$field_var] = $_existing_fields[$field_var]; } else { unset($fields[$field_var]); } } else { if (is_array($op["data"]["custom_fields"][$field_var]) && !empty($op["data"]["custom_fields"][$field_var]) || is_string($op["data"]["custom_fields"][$field_var]) && strlen($op["data"]["custom_fields"][$field_var])) { $fields[$field_var] = $op["data"]["custom_fields"][$field_var]; } else { unset($fields[$field_var]); } } } if (!empty($fields)) { update_user_option($user->ID, "s2member_custom_fields", $fields); } else { delete_user_option($user->ID, "s2member_custom_fields"); } } if ($level > 0) { $pr_times = get_user_option("s2member_paid_registration_times", $user->ID); $pr_times["level"] = empty($pr_times["level"]) ? time() : $pr_times["level"]; $pr_times["level" . $level] = empty($pr_times["level" . $level]) ? time() : $pr_times["level" . $level]; update_user_option($user->ID, "s2member_paid_registration_times", $pr_times); } if (!empty($op["data"]["opt_in"]) && !empty($role) && $level >= 0) { c_ws_plugin__s2member_list_servers::process_list_servers($role, $level, $user->user_login, !empty($op["data"]["user_pass"]) ? (string) $op["data"]["user_pass"] : "", $user->user_email, $user->first_name, $user->last_name, false, true, true, $user->ID); } if (!empty($op["data"]["reset_ip_restrictions"])) { c_ws_plugin__s2member_ip_restrictions::delete_reset_specific_ip_restrictions(strtolower($user->user_login)); } if (!empty($op["data"]["reset_file_download_access_log"])) { delete_user_option($user->ID, "s2member_file_download_access_log"); } return serialize(array("ID" => $user->ID)); } return "Error: Empty or invalid request ( `modify_user` ). Please try again."; }
/** * Handles Specific Post/Page Access authentication. * * @package s2Member\SP_Access * @since 3.5 * * @param int|string $sp_id Numeric Post/Page ID in WordPress. * @param bool $read_only Optional. Defaults to false. If ``$read_only = true``, * no session cookies are set, no IP Restrictions are checked, and script execution is not exited on Link failure. * In other words, with ``$read_only = true``, this function will simply return true or false. * @return null|bool Always returns `true` if access is indeed allowed in one way or another. * If access is denied with ``$read_only = true`` simply return false. If access is denied with ``$read_only = false``, return false; but if a Specific Post/Page Access Link is currently being used, we exit with a warning about Access Link expiration here. */ public static function sp_access($sp_id = FALSE, $read_only = FALSE) { do_action("ws_plugin__s2member_before_sp_access", get_defined_vars()); $excluded = apply_filters("ws_plugin__s2member_sp_access_excluded", false, get_defined_vars()); if ($excluded || current_user_can(apply_filters("ws_plugin__s2member_sp_access_excluded_cap", "edit_posts", get_defined_vars()))) { return apply_filters("ws_plugin__s2member_sp_access", true, get_defined_vars(), "auth-via-exclusion"); } else { if ($sp_id && is_numeric($sp_id) && (!empty($_GET["s2member_sp_access"]) && ($_g["s2member_sp_access"] = trim(stripslashes((string) $_GET["s2member_sp_access"]))) && is_array($sp_access_values = array($_g["s2member_sp_access"])) || is_array($sp_access_values = c_ws_plugin__s2member_sp_access::sp_access_session())) && !empty($sp_access_values)) { foreach ($sp_access_values as $sp_access_value) { if (is_array($sp_access = preg_split("/\\:\\.\\:\\|\\:\\.\\:/", c_ws_plugin__s2member_utils_encryption::decrypt($sp_access_value)))) { if (count($sp_access) === 4 && $sp_access[0] === "sp_time_hours" && in_array($sp_id, preg_split("/[\r\n\t\\s;,]+/", $sp_access[1]))) { if (is_numeric($sp_access[2]) && is_numeric($sp_access[3]) && $sp_access[2] <= strtotime("now") && $sp_access[2] + $sp_access[3] * 3600 >= strtotime("now")) { if (!$read_only && !empty($_g["s2member_sp_access"])) { // Add to session? c_ws_plugin__s2member_sp_access::sp_access_session($_g["s2member_sp_access"]); } if ($read_only || c_ws_plugin__s2member_ip_restrictions::ip_restrictions_ok($_SERVER["REMOTE_ADDR"], $sp_access_value)) { return apply_filters("ws_plugin__s2member_sp_access", true, get_defined_vars(), "auth-via-link-session"); } } } } } // Otherwise, authentication was NOT possible via link or session. if (!$read_only && !empty($_g["s2member_sp_access"])) { status_header(503); header("Content-Type: text/html; charset=UTF-8"); while (@ob_end_clean()) { } // Clean any existing output buffers. exit(_x('<strong>Your Link Expired:</strong><br />Please contact Support if you need assistance.', "s2member-front", "s2member")); } else { // Else return false here. return apply_filters("ws_plugin__s2member_sp_access", false, get_defined_vars(), "no-auth-via-link-session"); } } else { // Else return false here. return apply_filters("ws_plugin__s2member_sp_access", false, get_defined_vars(), "no-auth-no-link-session"); } } }
/** * Modifies an existing User. * * @package s2Member\API_Remote_Ops * @since 110713 * * @param array $op An input array of Remote Operation parameters. * * @return string Returns a serialized array with an `ID` element object on success, * else returns a string beginning with `Error:` on failure; which will include details regarding the error. */ public static function modify_user($op = NULL) { if (!empty($op['op']) && $op['op'] === 'modify_user' && !empty($op['data']) && is_array($op['data'])) { if (!empty($op['data']['user_id']) && ($_user = new WP_User((int) $op['data']['user_id'])) && !empty($_user->ID)) { $user = $_user; } else { if (!empty($op['data']['user_login']) && ($_user = new WP_User((string) $op['data']['user_login'])) && !empty($_user->ID)) { $user = $_user; } else { return 'Error: Modification failed. Unable to obtain WP_User object instance with data supplied (i.e., ID/Username not found).'; } } if (is_multisite() && !is_user_member_of_blog($user->ID)) { return 'Error: Modification failed. Unable to obtain WP_User object instance with data supplied (i.e., ID/Username not a part of this Blog).'; } if (is_super_admin($user->ID) || $user->has_cap('administrator')) { return 'Error: Modification failed. This API will not modify Administrators.'; } $userdata['ID'] = $user->ID; // Needed for database update. if (!empty($op['data']['user_email'])) { if (is_email((string) $op['data']['user_email']) && !email_exists((string) $op['data']['user_email'])) { $userdata['user_email'] = (string) $op['data']['user_email']; } } if (!empty($op['data']['user_pass'])) { if ($user->user_login !== 'demo') { $userdata['user_pass'] = (string) $op['data']['user_pass']; } } if (!empty($op['data']['first_name'])) { $userdata['first_name'] = (string) $op['data']['first_name']; } if (!empty($op['data']['display_name'])) { $userdata['display_name'] = (string) $op['data']['display_name']; } if (!empty($op['data']['last_name'])) { $userdata['last_name'] = (string) $op['data']['last_name']; } if (isset($op['data']['s2member_level']) && (int) $op['data']['s2member_level'] === 0) { if (c_ws_plugin__s2member_user_access::user_access_role($user) !== get_option('default_role')) { $userdata['role'] = get_option('default_role'); } } else { if (!empty($op['data']['s2member_level']) && (int) $op['data']['s2member_level'] > 0) { if (c_ws_plugin__s2member_user_access::user_access_role($user) !== 's2member_level' . (int) $op['data']['s2member_level']) { $userdata['role'] = 's2member_level' . (int) $op['data']['s2member_level']; } } } wp_update_user(wp_slash($userdata)); // OK. Now send this array for an update. $old_user = unserialize(serialize($user)); // Copy existing user obj. $user = new WP_User($user->ID); // Update our object instance. $role = c_ws_plugin__s2member_user_access::user_access_role($user); $level = c_ws_plugin__s2member_user_access::user_access_role_to_level($role); if (!empty($op['data']['auto_opt_out_transition'])) { $_p['ws_plugin__s2member_custom_reg_auto_opt_out_transitions'] = TRUE; } if (!empty($userdata['role'])) { do_action('ws_plugin__s2member_during_collective_mods', $user->ID, get_defined_vars(), 'user-role-change', 'modification', $role, $user, $old_user); } if (!empty($op['data']['s2member_ccaps']) && preg_match('/^-all/', str_replace('+', '', (string) $op['data']['s2member_ccaps']))) { foreach ($user->allcaps as $cap => $cap_enabled) { if (preg_match('/^access_s2member_ccap_/', $cap)) { $user->remove_cap($ccap = $cap); } } } if (!empty($op['data']['s2member_ccaps']) && preg_replace('/^-all[' . "\r\n\t" . '\\s;,]*/', '', str_replace('+', '', (string) $op['data']['s2member_ccaps']))) { foreach (preg_split('/[\\r\\n\\t\\s;,]+/', preg_replace('/^-all[' . "\r\n\t" . '\\s;,]*/', '', str_replace('+', '', (string) $op['data']['s2member_ccaps']))) as $ccap) { if (strlen($ccap = trim(strtolower(preg_replace('/[^a-z_0-9]/i', '', $ccap))))) { $user->add_cap('access_s2member_ccap_' . $ccap); } } } if (isset($op['data']['s2member_originating_blog']) && is_multisite()) { update_user_meta($user->ID, 's2member_originating_blog', (int) $op['data']['s2member_originating_blog']); } if (isset($op['data']['s2member_subscr_gateway'])) { update_user_option($user->ID, 's2member_subscr_gateway', (string) $op['data']['s2member_subscr_gateway']); } if (isset($op['data']['s2member_subscr_id'])) { update_user_option($user->ID, 's2member_subscr_id', (string) $op['data']['s2member_subscr_id']); } if (isset($op['data']['s2member_custom'])) { update_user_option($user->ID, 's2member_custom', (string) $op['data']['s2member_custom']); } if (isset($op['data']['s2member_registration_ip'])) { update_user_option($user->ID, 's2member_registration_ip', (string) $op['data']['s2member_registration_ip']); } if (isset($op['data']['s2member_notes'])) { update_user_option($user->ID, 's2member_notes', trim(get_user_option('s2member_notes', $user->ID) . "\n\n" . (string) $op['data']['s2member_notes'])); } if (isset($op['data']['s2member_auto_eot_time'])) { update_user_option($user->ID, 's2member_auto_eot_time', !empty($op['data']['s2member_auto_eot_time']) ? strtotime((string) $op['data']['s2member_auto_eot_time']) : ''); } if ($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_fields']) { $_existing_fields = get_user_option('s2member_custom_fields', $user->ID); foreach (json_decode($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_fields'], TRUE) as $field) { $field_var = preg_replace('/[^a-z0-9]/i', '_', strtolower($field['id'])); $field_id_class = preg_replace('/_/', '-', $field_var); if (!isset($op['data']['custom_fields'][$field_var])) { if (isset($_existing_fields[$field_var]) && (is_array($_existing_fields[$field_var]) && !empty($_existing_fields[$field_var]) || is_string($_existing_fields[$field_var]) && strlen($_existing_fields[$field_var]))) { $fields[$field_var] = $_existing_fields[$field_var]; } else { if (!empty($fields)) { unset($fields[$field_var]); } } } else { if (is_array($op['data']['custom_fields'][$field_var]) && !empty($op['data']['custom_fields'][$field_var]) || is_string($op['data']['custom_fields'][$field_var]) && strlen($op['data']['custom_fields'][$field_var])) { $fields[$field_var] = $op['data']['custom_fields'][$field_var]; } else { if (!empty($fields)) { unset($fields[$field_var]); } } } } if (!empty($fields)) { update_user_option($user->ID, 's2member_custom_fields', $fields); } else { delete_user_option($user->ID, 's2member_custom_fields'); } } if ($level > 0) { $pr_times = get_user_option('s2member_paid_registration_times', $user->ID); $pr_times['level'] = empty($pr_times['level']) ? time() : $pr_times['level']; $pr_times['level' . $level] = empty($pr_times['level' . $level]) ? time() : $pr_times['level' . $level]; update_user_option($user->ID, 's2member_paid_registration_times', $pr_times); } if (!empty($op['data']['opt_in']) && !empty($role) && $level >= 0) { c_ws_plugin__s2member_list_servers::process_list_servers($role, $level, $user->user_login, !empty($op['data']['user_pass']) ? (string) $op['data']['user_pass'] : '', $user->user_email, $user->first_name, $user->last_name, FALSE, TRUE, TRUE, $user->ID); } if (!empty($op['data']['reset_ip_restrictions'])) { c_ws_plugin__s2member_ip_restrictions::delete_reset_specific_ip_restrictions(strtolower($user->user_login)); } if (!empty($op['data']['reset_file_download_access_log'])) { delete_user_option($user->ID, 's2member_file_download_access_log'); } return serialize(array('ID' => $user->ID)); } return 'Error: Empty or invalid request ( `modify_user` ). Please try again.'; }
/** * Handles login redirections. * * @package s2Member\Login_Redirects * @since 3.5 * * @attaches-to ``add_action("wp_login");`` * * @param str $username Expects Username to be passed in by the Action Hook. * @return null Or exits script execution after a redirection takes place. */ public static function login_redirect($username = FALSE) { eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;'); do_action("ws_plugin__s2member_before_login_redirect", get_defined_vars()); unset($__refs, $__v); /* Unset defined __refs, __v. */ /**/ $username = !$username && is_object($user = wp_get_current_user()) && !empty($user->user_login) ? strtolower($user->user_login) : strtolower($username); /**/ if ($username && (isset($user) && is_object($user) || is_object($user = new WP_User($username))) && !empty($user->ID) && ($user_id = $user->ID)) { if (!get_user_option("s2member_registration_ip", $user_id)) { /* Have we got this yet? */ update_user_option($user_id, "s2member_registration_ip", $_SERVER["REMOTE_ADDR"]); } /**/ if (($logins = (int) get_user_option("s2member_login_counter", $user_id) + 1) >= 1 || ($logins = 1)) { update_user_option($user_id, "s2member_login_counter", $logins); } /**/ if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_password"]) { /* Nag em? */ delete_user_setting("default_password_nag") . update_user_option($user_id, "default_password_nag", false, true); } /**/ $disable_login_ip_restrictions = apply_filters("ws_plugin__s2member_disable_login_ip_restrictions", false, get_defined_vars()); /**/ if (($ok = true) && !is_super_admin($user_id) && $username !== "demo" && !$disable_login_ip_restrictions) { $ok = c_ws_plugin__s2member_ip_restrictions::ip_restrictions_ok($_SERVER["REMOTE_ADDR"], $username); } /**/ if ($redirect = apply_filters("ws_plugin__s2member_login_redirect", $user->has_cap("edit_posts") ? false : true, get_defined_vars())) { $obey_redirect_to = apply_filters("ws_plugin__s2member_obey_login_redirect_to", true, get_defined_vars()); /**/ if (!$obey_redirect_to || empty($_REQUEST["redirect_to"]) || !is_string($_REQUEST["redirect_to"]) || $_REQUEST["redirect_to"] === admin_url() || preg_match("/^\\/?wp-admin\\/?\$/", $_REQUEST["redirect_to"])) { eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;'); do_action("ws_plugin__s2member_during_login_redirect", get_defined_vars()); unset($__refs, $__v); /* Unset defined __refs, __v. */ /**/ if ($redirect && is_string($redirect)) { /* Is this a string? */ wp_redirect($redirect); } else { if ($redirection_url = c_ws_plugin__s2member_login_redirects::login_redirection_url($user)) { wp_redirect($redirection_url); } else { /* Else we use the Login Welcome Page configured for s2Member. */ wp_redirect(get_page_link($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_welcome_page"])); } } /**/ exit; /* Clean exit. */ } } } /**/ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;'); do_action("ws_plugin__s2member_after_login_redirect", get_defined_vars()); unset($__refs, $__v); /* Unset defined __refs, __v. */ /**/ return; /* Return for uniformity. */ }
/** * Handles login redirections. * * @package s2Member\Login_Redirects * @since 3.5 * * @attaches-to ``add_action('wp_login');`` * * @param string $username Expects Username. * @param WP_User $user Expects a WP_User object instance. * * @return null Or exits script execution after a redirection takes place. */ public static function login_redirect($username = '', $user = NULL) { foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action('ws_plugin__s2member_before_login_redirect', get_defined_vars()); unset($__refs, $__v); // Housekeeping. if (is_string($username) && $username && is_object($user) && !empty($user->ID) && ($user_id = $user->ID)) { update_user_option($user_id, 's2member_last_login_time', time()); if (!get_user_option('s2member_registration_ip', $user_id)) { update_user_option($user_id, 's2member_registration_ip', $_SERVER['REMOTE_ADDR']); } if (($logins = (int) get_user_option('s2member_login_counter', $user_id) + 1) >= 1 || ($logins = 1)) { update_user_option($user_id, 's2member_login_counter', $logins); } if ($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_password']) { delete_user_setting('default_password_nag') . update_user_option($user_id, 'default_password_nag', FALSE, TRUE); } if (($ok = TRUE) && !is_super_admin($user_id) && $username !== 'demo' && !apply_filters('ws_plugin__s2member_disable_login_ip_restrictions', $user->has_cap('edit_posts') ? TRUE : FALSE, get_defined_vars())) { $ok = c_ws_plugin__s2member_ip_restrictions::ip_restrictions_ok($_SERVER['REMOTE_ADDR'], strtolower($username)); } if ($GLOBALS['WS_PLUGIN__']['s2member']['o']['login_redirection_always_http']) { // Alter value of `redirect_to`? if (!empty($_REQUEST['redirect_to']) && is_string($_REQUEST['redirect_to']) && strpos($_REQUEST['redirect_to'], 'wp-admin') === FALSE) { $_REQUEST['redirect_to'] = preg_replace('/^https\\:\\/\\//i', 'http://', $_REQUEST['redirect_to']); if (stripos($_REQUEST['redirect_to'], 'http://') !== 0) { $home_path = trim((string) @parse_url(home_url('/'), PHP_URL_PATH), '/'); $http_home_base = trim(preg_replace('/\\/' . preg_quote($home_path, '/') . '\\/$/', '', home_url('/', 'http')), '/'); $_REQUEST['redirect_to'] = $http_home_base . '/' . ltrim($_REQUEST['redirect_to'], '/'); } } } if ($redirect = apply_filters('ws_plugin__s2member_login_redirect', $user->has_cap('edit_posts') ? FALSE : TRUE, get_defined_vars())) { $obey_redirect_to = apply_filters('ws_plugin__s2member_obey_login_redirect_to', TRUE, get_defined_vars()); if ($obey_redirect_to && (empty($_REQUEST['redirect_to']) || !is_string($_REQUEST['redirect_to']) || $_REQUEST['redirect_to'] === admin_url() || preg_match('/^\\/?wp-admin\\/?$/', $_REQUEST['redirect_to']))) { $obey_redirect_to = FALSE; } else { if ($obey_redirect_to && !empty($_REQUEST['redirect_to_automatic']) && is_string($redirect)) { $obey_redirect_to = FALSE; } } // Do not obey automatic redirects when a custom redirection filter applies. // ↑ NOTE: this will apply to s2Member Pro's One-Time-Offers (Upon Login) also. if (!$obey_redirect_to) { foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action('ws_plugin__s2member_during_login_redirect', get_defined_vars()); unset($__refs, $__v); // Housekeeping. if ($redirect && is_string($redirect)) { $redirect = $redirect; } else { if ($redirection_url = c_ws_plugin__s2member_login_redirects::login_redirection_url($user)) { $redirect = $redirection_url; } else { if ($GLOBALS['WS_PLUGIN__']['s2member']['o']['login_welcome_page']) { // Else we use the Login Welcome Page configured for s2Member. $redirect = get_page_link($GLOBALS['WS_PLUGIN__']['s2member']['o']['login_welcome_page']); } else { $redirect = home_url('/'); } } } // Default to the home page. if ($GLOBALS['WS_PLUGIN__']['s2member']['o']['login_redirection_always_http']) { $redirect = preg_replace('/^https\\:\\/\\//i', 'http://', $redirect); if (stripos($redirect, 'http://') !== 0) { $home_path = trim((string) @parse_url(home_url('/'), PHP_URL_PATH), '/'); $http_home_base = trim(preg_replace('/\\/' . preg_quote($home_path, '/') . '\\/$/', '', home_url('/', 'http')), '/'); $redirect = $http_home_base . '/' . ltrim($redirect, '/'); } } wp_redirect($redirect) . exit; } } } foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action('ws_plugin__s2member_after_login_redirect', get_defined_vars()); unset($__refs, $__v); // Housekeeping. }