/** * Gets data for an existing User. * * @package s2Member\API_Remote_Ops * @since 140103 * * @param array $op An input array of Remote Operation parameters. * * @return string Returns a serialized array with an `ID` element object on success (among other array elements); * else returns a string beginning with `Error:` on failure; which will include details regarding the error. */ public static function get_user($op = NULL) { if (!empty($op['op']) && $op['op'] === 'get_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(0, (string) $op['data']['user_login'])) && !empty($_user->ID)) { $user = $_user; } else { if (!empty($op['data']['user_email']) && ($_user = get_user_by('email', (string) $op['data']['user_email'])) && !empty($_user->ID)) { $user = $_user; } else { return 'Error: Failed to locate this User. Unable to obtain WP_User object instance with data supplied (i.e., ID/Username/Email not found).'; } } } if (is_multisite() && !is_user_member_of_blog($user->ID)) { return 'Error: Failed to locate this User. Unable to obtain WP_User object instance with data supplied (i.e., ID/Username/Email not a part of this Blog).'; } $role = c_ws_plugin__s2member_user_access::user_access_role($user); $level = c_ws_plugin__s2member_user_access::user_access_role_to_level($role); $ccaps = c_ws_plugin__s2member_user_access::user_access_ccaps($user); $data = (array) $user->data; // Copy of data property. unset($data['user_pass']); $s2member_originating_blog = get_user_option('s2member_originating_blog', $user->ID); $s2member_subscr_gateway = get_user_option('s2member_subscr_gateway', $user->ID); $s2member_subscr_id = get_user_option('s2member_subscr_id', $user->ID); $s2member_custom = get_user_option('s2member_custom', $user->ID); $s2member_registration_ip = get_user_option('s2member_registration_ip', $user->ID); $s2member_notes = get_user_option('s2member_notes', $user->ID); $s2member_auto_eot_time = get_user_option('s2member_auto_eot_time', $user->ID); $s2member_custom_fields = get_user_option('s2member_custom_fields', $user->ID); $s2member_paid_registration_times = get_user_option('s2member_paid_registration_times', $user->ID); $s2member_file_download_access_log = get_user_option('s2member_file_download_access_log', $user->ID); return serialize(array('ID' => $user->ID, 'role' => $role, 'level' => $level, 'ccaps' => $ccaps, 'data' => $data, 's2member_originating_blog' => $s2member_originating_blog, 's2member_subscr_gateway' => $s2member_subscr_gateway, 's2member_subscr_id' => $s2member_subscr_id, 's2member_custom' => $s2member_custom, 's2member_registration_ip' => $s2member_registration_ip, 's2member_notes' => $s2member_notes, 's2member_auto_eot_time' => $s2member_auto_eot_time, 's2member_custom_fields' => $s2member_custom_fields, 's2member_paid_registration_times' => $s2member_paid_registration_times, 's2member_file_download_access_log' => $s2member_file_download_access_log)); } return 'Error: Empty or invalid request ( `get_user` ). Please try again.'; }
/** * Gets data for an existing User. * * @package s2Member\API_Remote_Ops * @since 140103 * * @param array An input array of Remote Operation parameters. * @return str Returns a serialized array with an `ID` element object on success (among other array elements); * else returns a string beginning with `Error:` on failure; which will include details regarding the error. */ public static function get_user($op = NULL) { if (!empty($op["op"]) && $op["op"] === "get_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 { if (!empty($op["data"]["user_email"]) && ($_user = get_user_by('email', (string) $op["data"]["user_email"])) && !empty($_user->ID)) { $user = $_user; } else { return "Error: Failed to locate this User. Unable to obtain WP_User object instance with data supplied (i.e. ID/Username/Email not found)."; } } } if (is_multisite() && !is_user_member_of_blog($user->ID)) { return "Error: Failed to locate this User. Unable to obtain WP_User object instance with data supplied (i.e. ID/Username/Email not a part of this Blog)."; } $role = c_ws_plugin__s2member_user_access::user_access_role($user); $level = c_ws_plugin__s2member_user_access::user_access_role_to_level($role); $ccaps = c_ws_plugin__s2member_user_access::user_access_ccaps($user); $data = (array) $user->data; unset($data['user_pass']); $s2member_originating_blog = get_user_option("s2member_originating_blog", $user->ID); $s2member_subscr_gateway = get_user_option("s2member_subscr_gateway", $user->ID); $s2member_subscr_id = get_user_option("s2member_subscr_id", $user->ID); $s2member_custom = get_user_option("s2member_custom", $user->ID); $s2member_registration_ip = get_user_option("s2member_registration_ip", $user->ID); $s2member_notes = get_user_option("s2member_notes", $user->ID); $s2member_auto_eot_time = get_user_option("s2member_auto_eot_time", $user->ID); $s2member_custom_fields = get_user_option("s2member_custom_fields", $user->ID); $s2member_paid_registration_times = get_user_option("s2member_paid_registration_times", $user->ID); $s2member_file_download_access_log = get_user_option("s2member_file_download_access_log", $user->ID); return serialize(array("ID" => $user->ID, "role" => $role, "level" => $level, "ccaps" => $ccaps, "data" => $data, "s2member_originating_blog" => $s2member_originating_blog, "s2member_subscr_gateway" => $s2member_subscr_gateway, "s2member_subscr_id" => $s2member_subscr_id, "s2member_custom" => $s2member_custom, "s2member_registration_ip" => $s2member_registration_ip, "s2member_notes" => $s2member_notes, "s2member_auto_eot_time" => $s2member_auto_eot_time, "s2member_custom_fields" => $s2member_custom_fields, "s2member_paid_registration_times" => $s2member_paid_registration_times, "s2member_file_download_access_log" => $s2member_file_download_access_log)); } return "Error: Empty or invalid request ( `get_user` ). Please try again."; }
/** * Processes List Server removals for s2Member. * * @package s2Member\List_Servers * @since 3.5 * * @param str $role A WordPress Role ID/Name, such as `subscriber`, or `s2member_level1`. * @param int|str $level A numeric s2Member Access Level number. * @param str $login Username for the User. * @param str $pass Plain Text Password for the User. * @param str $email Email address for the User. * @param str $fname First Name for the User. * @param str $lname Last Name for the User. * @param str $ip IP Address for the User. * @param bool $opt_out Defaults to false; must be set to true. Indicates the User IS opting out. * @param int|str $user_id A WordPress User ID, numeric string or integer. * @return bool True if at least one List Server is processed successfully, else false. * * @todo Integrate {@link https://labs.aweber.com/docs/php-library-walkthrough AWeber's API}. * @todo Add a separate option for mail debugging; or consolidate? * @todo Integrate AWeber API (much like the MailChimp API). */ public static function process_list_server_removals($role = FALSE, $level = FALSE, $login = FALSE, $pass = FALSE, $email = FALSE, $fname = FALSE, $lname = FALSE, $ip = FALSE, $opt_out = FALSE, $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_process_list_server_removals", get_defined_vars()); unset($__refs, $__v); if (c_ws_plugin__s2member_list_servers::list_servers_integrated() && ($args = func_get_args()) && $role && is_string($role) && is_numeric($level) && $login && is_string($login) && is_string($pass = (string) $pass) && $email && is_string($email) && is_email($email) && is_string($fname = (string) $fname) && is_string($lname = (string) $lname) && is_string($ip = (string) $ip) && is_bool($opt_out = (bool) $opt_out) && $opt_out && $user_id && is_numeric($user_id) && is_object($user = new WP_User($user_id)) && !empty($user->ID)) { $ccaps = implode(",", c_ws_plugin__s2member_user_access::user_access_ccaps($user)); $email_configs_were_on = c_ws_plugin__s2member_email_configs::email_config_status(); c_ws_plugin__s2member_email_configs::email_config_release(); if (!empty($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["mailchimp_api_key"]) && !empty($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $level . "_mailchimp_list_ids"])) { if (!class_exists("NC_MCAPI")) { include_once dirname(dirname(__FILE__)) . "/externals/mailchimp/nc-mcapi.inc.php"; } $mcapi = new NC_MCAPI($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["mailchimp_api_key"], true); foreach (preg_split("/[\r\n\t;,]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $level . "_mailchimp_list_ids"]) as $mailchimp_list) { $mailchimp = array("function" => __FUNCTION__, "func_get_args" => $args, "api_removal_method" => "listUnsubscribe"); if ($mailchimp["list_id"] = trim(preg_replace("/\\:\\:.*\$/", "", $mailchimp_list))) { if ($mailchimp["api_removal_response"] = $mcapi->{$mailchimp["api_removal_method"]}($mailchimp["list_id"], $email, $mailchimp["api_removal_delete_member"] = apply_filters("ws_plugin__s2member_mailchimp_removal_delete_member", false, get_defined_vars()), $mailchimp["api_removal_send_goodbye"] = apply_filters("ws_plugin__s2member_mailchimp_removal_send_goodbye", false, get_defined_vars()), $mailchimp["api_removal_send_notify"] = apply_filters("ws_plugin__s2member_mailchimp_removal_send_notify", false, get_defined_vars()))) { // Send notification? $mailchimp["api_removal_success"] = $removal_success = true; } // Flag indicating that we DO have a successful removal; affects the function's overall return value. $mailchimp["api_removal_properties"] = $mcapi; // Include API instance too; as it contains some additional information after each method is processed (need this in the logs). $logt = c_ws_plugin__s2member_utilities::time_details(); $logv = c_ws_plugin__s2member_utilities::ver_details(); $logm = c_ws_plugin__s2member_utilities::mem_details(); $log4 = $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] . "\nUser-Agent: " . $_SERVER["HTTP_USER_AGENT"]; $log4 = is_multisite() && !is_main_site() ? ($_log4 = $current_blog->domain . $current_blog->path) . "\n" . $log4 : $log4; $log2 = is_multisite() && !is_main_site() ? "mailchimp-api-4-" . trim(preg_replace("/[^a-z0-9]/i", "-", $_log4), "-") . ".log" : "mailchimp-api.log"; if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["gateway_debug_logs"]) { if (is_dir($logs_dir = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["logs_dir"])) { if (is_writable($logs_dir) && c_ws_plugin__s2member_utils_logs::archive_oversize_log_files()) { file_put_contents($logs_dir . "/" . $log2, "LOG ENTRY: " . $logt . "\n" . $logv . "\n" . $logm . "\n" . $log4 . "\n" . c_ws_plugin__s2member_utils_logs::conceal_private_info(var_export($mailchimp, true)) . "\n\n", FILE_APPEND); } } } } } } if (!empty($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["getresponse_api_key"]) && !empty($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $level . "_getresponse_list_ids"])) { foreach (preg_split("/[\r\n\t;,]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $level . "_getresponse_list_ids"]) as $getresponse_list) { $getresponse = array("function" => __FUNCTION__, "func_get_args" => $args, "api_method" => "get_contacts"); if ($getresponse["list_id"] = $getresponse["list"] = trim($getresponse_list)) { $getresponse["api_headers"] = array("Content-Type" => "application/json"); $getresponse["api_params"] = array($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["getresponse_api_key"], array("campaigns" => array($getresponse["list_id"]), "email" => array("EQUALS" => $email))); $getresponse["api_request"] = json_encode(array("method" => $getresponse["api_method"], "params" => $getresponse["api_params"], "id" => uniqid("", TRUE))); if (is_object($getresponse["api_response"] = json_decode(c_ws_plugin__s2member_utils_urls::remote("https://api2.getresponse.com", $getresponse["api_request"], array("headers" => $getresponse["api_headers"])))) && empty($getresponse["api_response"]->error) && ($getresponse["api_response_contact_ids"] = array_keys((array) $getresponse["api_response"]->result)) && ($getresponse["api_response_contact_id"] = $getresponse["api_response_contact_ids"][0])) { $getresponse["api_method"] = "delete_contact"; // Update method now. $getresponse["api_headers"] = array("Content-Type" => "application/json"); $getresponse["api_params"] = array($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["getresponse_api_key"], array("contact" => $getresponse["api_response_contact_id"])); $getresponse["api_request"] = json_encode(array("method" => $getresponse["api_method"], "params" => $getresponse["api_params"], "id" => uniqid("", TRUE))); if (is_object($getresponse["api_response"] = json_decode(c_ws_plugin__s2member_utils_urls::remote("https://api2.getresponse.com", $getresponse["api_request"], array("headers" => $getresponse["api_headers"])))) && empty($getresponse["api_response"]->error) && $getresponse["api_response"]->result->deleted) { $getresponse["api_success"] = $success = true; } } $logt = c_ws_plugin__s2member_utilities::time_details(); $logv = c_ws_plugin__s2member_utilities::ver_details(); $logm = c_ws_plugin__s2member_utilities::mem_details(); $log4 = $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] . "\nUser-Agent: " . $_SERVER["HTTP_USER_AGENT"]; $log4 = is_multisite() && !is_main_site() ? ($_log4 = $current_blog->domain . $current_blog->path) . "\n" . $log4 : $log4; $log2 = is_multisite() && !is_main_site() ? "getresponse-api-4-" . trim(preg_replace("/[^a-z0-9]/i", "-", $_log4), "-") . ".log" : "getresponse-api.log"; if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["gateway_debug_logs"]) { if (is_dir($logs_dir = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["logs_dir"])) { if (is_writable($logs_dir) && c_ws_plugin__s2member_utils_logs::archive_oversize_log_files()) { file_put_contents($logs_dir . "/" . $log2, "LOG ENTRY: " . $logt . "\n" . $logv . "\n" . $logm . "\n" . $log4 . "\n" . c_ws_plugin__s2member_utils_logs::conceal_private_info(var_export($getresponse, true)) . "\n\n", FILE_APPEND); } } } } } } if (!empty($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $level . "_aweber_list_ids"])) { foreach (preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $level . "_aweber_list_ids"]) as $aweber_list) { $aweber = array("function" => __FUNCTION__, "func_get_args" => $args, "wp_mail_removal_method" => "listUnsubscribe"); if ($aweber["list_id"] = trim($aweber_list)) { $aweber["removal_bcc"] = apply_filters("ws_plugin__s2member_aweber_removal_bcc", false, get_defined_vars()); c_ws_plugin__s2member_email_configs::email_config(); // Email configs MUST be ON for removal requests. // The `From:` address MUST match AWeber account. See: <http://www.aweber.com/faq/questions/62/Can+I+Unsubscribe+People+Via+Email%3F>. if ($aweber["wp_mail_removal_response"] = wp_mail($aweber["list_id"] . "@aweber.com", $aweber["wp_mail_removal_sbj"] = apply_filters("ws_plugin__s2member_aweber_removal_sbj", "REMOVE#" . $email . "#s2Member#" . $aweber["list_id"], get_defined_vars()), $aweber["wp_mail_removal_msg"] = "REMOVE", $aweber["wp_mail_removal_headers"] = "From: \"" . preg_replace('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">" . ($aweber["removal_bcc"] ? "\r\nBcc: " . $aweber["removal_bcc"] : "") . "\r\nContent-Type: text/plain; charset=UTF-8")) { $aweber["wp_mail_removal_success"] = $removal_success = true; } // Flag indicating that we DO have a successful removal; affects the function's overall return value. c_ws_plugin__s2member_email_configs::email_config_release(); $logt = c_ws_plugin__s2member_utilities::time_details(); $logv = c_ws_plugin__s2member_utilities::ver_details(); $logm = c_ws_plugin__s2member_utilities::mem_details(); $log4 = $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] . "\nUser-Agent: " . $_SERVER["HTTP_USER_AGENT"]; $log4 = is_multisite() && !is_main_site() ? ($_log4 = $current_blog->domain . $current_blog->path) . "\n" . $log4 : $log4; $log2 = is_multisite() && !is_main_site() ? "aweber-api-4-" . trim(preg_replace("/[^a-z0-9]/i", "-", $_log4), "-") . ".log" : "aweber-api.log"; if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["gateway_debug_logs"]) { if (is_dir($logs_dir = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["logs_dir"])) { if (is_writable($logs_dir) && c_ws_plugin__s2member_utils_logs::archive_oversize_log_files()) { file_put_contents($logs_dir . "/" . $log2, "LOG ENTRY: " . $logt . "\n" . $logv . "\n" . $logm . "\n" . $log4 . "\n" . c_ws_plugin__s2member_utils_logs::conceal_private_info(var_export($aweber, true)) . "\n\n", FILE_APPEND); } } } } } } foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action("ws_plugin__s2member_during_process_list_server_removals", get_defined_vars()); unset($__refs, $__v); if ($email_configs_were_on) { c_ws_plugin__s2member_email_configs::email_config(); } } foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action("ws_plugin__s2member_after_process_list_server_removals", get_defined_vars()); unset($__refs, $__v); return apply_filters("ws_plugin__s2member_process_list_server_removals", isset($removal_success) && $removal_success, get_defined_vars()); }
/** * Handles new User/Member notifications. * * @package s2Member\Email_Configs * @since 110707 * * @param string|int $user_id A numeric WordPress User ID. * @param string $user_pass Optional. A plain text version of the User's password. * If omitted, only the administrative notification will be sent. * @param array $notify An array of directives. Must be non-empty, with at least one of these values `user,admin`. * @param string $user_email Optional. This defaults to the user's currently configured email address. * @return bool True if all required parameters are supplied, else false. */ public static function new_user_notification($user_id = FALSE, $user_pass = FALSE, $notify = array("user", "admin"), $user_email = FALSE) { foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action("ws_plugin__s2member_before_new_user_notification", get_defined_vars()); unset($__refs, $__v); if ($user_id && ($user = new WP_User($user_id)) && !empty($user->ID) && ($user_id = $user->ID) && is_array($notify) && !empty($notify)) { $email_configs_were_on = c_ws_plugin__s2member_email_configs::email_config_status(); c_ws_plugin__s2member_email_configs::email_config_release(); if (in_array("user", $notify) && $user_pass) { $fields = get_user_option("s2member_custom_fields", $user_id); $cv = preg_split("/\\|/", get_user_option("s2member_custom", $user_id)); $role = c_ws_plugin__s2member_user_access::user_access_role($user); $label = c_ws_plugin__s2member_user_access::user_access_label($user); $level = c_ws_plugin__s2member_user_access::user_access_level($user); $ccaps = implode(",", c_ws_plugin__s2member_user_access::user_access_ccaps($user)); $user->user_email = $user_email ? $user_email : $user->user_email; $user_full_name = trim($user->first_name . " " . $user->last_name); $user_ip = $_SERVER["REMOTE_ADDR"]; if ($sbj = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["new_user_email_subject"]) { if ($sbj = preg_replace("/%%cv([0-9]+)%%/ei", 'trim(@$cv[$1])', $sbj)) { if ($sbj = preg_replace("/%%wp_login_url%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(wp_login_url()), $sbj)) { if ($sbj = preg_replace("/%%role%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($role), $sbj)) { if ($sbj = preg_replace("/%%label%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($label), $sbj)) { if ($sbj = preg_replace("/%%level%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($level), $sbj)) { if ($sbj = preg_replace("/%%ccaps%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($ccaps), $sbj)) { if ($sbj = preg_replace("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user->first_name), $sbj)) { if ($sbj = preg_replace("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user->last_name), $sbj)) { if ($sbj = preg_replace("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user_full_name), $sbj)) { if ($sbj = preg_replace("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user->user_email), $sbj)) { if ($sbj = preg_replace("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user->user_login), $sbj)) { if ($sbj = preg_replace("/%%user_pass%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user_pass), $sbj)) { if ($sbj = preg_replace("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user_ip), $sbj)) { if ($sbj = preg_replace("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $sbj)) { if (is_array($fields) && !empty($fields)) { foreach ($fields as $var => $val) { if (!($sbj = preg_replace("/%%" . preg_quote($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(maybe_serialize($val)), $sbj))) { break; } } } if ($msg = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["new_user_email_message"]) { if ($msg = preg_replace("/%%cv([0-9]+)%%/ei", 'trim(@$cv[$1])', $msg)) { if ($msg = preg_replace("/%%wp_login_url%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(wp_login_url()), $msg)) { if ($msg = preg_replace("/%%role%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($role), $msg)) { if ($msg = preg_replace("/%%label%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($label), $msg)) { if ($msg = preg_replace("/%%level%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($level), $msg)) { if ($msg = preg_replace("/%%ccaps%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($ccaps), $msg)) { if ($msg = preg_replace("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user->first_name), $msg)) { if ($msg = preg_replace("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user->last_name), $msg)) { if ($msg = preg_replace("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user_full_name), $msg)) { if ($msg = preg_replace("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user->user_email), $msg)) { if ($msg = preg_replace("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user->user_login), $msg)) { if ($msg = preg_replace("/%%user_pass%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user_pass), $msg)) { if ($msg = preg_replace("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user_ip), $msg)) { if ($msg = preg_replace("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $msg)) { if (is_array($fields) && !empty($fields)) { foreach ($fields as $var => $val) { if (!($msg = preg_replace("/%%" . preg_quote($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(maybe_serialize($val)), $msg))) { break; } } } if (($sbj = trim(preg_replace("/%%(.+?)%%/i", "", $sbj))) && ($msg = trim(preg_replace("/%%(.+?)%%/i", "", $msg)))) { if (!is_multisite() || !c_ws_plugin__s2member_utils_conds::is_multisite_farm() || is_main_site()) { $sbj = c_ws_plugin__s2member_utilities::evl($sbj, get_defined_vars()); $msg = c_ws_plugin__s2member_utilities::evl($msg, get_defined_vars()); } c_ws_plugin__s2member_email_configs::email_config() . wp_mail($user->user_email, apply_filters("ws_plugin__s2member_welcome_email_sbj", $sbj, get_defined_vars()), apply_filters("ws_plugin__s2member_welcome_email_msg", $msg, get_defined_vars()), "From: \"" . preg_replace('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=UTF-8") . c_ws_plugin__s2member_email_configs::email_config_release(); } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } if (in_array("admin", $notify)) { if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["new_user_admin_email_recipients"]) { $fields = get_user_option("s2member_custom_fields", $user_id); $cv = preg_split("/\\|/", get_user_option("s2member_custom", $user_id)); $role = c_ws_plugin__s2member_user_access::user_access_role($user); $label = c_ws_plugin__s2member_user_access::user_access_label($user); $level = c_ws_plugin__s2member_user_access::user_access_level($user); $ccaps = implode(",", c_ws_plugin__s2member_user_access::user_access_ccaps($user)); $user->user_email = $user_email ? $user_email : $user->user_email; $user_full_name = trim($user->first_name . " " . $user->last_name); $user_ip = $_SERVER["REMOTE_ADDR"]; if ($rec = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["new_user_admin_email_recipients"]) { if ($rec = preg_replace("/%%cv([0-9]+)%%/ei", 'trim(@$cv[$1])', $rec)) { if ($rec = preg_replace("/%%wp_login_url%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(wp_login_url()), $rec)) { if ($rec = preg_replace("/%%role%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($role), $rec)) { if ($rec = preg_replace("/%%label%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($label), $rec)) { if ($rec = preg_replace("/%%level%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($level), $rec)) { if ($rec = preg_replace("/%%ccaps%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($ccaps), $rec)) { if ($rec = preg_replace("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_dq(c_ws_plugin__s2member_utils_strings::esc_refs($user->first_name)), $rec)) { if ($rec = preg_replace("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_dq(c_ws_plugin__s2member_utils_strings::esc_refs($user->last_name)), $rec)) { if ($rec = preg_replace("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_dq(c_ws_plugin__s2member_utils_strings::esc_refs($user_full_name)), $rec)) { if ($rec = preg_replace("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user->user_email), $rec)) { if ($rec = preg_replace("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user->user_login), $rec)) { if ($rec = preg_replace("/%%user_pass%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user_pass), $rec)) { if ($rec = preg_replace("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user_ip), $rec)) { if ($rec = preg_replace("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $rec)) { if (is_array($fields) && !empty($fields)) { foreach ($fields as $var => $val) { if (!($rec = preg_replace("/%%" . preg_quote($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(maybe_serialize($val)), $rec))) { break; } } } if ($sbj = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["new_user_admin_email_subject"]) { if ($sbj = preg_replace("/%%cv([0-9]+)%%/ei", 'trim(@$cv[$1])', $sbj)) { if ($sbj = preg_replace("/%%wp_login_url%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(wp_login_url()), $sbj)) { if ($sbj = preg_replace("/%%role%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($role), $sbj)) { if ($sbj = preg_replace("/%%label%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($label), $sbj)) { if ($sbj = preg_replace("/%%level%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($level), $sbj)) { if ($sbj = preg_replace("/%%ccaps%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($ccaps), $sbj)) { if ($sbj = preg_replace("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user->first_name), $sbj)) { if ($sbj = preg_replace("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user->last_name), $sbj)) { if ($sbj = preg_replace("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user_full_name), $sbj)) { if ($sbj = preg_replace("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user->user_email), $sbj)) { if ($sbj = preg_replace("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user->user_login), $sbj)) { if ($sbj = preg_replace("/%%user_pass%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user_pass), $sbj)) { if ($sbj = preg_replace("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user_ip), $sbj)) { if ($sbj = preg_replace("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $sbj)) { if (is_array($fields) && !empty($fields)) { foreach ($fields as $var => $val) { if (!($sbj = preg_replace("/%%" . preg_quote($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(maybe_serialize($val)), $sbj))) { break; } } } if ($msg = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["new_user_admin_email_message"]) { if ($msg = preg_replace("/%%cv([0-9]+)%%/ei", 'trim(@$cv[$1])', $msg)) { if ($msg = preg_replace("/%%wp_login_url%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(wp_login_url()), $msg)) { if ($msg = preg_replace("/%%role%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($role), $msg)) { if ($msg = preg_replace("/%%label%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($label), $msg)) { if ($msg = preg_replace("/%%level%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($level), $msg)) { if ($msg = preg_replace("/%%ccaps%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($ccaps), $msg)) { if ($msg = preg_replace("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user->first_name), $msg)) { if ($msg = preg_replace("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user->last_name), $msg)) { if ($msg = preg_replace("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user_full_name), $msg)) { if ($msg = preg_replace("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user->user_email), $msg)) { if ($msg = preg_replace("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user->user_login), $msg)) { if ($msg = preg_replace("/%%user_pass%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user_pass), $msg)) { if ($msg = preg_replace("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user_ip), $msg)) { if ($msg = preg_replace("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $msg)) { if (is_array($fields) && !empty($fields)) { foreach ($fields as $var => $val) { if (!($msg = preg_replace("/%%" . preg_quote($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(maybe_serialize($val)), $msg))) { break; } } } if (($rec = trim(preg_replace("/%%(.+?)%%/i", "", $rec))) && ($sbj = trim(preg_replace("/%%(.+?)%%/i", "", $sbj))) && ($msg = trim(preg_replace("/%%(.+?)%%/i", "", $msg)))) { if (!is_multisite() || !c_ws_plugin__s2member_utils_conds::is_multisite_farm() || is_main_site()) { $rec = c_ws_plugin__s2member_utilities::evl($rec, get_defined_vars()); $sbj = c_ws_plugin__s2member_utilities::evl($sbj, get_defined_vars()); $msg = c_ws_plugin__s2member_utilities::evl($msg, get_defined_vars()); } foreach (c_ws_plugin__s2member_utils_strings::parse_emails($rec) as $recipient) { wp_mail($recipient, apply_filters("ws_plugin__s2member_admin_new_user_email_sbj", $sbj, get_defined_vars()), apply_filters("ws_plugin__s2member_admin_new_user_email_msg", $msg, get_defined_vars()), "Content-Type: text/plain; charset=UTF-8"); } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } if ($email_configs_were_on) { c_ws_plugin__s2member_email_configs::email_config(); } return apply_filters("ws_plugin__s2member_new_user_notification", true, get_defined_vars()); } else { return apply_filters("ws_plugin__s2member_new_user_notification", false, get_defined_vars()); } }
/** * Fills Replacement Code variables in URIs; collectively. * * @package s2Member\URIs * @since 3.5 * * @param string $uris A URI string, or a string of multiple URIs is also fine. * @param object $user Optional. A `WP_User` object. Defaults to the current User, if logged-in. * * @return string Collective string of input URIs, with Replacement Codes having been filled. */ public static function fill_ruri_level_access_rc_vars($uris = '', $user = NULL) { foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action('ws_plugin__s2member_before_fill_ruri_level_access_rc_vars', get_defined_vars()); unset($__refs, $__v); // Housekeeping. $uris = (string) $uris; // Force ``$uris`` to a string value. $orig_uris = $uris; // Record the original URIs that were passed in; collectively. $user = (is_object($user) || is_object($user = wp_get_current_user())) && !empty($user->ID) ? $user : NULL; $user_id = $user ? (string) $user->ID : ''; $user_login = $user ? (string) strtolower($user->user_login) : ''; $user_nicename = $user ? (string) strtolower($user->user_nicename) : ''; $user_level = (string) c_ws_plugin__s2member_user_access::user_access_level($user); $user_role = (string) c_ws_plugin__s2member_user_access::user_access_role($user); $user_ccaps = (string) implode('-', c_ws_plugin__s2member_user_access::user_access_ccaps($user)); $user_logins = $user ? (string) (int) get_user_option('s2member_login_counter', $user_id) : '-1'; $uris = strlen($user_login) ? preg_replace('/%%current_user_login%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user_login)), $uris) : $uris; $uris = strlen($user_nicename) ? preg_replace('/%%current_user_nicename%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user_nicename)), $uris) : $uris; $uris = strlen($user_id) ? preg_replace('/%%current_user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user_id)), $uris) : $uris; $uris = strlen($user_level) ? preg_replace('/%%current_user_level%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user_level)), $uris) : $uris; $uris = strlen($user_role) ? preg_replace('/%%current_user_role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user_role)), $uris) : $uris; $uris = strlen($user_ccaps) ? preg_replace('/%%current_user_ccaps%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user_ccaps)), $uris) : $uris; $uris = strlen($user_logins) ? preg_replace('/%%current_user_logins%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user_logins)), $uris) : $uris; return apply_filters('ws_plugin__s2member_fill_ruri_level_access_rc_vars', $uris, get_defined_vars()); }
/** * Retrieves a field value. Also supports Custom Fields. * * @package s2Member\Utilities * @since 3.5 * * @param str $field_id Required. A unique Custom Registration/Profile Field ID, that you configured with s2Member. * Or, this could be set to any property that exists on the WP_User object for a particular User; * ( i.e. `id`, `ID`, `user_login`, `user_email`, `first_name`, `last_name`, `display_name`, `ip`, `IP`, * `s2member_registration_ip`, `s2member_custom`, `s2member_subscr_id`, `s2member_subscr_or_wp_id`, * `s2member_subscr_gateway`, `s2member_custom_fields`, `s2member_file_download_access_[log|arc]`, * `s2member_auto_eot_time`, `s2member_last_payment_time`, `s2member_paid_registration_times`, * `s2member_access_role`, `s2member_access_level`, `s2member_access_label`, * `s2member_access_ccaps`, etc, etc. ). * @param int|str $user_id Optional. Defaults to the current User's ID. * @return mixed The value of the requested field, or false if the field does not exist. */ public static function get_user_field($field_id = FALSE, $user_id = FALSE) { global $wpdb; $current_user = wp_get_current_user(); if (is_object($user = $user_id ? new WP_User($user_id) : $current_user) && !empty($user->ID) && ($user_id = $user->ID)) { if (isset($user->{$field_id})) { return $user->{$field_id}; } else { if (isset($user->data->{$field_id})) { return $user->data->{$field_id}; } else { if (isset($user->{$wpdb->prefix . $field_id})) { return $user->{$wpdb->prefix . $field_id}; } else { if (isset($user->data->{$wpdb->prefix . $field_id})) { return $user->data->{$wpdb->prefix . $field_id}; } else { if (strcasecmp($field_id, "full_name") === 0) { return trim($user->first_name . " " . $user->last_name); } else { if (preg_match("/^(email|user_email)\$/i", $field_id)) { return $user->user_email; } else { if (preg_match("/^(login|user_login)\$/i", $field_id)) { return $user->user_login; } else { if (strcasecmp($field_id, "s2member_access_role") === 0) { return c_ws_plugin__s2member_user_access::user_access_role($user); } else { if (strcasecmp($field_id, "s2member_access_level") === 0) { return c_ws_plugin__s2member_user_access::user_access_level($user); } else { if (strcasecmp($field_id, "s2member_access_label") === 0) { return c_ws_plugin__s2member_user_access::user_access_label($user); } else { if (strcasecmp($field_id, "s2member_access_ccaps") === 0) { return c_ws_plugin__s2member_user_access::user_access_ccaps($user); } else { if (strcasecmp($field_id, "ip") === 0 && is_object($current_user) && !empty($current_user->ID) && $current_user->ID === ($user_id = $user->ID)) { return $_SERVER["REMOTE_ADDR"]; } else { if (strcasecmp($field_id, "s2member_registration_ip") === 0 || strcasecmp($field_id, "reg_ip") === 0 || strcasecmp($field_id, "ip") === 0) { return get_user_option("s2member_registration_ip", $user_id); } else { if (strcasecmp($field_id, "s2member_subscr_or_wp_id") === 0) { return ($subscr_id = get_user_option("s2member_subscr_id", $user_id)) ? $subscr_id : $user_id; } else { if (is_array($fields = get_user_option("s2member_custom_fields", $user_id))) { if (isset($fields[preg_replace("/[^a-z0-9]/i", "_", strtolower($field_id))])) { return $fields[preg_replace("/[^a-z0-9]/i", "_", strtolower($field_id))]; } } } } } } } } } } } } } } } } } return false; }
/** * Fills Replacement Code variables in URIs; collectively. * * @package s2Member\URIs * @since 3.5 * * @param str $uris A URI string, or a string of multiple URIs is also fine. * @param obj $user Optional. A `WP_User` object. Defaults to the current User, if logged-in. * @return str Collective string of input URIs, with Replacement Codes having been filled. */ public static function fill_ruri_level_access_rc_vars($uris = FALSE, $user = FALSE) { foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action("ws_plugin__s2member_before_fill_ruri_level_access_rc_vars", get_defined_vars()); unset($__refs, $__v); $uris = (string) $uris; // Force ``$uris`` to a string value. $orig_uris = $uris; // Record the original URIs that were passed in; collectively. $user = (is_object($user) || is_object($user = is_user_logged_in() ? wp_get_current_user() : false)) && !empty($user->ID) ? $user : false; $user_id = $user ? (string) $user->ID : ""; $user_login = $user ? (string) strtolower($user->user_login) : ""; $user_level = (string) c_ws_plugin__s2member_user_access::user_access_level($user); $user_role = (string) c_ws_plugin__s2member_user_access::user_access_role($user); $user_ccaps = (string) implode("-", c_ws_plugin__s2member_user_access::user_access_ccaps($user)); $user_logins = $user ? (string) (int) get_user_option("s2member_login_counter", $user_id) : "-1"; $uris = strlen($user_login) ? preg_replace("/%%current_user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds($user_login), $uris) : $uris; $uris = strlen($user_id) ? preg_replace("/%%current_user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds($user_id), $uris) : $uris; $uris = strlen($user_level) ? preg_replace("/%%current_user_level%%/i", c_ws_plugin__s2member_utils_strings::esc_ds($user_level), $uris) : $uris; $uris = strlen($user_role) ? preg_replace("/%%current_user_role%%/i", c_ws_plugin__s2member_utils_strings::esc_ds($user_role), $uris) : $uris; $uris = strlen($user_ccaps) ? preg_replace("/%%current_user_ccaps%%/i", c_ws_plugin__s2member_utils_strings::esc_ds($user_ccaps), $uris) : $uris; $uris = strlen($user_logins) ? preg_replace("/%%current_user_logins%%/i", c_ws_plugin__s2member_utils_strings::esc_ds($user_logins), $uris) : $uris; return apply_filters("ws_plugin__s2member_fill_ruri_level_access_rc_vars", $uris, get_defined_vars()); }
/** * Handles the exportation of Users/Members. * * @package s2Member\Exports * @since 140724 * * @return null Or exits script execution after issuing file download prompt with CSV file. */ public static function export_users() { if (!empty($_POST['ws_plugin__s2member_pro_export_users']) && ($nonce = $_POST['ws_plugin__s2member_pro_export_users']) && wp_verify_nonce($nonce, 'ws-plugin--s2member-pro-export-users') && current_user_can('create_users')) { global $wpdb; // Global database object reference. /** @var \wpdb $wpdb This line for IDEs that need a reference. */ global $current_site, $current_blog; // Multisite Networking. @set_time_limit(0); @ini_set('memory_limit', apply_filters('admin_memory_limit', WP_MAX_MEMORY_LIMIT)); @ini_set('zlib.output_compression', 0); if (function_exists('apache_setenv')) { @apache_setenv('no-gzip', '1'); } while (@ob_end_clean()) { } $format = !empty($_POST['ws_plugin__s2member_pro_export_users_format']) ? $_POST['ws_plugin__s2member_pro_export_users_format'] : ''; $utf8_bom = isset($_POST['ws_plugin__s2member_pro_export_users_utf8_bom']) ? (int) $_POST['ws_plugin__s2member_pro_export_users_utf8_bom'] : 0; $start = !empty($_POST['ws_plugin__s2member_pro_export_users_start']) ? (int) $_POST['ws_plugin__s2member_pro_export_users_start'] : 1; $limit = !empty($_POST['ws_plugin__s2member_pro_export_users_limit']) ? (int) $_POST['ws_plugin__s2member_pro_export_users_limit'] : apply_filters('ws_plugin__s2member_pro_export_users_limit', 1000); // Back compatibility; and for blog farms. $start = $start >= 1 ? $start : 1; // Must be 1 or higher. $sql_s = $start === 1 ? 0 : $start; // 1 should be 0. $export = ''; // Initialize the export file variable. $user_keys = array(); // Initialize array of user keys. if (is_object($_user_row = $wpdb->get_row("SELECT * FROM `" . $wpdb->users . "` LIMIT 1"))) { foreach (array_keys((array) $_user_row) as $_user_key) { if (!in_array($_user_key, array('user_pass'), TRUE)) { $user_keys[] = $_user_key; } } } unset($_user_row, $_user_key); // Housekeeping. $user_keys = array_unique($user_keys); // Only unique keys please. $user_permission_keys = array('role', 'ccaps'); $user_meta_keys = $wpdb->get_col("SELECT DISTINCT `meta_key` FROM `" . $wpdb->usermeta . "` WHERE (`" . $wpdb->usermeta . "`.`meta_key` NOT LIKE '" . esc_sql(c_ws_plugin__s2member_utils_strings::like_escape($wpdb->base_prefix)) . "%' OR `" . $wpdb->usermeta . "`.`meta_key` LIKE '" . esc_sql(c_ws_plugin__s2member_utils_strings::like_escape($wpdb->prefix)) . "%')"); $user_meta_keys = is_array($user_meta_keys) ? $user_meta_keys : array(); foreach ($user_meta_keys as $_index => $_meta_key) { if ($_meta_key === $wpdb->prefix . 's2member_custom_fields') { unset($user_meta_keys[$_index]); } } if (is_multisite() && c_ws_plugin__s2member_utils_conds::is_multisite_farm() && !is_main_site()) { foreach ($user_meta_keys as $_index => $_meta_key) { if (strpos($_meta_key, $wpdb->prefix) !== 0) { if (!in_array($_meta_key, array('first_name', 'last_name', 'nickname', 'description'), TRUE)) { unset($user_meta_keys[$_index]); } } } } unset($_index, $_meta_key); // Housekeeping. $user_meta_keys = array_unique($user_meta_keys); // Only unique keys please. $user_custom_field_keys = array(); // Initialize this array. if ($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_fields']) { foreach (json_decode($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_fields'], TRUE) as $_field) { $custom_field_var = preg_replace('/[^a-z0-9]/i', '_', strtolower($_field['id'])); $user_custom_field_keys[] = $custom_field_var; } } unset($_field); // Housekeeping. $user_custom_field_keys = array_unique($user_custom_field_keys); // Only unique keys please. sort($user_custom_field_keys, SORT_STRING); // Sort these also; just to give them some order. $export_headers = ''; // Initialize export headers. foreach ($user_keys as $_user_key) { // Include all of the user fields first. $export_headers .= ',"' . c_ws_plugin__s2member_utils_strings::esc_dq($_user_key, 1, '"') . '"'; } unset($_user_key); // Housekeeping. foreach ($user_permission_keys as $_user_permission_key) { // Include permission keys now. $export_headers .= ',"' . c_ws_plugin__s2member_utils_strings::esc_dq($_user_permission_key, 1, '"') . '"'; } unset($_user_permission_key); // Housekeeping. foreach ($user_meta_keys as $_user_meta_key) { // Next comes all of the user meta fields. $export_headers .= ',"meta_key__' . c_ws_plugin__s2member_utils_strings::esc_dq($_user_meta_key, 1, '"') . '"'; } unset($_user_meta_key); // Housekeeping. foreach ($user_custom_field_keys as $_user_custom_field_key) { // Now the s2Member custom fields separately. $export_headers .= ',"custom_field_key__' . c_ws_plugin__s2member_utils_strings::esc_dq($_user_custom_field_key, 1, '"') . '"'; } unset($_user_custom_field_key); // Housekeeping. $export_headers = trim($export_headers, ','); // Trim away leading/trailing delimiters. $export = $export_headers . "\n"; // First line of the export file is always the export headers. $users = $wpdb->get_results("SELECT `" . $wpdb->users . "`.`ID` FROM `" . $wpdb->users . "`, `" . $wpdb->usermeta . "` WHERE `" . $wpdb->users . "`.`ID` = `" . $wpdb->usermeta . "`.`user_id` AND `" . $wpdb->usermeta . "`.`meta_key` = '" . esc_sql($wpdb->prefix . 'capabilities') . "' ORDER BY `" . $wpdb->users . "`.`ID` ASC LIMIT " . $sql_s . ", " . $limit); $users = is_array($users) ? $users : array(); // List of the users on this blog. foreach ($users as $_user) { $_user_line = ''; // Initialize the export line for this user. if (!is_object($_user = new WP_User($_user->ID)) || !$_user->ID) { continue; } // Nothing to export for this user. foreach ($user_keys as $_user_key) { $_value = ''; // Intialize value. switch ($_user_key) { default: // Default handler. $_value = $_user->{$_user_key}; break; } $_user_line .= ',"' . c_ws_plugin__s2member_utils_strings::esc_dq((string) $_value, 1, '"') . '"'; } unset($_user_key, $_value); // Housekeeping. foreach ($user_permission_keys as $_user_permission_key) { $_value = ''; // Intialize value. switch ($_user_permission_key) { case 'role': // The user's role. $_value = c_ws_plugin__s2member_user_access::user_access_role($_user); break; case 'ccaps': // s2 custom capabilities. $_value = implode(',', c_ws_plugin__s2member_user_access::user_access_ccaps($_user)); break; } $_user_line .= ',"' . c_ws_plugin__s2member_utils_strings::esc_dq($_value, 1, '"') . '"'; } unset($_user_permission_key, $_value); // Housekeeping. $_user_meta_values = $wpdb->get_results("SELECT `meta_key`, `meta_value` FROM `" . $wpdb->usermeta . "` WHERE `user_id` = '" . esc_sql($_user->ID) . "'", OBJECT_K); foreach ($user_meta_keys as $_user_meta_key) { $_value = ''; // Intialize value. switch ($_user_meta_key) { case $wpdb->prefix . 'capabilities': case $wpdb->prefix . 's2member_sp_references': case $wpdb->prefix . 's2member_ipn_signup_vars': case $wpdb->prefix . 's2member_access_cap_times': case $wpdb->prefix . 's2member_paid_registration_times': case $wpdb->prefix . 's2member_file_download_access_arc': case $wpdb->prefix . 's2member_file_download_access_log': // This handles JSON-encoding for known array values. if (isset($_user_meta_values[$_user_meta_key]->meta_value[0])) { $_value = json_encode(maybe_unserialize($_user_meta_values[$_user_meta_key]->meta_value)); } break; default: // Default handler. if (isset($_user_meta_values[$_user_meta_key]->meta_value[0])) { if ($format === 'readable' && strpos($_user_meta_values[$_user_meta_key]->meta_value, '{')) { $_value = json_encode(maybe_unserialize($_user_meta_values[$_user_meta_key]->meta_value)); } else { $_value = $_user_meta_values[$_user_meta_key]->meta_value; } } break; } $_user_line .= ',"' . c_ws_plugin__s2member_utils_strings::esc_dq($_value, 1, '"') . '"'; } unset($_user_meta_values, $_user_meta_key, $_value); // Housekeeping. $_user_custom_fields = get_user_option('s2member_custom_fields', $_user->ID); foreach ($user_custom_field_keys as $_user_custom_field_key) { $_value = ''; // Intialize value. switch ($_user_custom_field_key) { default: // Default handler. if (isset($_user_custom_fields[$_user_custom_field_key])) { $_value = $_user_custom_fields[$_user_custom_field_key]; } break; } if ($format === 'readable' && is_array($_value)) { $_value = implode('|', $_value); } else { if (is_array($_value)) { $_value = json_encode($_value); } } $_user_line .= ',"' . c_ws_plugin__s2member_utils_strings::esc_dq((string) $_value, 1, '"') . '"'; } unset($_user_custom_fields, $_user_custom_field_key, $_value); // Housekeeping. $export .= trim($_user_line, " \r\n\t\v,") . "\n"; } unset($_user, $_user_line); // Housekeeping. status_header(200); // 200 OK status header. if ($utf8_bom) { // Add UTF-8 BOM (Byte Order Marker)? $export = "" . $export; } header('Content-Encoding: none'); header('Accept-Ranges: none'); header('Content-Type: text/csv; charset=UTF-8'); header('Content-Length: ' . strlen($export)); header('Expires: ' . gmdate('D, d M Y H:i:s', strtotime('-1 week')) . ' GMT'); header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); header('Cache-Control: no-cache, must-revalidate, max-age=0'); header('Cache-Control: post-check=0, pre-check=0', FALSE); header('Pragma: no-cache'); header('Content-Disposition: attachment; filename="export-' . $start . '-' . ($start + $limit - 1) . '.csv"'); exit($export); // Exportation file. } }
/** * Validates args. * * @since 141004 * @package s2Member\List_Servers * * @param array $args Input arguments. * * @return \stdClass|null An object with only valid properties. * If unable to validate, this returns a `NULL` value. */ public static function validate_args($args) { if (!$args || !is_array($args)) { return NULL; } $defaults = array('role' => '', 'level' => '', 'ccaps' => '', 'login' => '', 'pass' => '', 'email' => '', 'fname' => '', 'lname' => '', 'ip' => '', 'opt_out' => FALSE, 'opt_in' => FALSE, 'double_opt_in' => FALSE, 'user' => NULL, 'user_id' => 0); $args = array_merge($defaults, $args); $args = (object) array_intersect_key($args, $defaults); foreach ($args as $_key => &$_value) { switch ($_key) { case 'role': case 'level': $_value = (string) $_value; break; case 'ccaps': // Input can be a string or an array. $_value = is_array($_value) ? implode(',', $_value) : (string) $_value; break; case 'login': case 'pass': case 'email': case 'fname': case 'lname': case 'ip': $_value = (string) $_value; break; case 'opt_in': case 'double_opt_in': $_value = (bool) $_value; break; case 'user': // A `WP_User` object instance. $_value = $_value instanceof WP_User ? $_value : NULL; break; case 'user_id': // User ID. $_value = (int) $_value; break; } } unset($_key, $_value); // Housekeeping. if (!$args->user_id && $args->user && $args->user->exists()) { $args->user_id = $args->user->ID; } // Use this ID. $args->user = new WP_User($args->user_id); // Always based on ID. $args->ccaps = implode(',', c_ws_plugin__s2member_user_access::user_access_ccaps($args->user)); $args->fname = !$args->fname ? ucwords((string) strstr($args->email, '@', TRUE)) : $args->fname; $args->lname = !$args->lname ? '-' : $args->lname; // Default last name to `-` because MC requires this. $args->name = $args->fname || $args->lname ? trim($args->fname . ' ' . $args->lname) : ucwords((string) strstr($args->email, '@', TRUE)); if (!$args->role || !isset($args->level[0]) || !is_numeric($args->level) || !$args->login || !$args->email || !is_email($args->email) || !$args->user_id || !$args->user || !$args->user->exists()) { return NULL; } // Required arguments missing. return $args; // Now a \stdClass object. }
/** * Handles new User/Member notifications. * * @package s2Member\Email_Configs * @since 110707 * * @param string|int $user_id A numeric WordPress User ID. * @param string $user_pass Optional. A plain text version of the User's password. * If omitted, only the administrative notification will be sent. * @param array $notify An array of directives. Must be non-empty, with at least one of these values `user,admin`. * @param string $user_email Optional. This defaults to the user's currently configured email address. * @return bool True if all required parameters are supplied, else false. */ public static function new_user_notification($user_id = 0, $user_pass = '', $notify = array('user', 'admin'), $user_email = '') { foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action('ws_plugin__s2member_before_new_user_notification', get_defined_vars()); unset($__refs, $__v); // Housekeeping. $user_id = (int) $user_id; $user_pass = (string) $user_pass; $notify = (array) $notify; $user_email = (string) $user_email; if (!$user_pass && !empty($GLOBALS['ws_plugin__s2member_plain_text_pass'])) { $user_pass = (string) $GLOBALS['ws_plugin__s2member_plain_text_pass']; } if ($user_id && ($user = new WP_User($user_id)) && !empty($user->ID) && ($user_id = $user->ID) && $notify) { $is_gte_wp43 = version_compare(get_bloginfo('version'), '4.3', '>='); $email_configs_were_on = c_ws_plugin__s2member_email_configs::email_config_status(); c_ws_plugin__s2member_email_configs::email_config_release(); if (in_array('user', $notify, true) && empty($GLOBALS['ws_plugin__s2member_custom_wp_login_bp_password']) && ($user_pass && stripos($GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_email_message'], '%%user_pass%%') !== false || $is_gte_wp43 && stripos($GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_email_message'], '%%wp_set_pass_url%%') !== false || $is_gte_wp43 && stripos($GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_email_message'] = sprintf(_x("Your Username/Password for:\n%s\n\nUsername: %%%%user_login%%%%\nTo set your password, visit: %%%%wp_set_pass_url%%%%\n\n%%%%wp_login_url%%%%", 's2member-front', 's2member'), get_bloginfo('name')), '%%wp_set_pass_url%%') !== false)) { if ($is_gte_wp43 && stripos($GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_email_message'], '%%wp_set_pass_url%%') !== false) { remove_filter('random_password', 'c_ws_plugin__s2member_registrations::generate_password'); $user_activation_key = wp_generate_password(20, false); // ↑ Make sure it's w/o filter. do_action('retrieve_password_key', $user->user_login, $user_activation_key); if (!class_exists('PasswordHash')) { require_once ABSPATH . WPINC . '/class-phpass.php'; } $wp_hasher = new PasswordHash(8, true); $user_activation_key_hash = time() . ':' . $wp_hasher->HashPassword($user_activation_key); $GLOBALS['wpdb']->update($GLOBALS['wpdb']->users, array('user_activation_key' => $user_activation_key_hash), array('user_login' => $user->user_login)); $wp_set_pass_url_args = array('action' => 'rp', 'key' => $user_activation_key, 'login' => $user->user_login); $wp_set_pass_url = add_query_arg(urlencode_deep($wp_set_pass_url_args), wp_login_url()); } else { $wp_set_pass_url = wp_lostpassword_url(); } // Default behavior; and older versions of WordPress. $fields = get_user_option('s2member_custom_fields', $user_id); $cv = preg_split('/\\|/', get_user_option('s2member_custom', $user_id)); $role = c_ws_plugin__s2member_user_access::user_access_role($user); $label = c_ws_plugin__s2member_user_access::user_access_label($user); $level = c_ws_plugin__s2member_user_access::user_access_level($user); $ccaps = implode(',', c_ws_plugin__s2member_user_access::user_access_ccaps($user)); $user->user_email = $user_email ? $user_email : $user->user_email; $user_full_name = trim($user->first_name . ' ' . $user->last_name); $user_ip = $_SERVER['REMOTE_ADDR']; if ($sbj = $GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_email_subject']) { if ($sbj = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $sbj)) { if ($sbj = preg_replace('/%%wp_set_pass_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($wp_set_pass_url), $sbj)) { if ($sbj = preg_replace('/%%wp_login_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(wp_login_url()), $sbj)) { if ($sbj = preg_replace('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($role), $sbj)) { if ($sbj = preg_replace('/%%label%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($label), $sbj)) { if ($sbj = preg_replace('/%%level%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($level), $sbj)) { if ($sbj = preg_replace('/%%ccaps%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($ccaps), $sbj)) { if ($sbj = preg_replace('/%%user_first_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->first_name), $sbj)) { if ($sbj = preg_replace('/%%user_last_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->last_name), $sbj)) { if ($sbj = preg_replace('/%%user_full_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_full_name), $sbj)) { if ($sbj = preg_replace('/%%user_email%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->user_email), $sbj)) { if ($sbj = preg_replace('/%%user_login%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->user_login), $sbj)) { if ($sbj = preg_replace('/%%user_pass%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_pass), $sbj)) { if ($sbj = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_ip), $sbj)) { if ($sbj = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $sbj)) { if (is_array($fields) && !empty($fields)) { foreach ($fields as $var => $val) { // Custom Registration/Profile Fields. if (!($sbj = preg_replace('/%%' . preg_quote($var, '/') . '%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(maybe_serialize($val)), $sbj))) { break; } } } // Empty; we can stop here. if ($msg = $GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_email_message']) { if ($msg = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $msg)) { if ($msg = preg_replace('/%%wp_set_pass_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($wp_set_pass_url), $msg)) { if ($msg = preg_replace('/%%wp_login_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(wp_login_url()), $msg)) { if ($msg = preg_replace('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($role), $msg)) { if ($msg = preg_replace('/%%label%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($label), $msg)) { if ($msg = preg_replace('/%%level%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($level), $msg)) { if ($msg = preg_replace('/%%ccaps%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($ccaps), $msg)) { if ($msg = preg_replace('/%%user_first_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->first_name), $msg)) { if ($msg = preg_replace('/%%user_last_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->last_name), $msg)) { if ($msg = preg_replace('/%%user_full_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_full_name), $msg)) { if ($msg = preg_replace('/%%user_email%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->user_email), $msg)) { if ($msg = preg_replace('/%%user_login%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->user_login), $msg)) { if ($msg = preg_replace('/%%user_pass%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_pass), $msg)) { if ($msg = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_ip), $msg)) { if ($msg = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $msg)) { if (is_array($fields) && !empty($fields)) { foreach ($fields as $var => $val) { // Custom Registration/Profile Fields. if (!($msg = preg_replace('/%%' . preg_quote($var, '/') . '%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(maybe_serialize($val)), $msg))) { break; } } } // Empty; we can stop here. if (($sbj = trim(preg_replace('/%%(.+?)%%/i', '', $sbj))) && ($msg = trim(preg_replace('/%%(.+?)%%/i', '', $msg)))) { if (!is_multisite() || !c_ws_plugin__s2member_utils_conds::is_multisite_farm() || is_main_site()) { $sbj = c_ws_plugin__s2member_utilities::evl($sbj, get_defined_vars()); $msg = c_ws_plugin__s2member_utilities::evl($msg, get_defined_vars()); } c_ws_plugin__s2member_email_configs::email_config() . wp_mail($user->user_email, apply_filters('ws_plugin__s2member_welcome_email_sbj', $sbj, get_defined_vars()), apply_filters('ws_plugin__s2member_welcome_email_msg', $msg, get_defined_vars()), 'From: "' . preg_replace('/"/', "'", $GLOBALS['WS_PLUGIN__']['s2member']['o']['reg_email_from_name']) . '" <' . $GLOBALS['WS_PLUGIN__']['s2member']['o']['reg_email_from_email'] . '>' . "\r\n" . 'Content-Type: text/plain; charset=UTF-8') . c_ws_plugin__s2member_email_configs::email_config_release(); } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } if (in_array('admin', $notify, true) && $GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_admin_email_recipients']) { $fields = get_user_option('s2member_custom_fields', $user_id); $cv = preg_split('/\\|/', get_user_option('s2member_custom', $user_id)); $role = c_ws_plugin__s2member_user_access::user_access_role($user); $label = c_ws_plugin__s2member_user_access::user_access_label($user); $level = c_ws_plugin__s2member_user_access::user_access_level($user); $ccaps = implode(',', c_ws_plugin__s2member_user_access::user_access_ccaps($user)); $user->user_email = $user_email ? $user_email : $user->user_email; $user_full_name = trim($user->first_name . ' ' . $user->last_name); $user_ip = $_SERVER['REMOTE_ADDR']; if ($rec = $GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_admin_email_recipients']) { if ($rec = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $rec)) { if ($rec = preg_replace('/%%wp_login_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(wp_login_url()), $rec)) { if ($rec = preg_replace('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($role), $rec)) { if ($rec = preg_replace('/%%label%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($label), $rec)) { if ($rec = preg_replace('/%%level%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($level), $rec)) { if ($rec = preg_replace('/%%ccaps%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($ccaps), $rec)) { if ($rec = preg_replace('/%%user_first_name%%/i', c_ws_plugin__s2member_utils_strings::esc_dq(c_ws_plugin__s2member_utils_strings::esc_refs($user->first_name)), $rec)) { if ($rec = preg_replace('/%%user_last_name%%/i', c_ws_plugin__s2member_utils_strings::esc_dq(c_ws_plugin__s2member_utils_strings::esc_refs($user->last_name)), $rec)) { if ($rec = preg_replace('/%%user_full_name%%/i', c_ws_plugin__s2member_utils_strings::esc_dq(c_ws_plugin__s2member_utils_strings::esc_refs($user_full_name)), $rec)) { if ($rec = preg_replace('/%%user_email%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->user_email), $rec)) { if ($rec = preg_replace('/%%user_login%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->user_login), $rec)) { if ($rec = preg_replace('/%%user_pass%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_pass), $rec)) { if ($rec = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_ip), $rec)) { if ($rec = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $rec)) { if (is_array($fields) && !empty($fields)) { foreach ($fields as $var => $val) { // Custom Registration/Profile Fields. if (!($rec = preg_replace('/%%' . preg_quote($var, '/') . '%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(maybe_serialize($val)), $rec))) { break; } } } // Empty; we can stop here. if ($sbj = $GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_admin_email_subject']) { if ($sbj = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $sbj)) { if ($sbj = preg_replace('/%%wp_login_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(wp_login_url()), $sbj)) { if ($sbj = preg_replace('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($role), $sbj)) { if ($sbj = preg_replace('/%%label%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($label), $sbj)) { if ($sbj = preg_replace('/%%level%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($level), $sbj)) { if ($sbj = preg_replace('/%%ccaps%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($ccaps), $sbj)) { if ($sbj = preg_replace('/%%user_first_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->first_name), $sbj)) { if ($sbj = preg_replace('/%%user_last_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->last_name), $sbj)) { if ($sbj = preg_replace('/%%user_full_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_full_name), $sbj)) { if ($sbj = preg_replace('/%%user_email%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->user_email), $sbj)) { if ($sbj = preg_replace('/%%user_login%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->user_login), $sbj)) { if ($sbj = preg_replace('/%%user_pass%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_pass), $sbj)) { if ($sbj = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_ip), $sbj)) { if ($sbj = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $sbj)) { if (is_array($fields) && !empty($fields)) { foreach ($fields as $var => $val) { // Custom Registration/Profile Fields. if (!($sbj = preg_replace('/%%' . preg_quote($var, '/') . '%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(maybe_serialize($val)), $sbj))) { break; } } } // Empty; we can stop here. if ($msg = $GLOBALS['WS_PLUGIN__']['s2member']['o']['new_user_admin_email_message']) { if ($msg = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $msg)) { if ($msg = preg_replace('/%%wp_login_url%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(wp_login_url()), $msg)) { if ($msg = preg_replace('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($role), $msg)) { if ($msg = preg_replace('/%%label%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($label), $msg)) { if ($msg = preg_replace('/%%level%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($level), $msg)) { if ($msg = preg_replace('/%%ccaps%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($ccaps), $msg)) { if ($msg = preg_replace('/%%user_first_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->first_name), $msg)) { if ($msg = preg_replace('/%%user_last_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->last_name), $msg)) { if ($msg = preg_replace('/%%user_full_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_full_name), $msg)) { if ($msg = preg_replace('/%%user_email%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->user_email), $msg)) { if ($msg = preg_replace('/%%user_login%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user->user_login), $msg)) { if ($msg = preg_replace('/%%user_pass%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_pass), $msg)) { if ($msg = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_ip), $msg)) { if ($msg = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $msg)) { if (is_array($fields) && !empty($fields)) { foreach ($fields as $var => $val) { // Custom Registration/Profile Fields. if (!($msg = preg_replace('/%%' . preg_quote($var, '/') . '%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(maybe_serialize($val)), $msg))) { break; } } } // Empty; we can stop here. if (($rec = trim(preg_replace('/%%(.+?)%%/i', '', $rec))) && ($sbj = trim(preg_replace('/%%(.+?)%%/i', '', $sbj))) && ($msg = trim(preg_replace('/%%(.+?)%%/i', '', $msg)))) { if (!is_multisite() || !c_ws_plugin__s2member_utils_conds::is_multisite_farm() || is_main_site()) { $rec = c_ws_plugin__s2member_utilities::evl($rec, get_defined_vars()); $sbj = c_ws_plugin__s2member_utilities::evl($sbj, get_defined_vars()); $msg = c_ws_plugin__s2member_utilities::evl($msg, get_defined_vars()); } foreach (c_ws_plugin__s2member_utils_strings::parse_emails($rec) as $recipient) { // A list of receipients. wp_mail($recipient, apply_filters('ws_plugin__s2member_admin_new_user_email_sbj', $sbj, get_defined_vars()), apply_filters('ws_plugin__s2member_admin_new_user_email_msg', $msg, get_defined_vars()), 'Content-Type: text/plain; charset=UTF-8'); } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } if ($email_configs_were_on) { // Restore? c_ws_plugin__s2member_email_configs::email_config(); } return apply_filters('ws_plugin__s2member_new_user_notification', true, get_defined_vars()); } return apply_filters('ws_plugin__s2member_new_user_notification', false, get_defined_vars()); }
/** * Fills Replacement Codes in Special Redirection URLs. * * @package s2Member\Login_Redirects * @since 3.5 * * @param str $url A URL with possible Replacement Codes in it. * @param obj $user Optional. A `WP_User` object. Defaults to the current User, if logged-in. * @param bool $root_returns_false Defaults to false. True if the function should return false when a URL is reduced to the site root. * @return str|bool A Special Login Redirection URL with Replacement Codes having been parsed, or false if ``$root_returns_false = true`` and the URL is the site root. */ public static function fill_login_redirect_rc_vars($url = FALSE, $user = FALSE, $root_returns_false = FALSE) { eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;'); do_action("ws_plugin__s2member_before_fill_login_redirect_rc_vars", get_defined_vars()); unset($__refs, $__v); /* Unset defined __refs, __v. */ /**/ $url = (string) $url; /* Force ``$url`` to a string value. */ $orig_url = $url; /* Record the original URL that was passed in. */ /**/ $user = (is_object($user) || is_object($user = is_user_logged_in() ? wp_get_current_user() : false)) && !empty($user->ID) ? $user : false; /**/ $user_id = $user ? (string) $user->ID : ""; $user_login = $user ? (string) strtolower($user->user_login) : ""; /**/ $user_level = (string) c_ws_plugin__s2member_user_access::user_access_level($user); $user_role = (string) c_ws_plugin__s2member_user_access::user_access_role($user); $user_ccaps = (string) implode("-", c_ws_plugin__s2member_user_access::user_access_ccaps($user)); $user_logins = $user ? (string) (int) get_user_option("s2member_login_counter", $user_id) : "-1"; /**/ $url = preg_replace("/%%current_user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds($user_login), $url); $url = preg_replace("/%%current_user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds($user_id), $url); $url = preg_replace("/%%current_user_level%%/i", c_ws_plugin__s2member_utils_strings::esc_ds($user_level), $url); $url = preg_replace("/%%current_user_role%%/i", c_ws_plugin__s2member_utils_strings::esc_ds($user_role), $url); $url = preg_replace("/%%current_user_ccaps%%/i", c_ws_plugin__s2member_utils_strings::esc_ds($user_ccaps), $url); $url = preg_replace("/%%current_user_logins%%/i", c_ws_plugin__s2member_utils_strings::esc_ds($user_logins), $url); /**/ if ($url !== $orig_url && (!($parse = c_ws_plugin__s2member_utils_urls::parse_url($url, -1, false)) || !empty($parse["path"]) && strpos($parse["path"], "//") !== false)) { $url = site_url("/"); } /* Defaults to Home Page. We don't return invalid URLs produced by empty Replacement Codes ( i.e. with `//` ). */ /**/ if ($root_returns_false && c_ws_plugin__s2member_utils_conds::is_site_root($url)) { $url = false; } /* In case we need to return false on root URLs ( i.e. don't protect the Home Page inadvertently ). */ /**/ return apply_filters("ws_plugin__s2member_fill_login_redirect_rc_vars", $url, get_defined_vars()); }
/** * Processes List Server removals for s2Member. * * @package s2Member\List_Servers * @since 3.5 * * @param str $role A WordPress Role ID/Name, such as `subscriber`, or `s2member_level1`. * @param int|str $level A numeric s2Member Access Level number. * @param str $login Username for the User. * @param str $pass Plain Text Password for the User. * @param str $email Email address for the User. * @param str $fname First Name for the User. * @param str $lname Last Name for the User. * @param str $ip IP Address for the User. * @param bool $opt_out Defaults to false; must be set to true. Indicates the User IS opting out. * @param int|str $user_id A WordPress User ID, numeric string or integer. * @return bool True if at least one List Server is processed successfully, else false. * * @todo Integrate {@link https://labs.aweber.com/docs/php-library-walkthrough AWeber's API}. * @todo Add a separate option for mail debugging; or consolidate? * @todo Integrate AWeber® API ( much like the MailChimp® API ). */ public static function process_list_server_removals($role = FALSE, $level = FALSE, $login = FALSE, $pass = FALSE, $email = FALSE, $fname = FALSE, $lname = FALSE, $ip = FALSE, $opt_out = FALSE, $user_id = FALSE) { global $current_site, $current_blog; /* For Multisite support. */ /**/ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;'); do_action("ws_plugin__s2member_before_process_list_server_removals", get_defined_vars()); unset($__refs, $__v); /* Unset defined __refs, __v. */ /**/ if (c_ws_plugin__s2member_list_servers::list_servers_integrated() && ($args = func_get_args()) && $role && is_string($role) && is_numeric($level) && $login && is_string($login) && is_string($pass = (string) $pass) && $email && is_string($email) && is_email($email) && is_string($fname = (string) $fname) && is_string($lname = (string) $lname) && is_string($ip = (string) $ip) && is_bool($opt_out = (bool) $opt_out) && $opt_out && $user_id && is_numeric($user_id) && is_object($user = new WP_User($user_id)) && !empty($user->ID)) { $ccaps = implode(",", c_ws_plugin__s2member_user_access::user_access_ccaps($user)); /* Get Custom Capabilities. */ /**/ $email_configs_were_on = c_ws_plugin__s2member_email_configs::email_config_status(); /* s2Member Filters enabled? */ c_ws_plugin__s2member_email_configs::email_config_release(); /* Release s2Member Filters before we begin this routine. */ /**/ if (!empty($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["mailchimp_api_key"]) && !empty($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $level . "_mailchimp_list_ids"])) { if (!class_exists("NC_MCAPI")) { /* Include the MailChimp® API Class here. */ include_once dirname(dirname(__FILE__)) . "/_xtnls/mailchimp/nc-mcapi.inc.php"; } /* MailChimp® API ( no-conflict version ). */ /**/ $mcapi = new NC_MCAPI($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["mailchimp_api_key"], true); /* MailChimp® API ( no-conflict ). */ /**/ foreach (preg_split("/[\r\n\t;,]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $level . "_mailchimp_list_ids"]) as $mailchimp_list) { $mailchimp = array("function" => __FUNCTION__, "func_get_args" => $args, "api_removal_method" => "listUnsubscribe"); /**/ if ($mailchimp["list_id"] = trim(preg_replace("/\\:\\:.*\$/", "", $mailchimp_list))) { if ($mailchimp["api_removal_response"] = $mcapi->{$mailchimp["api_removal_method"]}($mailchimp["list_id"], $email, $mailchimp["api_removal_delete_member"] = apply_filters("ws_plugin__s2member_mailchimp_removal_delete_member", false, get_defined_vars()), $mailchimp["api_removal_send_goodbye"] = apply_filters("ws_plugin__s2member_mailchimp_removal_send_goodbye", false, get_defined_vars()), $mailchimp["api_removal_send_notify"] = apply_filters("ws_plugin__s2member_mailchimp_removal_send_notify", false, get_defined_vars()))) { /* Send notification? */ $mailchimp["api_removal_success"] = $removal_success = true; } /* Flag indicating that we DO have a successful removal; affects the function's overall return value. */ $mailchimp["api_removal_properties"] = $mcapi; /* Include API instance too; as it contains some additional information after each method is processed ( need this in the logs ). */ /**/ $logv = c_ws_plugin__s2member_utilities::ver_details(); $logm = c_ws_plugin__s2member_utilities::mem_details(); $log4 = $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] . "\nUser-Agent: " . $_SERVER["HTTP_USER_AGENT"]; $log4 = is_multisite() && !is_main_site() ? ($_log4 = $current_blog->domain . $current_blog->path) . "\n" . $log4 : $log4; $log2 = is_multisite() && !is_main_site() ? "mailchimp-api-4-" . trim(preg_replace("/[^a-z0-9]/i", "-", $_log4), "-") . ".log" : "mailchimp-api.log"; /**/ if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["gateway_debug_logs"]) { if (is_dir($logs_dir = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["logs_dir"])) { if (is_writable($logs_dir) && c_ws_plugin__s2member_utils_logs::archive_oversize_log_files()) { file_put_contents($logs_dir . "/" . $log2, $logv . "\n" . $logm . "\n" . $log4 . "\n" . var_export($mailchimp, true) . "\n\n", FILE_APPEND); } } } } } } /**/ if (!empty($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $level . "_aweber_list_ids"])) { foreach (preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $level . "_aweber_list_ids"]) as $aweber_list) { $aweber = array("function" => __FUNCTION__, "func_get_args" => $args, "wp_mail_removal_method" => "listUnsubscribe"); /**/ if ($aweber["list_id"] = trim($aweber_list)) { $aweber["removal_bcc"] = apply_filters("ws_plugin__s2member_aweber_removal_bcc", false, get_defined_vars()); /**/ c_ws_plugin__s2member_email_configs::email_config(); /* Email configs MUST be ON for removal requests. The `From:` address MUST match AWeber account. See: <http://www.aweber.com/faq/questions/62/Can+I+Unsubscribe+People+Via+Email%3F>. */ /**/ if ($aweber["wp_mail_removal_response"] = wp_mail($aweber["list_id"] . "@aweber.com", $aweber["wp_mail_removal_sbj"] = apply_filters("ws_plugin__s2member_aweber_removal_sbj", "REMOVE#" . $email . "#s2Member#" . $aweber["list_id"], get_defined_vars()), $aweber["wp_mail_removal_msg"] = "REMOVE", $aweber["wp_mail_removal_headers"] = "From: \"" . preg_replace('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">" . ($aweber["removal_bcc"] ? "\r\nBcc: " . $aweber["removal_bcc"] : "") . "\r\nContent-Type: text/plain; charset=utf-8")) { $aweber["wp_mail_removal_success"] = $removal_success = true; } /* Flag indicating that we DO have a successful removal; affects the function's overall return value. */ /**/ c_ws_plugin__s2member_email_configs::email_config_release(); /* Release. */ /**/ $logv = c_ws_plugin__s2member_utilities::ver_details(); $logm = c_ws_plugin__s2member_utilities::mem_details(); $log4 = $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] . "\nUser-Agent: " . $_SERVER["HTTP_USER_AGENT"]; $log4 = is_multisite() && !is_main_site() ? ($_log4 = $current_blog->domain . $current_blog->path) . "\n" . $log4 : $log4; $log2 = is_multisite() && !is_main_site() ? "aweber-api-4-" . trim(preg_replace("/[^a-z0-9]/i", "-", $_log4), "-") . ".log" : "aweber-api.log"; /**/ if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["gateway_debug_logs"]) { if (is_dir($logs_dir = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["logs_dir"])) { if (is_writable($logs_dir) && c_ws_plugin__s2member_utils_logs::archive_oversize_log_files()) { file_put_contents($logs_dir . "/" . $log2, $logv . "\n" . $logm . "\n" . $log4 . "\n" . var_export($aweber, true) . "\n\n", FILE_APPEND); } } } } } } /**/ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;'); do_action("ws_plugin__s2member_during_process_list_server_removals", get_defined_vars()); unset($__refs, $__v); /* Unset defined __refs, __v. */ /**/ if ($email_configs_were_on) { /* Back on? */ c_ws_plugin__s2member_email_configs::email_config(); } } /**/ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;'); do_action("ws_plugin__s2member_after_process_list_server_removals", get_defined_vars()); unset($__refs, $__v); /* Unset defined __refs, __v. */ /**/ return apply_filters("ws_plugin__s2member_process_list_server_removals", isset($removal_success) && $removal_success, get_defined_vars()); }
/** * Retrieves a field value. Also supports Custom Fields. * * @package s2Member\Utilities * @since 3.5 * * @param str $field_id Required. A unique Custom Registration/Profile Field ID, that you configured with s2Member. * Or, this could be set to any property that exists on the WP_User object for a particular User; * ( i.e. `id`, `ID`, `user_login`, `user_email`, `first_name`, `last_name`, `display_name`, `ip`, `IP`, * `s2member_registration_ip`, `s2member_custom`, `s2member_subscr_id`, `s2member_subscr_or_wp_id`, * `s2member_subscr_gateway`, `s2member_custom_fields`, `s2member_file_download_access_[log|arc]`, * `s2member_auto_eot_time`, `s2member_last_payment_time`, `s2member_paid_registration_times`, * `s2member_access_role`, `s2member_access_level`, `s2member_access_label`, * `s2member_access_ccaps`, etc, etc. ). * @param int|str $user_id Optional. Defaults to the current User's ID. * @return mixed The value of the requested field, or false if the field does not exist. */ public static function get_user_field($field_id = FALSE, $user_id = FALSE) { global $wpdb; /* Global database object reference. We'll need this to obtain the right database prefix. */ /**/ $current_user = wp_get_current_user(); /* Current User's object ( used when/if `$user_id` is empty ). */ /**/ if (is_object($user = $user_id ? new WP_User($user_id) : $current_user) && !empty($user->ID) && ($user_id = $user->ID)) { if (isset($user->{$field_id})) { /* Immediate User object property? ( most likely ) */ return $user->{$field_id}; } else { if (isset($user->data->{$field_id})) { /* Also try the data object property. */ return $user->data->{$field_id}; } else { if (isset($user->{$wpdb->prefix . $field_id})) { /* Immediate prefixed? */ return $user->{$wpdb->prefix . $field_id}; } else { if (isset($user->data->{$wpdb->prefix . $field_id})) { /* Data prefixed? */ return $user->data->{$wpdb->prefix . $field_id}; } else { if (strcasecmp($field_id, "full_name") === 0) { /* First/last full name? */ return trim($user->first_name . " " . $user->last_name); } else { if (preg_match("/^(email|user_email)\$/i", $field_id)) { /* Email address? */ return $user->user_email; } else { if (preg_match("/^(login|user_login)\$/i", $field_id)) { /* Username / login? */ return $user->user_login; } else { if (strcasecmp($field_id, "s2member_access_role") === 0) { /* Role name/ID? */ return c_ws_plugin__s2member_user_access::user_access_role($user); } else { if (strcasecmp($field_id, "s2member_access_level") === 0) { /* Access Level? */ return c_ws_plugin__s2member_user_access::user_access_level($user); } else { if (strcasecmp($field_id, "s2member_access_label") === 0) { /* Access Label? */ return c_ws_plugin__s2member_user_access::user_access_label($user); } else { if (strcasecmp($field_id, "s2member_access_ccaps") === 0) { /* Custom Caps? */ return c_ws_plugin__s2member_user_access::user_access_ccaps($user); } else { if (strcasecmp($field_id, "ip") === 0 && is_object($current_user) && !empty($current_user->ID) && $current_user->ID === ($user_id = $user->ID)) { return $_SERVER["REMOTE_ADDR"]; } else { if (strcasecmp($field_id, "s2member_registration_ip") === 0 || strcasecmp($field_id, "reg_ip") === 0 || strcasecmp($field_id, "ip") === 0) { return get_user_option("s2member_registration_ip", $user_id); } else { if (strcasecmp($field_id, "s2member_subscr_or_wp_id") === 0) { return ($subscr_id = get_user_option("s2member_subscr_id", $user_id)) ? $subscr_id : $user_id; } else { if (is_array($fields = get_user_option("s2member_custom_fields", $user_id))) { if (isset($fields[preg_replace("/[^a-z0-9]/i", "_", strtolower($field_id))])) { return $fields[preg_replace("/[^a-z0-9]/i", "_", strtolower($field_id))]; } } } } } } } } } } } } } } } } } /**/ return false; /* Default, return false. */ }
/** * Retrieves a field value. Also supports Custom Fields. * * @package s2Member\Utilities * @since 3.5 * * @param string $field_id Required. A unique Custom Registration/Profile Field ID, that you configured with s2Member. * Or, this could be set to any property that exists on the WP_User object for a particular User; * ( i.e., `id`, `ID`, `user_login`, `user_email`, `first_name`, `last_name`, `display_name`, `ip`, `IP`, * `s2member_registration_ip`, `s2member_custom`, `s2member_subscr_id`, `s2member_subscr_or_wp_id`, * `s2member_subscr_gateway`, `s2member_custom_fields`, `s2member_file_download_access_[log|arc]`, * `s2member_auto_eot_time`, `s2member_last_payment_time`, `s2member_paid_registration_times`, * `s2member_access_role`, `s2member_access_level`, `s2member_access_label`, * `s2member_access_ccaps`, etc, etc. ). * @param int|string $user_id Optional. Defaults to the current User's ID. * * @return mixed The value of the requested field, or false if the field does not exist. */ public static function get_user_field($field_id = '', $user_id = 0) { global $wpdb; /** @var wpdb $wpdb */ $current_user = wp_get_current_user(); // Current User's object (used when/if `$user_id` is empty). if (is_object($user = $user_id ? new WP_User($user_id) : $current_user) && !empty($user->ID) && ($user_id = $user->ID)) { if (isset($user->{$field_id})) { return $user->{$field_id}; } else { if (isset($user->data->{$field_id})) { return $user->data->{$field_id}; } else { if (isset($user->{$wpdb->prefix . $field_id})) { return $user->{$wpdb->prefix . $field_id}; } else { if (isset($user->data->{$wpdb->prefix . $field_id})) { return $user->data->{$wpdb->prefix . $field_id}; } else { if (strcasecmp($field_id, 'full_name') === 0) { return trim($user->first_name . ' ' . $user->last_name); } else { if (preg_match('/^(email|user_email)$/i', $field_id)) { return $user->user_email; } else { if (preg_match('/^(login|user_login)$/i', $field_id)) { return $user->user_login; } else { if (preg_match('/^(s2member_)?registration_time$/i', $field_id)) { return $user->user_registered; } else { if (strcasecmp($field_id, 's2member_access_role') === 0) { return c_ws_plugin__s2member_user_access::user_access_role($user); } else { if (strcasecmp($field_id, 's2member_access_level') === 0) { return c_ws_plugin__s2member_user_access::user_access_level($user); } else { if (strcasecmp($field_id, 's2member_access_label') === 0) { return c_ws_plugin__s2member_user_access::user_access_label($user); } else { if (strcasecmp($field_id, 's2member_access_ccaps') === 0) { return c_ws_plugin__s2member_user_access::user_access_ccaps($user); } else { if (strcasecmp($field_id, 'ip') === 0 && is_object($current_user) && !empty($current_user->ID) && $current_user->ID === ($user_id = $user->ID)) { return $_SERVER['REMOTE_ADDR']; } else { if (strcasecmp($field_id, 's2member_registration_ip') === 0 || strcasecmp($field_id, 'reg_ip') === 0 || strcasecmp($field_id, 'ip') === 0) { return get_user_option('s2member_registration_ip', $user_id); } else { if (strcasecmp($field_id, 's2member_subscr_or_wp_id') === 0) { return ($subscr_id = get_user_option('s2member_subscr_id', $user_id)) ? $subscr_id : $user_id; } else { if (is_array($fields = get_user_option('s2member_custom_fields', $user_id))) { if (isset($fields[preg_replace('/[^a-z0-9]/i', '_', strtolower($field_id))])) { return $fields[preg_replace('/[^a-z0-9]/i', '_', strtolower($field_id))]; } } } } } } } } } } } } } } } } } } return FALSE; // Otherwise, return false. }
/** * Configures all new Users. * * The Hook `user_register` is also fired by calling: * ``c_ws_plugin__s2member_registrations::ms_create_existing_user()`` and/or ``wpmu_create_user()``. * * This function also receives hand-offs from s2Member's handlers for these two Hooks: * `wpmu_activate_user` and `wpmu_activate_blog`. * * @package s2Member\Registrations * @since 3.5 * * @attaches-to ``add_action('user_register');`` * * @param int|string $user_id A numeric WordPress User ID. * @param string $password Optional in most cases. A User's plain text Password. If unspecified, attempts are made to collect the plain text Password from other sources. * @param array $meta Optional in most cases. Defaults to false. An array of meta data for a User/Member. * * @TODO Impossible to delete cookies when fired inside: `/wp-activate.php`? */ public static function configure_user_registration($user_id = '', $password = '', $meta = array()) { global $wpdb; // Global database object reference. global $pagenow; // We need this to detect the current administration page. global $current_site, $current_blog; // Adds support for Multisite Networking. static $email_config, $processed; // Static vars prevent duplicate processing. foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action('ws_plugin__s2member_before_configure_user_registration', get_defined_vars()); unset($__refs, $__v); // Housekeeping. // With Multisite Networking, we need this to run on `user_register` ahead of `wpmu_activate_[user|blog]`. if (!isset($email_config) && ($email_config = TRUE)) { // Anytime this routine is fired; we configure email. c_ws_plugin__s2member_email_configs::email_config(); } // Configures `From:` email header. $_p = isset($_POST) ? $_POST : NULL; // Grab global ``$_POST`` array here, if it's possible to do so. $rvs = isset($GLOBALS['ws_plugin__s2member_registration_vars']) ? $GLOBALS['ws_plugin__s2member_registration_vars'] : NULL; if (!$processed) { if (is_array($_p) || is_array($meta) || is_array($rvs)) { if (!(is_multisite() && is_blog_admin() && $pagenow === 'user-new.php' && isset($_p['noconfirmation']) && is_super_admin() && !is_array($meta))) { if (!(preg_match('/\\/wp-activate\\.php/', $_SERVER['REQUEST_URI']) && !is_array($meta))) { if (!(c_ws_plugin__s2member_utils_conds::bp_is_installed() && bp_is_activation_page() && !is_array($meta))) { if (!(c_ws_plugin__s2member_utils_conds::pro_is_installed() && c_ws_plugin__s2member_pro_remote_ops::is_remote_op('create_user') && !is_array($rvs))) { if ($user_id && is_object($user = new WP_User($user_id)) && !empty($user->ID) && ($user_id = $user->ID) && ($processed = TRUE)) { settype($_p, 'array') . settype($meta, 'array') . settype($rvs, 'array'); // Force arrays here. $_p = c_ws_plugin__s2member_utils_strings::trim_deep(stripslashes_deep($_p)); $meta = c_ws_plugin__s2member_utils_strings::trim_deep(stripslashes_deep($meta)); $rvs = c_ws_plugin__s2member_utils_strings::trim_deep($rvs); foreach ($_p as $_key => $_value) { // Scan ``$_p`` vars; adding `custom_reg_field` keys. if (preg_match('/^ws_plugin__s2member_user_new_/', $_key)) { // Look for keys. if ($_key = str_replace('_user_new_', '_custom_reg_field_', $_key)) { $_p[$_key] = $_value; } } } // Add each of these key conversions. unset($_key, $_value); if (!is_admin() && (isset($_p['ws_plugin__s2member_custom_reg_field_s2member_subscr_gateway']) || isset($_p['ws_plugin__s2member_custom_reg_field_s2member_subscr_id']) || isset($_p['ws_plugin__s2member_custom_reg_field_s2member_subscr_baid']) || isset($_p['ws_plugin__s2member_custom_reg_field_s2member_subscr_cid']) || isset($_p['ws_plugin__s2member_custom_reg_field_s2member_custom']) || isset($_p['ws_plugin__s2member_custom_reg_field_s2member_ccaps']) || isset($_p['ws_plugin__s2member_custom_reg_field_s2member_auto_eot_time']) || isset($_p['ws_plugin__s2member_custom_reg_field_s2member_notes']))) { exit(_x('s2Member security violation. You attempted to POST administrative variables that will NOT be trusted in a NON-administrative zone!', 's2member-front', 's2member')); } $_pmr = array_merge($_p, $meta, $rvs); // Merge all of these arrays together now, in this specific order. unset($_p, $meta, $rvs); // These variables can all be unset now; we have them all in the ``$_pmr`` array. $custom_reg_display_name = $GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_display_name']; // Can be configured by the site owner. if (!is_admin() && (!c_ws_plugin__s2member_utils_conds::pro_is_installed() || !c_ws_plugin__s2member_pro_remote_ops::is_remote_op('create_user')) && ($reg_cookies = c_ws_plugin__s2member_register_access::reg_cookies_ok()) && extract($reg_cookies)) { /* This routine could be processed through `/wp-login.php?action=register`, `/wp-activate.php`, or `/activate` via BuddyPress`. This may also be processed through a standard BuddyPress installation, or another plugin calling `user_register`. If processed through `/wp-activate.php`, it could've originated inside the admin—via `/user-new.php`. */ /** * @var $subscr_gateway string Reference for IDEs. * @var $subscr_id string Reference for IDEs. * @var $custom string Reference for IDEs. * @var $item_number string Reference for IDEs. */ $processed = 'yes'; // Mark this as yes. $current_role = c_ws_plugin__s2member_user_access::user_access_role($user); @(list($level, $ccaps, $eotper) = preg_split('/\\:/', $item_number, 3)); $role = 's2member_level' . $level; // Membership Level. $email = $user->user_email; $login = $user->user_login; $ip = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_registration_ip']; $ip = !$ip ? $_SERVER['REMOTE_ADDR'] : $ip; // Else use environment variable. $subscr_baid = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_baid']; $subscr_cid = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_cid']; $cv = preg_split('/\\|/', $custom); if (!($auto_eot_time = '') && $eotper) { // If a specific EOT Period is included. $auto_eot_time = c_ws_plugin__s2member_utils_time::auto_eot_time('', '', '', $eotper); } $notes = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_notes']; $opt_in = !$GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_opt_in'] ? TRUE : FALSE; $opt_in = !$opt_in && !empty($_pmr['ws_plugin__s2member_custom_reg_field_opt_in']) ? TRUE : $opt_in; if (!($fname = $user->first_name)) { if (!empty($_pmr['ws_plugin__s2member_custom_reg_field_first_name'])) { $fname = (string) $_pmr['ws_plugin__s2member_custom_reg_field_first_name']; } } if (!$fname) { // Also try BuddyPress. if (!empty($_pmr['field_1'])) { // BuddyPress? $fname = trim(preg_replace('/ (.*)$/', '', (string) $_pmr['field_1'])); } } if (!($lname = $user->last_name)) { if (!empty($_pmr['ws_plugin__s2member_custom_reg_field_last_name'])) { $lname = (string) $_pmr['ws_plugin__s2member_custom_reg_field_last_name']; } } if (!$lname) { // Also try BuddyPress. if (!empty($_pmr['field_1']) && preg_match('/^(.+?) (.+)$/', (string) $_pmr['field_1'])) { $lname = trim(preg_replace('/^(.+?) (.+)$/', '$2', (string) $_pmr['field_1'])); } } if ($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_names'] && !$fname && $login) { $fname = trim($login); $lname = ''; // Username and empty Last Name. } $name = trim($fname . ' ' . $lname); // Both names. if (!($pass = $password)) { // Try s2Member's generator. if (!empty($GLOBALS['ws_plugin__s2member_plain_text_pass'])) { $pass = (string) $GLOBALS['ws_plugin__s2member_plain_text_pass']; } } if (!$pass) { // Also try BuddyPress Password. if (!empty($_pmr['signup_password'])) { // BuddyPress? $pass = (string) $_pmr['signup_password']; } } if ($pass) { !headers_sent() ? delete_user_setting('default_password_nag', $user_id) : NULL; update_user_option($user_id, 'default_password_nag', FALSE, TRUE); } update_user_option($user_id, 's2member_registration_ip', $ip); update_user_option($user_id, 's2member_auto_eot_time', $auto_eot_time); update_user_option($user_id, 's2member_subscr_gateway', $subscr_gateway); update_user_option($user_id, 's2member_subscr_id', $subscr_id); update_user_option($user_id, 's2member_subscr_baid', $subscr_baid); update_user_option($user_id, 's2member_subscr_cid', $subscr_cid); update_user_option($user_id, 's2member_custom', $custom); update_user_option($user_id, 's2member_notes', $notes); if (!$user->first_name && $fname) { update_user_meta($user_id, 'first_name', $fname); } if (!$user->last_name && $lname) { update_user_meta($user_id, 'last_name', $lname); } if (!$user->display_name || $user->display_name === $user->user_login) { if ($custom_reg_display_name === 'full' && $name) { wp_update_user(wp_slash(array('ID' => $user_id, 'display_name' => $name))); } else { if ($custom_reg_display_name === 'first' && $fname) { wp_update_user(wp_slash(array('ID' => $user_id, 'display_name' => $fname))); } else { if ($custom_reg_display_name === 'last' && $lname) { wp_update_user(wp_slash(array('ID' => $user_id, 'display_name' => $lname))); } else { if ($custom_reg_display_name === 'login' && $login) { wp_update_user(wp_slash(array('ID' => $user_id, 'display_name' => $login))); } } } } } if (is_multisite()) { if (!is_main_site() && strtotime($user->user_registered) >= strtotime('-10 seconds')) { remove_user_from_blog($user_id, $current_site->blog_id); } // No Main Site Role. if (!get_user_meta($user_id, 's2member_originating_blog', TRUE)) { // Recorded yet? update_user_meta($user_id, 's2member_originating_blog', $current_blog->blog_id); } } if ($current_role !== $role) { // Only if NOT the current Role. $user->set_role($role); } // s2Member. if ($ccaps && preg_match('/^-all/', str_replace('+', '', $ccaps))) { foreach ($user->allcaps as $cap => $cap_enabled) { if (preg_match('/^access_s2member_ccap_/', $cap)) { $user->remove_cap($ccap = $cap); } } } if ($ccaps && preg_replace('/^-all[' . "\r\n\t" . '\\s;,]*/', '', str_replace('+', '', $ccaps))) { foreach (preg_split('/[' . "\r\n\t" . '\\s;,]+/', preg_replace('/^-all[' . "\r\n\t" . '\\s;,]*/', '', str_replace('+', '', $ccaps))) as $ccap) { if (strlen($ccap = trim(strtolower(preg_replace('/[^a-z_0-9]/i', '', $ccap))))) { $user->add_cap('access_s2member_ccap_' . $ccap); } } } if (!($fields = array()) && $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($_pmr['ws_plugin__s2member_custom_reg_field_' . $field_var])) { $fields[$field_var] = $_pmr['ws_plugin__s2member_custom_reg_field_' . $field_var]; } } } unset($field, $field_var, $field_id_class); // Housekeeping. if (!empty($fields)) { // Only if NOT empty. update_user_option($user_id, 's2member_custom_fields', $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 (!is_multisite() && c_ws_plugin__s2member_utils_conds::bp_is_installed() && bp_is_register_page()) { update_user_option($user_id, 's2member_bp_activation_role', $role); update_user_option($user_id, 's2member_bp_activation_ccaps', c_ws_plugin__s2member_user_access::user_access_ccaps($user)); } if (($transient = 's2m_' . md5('s2member_transient_ipn_signup_vars_' . $subscr_id)) && is_array($ipn_signup_vars = get_transient($transient))) { update_user_option($user_id, 's2member_ipn_signup_vars', $ipn_signup_vars); // For future reference. delete_transient($transient); // This can be deleted now. } if (($transient = 's2m_' . md5('s2member_transient_ipn_subscr_payment_' . $subscr_id)) && is_array($subscr_payment = get_transient($transient)) && !empty($subscr_payment['subscr_gateway'])) { $proxy = array('s2member_paypal_proxy' => stripslashes((string) $subscr_payment['subscr_gateway']), 's2member_paypal_proxy_verification' => c_ws_plugin__s2member_paypal_utilities::paypal_proxy_key_gen()); c_ws_plugin__s2member_utils_urls::remote(home_url('/?s2member_paypal_notify=1'), array_merge(stripslashes_deep($subscr_payment), $proxy), array('timeout' => 20)); delete_transient($transient); // This can be deleted now. } if (($transient = 's2m_' . md5('s2member_transient_ipn_subscr_eot_' . $subscr_id)) && is_array($subscr_eot = get_transient($transient)) && !empty($subscr_eot['subscr_gateway'])) { $proxy = array('s2member_paypal_proxy' => stripslashes((string) $subscr_eot['subscr_gateway']), 's2member_paypal_proxy_verification' => c_ws_plugin__s2member_paypal_utilities::paypal_proxy_key_gen()); c_ws_plugin__s2member_utils_urls::remote(home_url('/?s2member_paypal_notify=1'), array_merge(stripslashes_deep($subscr_eot), $proxy), array('timeout' => 20)); delete_transient($transient); // This can be deleted now. } if (!headers_sent()) { // Only if headers are NOT yet sent. Here we establish both Signup and Payment Tracking Cookies. @setcookie('s2member_tracking', $s2member_tracking = c_ws_plugin__s2member_utils_encryption::encrypt($subscr_id), time() + 31556926, COOKIEPATH, COOKIE_DOMAIN) . @setcookie('s2member_tracking', $s2member_tracking, time() + 31556926, SITECOOKIEPATH, COOKIE_DOMAIN) . ($_COOKIE['s2member_tracking'] = $s2member_tracking); } foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action('ws_plugin__s2member_during_configure_user_registration_front_side_paid', get_defined_vars()); do_action('ws_plugin__s2member_during_configure_user_registration_front_side', get_defined_vars()); unset($__refs, $__v); } else { if (!is_admin() && (!c_ws_plugin__s2member_utils_conds::pro_is_installed() || !c_ws_plugin__s2member_pro_remote_ops::is_remote_op('create_user'))) { /* This routine could be processed through `/wp-login.php?action=register`, `/wp-activate.php`, or `/activate` via BuddyPress`. This may also be processed through a standard BuddyPress installation, or another plugin calling `user_register`. If processed through `/wp-activate.php`, it could've originated inside the admin, via `/user-new.php`. */ $processed = 'yes'; // Mark this as yes. $current_role = c_ws_plugin__s2member_user_access::user_access_role($user); $role = ''; // Initialize ``$role`` to an empty string here, before processing. $role = !$role && ($level = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_level']) > 0 ? 's2member_level' . $level : $role; $role = !$role && ($level = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_level']) === '0' ? 'subscriber' : $role; $role = !$role && $current_role ? $current_role : $role; // Use existing Role? $role = !$role ? get_option('default_role') : $role; // Otherwise default. $level = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_level']; $level = !$level && preg_match('/^(administrator|editor|author|contributor)$/i', $role) ? $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels'] : $level; $level = !$level && preg_match('/^s2member_level[1-9][0-9]*$/i', $role) ? preg_replace('/^s2member_level/', '', $role) : $level; $level = !$level && preg_match('/^subscriber$/i', $role) ? '0' : $level; $level = !$level ? '0' : $level; $ccaps = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_ccaps']; $email = $user->user_email; $login = $user->user_login; $ip = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_registration_ip']; $ip = !$ip ? $_SERVER['REMOTE_ADDR'] : $ip; // Else use environment variable. $custom = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_custom']; $subscr_id = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_id']; $subscr_baid = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_baid']; $subscr_cid = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_cid']; $subscr_gateway = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_gateway']; $cv = preg_split('/\\|/', (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_custom']); $auto_eot_time = ($eot = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_auto_eot_time']) ? strtotime($eot) : ''; $notes = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_notes']; $opt_in = !$GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_opt_in'] ? TRUE : FALSE; $opt_in = !$opt_in && !empty($_pmr['ws_plugin__s2member_custom_reg_field_opt_in']) ? TRUE : $opt_in; if (!($fname = $user->first_name)) { if (!empty($_pmr['ws_plugin__s2member_custom_reg_field_first_name'])) { $fname = (string) $_pmr['ws_plugin__s2member_custom_reg_field_first_name']; } } if (!$fname) { // Also try BuddyPress. if (!empty($_pmr['field_1'])) { // BuddyPress? $fname = trim(preg_replace('/ (.*)$/', '', (string) $_pmr['field_1'])); } } if (!($lname = $user->last_name)) { if (!empty($_pmr['ws_plugin__s2member_custom_reg_field_last_name'])) { $lname = (string) $_pmr['ws_plugin__s2member_custom_reg_field_last_name']; } } if (!$lname) { // Also try BuddyPress. if (!empty($_pmr['field_1']) && preg_match('/^(.+?) (.+)$/', (string) $_pmr['field_1'])) { $lname = trim(preg_replace('/^(.+?) (.+)$/', '$2', (string) $_pmr['field_1'])); } } if ($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_names'] && !$fname && $login) { $fname = trim($login); $lname = ''; // Username and empty Last Name. } $name = trim($fname . ' ' . $lname); // Both names. if (!($pass = $password)) { // Try s2Member's generator. if (!empty($GLOBALS['ws_plugin__s2member_plain_text_pass'])) { $pass = (string) $GLOBALS['ws_plugin__s2member_plain_text_pass']; } } if (!$pass) { // Also try BuddyPress Password. if (!empty($_pmr['signup_password'])) { // BuddyPress? $pass = (string) $_pmr['signup_password']; } } if ($pass) { !headers_sent() ? delete_user_setting('default_password_nag', $user_id) : NULL; update_user_option($user_id, 'default_password_nag', FALSE, TRUE); } update_user_option($user_id, 's2member_registration_ip', $ip); update_user_option($user_id, 's2member_auto_eot_time', $auto_eot_time); update_user_option($user_id, 's2member_subscr_gateway', $subscr_gateway); update_user_option($user_id, 's2member_subscr_id', $subscr_id); update_user_option($user_id, 's2member_subscr_baid', $subscr_baid); update_user_option($user_id, 's2member_subscr_cid', $subscr_cid); update_user_option($user_id, 's2member_custom', $custom); update_user_option($user_id, 's2member_notes', $notes); if (!$user->first_name && $fname) { update_user_meta($user_id, 'first_name', $fname); } if (!$user->last_name && $lname) { update_user_meta($user_id, 'last_name', $lname); } if (!$user->display_name || $user->display_name === $user->user_login) { if ($custom_reg_display_name === 'full' && $name) { wp_update_user(wp_slash(array('ID' => $user_id, 'display_name' => $name))); } else { if ($custom_reg_display_name === 'first' && $fname) { wp_update_user(wp_slash(array('ID' => $user_id, 'display_name' => $fname))); } else { if ($custom_reg_display_name === 'last' && $lname) { wp_update_user(wp_slash(array('ID' => $user_id, 'display_name' => $lname))); } else { if ($custom_reg_display_name === 'login' && $login) { wp_update_user(wp_slash(array('ID' => $user_id, 'display_name' => $login))); } } } } } if (is_multisite()) { if (!is_main_site() && strtotime($user->user_registered) >= strtotime('-10 seconds')) { remove_user_from_blog($user_id, $current_site->blog_id); } // No Main Site Role. if (!get_user_meta($user_id, 's2member_originating_blog', TRUE)) { // Recorded yet? update_user_meta($user_id, 's2member_originating_blog', $current_blog->blog_id); } } if ($current_role !== $role) { // Only if NOT the current Role. $user->set_role($role); } // s2Member. if ($ccaps && preg_match('/^-all/', str_replace('+', '', $ccaps))) { foreach ($user->allcaps as $cap => $cap_enabled) { if (preg_match('/^access_s2member_ccap_/', $cap)) { $user->remove_cap($ccap = $cap); } } } if ($ccaps && preg_replace('/^-all[' . "\r\n\t" . '\\s;,]*/', '', str_replace('+', '', $ccaps))) { foreach (preg_split('/[' . "\r\n\t" . '\\s;,]+/', preg_replace('/^-all[' . "\r\n\t" . '\\s;,]*/', '', str_replace('+', '', $ccaps))) as $ccap) { if (strlen($ccap = trim(strtolower(preg_replace('/[^a-z_0-9]/i', '', $ccap))))) { $user->add_cap('access_s2member_ccap_' . $ccap); } } } if (!($fields = array()) && $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($_pmr['ws_plugin__s2member_custom_reg_field_' . $field_var])) { $fields[$field_var] = $_pmr['ws_plugin__s2member_custom_reg_field_' . $field_var]; } } } unset($field, $field_var, $field_id_class); // Housekeeping. if (!empty($fields)) { // Only if NOT empty. update_user_option($user_id, 's2member_custom_fields', $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 (!is_multisite() && c_ws_plugin__s2member_utils_conds::bp_is_installed() && bp_is_register_page()) { update_user_option($user_id, 's2member_bp_activation_role', $role); update_user_option($user_id, 's2member_bp_activation_ccaps', c_ws_plugin__s2member_user_access::user_access_ccaps($user)); } foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action('ws_plugin__s2member_during_configure_user_registration_front_side_free', get_defined_vars()); do_action('ws_plugin__s2member_during_configure_user_registration_front_side', get_defined_vars()); unset($__refs, $__v); } else { if (is_blog_admin() && $pagenow === 'user-new.php' || c_ws_plugin__s2member_utils_conds::pro_is_installed() && c_ws_plugin__s2member_pro_remote_ops::is_remote_op('create_user')) { // Can only be processed through `/user-new.php` in the Admin panel, or through Remote Op: `create_user`. $processed = 'yes'; // Mark this as yes, to indicate that a routine was processed. $current_role = c_ws_plugin__s2member_user_access::user_access_role($user); $role = ''; // Initialize $role to an empty string here, before processing. $role = !$role && ($level = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_level']) > 0 ? 's2member_level' . $level : $role; $role = !$role && ($level = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_level']) === '0' ? 'subscriber' : $role; $role = !$role && $current_role ? $current_role : $role; // Use existing Role? $role = !$role ? get_option('default_role') : $role; // Otherwise default. $level = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_level']; $level = !$level && preg_match('/^(administrator|editor|author|contributor)$/i', $role) ? $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels'] : $level; $level = !$level && preg_match('/^s2member_level[1-9][0-9]*$/i', $role) ? preg_replace('/^s2member_level/', '', $role) : $level; $level = !$level && preg_match('/^subscriber$/i', $role) ? '0' : $level; $level = !$level ? '0' : $level; $ccaps = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_ccaps']; $email = $user->user_email; $login = $user->user_login; $ip = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_registration_ip']; $custom = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_custom']; $subscr_id = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_id']; $subscr_baid = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_baid']; $subscr_cid = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_cid']; $subscr_gateway = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_gateway']; $cv = preg_split('/\\|/', (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_custom']); $auto_eot_time = ($eot = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_auto_eot_time']) ? strtotime($eot) : ''; $notes = (string) @$_pmr['ws_plugin__s2member_custom_reg_field_s2member_notes']; $opt_in = !empty($_pmr['ws_plugin__s2member_custom_reg_field_opt_in']) ? TRUE : FALSE; if (!($fname = $user->first_name)) { // `Users → Add New`. if (!empty($_pmr['ws_plugin__s2member_custom_reg_field_first_name'])) { $fname = (string) $_pmr['ws_plugin__s2member_custom_reg_field_first_name']; } } if (!($lname = $user->last_name)) { // `Users → Add New`. if (!empty($_pmr['ws_plugin__s2member_custom_reg_field_last_name'])) { $lname = (string) $_pmr['ws_plugin__s2member_custom_reg_field_last_name']; } } if ($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_names'] && !$fname && $login) { $fname = trim($login); $lname = ''; // Username and empty Last Name. } $name = trim($fname . ' ' . $lname); // Both names. if (!($pass = $password)) { // Try s2Member's generator. if (!empty($GLOBALS['ws_plugin__s2member_plain_text_pass'])) { $pass = (string) $GLOBALS['ws_plugin__s2member_plain_text_pass']; } } if (!$pass) { // Also try the `Users → Add New` form. if (!empty($_pmr['pass1'])) { // Field in `/user-new.php`. $pass = (string) $_pmr['pass1']; } } if ($pass) { !headers_sent() ? delete_user_setting('default_password_nag', $user_id) : NULL; update_user_option($user_id, 'default_password_nag', FALSE, TRUE); } update_user_option($user_id, 's2member_registration_ip', $ip); update_user_option($user_id, 's2member_auto_eot_time', $auto_eot_time); update_user_option($user_id, 's2member_subscr_gateway', $subscr_gateway); update_user_option($user_id, 's2member_subscr_id', $subscr_id); update_user_option($user_id, 's2member_subscr_baid', $subscr_baid); update_user_option($user_id, 's2member_subscr_cid', $subscr_cid); update_user_option($user_id, 's2member_custom', $custom); update_user_option($user_id, 's2member_notes', $notes); if (!$user->first_name && $fname) { update_user_meta($user_id, 'first_name', $fname); } if (!$user->last_name && $lname) { update_user_meta($user_id, 'last_name', $lname); } if (!$user->display_name || $user->display_name === $user->user_login) { if ($custom_reg_display_name === 'full' && $name) { wp_update_user(wp_slash(array('ID' => $user_id, 'display_name' => $name))); } else { if ($custom_reg_display_name === 'first' && $fname) { wp_update_user(wp_slash(array('ID' => $user_id, 'display_name' => $fname))); } else { if ($custom_reg_display_name === 'last' && $lname) { wp_update_user(wp_slash(array('ID' => $user_id, 'display_name' => $lname))); } else { if ($custom_reg_display_name === 'login' && $login) { wp_update_user(wp_slash(array('ID' => $user_id, 'display_name' => $login))); } } } } } if (is_multisite()) { if (!is_main_site() && strtotime($user->user_registered) >= strtotime('-10 seconds')) { remove_user_from_blog($user_id, $current_site->blog_id); } // No Main Site Role. if (!get_user_meta($user_id, 's2member_originating_blog', TRUE)) { // Recorded yet? update_user_meta($user_id, 's2member_originating_blog', $current_blog->blog_id); } } if ($current_role !== $role) { // Only if NOT the current Role. $user->set_role($role); } // s2Member. if ($ccaps && preg_match('/^-all/', str_replace('+', '', $ccaps))) { foreach ($user->allcaps as $cap => $cap_enabled) { if (preg_match('/^access_s2member_ccap_/', $cap)) { $user->remove_cap($ccap = $cap); } } } if ($ccaps && preg_replace('/^-all[' . "\r\n\t" . '\\s;,]*/', '', str_replace('+', '', $ccaps))) { foreach (preg_split('/[' . "\r\n\t" . '\\s;,]+/', preg_replace('/^-all[' . "\r\n\t" . '\\s;,]*/', '', str_replace('+', '', $ccaps))) as $ccap) { if (strlen($ccap = trim(strtolower(preg_replace('/[^a-z_0-9]/i', '', $ccap))))) { $user->add_cap('access_s2member_ccap_' . $ccap); } } } if (!($fields = array()) && $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($_pmr['ws_plugin__s2member_custom_reg_field_' . $field_var])) { $fields[$field_var] = $_pmr['ws_plugin__s2member_custom_reg_field_' . $field_var]; } } } unset($field, $field_var, $field_id_class); // Housekeeping. if (!empty($fields)) { // Only if NOT empty. update_user_option($user_id, 's2member_custom_fields', $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. } foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action('ws_plugin__s2member_during_configure_user_registration_admin_side', get_defined_vars()); unset($__refs, $__v); } } } if ($processed === 'yes') { /** * If processed, all of these will have been defined by now. * * @var $role string Reference for IDEs. * @var $level string Reference for IDEs. * @var $ccaps string Reference for IDEs. * @var $auto_eot_time string|integer Reference for IDEs. * @var $fname string Reference for IDEs. * @var $lname string Reference for IDEs. * @var $name string Reference for IDEs. * @var $email string Reference for IDEs. * @var $login string Reference for IDEs. * @var $pass string Reference for IDEs. * @var $ip string Reference for IDEs. * @var $opt_in boolean Reference for IDEs. * @var $fields array Reference for IDEs. */ if ($urls = $GLOBALS['WS_PLUGIN__']['s2member']['o']['registration_notification_urls']) { foreach (preg_split('/[' . "\r\n\t" . ']+/', $urls) as $url) { // Notify each of the URLs. if ($url = preg_replace('/%%cv([0-9]+)%%/ei', 'urlencode(trim(@$cv[$1]))', $url)) { if ($url = preg_replace('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($role)), $url)) { if ($url = preg_replace('/%%level%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($level)), $url)) { if ($url = preg_replace('/%%ccaps%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($ccaps)), $url)) { if ($url = preg_replace('/%%auto_eot_time%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($auto_eot_time)), $url)) { if ($url = preg_replace('/%%user_first_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($fname)), $url)) { if ($url = preg_replace('/%%user_last_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($lname)), $url)) { if ($url = preg_replace('/%%user_full_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($name)), $url)) { if ($url = preg_replace('/%%user_email%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($email)), $url)) { if ($url = preg_replace('/%%user_login%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($login)), $url)) { if ($url = preg_replace('/%%user_pass%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($pass)), $url)) { if ($url = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($ip)), $url)) { if ($url = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user_id)), $url)) { foreach ($fields as $var => $val) { // Custom Fields. if (!($url = preg_replace('/%%' . preg_quote($var, '/') . '%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode(maybe_serialize($val))), $url))) { break; } } if ($url = trim(preg_replace('/%%(.+?)%%/i', '', $url))) { c_ws_plugin__s2member_utils_urls::remote($url); } } } } } } } } } } } } } } } } unset($urls, $url, $var, $val); // Housekeeping. if ($GLOBALS['WS_PLUGIN__']['s2member']['o']['registration_notification_recipients']) { $email_configs_were_on = c_ws_plugin__s2member_email_configs::email_config_status(); c_ws_plugin__s2member_email_configs::email_config_release(); $msg = $sbj = '(s2Member / API Notification Email) - Registration'; $msg .= "\n\n"; // Spacing in the message body. $msg .= 'role: %%role%%' . "\n"; $msg .= 'level: %%level%%' . "\n"; $msg .= 'ccaps: %%ccaps%%' . "\n"; $msg .= 'auto_eot_time: %%auto_eot_time%%' . "\n"; $msg .= 'user_first_name: %%user_first_name%%' . "\n"; $msg .= 'user_last_name: %%user_last_name%%' . "\n"; $msg .= 'user_full_name: %%user_full_name%%' . "\n"; $msg .= 'user_email: %%user_email%%' . "\n"; $msg .= 'user_login: %%user_login%%' . "\n"; $msg .= 'user_pass: %%user_pass%%' . "\n"; $msg .= 'user_ip: %%user_ip%%' . "\n"; $msg .= 'user_id: %%user_id%%' . "\n"; foreach ($fields as $var => $val) { $msg .= $var . ': %%' . $var . '%%' . "\n"; } $msg .= 'cv0: %%cv0%%' . "\n"; $msg .= 'cv1: %%cv1%%' . "\n"; $msg .= 'cv2: %%cv2%%' . "\n"; $msg .= 'cv3: %%cv3%%' . "\n"; $msg .= 'cv4: %%cv4%%' . "\n"; $msg .= 'cv5: %%cv5%%' . "\n"; $msg .= 'cv6: %%cv6%%' . "\n"; $msg .= 'cv7: %%cv7%%' . "\n"; $msg .= 'cv8: %%cv8%%' . "\n"; $msg .= 'cv9: %%cv9%%'; if ($msg = preg_replace('/%%cv([0-9]+)%%/ei', 'trim(@$cv[$1])', $msg)) { if ($msg = preg_replace('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($role), $msg)) { if ($msg = preg_replace('/%%level%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($level), $msg)) { if ($msg = preg_replace('/%%ccaps%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($ccaps), $msg)) { if ($msg = preg_replace('/%%auto_eot_time%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($auto_eot_time), $msg)) { if ($msg = preg_replace('/%%user_first_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($fname), $msg)) { if ($msg = preg_replace('/%%user_last_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($lname), $msg)) { if ($msg = preg_replace('/%%user_full_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($name), $msg)) { if ($msg = preg_replace('/%%user_email%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($email), $msg)) { if ($msg = preg_replace('/%%user_login%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($login), $msg)) { if ($msg = preg_replace('/%%user_pass%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($pass), $msg)) { if ($msg = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($ip), $msg)) { if ($msg = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $msg)) { foreach ($fields as $var => $val) { // Custom Fields. if (!($msg = preg_replace('/%%' . preg_quote($var, '/') . '%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(maybe_serialize($val)), $msg))) { break; } } if ($sbj && ($msg = trim(preg_replace('/%%(.+?)%%/i', '', $msg)))) { // Still have a ``$sbj`` and a ``$msg``? foreach (c_ws_plugin__s2member_utils_strings::parse_emails($GLOBALS['WS_PLUGIN__']['s2member']['o']['registration_notification_recipients']) as $recipient) { wp_mail($recipient, apply_filters('ws_plugin__s2member_registration_notification_email_sbj', $sbj, get_defined_vars()), apply_filters('ws_plugin__s2member_registration_notification_email_msg', $msg, get_defined_vars()), 'Content-Type: text/plain; charset=UTF-8'); } } } } } } } } } } } } } } } if ($email_configs_were_on) { // Back on? c_ws_plugin__s2member_email_configs::email_config(); } unset($sbj, $msg, $var, $val, $recipient, $email_configs_were_on); // Housekeeping. } if (!empty($GLOBALS['ws_plugin__s2member_registration_return_url']) && ($url = $GLOBALS['ws_plugin__s2member_registration_return_url'])) { if ($url = preg_replace('/%%cv([0-9]+)%%/ei', 'urlencode(trim(@$cv[$1]))', $url)) { if ($url = preg_replace('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($role)), $url)) { if ($url = preg_replace('/%%level%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($level)), $url)) { if ($url = preg_replace('/%%ccaps%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($ccaps)), $url)) { if ($url = preg_replace('/%%auto_eot_time%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($auto_eot_time)), $url)) { if ($url = preg_replace('/%%user_first_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($fname)), $url)) { if ($url = preg_replace('/%%user_last_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($lname)), $url)) { if ($url = preg_replace('/%%user_full_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($name)), $url)) { if ($url = preg_replace('/%%user_email%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($email)), $url)) { if ($url = preg_replace('/%%user_login%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($login)), $url)) { if ($url = preg_replace('/%%user_pass%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($pass)), $url)) { if ($url = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($ip)), $url)) { if ($url = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user_id)), $url)) { foreach ($fields as $var => $val) { // Custom Fields. if (!($url = preg_replace('/%%' . preg_quote($var, '/') . '%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode(maybe_serialize($val))), $url))) { break; } } if ($url = trim($url)) { // Preserve remaining Replacements; because the parent routine may perform replacements too. $GLOBALS['ws_plugin__s2member_registration_return_url'] = $url; } } } } } } } } } } } } } } } unset($url, $var, $val); // Housekeeping. c_ws_plugin__s2member_list_servers::process_list_servers($role, $level, $login, $pass, $email, $fname, $lname, $ip, $opt_in, TRUE, $user_id); /* Suppress errors here in case this routine is fired in unexpected locations; or with odd output buffering techniques. @TODO It may also be impossible to delete cookies when fired inside: `/wp-activate.php`. */ if (!headers_sent()) { @setcookie('s2member_subscr_gateway', '', time() + 31556926, COOKIEPATH, COOKIE_DOMAIN) . @setcookie('s2member_subscr_gateway', '', time() + 31556926, SITECOOKIEPATH, COOKIE_DOMAIN); @setcookie('s2member_subscr_id', '', time() + 31556926, COOKIEPATH, COOKIE_DOMAIN) . @setcookie('s2member_subscr_id', '', time() + 31556926, SITECOOKIEPATH, COOKIE_DOMAIN); @setcookie('s2member_custom', '', time() + 31556926, COOKIEPATH, COOKIE_DOMAIN) . @setcookie('s2member_custom', '', time() + 31556926, SITECOOKIEPATH, COOKIE_DOMAIN); @setcookie('s2member_item_number', '', time() + 31556926, COOKIEPATH, COOKIE_DOMAIN) . @setcookie('s2member_item_number', '', time() + 31556926, SITECOOKIEPATH, COOKIE_DOMAIN); } /* If debugging/logging is enabled; we need to append ``$reg_vars`` to the log file. Logging now supports Multisite Networking as well. */ $reg_vars = get_defined_vars(); // All defined vars. $reg_vars['_COOKIE'] = $_COOKIE; // Record cookies also. // No need to include these in the logs. Unset before log entry. unset($reg_vars['wpdb'], $reg_vars['current_site'], $reg_vars['current_blog']); c_ws_plugin__s2member_utils_logs::log_entry('reg-handler', $reg_vars); foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action('ws_plugin__s2member_during_configure_user_registration', get_defined_vars()); unset($__refs, $__v); } } } } } } } } foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action('ws_plugin__s2member_after_configure_user_registration', get_defined_vars()); unset($__refs, $__v); // Housekeeping. }
/** * Fills Replacement Codes in Special Redirection URLs. * * @package s2Member\Login_Redirects * @since 3.5 * * @param str $url A URL with possible Replacement Codes in it. * @param obj $user Optional. A `WP_User` object. Defaults to the current User, if logged-in. * @param bool $root_returns_false Defaults to false. True if the function should return false when a URL is reduced to the site root. * @return str|bool A Special Login Redirection URL with Replacement Codes having been parsed, or false if ``$root_returns_false = true`` and the URL is the site root. */ public static function fill_login_redirect_rc_vars($url = FALSE, $user = FALSE, $root_returns_false = FALSE) { foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action("ws_plugin__s2member_before_fill_login_redirect_rc_vars", get_defined_vars()); unset($__refs, $__v); $url = (string) $url; $orig_url = $url; $user = (is_object($user) || is_object($user = is_user_logged_in() ? wp_get_current_user() : false)) && !empty($user->ID) ? $user : false; $user_id = $user ? (string) $user->ID : ""; $user_login = $user ? (string) strtolower($user->user_login) : ""; $user_level = (string) c_ws_plugin__s2member_user_access::user_access_level($user); $user_role = (string) c_ws_plugin__s2member_user_access::user_access_role($user); $user_ccaps = (string) implode("-", c_ws_plugin__s2member_user_access::user_access_ccaps($user)); $user_logins = $user ? (string) (int) get_user_option("s2member_login_counter", $user_id) : "-1"; $url = preg_replace("/%%current_user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds($user_login), $url); $url = preg_replace("/%%current_user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds($user_id), $url); $url = preg_replace("/%%current_user_level%%/i", c_ws_plugin__s2member_utils_strings::esc_ds($user_level), $url); $url = preg_replace("/%%current_user_role%%/i", c_ws_plugin__s2member_utils_strings::esc_ds($user_role), $url); $url = preg_replace("/%%current_user_ccaps%%/i", c_ws_plugin__s2member_utils_strings::esc_ds($user_ccaps), $url); $url = preg_replace("/%%current_user_logins%%/i", c_ws_plugin__s2member_utils_strings::esc_ds($user_logins), $url); if ($url !== $orig_url && (!($parse = c_ws_plugin__s2member_utils_urls::parse_url($url, -1, false)) || !empty($parse["path"]) && strpos($parse["path"], "//") !== false)) { $url = site_url("/"); } if ($root_returns_false && c_ws_plugin__s2member_utils_conds::is_site_root($url)) { $url = false; } return apply_filters("ws_plugin__s2member_fill_login_redirect_rc_vars", $url, get_defined_vars()); }
/** * Configures all new Users. * * The Hook `user_register` is also fired by calling: * ``c_ws_plugin__s2member_registrations::ms_create_existing_user()`` and/or ``wpmu_create_user()``. * * This function also receives hand-offs from s2Member's handlers for these two Hooks: * `wpmu_activate_user` and `wpmu_activate_blog`. * * @package s2Member\Registrations * @since 3.5 * * @attaches-to ``add_action("user_register");`` * * @param int|string $user_id A numeric WordPress User ID. * @param string $password Optional in most cases. A User's plain text Password. If unspecified, attempts are made to collect the plain text Password from other sources. * @param array $meta Optional in most cases. Defaults to false. An array of meta data for a User/Member. * * @TODO Impossible to delete cookies when fired inside: `/wp-activate.php`? */ public static function configure_user_registration($user_id = FALSE, $password = FALSE, $meta = FALSE) { global $wpdb; global $pagenow; // We need this to detect the current administration page. global $current_site, $current_blog; // Adds support for Multisite Networking. static $email_config, $processed; // Static vars prevent duplicate processing. foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action("ws_plugin__s2member_before_configure_user_registration", get_defined_vars()); unset($__refs, $__v); // With Multisite Networking, we need this to run on `user_register` ahead of `wpmu_activate_[user|blog]`. if (!isset($email_config) && ($email_config = true)) { // Anytime this routine is fired; we configure email. c_ws_plugin__s2member_email_configs::email_config(); } // Configures `From:` email header. $_p = isset($_POST) ? $_POST : null; $rvs = isset($GLOBALS["ws_plugin__s2member_registration_vars"]) ? $GLOBALS["ws_plugin__s2member_registration_vars"] : null; if (!$processed) { if (is_array($_p) || is_array($meta) || is_array($rvs)) { if (!(is_multisite() && is_blog_admin() && $pagenow === "user-new.php" && isset($_p["noconfirmation"]) && is_super_admin() && !is_array($meta))) { if (!(preg_match("/\\/wp-activate\\.php/", $_SERVER["REQUEST_URI"]) && !is_array($meta))) { if (!(c_ws_plugin__s2member_utils_conds::bp_is_installed() && bp_is_activation_page() && !is_array($meta))) { if (!(c_ws_plugin__s2member_utils_conds::pro_is_installed() && c_ws_plugin__s2member_pro_remote_ops::is_remote_op("create_user") && !is_array($rvs))) { if ($user_id && is_object($user = new WP_User($user_id)) && !empty($user->ID) && ($user_id = $user->ID) && ($processed = true)) { settype($_p, "array") . settype($meta, "array") . settype($rvs, "array"); $_p = c_ws_plugin__s2member_utils_strings::trim_deep(stripslashes_deep($_p)); $meta = c_ws_plugin__s2member_utils_strings::trim_deep(stripslashes_deep($meta)); $rvs = c_ws_plugin__s2member_utils_strings::trim_deep($rvs); foreach ($_p as $_key => $_value) { // Scan ``$_p`` vars; adding `custom_reg_field` keys. if (preg_match("/^ws_plugin__s2member_user_new_/", $_key)) { // Look for keys. if ($_key = str_replace("_user_new_", "_custom_reg_field_", $_key)) { $_p[$_key] = $_value; } } } // Add each of these key conversions. unset($_key, $_value); if (!is_admin() && (isset($_p["ws_plugin__s2member_custom_reg_field_s2member_subscr_gateway"]) || isset($_p["ws_plugin__s2member_custom_reg_field_s2member_subscr_id"]) || isset($_p["ws_plugin__s2member_custom_reg_field_s2member_subscr_baid"]) || isset($_p["ws_plugin__s2member_custom_reg_field_s2member_subscr_cid"]) || isset($_p["ws_plugin__s2member_custom_reg_field_s2member_custom"]) || isset($_p["ws_plugin__s2member_custom_reg_field_s2member_ccaps"]) || isset($_p["ws_plugin__s2member_custom_reg_field_s2member_auto_eot_time"]) || isset($_p["ws_plugin__s2member_custom_reg_field_s2member_notes"]))) { exit(_x("s2Member security violation. You attempted to POST administrative variables that will NOT be trusted in a NON-administrative zone!", "s2member-front", "s2member")); } $_pmr = array_merge($_p, $meta, $rvs); // Merge all of these arrays together now, in this specific order. unset($_p, $meta, $rvs); // These variables can all be unset now; we have them all in the ``$_pmr`` array. $custom_reg_display_name = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_display_name"]; // Can be configured by the site owner. if (!is_admin() && (!c_ws_plugin__s2member_utils_conds::pro_is_installed() || !c_ws_plugin__s2member_pro_remote_ops::is_remote_op("create_user")) && ($reg_cookies = c_ws_plugin__s2member_register_access::reg_cookies_ok()) && extract($reg_cookies)) { /* This routine could be processed through `/wp-login.php?action=register`, `/wp-activate.php`, or `/activate` via BuddyPress`. This may also be processed through a standard BuddyPress installation, or another plugin calling `user_register`. If processed through `/wp-activate.php`, it could've originated inside the admin — via `/user-new.php`. */ $processed = "yes"; // Mark this as yes. $current_role = c_ws_plugin__s2member_user_access::user_access_role($user); @(list($level, $ccaps, $eotper) = preg_split("/\\:/", $item_number, 3)); $role = "s2member_level" . $level; // Membership Level. $email = $user->user_email; $login = $user->user_login; $ip = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_registration_ip"]; $ip = !$ip ? $_SERVER["REMOTE_ADDR"] : $ip; // Else use environment variable. $subscr_baid = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_subscr_baid"]; $subscr_cid = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_subscr_cid"]; $cv = preg_split("/\\|/", $custom); if (!($auto_eot_time = "") && $eotper) { // If a specific EOT Period is included. $auto_eot_time = c_ws_plugin__s2member_utils_time::auto_eot_time("", "", "", $eotper); } $notes = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_notes"]; $opt_in = !$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_opt_in"] ? true : false; $opt_in = !$opt_in && !empty($_pmr["ws_plugin__s2member_custom_reg_field_opt_in"]) ? true : $opt_in; if (!($fname = $user->first_name)) { if (!empty($_pmr["ws_plugin__s2member_custom_reg_field_first_name"])) { $fname = (string) $_pmr["ws_plugin__s2member_custom_reg_field_first_name"]; } } if (!$fname) { // Also try BuddyPress. if (!empty($_pmr["field_1"])) { // BuddyPress? $fname = trim(preg_replace("/ (.*)\$/", "", (string) $_pmr["field_1"])); } } if (!($lname = $user->last_name)) { if (!empty($_pmr["ws_plugin__s2member_custom_reg_field_last_name"])) { $lname = (string) $_pmr["ws_plugin__s2member_custom_reg_field_last_name"]; } } if (!$lname) { // Also try BuddyPress. if (!empty($_pmr["field_1"]) && preg_match("/^(.+?) (.+)\$/", (string) $_pmr["field_1"])) { $lname = trim(preg_replace("/^(.+?) (.+)\$/", "\$2", (string) $_pmr["field_1"])); } } if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_names"] && !$fname && $login) { $fname = trim($login); $lname = ""; } // Username and empty Last Name. $name = trim($fname . " " . $lname); // Both names. if (!($pass = $password)) { // Try s2Member's generator. if (!empty($GLOBALS["ws_plugin__s2member_generate_password_return"])) { $pass = (string) $GLOBALS["ws_plugin__s2member_generate_password_return"]; } } if (!$pass) { // Also try BuddyPress Password. if (!empty($_pmr["signup_password"])) { // BuddyPress? $pass = (string) $_pmr["signup_password"]; } } if ($pass) { !headers_sent() ? delete_user_setting("default_password_nag", $user_id) : null; update_user_option($user_id, "default_password_nag", false, true); } update_user_option($user_id, "s2member_registration_ip", $ip); update_user_option($user_id, "s2member_auto_eot_time", $auto_eot_time); update_user_option($user_id, "s2member_subscr_gateway", $subscr_gateway); update_user_option($user_id, "s2member_subscr_id", $subscr_id); update_user_option($user_id, "s2member_subscr_baid", $subscr_baid); update_user_option($user_id, "s2member_subscr_cid", $subscr_cid); update_user_option($user_id, "s2member_custom", $custom); update_user_option($user_id, "s2member_notes", $notes); if (!$user->first_name && $fname) { update_user_meta($user_id, "first_name", $fname); } if (!$user->last_name && $lname) { update_user_meta($user_id, "last_name", $lname); } if (!$user->display_name || $user->display_name === $user->user_login) { if ($custom_reg_display_name === "full" && $name) { wp_update_user(array("ID" => $user_id, "display_name" => $name)); } else { if ($custom_reg_display_name === "first" && $fname) { wp_update_user(array("ID" => $user_id, "display_name" => $fname)); } else { if ($custom_reg_display_name === "last" && $lname) { wp_update_user(array("ID" => $user_id, "display_name" => $lname)); } else { if ($custom_reg_display_name === "login" && $login) { wp_update_user(array("ID" => $user_id, "display_name" => $login)); } } } } } if (is_multisite()) { if (!is_main_site() && strtotime($user->user_registered) >= strtotime("-10 seconds")) { remove_user_from_blog($user_id, $current_site->blog_id); } // No Main Site Role. if (!get_user_meta($user_id, "s2member_originating_blog", true)) { // Recorded yet? update_user_meta($user_id, "s2member_originating_blog", $current_blog->blog_id); } } if ($current_role !== $role) { // Only if NOT the current Role. $user->set_role($role); } // s2Member. if ($ccaps && preg_match("/^-all/", str_replace("+", "", $ccaps))) { foreach ($user->allcaps as $cap => $cap_enabled) { if (preg_match("/^access_s2member_ccap_/", $cap)) { $user->remove_cap($ccap = $cap); } } } if ($ccaps && preg_replace("/^-all[\r\n\t\\s;,]*/", "", str_replace("+", "", $ccaps))) { foreach (preg_split("/[\r\n\t\\s;,]+/", preg_replace("/^-all[\r\n\t\\s;,]*/", "", str_replace("+", "", $ccaps))) as $ccap) { if (strlen($ccap = trim(strtolower(preg_replace("/[^a-z_0-9]/i", "", $ccap))))) { $user->add_cap("access_s2member_ccap_" . $ccap); } } } if (!($fields = array()) && $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($_pmr["ws_plugin__s2member_custom_reg_field_" . $field_var])) { $fields[$field_var] = $_pmr["ws_plugin__s2member_custom_reg_field_" . $field_var]; } } } unset($field, $field_var, $field_id_class); // Housekeeping. if (!empty($fields)) { // Only if NOT empty. update_user_option($user_id, "s2member_custom_fields", $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 (!is_multisite() && c_ws_plugin__s2member_utils_conds::bp_is_installed() && bp_is_register_page()) { update_user_option($user_id, "s2member_bp_activation_role", $role); update_user_option($user_id, "s2member_bp_activation_ccaps", c_ws_plugin__s2member_user_access::user_access_ccaps($user)); } if (($transient = "s2m_" . md5("s2member_transient_ipn_signup_vars_" . $subscr_id)) && is_array($ipn_signup_vars = get_transient($transient))) { update_user_option($user_id, "s2member_ipn_signup_vars", $ipn_signup_vars); // For future reference. delete_transient($transient); // This can be deleted now. } if (($transient = "s2m_" . md5("s2member_transient_ipn_subscr_payment_" . $subscr_id)) && is_array($subscr_payment = get_transient($transient)) && !empty($subscr_payment["subscr_gateway"])) { $proxy = array("s2member_paypal_proxy" => stripslashes((string) $subscr_payment["subscr_gateway"]), "s2member_paypal_proxy_verification" => c_ws_plugin__s2member_paypal_utilities::paypal_proxy_key_gen()); c_ws_plugin__s2member_utils_urls::remote(site_url("/?s2member_paypal_notify=1"), array_merge(stripslashes_deep($subscr_payment), $proxy), array("timeout" => 20)); delete_transient($transient); // This can be deleted now. } if (($transient = "s2m_" . md5("s2member_transient_ipn_subscr_eot_" . $subscr_id)) && is_array($subscr_eot = get_transient($transient)) && !empty($subscr_eot["subscr_gateway"])) { $proxy = array("s2member_paypal_proxy" => stripslashes((string) $subscr_eot["subscr_gateway"]), "s2member_paypal_proxy_verification" => c_ws_plugin__s2member_paypal_utilities::paypal_proxy_key_gen()); c_ws_plugin__s2member_utils_urls::remote(site_url("/?s2member_paypal_notify=1"), array_merge(stripslashes_deep($subscr_eot), $proxy), array("timeout" => 20)); delete_transient($transient); // This can be deleted now. } if (!headers_sent()) { // Only if headers are NOT yet sent. Here we establish both Signup and Payment Tracking Cookies. @setcookie("s2member_tracking", $s2member_tracking = c_ws_plugin__s2member_utils_encryption::encrypt($subscr_id), time() + 31556926, COOKIEPATH, COOKIE_DOMAIN) . @setcookie("s2member_tracking", $s2member_tracking, time() + 31556926, SITECOOKIEPATH, COOKIE_DOMAIN) . ($_COOKIE["s2member_tracking"] = $s2member_tracking); } foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action("ws_plugin__s2member_during_configure_user_registration_front_side_paid", get_defined_vars()); do_action("ws_plugin__s2member_during_configure_user_registration_front_side", get_defined_vars()); unset($__refs, $__v); } else { if (!is_admin() && (!c_ws_plugin__s2member_utils_conds::pro_is_installed() || !c_ws_plugin__s2member_pro_remote_ops::is_remote_op("create_user"))) { /* This routine could be processed through `/wp-login.php?action=register`, `/wp-activate.php`, or `/activate` via BuddyPress`. This may also be processed through a standard BuddyPress installation, or another plugin calling `user_register`. If processed through `/wp-activate.php`, it could've originated inside the admin, via `/user-new.php`. */ $processed = "yes"; // Mark this as yes. $current_role = c_ws_plugin__s2member_user_access::user_access_role($user); $role = ""; // Initialize ``$role`` to an empty string here, before processing. $role = !$role && ($level = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_level"]) > 0 ? "s2member_level" . $level : $role; $role = !$role && ($level = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_level"]) === "0" ? "subscriber" : $role; $role = !$role && $current_role ? $current_role : $role; // Use existing Role? $role = !$role ? get_option("default_role") : $role; // Otherwise default. $level = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_level"]; $level = !$level && preg_match("/^(administrator|editor|author|contributor)\$/i", $role) ? $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"] : $level; $level = !$level && preg_match("/^s2member_level[1-9][0-9]*\$/i", $role) ? preg_replace("/^s2member_level/", "", $role) : $level; $level = !$level && preg_match("/^subscriber\$/i", $role) ? "0" : $level; $level = !$level ? "0" : $level; $ccaps = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_ccaps"]; $email = $user->user_email; $login = $user->user_login; $ip = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_registration_ip"]; $ip = !$ip ? $_SERVER["REMOTE_ADDR"] : $ip; // Else use environment variable. $custom = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_custom"]; $subscr_id = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_subscr_id"]; $subscr_baid = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_subscr_baid"]; $subscr_cid = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_subscr_cid"]; $subscr_gateway = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_subscr_gateway"]; $cv = preg_split("/\\|/", (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_custom"]); $auto_eot_time = ($eot = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_auto_eot_time"]) ? strtotime($eot) : ""; $notes = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_notes"]; $opt_in = !$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_opt_in"] ? true : false; $opt_in = !$opt_in && !empty($_pmr["ws_plugin__s2member_custom_reg_field_opt_in"]) ? true : $opt_in; if (!($fname = $user->first_name)) { if (!empty($_pmr["ws_plugin__s2member_custom_reg_field_first_name"])) { $fname = (string) $_pmr["ws_plugin__s2member_custom_reg_field_first_name"]; } } if (!$fname) { // Also try BuddyPress. if (!empty($_pmr["field_1"])) { // BuddyPress? $fname = trim(preg_replace("/ (.*)\$/", "", (string) $_pmr["field_1"])); } } if (!($lname = $user->last_name)) { if (!empty($_pmr["ws_plugin__s2member_custom_reg_field_last_name"])) { $lname = (string) $_pmr["ws_plugin__s2member_custom_reg_field_last_name"]; } } if (!$lname) { // Also try BuddyPress. if (!empty($_pmr["field_1"]) && preg_match("/^(.+?) (.+)\$/", (string) $_pmr["field_1"])) { $lname = trim(preg_replace("/^(.+?) (.+)\$/", "\$2", (string) $_pmr["field_1"])); } } if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_names"] && !$fname && $login) { $fname = trim($login); $lname = ""; } // Username and empty Last Name. $name = trim($fname . " " . $lname); // Both names. if (!($pass = $password)) { // Try s2Member's generator. if (!empty($GLOBALS["ws_plugin__s2member_generate_password_return"])) { $pass = (string) $GLOBALS["ws_plugin__s2member_generate_password_return"]; } } if (!$pass) { // Also try BuddyPress Password. if (!empty($_pmr["signup_password"])) { // BuddyPress? $pass = (string) $_pmr["signup_password"]; } } if ($pass) { !headers_sent() ? delete_user_setting("default_password_nag", $user_id) : null; update_user_option($user_id, "default_password_nag", false, true); } update_user_option($user_id, "s2member_registration_ip", $ip); update_user_option($user_id, "s2member_auto_eot_time", $auto_eot_time); update_user_option($user_id, "s2member_subscr_gateway", $subscr_gateway); update_user_option($user_id, "s2member_subscr_id", $subscr_id); update_user_option($user_id, "s2member_subscr_baid", $subscr_baid); update_user_option($user_id, "s2member_subscr_cid", $subscr_cid); update_user_option($user_id, "s2member_custom", $custom); update_user_option($user_id, "s2member_notes", $notes); if (!$user->first_name && $fname) { update_user_meta($user_id, "first_name", $fname); } if (!$user->last_name && $lname) { update_user_meta($user_id, "last_name", $lname); } if (!$user->display_name || $user->display_name === $user->user_login) { if ($custom_reg_display_name === "full" && $name) { wp_update_user(array("ID" => $user_id, "display_name" => $name)); } else { if ($custom_reg_display_name === "first" && $fname) { wp_update_user(array("ID" => $user_id, "display_name" => $fname)); } else { if ($custom_reg_display_name === "last" && $lname) { wp_update_user(array("ID" => $user_id, "display_name" => $lname)); } else { if ($custom_reg_display_name === "login" && $login) { wp_update_user(array("ID" => $user_id, "display_name" => $login)); } } } } } if (is_multisite()) { if (!is_main_site() && strtotime($user->user_registered) >= strtotime("-10 seconds")) { remove_user_from_blog($user_id, $current_site->blog_id); } if (!get_user_meta($user_id, "s2member_originating_blog", true)) { update_user_meta($user_id, "s2member_originating_blog", $current_blog->blog_id); } } if ($current_role !== $role) { // Only if NOT the current Role. $user->set_role($role); } // s2Member. if ($ccaps && preg_match("/^-all/", str_replace("+", "", $ccaps))) { foreach ($user->allcaps as $cap => $cap_enabled) { if (preg_match("/^access_s2member_ccap_/", $cap)) { $user->remove_cap($ccap = $cap); } } } if ($ccaps && preg_replace("/^-all[\r\n\t\\s;,]*/", "", str_replace("+", "", $ccaps))) { foreach (preg_split("/[\r\n\t\\s;,]+/", preg_replace("/^-all[\r\n\t\\s;,]*/", "", str_replace("+", "", $ccaps))) as $ccap) { if (strlen($ccap = trim(strtolower(preg_replace("/[^a-z_0-9]/i", "", $ccap))))) { $user->add_cap("access_s2member_ccap_" . $ccap); } } } if (!($fields = array()) && $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($_pmr["ws_plugin__s2member_custom_reg_field_" . $field_var])) { $fields[$field_var] = $_pmr["ws_plugin__s2member_custom_reg_field_" . $field_var]; } } } unset($field, $field_var, $field_id_class); // Housekeeping. if (!empty($fields)) { // Only if NOT empty. update_user_option($user_id, "s2member_custom_fields", $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 (!is_multisite() && c_ws_plugin__s2member_utils_conds::bp_is_installed() && bp_is_register_page()) { update_user_option($user_id, "s2member_bp_activation_role", $role); update_user_option($user_id, "s2member_bp_activation_ccaps", c_ws_plugin__s2member_user_access::user_access_ccaps($user)); } foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action("ws_plugin__s2member_during_configure_user_registration_front_side_free", get_defined_vars()); do_action("ws_plugin__s2member_during_configure_user_registration_front_side", get_defined_vars()); unset($__refs, $__v); } else { if (is_blog_admin() && $pagenow === "user-new.php" || c_ws_plugin__s2member_utils_conds::pro_is_installed() && c_ws_plugin__s2member_pro_remote_ops::is_remote_op("create_user")) { // Can only be processed through `/user-new.php` in the Admin panel, or through Remote Op: `create_user`. $processed = "yes"; // Mark this as yes, to indicate that a routine was processed. $current_role = c_ws_plugin__s2member_user_access::user_access_role($user); $role = ""; // Initialize $role to an empty string here, before processing. $role = !$role && ($level = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_level"]) > 0 ? "s2member_level" . $level : $role; $role = !$role && ($level = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_level"]) === "0" ? "subscriber" : $role; $role = !$role && $current_role ? $current_role : $role; // Use existing Role? $role = !$role ? get_option("default_role") : $role; // Otherwise default. $level = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_level"]; $level = !$level && preg_match("/^(administrator|editor|author|contributor)\$/i", $role) ? $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"] : $level; $level = !$level && preg_match("/^s2member_level[1-9][0-9]*\$/i", $role) ? preg_replace("/^s2member_level/", "", $role) : $level; $level = !$level && preg_match("/^subscriber\$/i", $role) ? "0" : $level; $level = !$level ? "0" : $level; $ccaps = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_ccaps"]; $email = $user->user_email; $login = $user->user_login; $ip = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_registration_ip"]; $custom = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_custom"]; $subscr_id = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_subscr_id"]; $subscr_baid = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_subscr_baid"]; $subscr_cid = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_subscr_cid"]; $subscr_gateway = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_subscr_gateway"]; $cv = preg_split("/\\|/", (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_custom"]); $auto_eot_time = ($eot = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_auto_eot_time"]) ? strtotime($eot) : ""; $notes = (string) @$_pmr["ws_plugin__s2member_custom_reg_field_s2member_notes"]; $opt_in = !empty($_pmr["ws_plugin__s2member_custom_reg_field_opt_in"]) ? true : false; if (!($fname = $user->first_name)) { // `Users -› Add New`. if (!empty($_pmr["ws_plugin__s2member_custom_reg_field_first_name"])) { $fname = (string) $_pmr["ws_plugin__s2member_custom_reg_field_first_name"]; } } if (!($lname = $user->last_name)) { // `Users -› Add New`. if (!empty($_pmr["ws_plugin__s2member_custom_reg_field_last_name"])) { $lname = (string) $_pmr["ws_plugin__s2member_custom_reg_field_last_name"]; } } if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_names"] && !$fname && $login) { $fname = trim($login); $lname = ""; } // Username and empty Last Name. $name = trim($fname . " " . $lname); // Both names. if (!($pass = $password)) { // Try s2Member's generator. if (!empty($GLOBALS["ws_plugin__s2member_generate_password_return"])) { $pass = (string) $GLOBALS["ws_plugin__s2member_generate_password_return"]; } } if (!$pass) { // Also try the `Users -› Add New` form. if (!empty($_pmr["pass1"])) { // Field in `/user-new.php`. $pass = (string) $_pmr["pass1"]; } } if ($pass) { !headers_sent() ? delete_user_setting("default_password_nag", $user_id) : null; update_user_option($user_id, "default_password_nag", false, true); } update_user_option($user_id, "s2member_registration_ip", $ip); update_user_option($user_id, "s2member_auto_eot_time", $auto_eot_time); update_user_option($user_id, "s2member_subscr_gateway", $subscr_gateway); update_user_option($user_id, "s2member_subscr_id", $subscr_id); update_user_option($user_id, "s2member_subscr_baid", $subscr_baid); update_user_option($user_id, "s2member_subscr_cid", $subscr_cid); update_user_option($user_id, "s2member_custom", $custom); update_user_option($user_id, "s2member_notes", $notes); if (!$user->first_name && $fname) { update_user_meta($user_id, "first_name", $fname); } if (!$user->last_name && $lname) { update_user_meta($user_id, "last_name", $lname); } if (!$user->display_name || $user->display_name === $user->user_login) { if ($custom_reg_display_name === "full" && $name) { wp_update_user(array("ID" => $user_id, "display_name" => $name)); } else { if ($custom_reg_display_name === "first" && $fname) { wp_update_user(array("ID" => $user_id, "display_name" => $fname)); } else { if ($custom_reg_display_name === "last" && $lname) { wp_update_user(array("ID" => $user_id, "display_name" => $lname)); } else { if ($custom_reg_display_name === "login" && $login) { wp_update_user(array("ID" => $user_id, "display_name" => $login)); } } } } } if (is_multisite()) { if (!is_main_site() && strtotime($user->user_registered) >= strtotime("-10 seconds")) { remove_user_from_blog($user_id, $current_site->blog_id); } // No Main Site Role. if (!get_user_meta($user_id, "s2member_originating_blog", true)) { // Recorded yet? update_user_meta($user_id, "s2member_originating_blog", $current_blog->blog_id); } } if ($current_role !== $role) { // Only if NOT the current Role. $user->set_role($role); } // s2Member. if ($ccaps && preg_match("/^-all/", str_replace("+", "", $ccaps))) { foreach ($user->allcaps as $cap => $cap_enabled) { if (preg_match("/^access_s2member_ccap_/", $cap)) { $user->remove_cap($ccap = $cap); } } } if ($ccaps && preg_replace("/^-all[\r\n\t\\s;,]*/", "", str_replace("+", "", $ccaps))) { foreach (preg_split("/[\r\n\t\\s;,]+/", preg_replace("/^-all[\r\n\t\\s;,]*/", "", str_replace("+", "", $ccaps))) as $ccap) { if (strlen($ccap = trim(strtolower(preg_replace("/[^a-z_0-9]/i", "", $ccap))))) { $user->add_cap("access_s2member_ccap_" . $ccap); } } } if (!($fields = array()) && $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($_pmr["ws_plugin__s2member_custom_reg_field_" . $field_var])) { $fields[$field_var] = $_pmr["ws_plugin__s2member_custom_reg_field_" . $field_var]; } } } unset($field, $field_var, $field_id_class); // Housekeeping. if (!empty($fields)) { // Only if NOT empty. update_user_option($user_id, "s2member_custom_fields", $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. } foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action("ws_plugin__s2member_during_configure_user_registration_admin_side", get_defined_vars()); unset($__refs, $__v); } } } if ($processed === "yes") { if ($urls = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["registration_notification_urls"]) { foreach (preg_split("/[\r\n\t]+/", $urls) as $url) { // Notify each of the URLs. if ($url = preg_replace("/%%cv([0-9]+)%%/ei", 'urlencode(trim(@$cv[$1]))', $url)) { if ($url = preg_replace("/%%role%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($role)), $url)) { if ($url = preg_replace("/%%level%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($level)), $url)) { if ($url = preg_replace("/%%ccaps%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($ccaps)), $url)) { if ($url = preg_replace("/%%auto_eot_time%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($auto_eot_time)), $url)) { if ($url = preg_replace("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($fname)), $url)) { if ($url = preg_replace("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($lname)), $url)) { if ($url = preg_replace("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($name)), $url)) { if ($url = preg_replace("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($email)), $url)) { if ($url = preg_replace("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($login)), $url)) { if ($url = preg_replace("/%%user_pass%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($pass)), $url)) { if ($url = preg_replace("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($ip)), $url)) { if ($url = preg_replace("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user_id)), $url)) { foreach ($fields as $var => $val) { // Custom Fields. if (!($url = preg_replace("/%%" . preg_quote($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(urlencode(maybe_serialize($val))), $url))) { break; } } if ($url = trim(preg_replace("/%%(.+?)%%/i", "", $url))) { c_ws_plugin__s2member_utils_urls::remote($url); } } } } } } } } } } } } } } } } unset($urls, $url, $var, $val); // Housekeeping. if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["registration_notification_recipients"]) { $email_configs_were_on = c_ws_plugin__s2member_email_configs::email_config_status(); c_ws_plugin__s2member_email_configs::email_config_release(); $msg = $sbj = "(s2Member / API Notification Email) - Registration"; $msg .= "\n\n"; // Spacing in the message body. $msg .= "role: %%role%%\n"; $msg .= "level: %%level%%\n"; $msg .= "ccaps: %%ccaps%%\n"; $msg .= "auto_eot_time: %%auto_eot_time%%\n"; $msg .= "user_first_name: %%user_first_name%%\n"; $msg .= "user_last_name: %%user_last_name%%\n"; $msg .= "user_full_name: %%user_full_name%%\n"; $msg .= "user_email: %%user_email%%\n"; $msg .= "user_login: %%user_login%%\n"; $msg .= "user_pass: %%user_pass%%\n"; $msg .= "user_ip: %%user_ip%%\n"; $msg .= "user_id: %%user_id%%\n"; foreach ($fields as $var => $val) { $msg .= $var . ": %%" . $var . "%%\n"; } $msg .= "cv0: %%cv0%%\n"; $msg .= "cv1: %%cv1%%\n"; $msg .= "cv2: %%cv2%%\n"; $msg .= "cv3: %%cv3%%\n"; $msg .= "cv4: %%cv4%%\n"; $msg .= "cv5: %%cv5%%\n"; $msg .= "cv6: %%cv6%%\n"; $msg .= "cv7: %%cv7%%\n"; $msg .= "cv8: %%cv8%%\n"; $msg .= "cv9: %%cv9%%"; if ($msg = preg_replace("/%%cv([0-9]+)%%/ei", 'trim(@$cv[$1])', $msg)) { if ($msg = preg_replace("/%%role%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($role), $msg)) { if ($msg = preg_replace("/%%level%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($level), $msg)) { if ($msg = preg_replace("/%%ccaps%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($ccaps), $msg)) { if ($msg = preg_replace("/%%auto_eot_time%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($auto_eot_time), $msg)) { if ($msg = preg_replace("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($fname), $msg)) { if ($msg = preg_replace("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($lname), $msg)) { if ($msg = preg_replace("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($name), $msg)) { if ($msg = preg_replace("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($email), $msg)) { if ($msg = preg_replace("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($login), $msg)) { if ($msg = preg_replace("/%%user_pass%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($pass), $msg)) { if ($msg = preg_replace("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($ip), $msg)) { if ($msg = preg_replace("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $msg)) { foreach ($fields as $var => $val) { // Custom Fields. if (!($msg = preg_replace("/%%" . preg_quote($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(maybe_serialize($val)), $msg))) { break; } } if ($sbj && ($msg = trim(preg_replace("/%%(.+?)%%/i", "", $msg)))) { // Still have a ``$sbj`` and a ``$msg``? foreach (c_ws_plugin__s2member_utils_strings::parse_emails($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["registration_notification_recipients"]) as $recipient) { wp_mail($recipient, apply_filters("ws_plugin__s2member_registration_notification_email_sbj", $sbj, get_defined_vars()), apply_filters("ws_plugin__s2member_registration_notification_email_msg", $msg, get_defined_vars()), "Content-Type: text/plain; charset=UTF-8"); } } } } } } } } } } } } } } } if ($email_configs_were_on) { // Back on? c_ws_plugin__s2member_email_configs::email_config(); } unset($sbj, $msg, $var, $val, $recipient, $email_configs_were_on); // Housekeeping. } if (!empty($GLOBALS["ws_plugin__s2member_registration_return_url"]) && ($url = $GLOBALS["ws_plugin__s2member_registration_return_url"])) { if ($url = preg_replace("/%%cv([0-9]+)%%/ei", 'urlencode(trim(@$cv[$1]))', $url)) { if ($url = preg_replace("/%%role%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($role)), $url)) { if ($url = preg_replace("/%%level%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($level)), $url)) { if ($url = preg_replace("/%%ccaps%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($ccaps)), $url)) { if ($url = preg_replace("/%%auto_eot_time%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($auto_eot_time)), $url)) { if ($url = preg_replace("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($fname)), $url)) { if ($url = preg_replace("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($lname)), $url)) { if ($url = preg_replace("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($name)), $url)) { if ($url = preg_replace("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($email)), $url)) { if ($url = preg_replace("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($login)), $url)) { if ($url = preg_replace("/%%user_pass%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($pass)), $url)) { if ($url = preg_replace("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($ip)), $url)) { if ($url = preg_replace("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user_id)), $url)) { foreach ($fields as $var => $val) { // Custom Fields. if (!($url = preg_replace("/%%" . preg_quote($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_refs(urlencode(maybe_serialize($val))), $url))) { break; } } if ($url = trim($url)) { // Preserve remaining Replacements; because the parent routine may perform replacements too. $GLOBALS["ws_plugin__s2member_registration_return_url"] = $url; } } } } } } } } } } } } } } } unset($url, $var, $val); // Housekeeping. c_ws_plugin__s2member_list_servers::process_list_servers($role, $level, $login, $pass, $email, $fname, $lname, $ip, $opt_in, true, $user_id); /* Suppress errors here in case this routine is fired in unexpected locations; or with odd output buffering techniques. @todo It may also be impossible to delete cookies when fired inside: `/wp-activate.php`. */ if (!headers_sent()) { @setcookie("s2member_subscr_gateway", "", time() + 31556926, COOKIEPATH, COOKIE_DOMAIN) . @setcookie("s2member_subscr_gateway", "", time() + 31556926, SITECOOKIEPATH, COOKIE_DOMAIN); @setcookie("s2member_subscr_id", "", time() + 31556926, COOKIEPATH, COOKIE_DOMAIN) . @setcookie("s2member_subscr_id", "", time() + 31556926, SITECOOKIEPATH, COOKIE_DOMAIN); @setcookie("s2member_custom", "", time() + 31556926, COOKIEPATH, COOKIE_DOMAIN) . @setcookie("s2member_custom", "", time() + 31556926, SITECOOKIEPATH, COOKIE_DOMAIN); @setcookie("s2member_item_number", "", time() + 31556926, COOKIEPATH, COOKIE_DOMAIN) . @setcookie("s2member_item_number", "", time() + 31556926, SITECOOKIEPATH, COOKIE_DOMAIN); } /* If debugging/logging is enabled; we need to append ``$reg_vars`` to the log file. Logging now supports Multisite Networking as well. */ $reg_vars = get_defined_vars(); // All defined vars. // No need to include these in the logs. Unset before log entry. unset($reg_vars["wpdb"], $reg_vars["current_site"], $reg_vars["current_blog"]); $logt = c_ws_plugin__s2member_utilities::time_details(); $logv = c_ws_plugin__s2member_utilities::ver_details(); $logm = c_ws_plugin__s2member_utilities::mem_details(); $log4 = $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] . "\nUser-Agent: " . @$_SERVER["HTTP_USER_AGENT"]; $log4 = is_multisite() && !is_main_site() ? ($_log4 = $current_blog->domain . $current_blog->path) . "\n" . $log4 : $log4; $log2 = is_multisite() && !is_main_site() ? "reg-handler-4-" . trim(preg_replace("/[^a-z0-9]/i", "-", $_log4), "-") . ".log" : "reg-handler.log"; if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["gateway_debug_logs"]) { if (is_dir($logs_dir = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["logs_dir"])) { if (is_writable($logs_dir) && c_ws_plugin__s2member_utils_logs::archive_oversize_log_files()) { file_put_contents($logs_dir . "/" . $log2, "LOG ENTRY: " . $logt . "\n" . $logv . "\n" . $logm . "\n" . $log4 . "\n" . c_ws_plugin__s2member_utils_logs::conceal_private_info(var_export($reg_vars, true)) . "\n\n", FILE_APPEND); } } } unset($logt, $logv, $logm, $log4, $_log4, $log2, $logs_dir, $reg_vars); // Housekeeping. foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action("ws_plugin__s2member_during_configure_user_registration", get_defined_vars()); unset($__refs, $__v); } } } } } } } } foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action("ws_plugin__s2member_after_configure_user_registration", get_defined_vars()); unset($__refs, $__v); }
/** * Processes List Server removals for s2Member. * * @package s2Member\List_Servers * @since 3.5 * * @param string $role A WordPress Role ID/Name, such as `subscriber`, or `s2member_level1`. * @param int|string $level A numeric s2Member Access Level number. * @param string $login Username for the User. * @param string $pass Plain Text Password for the User. * @param string $email Email address for the User. * @param string $fname First Name for the User. * @param string $lname Last Name for the User. * @param string $ip IP Address for the User. * @param bool $opt_out Defaults to false; must be set to true. Indicates the User IS opting out. * @param int|string $user_id A WordPress User ID, numeric string or integer. * * @return bool True if at least one List Server is processed successfully, else false. * * @todo Integrate {@link https://labs.aweber.com/docs/php-library-walkthrough AWeber's API}. * @todo Add a separate option for mail debugging; or consolidate? * @todo Integrate AWeber API (much like the MailChimp API). */ public static function process_list_server_removals($role = '', $level = '', $login = '', $pass = '', $email = '', $fname = '', $lname = '', $ip = '', $opt_out = FALSE, $user_id = 0) { global $current_site, $current_blog; // For Multisite support. foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action('ws_plugin__s2member_before_process_list_server_removals', get_defined_vars()); unset($__refs, $__v); if (c_ws_plugin__s2member_list_servers::list_servers_integrated() && ($args = func_get_args()) && $role && is_string($role) && is_numeric($level) && $login && is_string($login) && is_string($pass = (string) $pass) && $email && is_string($email) && is_email($email) && is_string($fname = (string) $fname) && is_string($lname = (string) $lname) && is_string($ip = (string) $ip) && is_bool($opt_out = (bool) $opt_out) && $opt_out && $user_id && is_numeric($user_id) && is_object($user = new WP_User($user_id)) && !empty($user->ID)) { $ccaps = implode(',', c_ws_plugin__s2member_user_access::user_access_ccaps($user)); $email_configs_were_on = c_ws_plugin__s2member_email_configs::email_config_status(); c_ws_plugin__s2member_email_configs::email_config_release(); if (!empty($GLOBALS['WS_PLUGIN__']['s2member']['o']['mailchimp_api_key']) && !empty($GLOBALS['WS_PLUGIN__']['s2member']['o']['level' . $level . '_mailchimp_list_ids'])) { if (!class_exists('NC_MCAPI')) { // Include the MailChimp API Class here. include_once dirname(dirname(__FILE__)) . '/externals/mailchimp/nc-mcapi.inc.php'; } $mcapi = new NC_MCAPI($GLOBALS['WS_PLUGIN__']['s2member']['o']['mailchimp_api_key'], TRUE); foreach (preg_split('/[' . "\r\n\t" . ';,]+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['level' . $level . '_mailchimp_list_ids']) as $mailchimp_list) { $mailchimp = array('function' => __FUNCTION__, 'func_get_args' => $args, 'api_removal_method' => 'listUnsubscribe'); if ($mailchimp['list_id'] = trim(preg_replace('/\\:\\:.*$/', '', $mailchimp_list))) { if ($mailchimp['api_removal_response'] = $mcapi->{$mailchimp['api_removal_method']}($mailchimp['list_id'], $email, $mailchimp['api_removal_delete_member'] = apply_filters('ws_plugin__s2member_mailchimp_removal_delete_member', FALSE, get_defined_vars()), $mailchimp['api_removal_send_goodbye'] = apply_filters('ws_plugin__s2member_mailchimp_removal_send_goodbye', FALSE, get_defined_vars()), $mailchimp['api_removal_send_notify'] = apply_filters('ws_plugin__s2member_mailchimp_removal_send_notify', FALSE, get_defined_vars()))) { $mailchimp['api_removal_success'] = $removal_success = TRUE; } // Flag indicating that we DO have a successful removal; affects the function's overall return value. $mailchimp['api_removal_properties'] = $mcapi; // Include API instance too; as it contains some additional information after each method is processed (need this in the logs). $logt = c_ws_plugin__s2member_utilities::time_details(); $logv = c_ws_plugin__s2member_utilities::ver_details(); $logm = c_ws_plugin__s2member_utilities::mem_details(); $log4 = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . "\n" . 'User-Agent: ' . @$_SERVER['HTTP_USER_AGENT']; $log4 = is_multisite() && !is_main_site() ? ($_log4 = $current_blog->domain . $current_blog->path) . "\n" . $log4 : $log4; $log2 = is_multisite() && !is_main_site() ? 'mailchimp-api-4-' . trim(preg_replace('/[^a-z0-9]/i', '-', !empty($_log4) ? $_log4 : ''), '-') . '.log' : 'mailchimp-api.log'; if ($GLOBALS['WS_PLUGIN__']['s2member']['o']['gateway_debug_logs']) { if (is_dir($logs_dir = $GLOBALS['WS_PLUGIN__']['s2member']['c']['logs_dir'])) { if (is_writable($logs_dir) && c_ws_plugin__s2member_utils_logs::archive_oversize_log_files()) { file_put_contents($logs_dir . '/' . $log2, 'LOG ENTRY: ' . $logt . "\n" . $logv . "\n" . $logm . "\n" . $log4 . "\n" . c_ws_plugin__s2member_utils_logs::conceal_private_info(var_export($mailchimp, TRUE)) . "\n\n", FILE_APPEND); } } } } } } if (!empty($GLOBALS['WS_PLUGIN__']['s2member']['o']['getresponse_api_key']) && !empty($GLOBALS['WS_PLUGIN__']['s2member']['o']['level' . $level . '_getresponse_list_ids'])) { foreach (preg_split('/[' . "\r\n\t" . ';,]+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['level' . $level . '_getresponse_list_ids']) as $getresponse_list) { $getresponse = array('function' => __FUNCTION__, 'func_get_args' => $args, 'api_removal_method' => 'delete_contact'); if ($getresponse['list_id'] = $getresponse['list'] = trim($getresponse_list)) { $getresponse['api_method'] = 'get_contacts'; $getresponse['api_headers'] = array('Content-Type' => 'application/json'); $getresponse['api_params'] = array($GLOBALS['WS_PLUGIN__']['s2member']['o']['getresponse_api_key'], array('campaigns' => array($getresponse['list_id']), 'email' => array('EQUALS' => $email))); $getresponse['api_request'] = json_encode(array('method' => $getresponse['api_method'], 'params' => $getresponse['api_params'], 'id' => uniqid('', TRUE))); if (is_object($getresponse['api_response'] = json_decode(c_ws_plugin__s2member_utils_urls::remote('https://api2.getresponse.com', $getresponse['api_request'], array('headers' => $getresponse['api_headers'])))) && empty($getresponse['api_response']->error) && ($getresponse['api_response_contact_ids'] = array_keys((array) $getresponse['api_response']->result)) && ($getresponse['api_response_contact_id'] = $getresponse['api_response_contact_ids'][0])) { $getresponse['api_method'] = 'delete_contact'; // Update method now. $getresponse['api_params'] = array($GLOBALS['WS_PLUGIN__']['s2member']['o']['getresponse_api_key'], array('contact' => $getresponse['api_response_contact_id'])); $getresponse['api_request'] = json_encode(array('method' => $getresponse['api_method'], 'params' => $getresponse['api_params'], 'id' => uniqid('', TRUE))); if (is_object($getresponse['api_response'] = json_decode(c_ws_plugin__s2member_utils_urls::remote('https://api2.getresponse.com', $getresponse['api_request'], array('headers' => $getresponse['api_headers'])))) && empty($getresponse['api_response']->error) && $getresponse['api_response']->result->deleted) { $getresponse['api_success'] = $success = TRUE; } } $logt = c_ws_plugin__s2member_utilities::time_details(); $logv = c_ws_plugin__s2member_utilities::ver_details(); $logm = c_ws_plugin__s2member_utilities::mem_details(); $log4 = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . "\n" . 'User-Agent: ' . @$_SERVER['HTTP_USER_AGENT']; $log4 = is_multisite() && !is_main_site() ? ($_log4 = $current_blog->domain . $current_blog->path) . "\n" . $log4 : $log4; $log2 = is_multisite() && !is_main_site() ? 'getresponse-api-4-' . trim(preg_replace('/[^a-z0-9]/i', '-', !empty($_log4) ? $_log4 : ''), '-') . '.log' : 'getresponse-api.log'; if ($GLOBALS['WS_PLUGIN__']['s2member']['o']['gateway_debug_logs']) { if (is_dir($logs_dir = $GLOBALS['WS_PLUGIN__']['s2member']['c']['logs_dir'])) { if (is_writable($logs_dir) && c_ws_plugin__s2member_utils_logs::archive_oversize_log_files()) { file_put_contents($logs_dir . '/' . $log2, 'LOG ENTRY: ' . $logt . "\n" . $logv . "\n" . $logm . "\n" . $log4 . "\n" . c_ws_plugin__s2member_utils_logs::conceal_private_info(var_export($getresponse, TRUE)) . "\n\n", FILE_APPEND); } } } } } } if (!empty($GLOBALS['WS_PLUGIN__']['s2member']['o']['level' . $level . '_aweber_list_ids'])) { foreach (preg_split('/[' . "\r\n\t" . '\\s;,]+/', $GLOBALS['WS_PLUGIN__']['s2member']['o']['level' . $level . '_aweber_list_ids']) as $aweber_list) { $aweber = array('function' => __FUNCTION__, 'func_get_args' => $args, 'wp_mail_removal_method' => 'listUnsubscribe'); if ($aweber['list_id'] = trim($aweber_list)) { $aweber['removal_bcc'] = apply_filters('ws_plugin__s2member_aweber_removal_bcc', FALSE, get_defined_vars()); c_ws_plugin__s2member_email_configs::email_config(); // Email configs MUST be ON for removal requests. // The `From:` address MUST match AWeber account. See: <http://www.aweber.com/faq/questions/62/Can+I+Unsubscribe+People+Via+Email%3F>. if ($aweber['wp_mail_removal_response'] = wp_mail($aweber['list_id'] . '@aweber.com', $aweber['wp_mail_removal_sbj'] = apply_filters('ws_plugin__s2member_aweber_removal_sbj', 'REMOVE#' . $email . '#s2Member#' . $aweber['list_id'], get_defined_vars()), $aweber['wp_mail_removal_msg'] = 'REMOVE', $aweber['wp_mail_removal_headers'] = 'From: "' . preg_replace('/"/', "'", $GLOBALS['WS_PLUGIN__']['s2member']['o']['reg_email_from_name']) . '" <' . $GLOBALS['WS_PLUGIN__']['s2member']['o']['reg_email_from_email'] . '>' . ($aweber['removal_bcc'] ? "\r\n" . 'Bcc: ' . $aweber['removal_bcc'] : '') . "\r\n" . 'Content-Type: text/plain; charset=UTF-8')) { $aweber['wp_mail_removal_success'] = $removal_success = TRUE; } // Flag indicating that we DO have a successful removal; affects the function's overall return value. c_ws_plugin__s2member_email_configs::email_config_release(); $logt = c_ws_plugin__s2member_utilities::time_details(); $logv = c_ws_plugin__s2member_utilities::ver_details(); $logm = c_ws_plugin__s2member_utilities::mem_details(); $log4 = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . "\n" . 'User-Agent: ' . @$_SERVER['HTTP_USER_AGENT']; $log4 = is_multisite() && !is_main_site() ? ($_log4 = $current_blog->domain . $current_blog->path) . "\n" . $log4 : $log4; $log2 = is_multisite() && !is_main_site() ? 'aweber-api-4-' . trim(preg_replace('/[^a-z0-9]/i', '-', !empty($_log4) ? $_log4 : ''), '-') . '.log' : 'aweber-api.log'; if ($GLOBALS['WS_PLUGIN__']['s2member']['o']['gateway_debug_logs']) { if (is_dir($logs_dir = $GLOBALS['WS_PLUGIN__']['s2member']['c']['logs_dir'])) { if (is_writable($logs_dir) && c_ws_plugin__s2member_utils_logs::archive_oversize_log_files()) { file_put_contents($logs_dir . '/' . $log2, 'LOG ENTRY: ' . $logt . "\n" . $logv . "\n" . $logm . "\n" . $log4 . "\n" . c_ws_plugin__s2member_utils_logs::conceal_private_info(var_export($aweber, TRUE)) . "\n\n", FILE_APPEND); } } } } } } foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action('ws_plugin__s2member_during_process_list_server_removals', get_defined_vars()); unset($__refs, $__v); if ($email_configs_were_on) { c_ws_plugin__s2member_email_configs::email_config(); } if ($user_id) { update_user_option($user_id, 's2member_opt_in', '0'); } } foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action('ws_plugin__s2member_after_process_list_server_removals', get_defined_vars()); unset($__refs, $__v); return apply_filters('ws_plugin__s2member_process_list_server_removals', isset($removal_success) && $removal_success, get_defined_vars()); }
/** * Auto EOT time, else NPR (next payment time). * * @package s2Member\Utilities * @since 150713 * * @param int|string $user_id Optional. Defaults to the current User's ID. * @param bool $check_gateway Defaults to a true value. If this is false, it is only possible to return a fixed EOT time. * In other words, if this is false and there is no EOT time, empty values will be returned. Be careful with this, because not checking * the payment gateway can result in an inaccurate return value. Only set to false if you want to limit the check to a fixed hard-coded EOT time. * @param string $favor Defaults to a value of `fixed`; i.e., if a fixed EOT time is available, that is returned in favor of a next payment time. * You can set this to `next` if you'd like to favor a next payment time (when applicable) instead of returning a fixed EOT time. * * @return array An associative array of EOT details; with the following elements. * * - `type` One of `fixed` (a fixed EOT time), `next` (next payment time; i.e., an ongoing recurring subscription); or an empty string if there is no EOT for the user. * - `time` The timestamp (UTC time) that represents the EOT (End Of Term); else `0` if there is no EOT time. * - `tense` If time is now (or earlier) this will be `past`. If time is in the future, this will be `future`. If there is no time, this is an empty string. * - `debug` A string of details that explain to a developer what was returned. For debugging only. */ public static function get_user_eot($user_id = 0, $check_gateway = TRUE, $favor = 'fixed') { if (!($user_id = (int) $user_id)) { // Empty user ID in this call? $user_id = get_current_user_id(); } // Assume current user. if (!$favor || !in_array($favor, array('fixed', 'next'), TRUE)) { $favor = 'fixed'; } // Default behavior. $now = time(); // Current timestamp. $grace_time = (int) $GLOBALS['WS_PLUGIN__']['s2member']['o']['eot_grace_time']; $grace_time = (int) apply_filters('ws_plugin__s2member_eot_grace_time', $grace_time); $demotion_role = c_ws_plugin__s2member_option_forces::force_demotion_role('subscriber'); $empty_response = array('type' => '', 'time' => 0, 'tense' => '', 'debug' => ''); if (!$user_id || !($user = new WP_User($user_id)) || !$user->ID) { return array_merge($empty_response, array('debug' => 'Invalid user ID.')); } $ipn_signup_vars = self::get_user_ipn_signup_vars($user->ID); $subscr_gateway = (string) get_user_option('s2member_subscr_gateway', $user->ID); $subscr_id = (string) get_user_option('s2member_subscr_id', $user->ID); $subscr_cid = (string) get_user_option('s2member_subscr_cid', $user->ID); $last_auto_eot_time = (int) get_user_option('s2member_last_auto_eot_time', $user->ID); $auto_eot_time = (int) get_user_option('s2member_auto_eot_time', $user->ID); if ($auto_eot_time) { // They have a hard-coded EOT time at present? return array('type' => 'fixed', 'time' => $auto_eot_time, 'tense' => $auto_eot_time <= $now ? 'past' : 'future', 'debug' => 'This is a fixed EOT time recorded by s2Member. It can be altered in the WordPress Dashboard for this user.'); } if (!$subscr_gateway && !$subscr_id && !$subscr_cid && $last_auto_eot_time && (!user_can($user->ID, 'access_s2member_level1') || c_ws_plugin__s2member_user_access::user_access_role($user) === $demotion_role) && !c_ws_plugin__s2member_user_access::user_access_ccaps($user)) { return array('type' => 'fixed', 'time' => $last_auto_eot_time, 'tense' => $last_auto_eot_time <= $now ? 'past' : 'future', 'debug' => 'This is an archived/fixed EOT time recorded by s2Member; i.e., the date this customer\'s access expired.'); } if (!$subscr_gateway || !$subscr_id || !is_array($ipn_signup_vars) || !$ipn_signup_vars) { return array_merge($empty_response, array('debug' => 'This user has no subscription; i.e., missing `subscr_id`, `subscr_gateway` or `ipn_signup_vars`.')); } if (empty($ipn_signup_vars['txn_type']) || $ipn_signup_vars['txn_type'] !== 'subscr_signup') { return array_merge($empty_response, array('debug' => 'This user has no subscription; i.e., `txn_type` != `subscr_signup`.')); } $auto_eot_time = c_ws_plugin__s2member_utils_time::auto_eot_time($user->ID, $ipn_signup_vars['period1'], $ipn_signup_vars['period3']); if ($check_gateway) { switch ($subscr_gateway) { case 'paypal': // PayPal (PayPal Pro only). if (!c_ws_plugin__s2member_utils_conds::pro_is_installed() || !class_exists('c_ws_plugin__s2member_pro_paypal_utilities') || !$GLOBALS['WS_PLUGIN__']['s2member']['o']['paypal_api_username'] || !$GLOBALS['WS_PLUGIN__']['s2member']['o']['paypal_api_password'] || !$GLOBALS['WS_PLUGIN__']['s2member']['o']['paypal_api_signature']) { return array_merge($empty_response, array('debug' => 'PayPal Pro API credentials missing in your s2Member configuration.')); } if ($GLOBALS['WS_PLUGIN__']['s2member']['o']['paypal_payflow_api_username']) { if (!($api_response = c_ws_plugin__s2member_pro_paypal_utilities::payflow_get_profile($subscr_id)) || !empty($api_response['__error'])) { return array_merge($empty_response, array('debug' => 'No fixed EOT, and the PayPal Pro API says there is no subscription for this user.')); } if (preg_match('/^(?:Pending|PendingProfile)$/i', $api_response['STATUS'])) { return array_merge($empty_response, array('debug' => 'No fixed EOT, and the PayPal Pro API says the subscription for this user is currently pending changes. Unable to determine at this moment. Please try again in 15 minutes.')); } if (!preg_match('/^(?:Active|ActiveProfile)$/i', $api_response['STATUS'])) { return array('type' => 'fixed', 'time' => $auto_eot_time, 'tense' => $auto_eot_time <= $now ? 'past' : 'future', 'debug' => 'This is the estimated EOT time. The PayPal Pro API says this subscription is no longer active, and thus, access should be terminated at this time.'); } if ($api_response['TERM'] > 0 && $api_response['PAYMENTSLEFT'] <= 0) { return array('type' => 'fixed', 'time' => $auto_eot_time, 'tense' => $auto_eot_time <= $now ? 'past' : 'future', 'debug' => 'This is the estimated EOT time. The PayPal Pro API says this subscription has reached its last payment, and thus, access should be terminated at this time.'); } if ($api_response['TERM'] <= 0 || $api_response['PAYMENTSLEFT'] > 0) { if ($api_response['NEXTPAYMENT'] && strlen($api_response['NEXTPAYMENT']) === 8) { // MMDDYYYY format is not `strtotime()` compatible. if (($time = strtotime(substr($api_response['NEXTPAYMENT'], -4) . '-' . substr($api_response['NEXTPAYMENT'], 0, 2) . '-' . substr($api_response['NEXTPAYMENT'], 2, 2))) > $now) { return array('type' => 'next', 'time' => $time, 'tense' => $time <= $now ? 'past' : 'future', 'debug' => 'The PayPal Pro API says this is the next payment time.'); } } } } else { $api_args = array('METHOD' => 'GetRecurringPaymentsProfileDetails', 'PROFILEID' => $subscr_id); if (!($api_response = c_ws_plugin__s2member_paypal_utilities::paypal_api_response($api_args)) || !empty($api_response['__error'])) { return array_merge($empty_response, array('debug' => 'No fixed EOT, and the PayPal Pro API says there is no subscription for this user.')); } if (preg_match('/^(?:Pending|PendingProfile)$/i', $api_response['STATUS'])) { return array_merge($empty_response, array('debug' => 'No fixed EOT, and the PayPal Pro API says the subscription for this user is currently pending changes. Unable to determine at this moment. Please try again in 15 minutes.')); } if (!preg_match('/^(?:Active|ActiveProfile)$/i', $api_response['STATUS'])) { return array('type' => 'fixed', 'time' => $auto_eot_time, 'tense' => $auto_eot_time <= $now ? 'past' : 'future', 'debug' => 'This is the estimated EOT time. The PayPal Pro API says this subscription is no longer active, and thus, access should be terminated at this time.'); } if ($api_response['TOTALBILLINGCYCLES'] > 0 && $api_response['NUMCYCLESREMAINING'] <= 0) { return array('type' => 'fixed', 'time' => $auto_eot_time, 'tense' => $auto_eot_time <= $now ? 'past' : 'future', 'debug' => 'This is the estimated EOT time. The PayPal Pro API says this subscription has reached its last payment, and thus, access should be terminated at this time.'); } if ($api_response['TOTALBILLINGCYCLES'] <= 0 || $api_response['NUMCYCLESREMAINING'] > 0) { if ($api_response['NEXTBILLINGDATE'] && ($time = strtotime($api_response['NEXTBILLINGDATE'])) > $now) { return array('type' => 'next', 'time' => $time, 'tense' => $time <= $now ? 'past' : 'future', 'debug' => 'The PayPal Pro API says this is the next payment time.'); } } } return array_merge($empty_response, array('debug' => 'No fixed EOT, and there are no more payments needed from this user.')); break; // Break switch. // Break switch. case 'authnet': // Authorize.Net (EOT only; w/ limited functionality). if (!c_ws_plugin__s2member_utils_conds::pro_is_installed() || !class_exists('c_ws_plugin__s2member_pro_authnet_utilities') || !$GLOBALS['WS_PLUGIN__']['s2member']['o']['pro_authnet_api_login_id'] || !$GLOBALS['WS_PLUGIN__']['s2member']['o']['pro_authnet_api_trans_key']) { return array_merge($empty_response, array('debug' => 'Authorize.Net API credentials missing in your s2Member configuration.')); } $api_args = array('x_method' => 'status', 'x_subscription_id' => $subscr_id); if (!($api_response = c_ws_plugin__s2member_pro_authnet_utilities::authnet_arb_response($api_args)) || !empty($api_response['__error'])) { return array_merge($empty_response, array('debug' => 'No fixed EOT, and the Authorize.Net API says there is no subscription for this user.')); } if (!preg_match('/^(?:active)$/i', $api_response['subscription_status'])) { return array('type' => 'fixed', 'time' => $auto_eot_time, 'tense' => $auto_eot_time <= $now ? 'past' : 'future', 'debug' => 'This is the estimated EOT time. The Authorize.Net API says this subscription is no longer active, and thus, access should be terminated at this time.'); } // Next payment time not possible with Authorize.Net at this time. // Fixed recurring intervals not possible to query with Authorize.Net at this time. return array_merge($empty_response, array('debug' => 'Partially-supported payment gateway; unable to determine.')); break; // Break switch. // Break switch. case 'stripe': // Stripe payment gateway (best). if (!c_ws_plugin__s2member_utils_conds::pro_is_installed() || !class_exists('c_ws_plugin__s2member_pro_stripe_utilities') || !$GLOBALS['WS_PLUGIN__']['s2member']['o']['pro_stripe_api_publishable_key'] || !$GLOBALS['WS_PLUGIN__']['s2member']['o']['pro_stripe_api_secret_key']) { return array_merge($empty_response, array('debug' => 'Stripe API credentials missing in your s2Member configuration.')); } if (!$subscr_cid) { return array_merge($empty_response, array('debug' => 'No fixed EOT, and no `subscr_cid` on file. Unable to determine.')); } if (!is_object($stripe_subscription = c_ws_plugin__s2member_pro_stripe_utilities::get_customer_subscription($subscr_cid, $subscr_id)) || empty($stripe_subscription->id)) { return array_merge($empty_response, array('debug' => 'No fixed EOT, and the Stripe API says there is no subscription for this user.')); } if ((int) $stripe_subscription->ended_at > 0) { $time = $stripe_subscription->ended_at + $grace_time; return array('type' => 'fixed', 'time' => $time, 'tense' => $time <= $now ? 'past' : 'future', 'debug' => 'The Stripe API says this subscription reached an expiration on this date + grace time.'); } if (in_array($stripe_subscription->status, array('canceled', 'unpaid'), TRUE) || $stripe_subscription->cancel_at_period_end) { $time = $stripe_subscription->current_period_end + $grace_time; return array('type' => 'fixed', 'time' => $time, 'tense' => $time <= $now ? 'past' : 'future', 'debug' => 'The Stripe API says this subscription was cancelled, and thus, should EOT on this date + grace time.'); } if (isset($stripe_subscription->plan->metadata->recurring, $stripe_subscription->plan->metadata->recurring_times) && !$stripe_subscription->plan->metadata->recurring) { $time = (int) $stripe_subscription->start; $time += $stripe_subscription->plan->trial_period_days * DAY_IN_SECONDS; switch ($stripe_subscription->plan->interval) { case 'day': // Every X days in this case. $time += DAY_IN_SECONDS * $stripe_subscription->plan->interval_count * 1; break; // Break switch now. // Break switch now. case 'week': // Every X weeks in this case. $time += WEEK_IN_SECONDS * $stripe_subscription->plan->interval_count * 1; break; // Break switch now. // Break switch now. case 'month': // Every X months in this case. $time += WEEK_IN_SECONDS * 4 * $stripe_subscription->plan->interval_count * 1; break; // Break switch now. // Break switch now. case 'year': // Every X years in this case. $time += YEAR_IN_SECONDS * $stripe_subscription->plan->interval_count * 1; break; // Break switch now. } if ($favor === 'next' && $stripe_subscription->current_period_end + 1 < $time) { if ($stripe_subscription->current_period_end + 1 > $now) { $time = $stripe_subscription->current_period_end + 1; return array('type' => 'next', 'time' => $time, 'tense' => $time <= $now ? 'past' : 'future', 'debug' => 'The Stripe API says this is the next payment time.'); } return array_merge($empty_response, array('debug' => 'Stripe says no more payments needed from this user.')); } $time += $grace_time; // Now add grace to the final EOT time. return array('type' => 'fixed', 'time' => $time, 'tense' => $time <= $now ? 'past' : 'future', 'debug' => 'The Stripe API says this subscription will be completely over on this date + grace time.'); } if (isset($stripe_subscription->plan->metadata->recurring, $stripe_subscription->plan->metadata->recurring_times) && $stripe_subscription->plan->metadata->recurring && $stripe_subscription->plan->metadata->recurring_times <= 0) { if ($stripe_subscription->current_period_end + 1 > $now) { $time = $stripe_subscription->current_period_end + 1; return array('type' => 'next', 'time' => $time, 'tense' => $time <= $now ? 'past' : 'future', 'debug' => 'The Stripe API says this is the next payment time.'); } return array_merge($empty_response, array('debug' => 'Stripe says no more payments needed from this user.')); } if (isset($stripe_subscription->plan->metadata->recurring, $stripe_subscription->plan->metadata->recurring_times) && $stripe_subscription->plan->metadata->recurring && $stripe_subscription->plan->metadata->recurring_times > 0) { $time = (int) $stripe_subscription->start; $time += $stripe_subscription->plan->trial_period_days * DAY_IN_SECONDS; switch ($stripe_subscription->plan->interval) { case 'day': // Every X days in this case. $time += DAY_IN_SECONDS * $stripe_subscription->plan->interval_count * $stripe_subscription->plan->metadata->recurring_times; break; // Break switch now. // Break switch now. case 'week': // Every X weeks in this case. $time += WEEK_IN_SECONDS * $stripe_subscription->plan->interval_count * $stripe_subscription->plan->metadata->recurring_times; break; // Break switch now. // Break switch now. case 'month': // Every X months in this case. $time += WEEK_IN_SECONDS * 4 * $stripe_subscription->plan->interval_count * $stripe_subscription->plan->metadata->recurring_times; break; // Break switch now. // Break switch now. case 'year': // Every X years in this case. $time += YEAR_IN_SECONDS * $stripe_subscription->plan->interval_count * $stripe_subscription->plan->metadata->recurring_times; break; // Break switch now. } if ($favor === 'next' && $stripe_subscription->current_period_end + 1 < $time) { if ($stripe_subscription->current_period_end + 1 > $now) { $time = $stripe_subscription->current_period_end + 1; return array('type' => 'next', 'time' => $time, 'tense' => $time <= $now ? 'past' : 'future', 'debug' => 'The Stripe API says this is the next payment time.'); } return array_merge($empty_response, array('debug' => 'Stripe says no more payments needed from this user.')); } $time += $grace_time; // Now add grace to the final EOT time. return array('type' => 'fixed', 'time' => $time, 'tense' => $time <= $now ? 'past' : 'future', 'debug' => 'The Stripe API says this subscription will be completely over on this date + grace time.'); } if ($stripe_subscription->current_period_end + 1 > $now) { $time = $stripe_subscription->current_period_end + 1; return array('type' => 'next', 'time' => $time, 'tense' => $time <= $now ? 'past' : 'future', 'debug' => 'The Stripe API says this is the next payment time.'); } return array_merge($empty_response, array('debug' => 'No fixed EOT, and Stripe says there are no more payments needed from this user.')); break; // Break switch. // Break switch. case 'clickbank': // ClickBank (limited functionality). if (!c_ws_plugin__s2member_utils_conds::pro_is_installed() || !class_exists('c_ws_plugin__s2member_pro_clickbank_utilities') || !$GLOBALS['WS_PLUGIN__']['s2member']['o']['pro_clickbank_username'] || !$GLOBALS['WS_PLUGIN__']['s2member']['o']['pro_clickbank_clerk_key'] || !$GLOBALS['WS_PLUGIN__']['s2member']['o']['pro_clickbank_developer_key'] || !$GLOBALS['WS_PLUGIN__']['s2member']['o']['pro_clickbank_secret_key']) { return array_merge($empty_response, array('debug' => 'ClickBank API credentials missing in your s2Member configuration.')); } if (empty($ipn_signup_vars['txn_id'])) { // ClickBank receipt number. return array_merge($empty_response, array('debug' => 'No fixed EOT, and no `txn_id` on file. Unable to determine.')); } if (!($api_response = c_ws_plugin__s2member_pro_clickbank_utilities::clickbank_api_order($ipn_signup_vars['txn_id']))) { return array_merge($empty_response, array('debug' => 'No fixed EOT, and the ClickBank API says there is no subscription for this user.')); } if (!preg_match('/^(?:TEST_)?SALE$/i', $api_response['txnType']) || !$api_response['recurring']) { return array_merge($empty_response, array('debug' => 'No fixed EOT, and the ClickBank API says there is no recurring subscription for this user.')); } if (strcasecmp($api_response['status'], 'active') !== 0 || $api_response['futurePayments'] <= 0) { return array('type' => 'fixed', 'time' => $auto_eot_time, 'tense' => $auto_eot_time <= $now ? 'past' : 'future', 'debug' => 'This is the estimated EOT time. The ClickBank API says this subscription no longer active, or it has reached its last payment, and thus, access should be terminated at this time.'); } if ($api_response['nextPaymentDate'] && ($time = strtotime($api_response['nextPaymentDate'])) > $now) { return array('type' => 'next', 'time' => $time, 'tense' => $time <= $now ? 'past' : 'future', 'debug' => 'The ClickBank API says this is the next payment time.'); } return array_merge($empty_response, array('debug' => 'No fixed EOT, and there are no more payments needed from this user.')); break; // Break switch. // Break switch. default: // Default case handler. return array_merge($empty_response, array('debug' => 'Partially-supported payment gateway; unable to determine.')); } } return array_merge($empty_response, array('debug' => 'Payment gateway check disabled; unable to determine.')); }
/** * Fills Replacement Codes in Special Redirection URLs. * * @package s2Member\Login_Redirects * @since 3.5 * * @param string $url A URL with possible Replacement Codes in it. * @param object $user Optional. A `WP_User` object. Defaults to the current User, if logged-in. * @param bool $root_returns_false Defaults to false. True if the function should return false when a URL is reduced to the site root. * * @return string|bool A Special Login Redirection URL with Replacement Codes having been parsed, or false if ``$root_returns_false = true`` and the URL is the site root. */ public static function fill_login_redirect_rc_vars($url = '', $user = NULL, $root_returns_false = FALSE) { foreach (array_keys(get_defined_vars()) as $__v) { $__refs[$__v] =& ${$__v}; } do_action('ws_plugin__s2member_before_fill_login_redirect_rc_vars', get_defined_vars()); unset($__refs, $__v); // Housekeeping. $url = (string) $url; // Force ``$url`` to a string value. $orig_url = $url; // Record the original URL that was passed in. $user = (is_object($user) || is_object($user = wp_get_current_user())) && !empty($user->ID) ? $user : NULL; $user_id = $user ? (string) $user->ID : ''; $user_login = $user ? (string) strtolower($user->user_login) : ''; $user_nicename = $user ? (string) strtolower($user->user_nicename) : ''; $user_level = (string) c_ws_plugin__s2member_user_access::user_access_level($user); $user_role = (string) c_ws_plugin__s2member_user_access::user_access_role($user); $user_ccaps = (string) implode('-', c_ws_plugin__s2member_user_access::user_access_ccaps($user)); $user_logins = $user ? (string) (int) get_user_option('s2member_login_counter', $user_id) : '-1'; $url = preg_replace('/%%current_user_login%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user_login)), $url); $url = preg_replace('/%%current_user_nicename%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user_nicename)), $url); $url = preg_replace('/%%current_user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user_id)), $url); $url = preg_replace('/%%current_user_level%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user_level)), $url); $url = preg_replace('/%%current_user_role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user_role)), $url); $url = preg_replace('/%%current_user_ccaps%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user_ccaps)), $url); $url = preg_replace('/%%current_user_logins%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user_logins)), $url); if ($url !== $orig_url && (!($parse = c_ws_plugin__s2member_utils_urls::parse_url($url, -1, FALSE)) || !empty($parse['path']) && strpos($parse['path'], '//') !== FALSE)) { $url = home_url('/'); } // Defaults to Home Page. We don't return invalid URLs produced by empty Replacement Codes ( i.e., with `//` ). if ($root_returns_false && c_ws_plugin__s2member_utils_conds::is_site_root($url)) { // Used by s2Member's security gate. $url = FALSE; } // In case we need to return false on root URLs (i.e., don't protect the Home Page inadvertently). return apply_filters('ws_plugin__s2member_fill_login_redirect_rc_vars', $url, get_defined_vars()); }
protected static function fill_replacement_codes($user, $eot, &$recipients, &$subject, &$message) { $ipn_signup_vars = (array) c_ws_plugin__s2member_utils_users::get_user_ipn_signup_vars($user->ID); foreach (array('payer_email', 'first_name', 'last_name', 'subscr_id', 'subscr_cid', 'subscr_baid', 'subscr_gateway', 'currency', 'currency_symbol', 'initial', 'initial_term', 'regular', 'regular_term', 'recurring', 'item_name', 'item_number') as $_key) { if (isset($ipn_signup_vars[$_key])) { $_value = (string) $ipn_signup_vars[$_key]; $recipients = str_ireplace('%%' . $_key . '%%', $_value, $recipients); $subject = str_ireplace('%%' . $_key . '%%', $_value, $subject); $message = str_ireplace('%%' . $_key . '%%', $_value, $message); } } unset($_key, $_value); // Housekeeping. if (!empty($ipn_signup_vars['initial_term'])) { $initial_cycle = c_ws_plugin__s2member_utils_time::period_term($ipn_signup_vars['initial_term']); $recipients = str_ireplace('%%initial_cycle%%', $initial_cycle, $recipients); $subject = str_ireplace('%%initial_cycle%%', $initial_cycle, $subject); $message = str_ireplace('%%initial_cycle%%', $initial_cycle, $message); } if (!empty($ipn_signup_vars['regular_term'])) { if (!empty($ipn_signup_vars['recurring'])) { $regular_cycle = c_ws_plugin__s2member_utils_time::period_term($ipn_signup_vars['regular_term'], true); $recurring_regular_cycle = $ipn_signup_vars['recurring'] . ' / ' . c_ws_plugin__s2member_utils_time::period_term($ipn_signup_vars['regular_term'], true); } else { $regular_cycle = c_ws_plugin__s2member_utils_time::period_term($ipn_signup_vars['regular_term'], false); $recurring_regular_cycle = __('0 / non-recurring', 's2member-front', 's2member'); } $recipients = str_ireplace('%%regular_cycle%%', $regular_cycle, $recipients); $subject = str_ireplace('%%regular_cycle%%', $regular_cycle, $subject); $message = str_ireplace('%%regular_cycle%%', $regular_cycle, $message); $recipients = str_ireplace('%%recurring/regular_cycle%%', $recurring_regular_cycle, $recipients); $subject = str_ireplace('%%recurring/regular_cycle%%', $recurring_regular_cycle, $subject); $message = str_ireplace('%%recurring/regular_cycle%%', $recurring_regular_cycle, $message); } if (isset($ipn_signup_vars['first_name'], $ipn_signup_vars['last_name'])) { $full_name = trim($ipn_signup_vars['first_name'] . ' ' . $ipn_signup_vars['last_name']); $recipients = str_ireplace('%%full_name%%', $full_name, $recipients); $subject = str_ireplace('%%full_name%%', $full_name, $subject); $message = str_ireplace('%%full_name%%', $full_name, $message); } foreach (array('subscr_id', 'subscr_cid', 'subscr_baid', 'subscr_gateway') as $_key) { $_value = (string) get_user_option('s2member_' . $_key, $user->ID); $recipients = str_ireplace('%%' . $_key . '%%', $_value, $recipients); $subject = str_ireplace('%%' . $_key . '%%', $_value, $subject); $message = str_ireplace('%%' . $_key . '%%', $_value, $message); } unset($_key, $_value); // Housekeeping. foreach (array('ID', 'first_name', 'last_name', 'user_email', 'user_login') as $_property) { $_property_value = (string) $user->{$_property}; $_lc_property_wo_user_prefix = preg_replace('/^user_/i', '', strtolower($_property)); $recipients = str_ireplace('%%user_' . $_lc_property_wo_user_prefix . '%%', $_property_value, $recipients); $subject = str_ireplace('%%user_' . $_lc_property_wo_user_prefix . '%%', $_property_value, $subject); $message = str_ireplace('%%user_' . $_lc_property_wo_user_prefix . '%%', $_property_value, $message); } unset($_property, $_property_value, $_lc_property_wo_user_prefix); // Housekeeping. $first_name = $user->first_name; // If not yet filled above. $recipients = str_ireplace('%%first_name%%', $first_name, $recipients); $subject = str_ireplace('%%first_name%%', $first_name, $subject); $message = str_ireplace('%%first_name%%', $first_name, $message); $last_name = $user->last_name; // If not yet filled above. $recipients = str_ireplace('%%last_name%%', $last_name, $recipients); $subject = str_ireplace('%%last_name%%', $last_name, $subject); $message = str_ireplace('%%last_name%%', $last_name, $message); $full_name = trim($first_name . ' ' . $last_name); // Same here. $recipients = str_ireplace('%%full_name%%', $full_name, $recipients); $subject = str_ireplace('%%full_name%%', $full_name, $subject); $message = str_ireplace('%%full_name%%', $full_name, $message); $user_full_name = trim($user->first_name . ' ' . $user->last_name); $recipients = str_ireplace('%%user_full_name%%', $user_full_name, $recipients); $subject = str_ireplace('%%user_full_name%%', $user_full_name, $subject); $message = str_ireplace('%%user_full_name%%', $user_full_name, $message); $user_ip = get_user_option('s2member_registration_ip', $user->ID); $recipients = str_ireplace('%%user_ip%%', $user_ip, $recipients); $subject = str_ireplace('%%user_ip%%', $user_ip, $subject); $message = str_ireplace('%%user_ip%%', $user_ip, $message); $user_role = c_ws_plugin__s2member_user_access::user_access_role($user); $recipients = str_ireplace('%%user_role%%', $user_role, $recipients); $subject = str_ireplace('%%user_role%%', $user_role, $subject); $message = str_ireplace('%%user_role%%', $user_role, $message); $user_level = c_ws_plugin__s2member_user_access::user_access_level($user); $recipients = str_ireplace('%%user_level%%', $user_level, $recipients); $subject = str_ireplace('%%user_level%%', $user_level, $subject); $message = str_ireplace('%%user_level%%', $user_level, $message); $user_level_label = c_ws_plugin__s2member_user_access::user_access_label($user); $recipients = str_ireplace('%%user_level_label%%', $user_level_label, $recipients); $subject = str_ireplace('%%user_level_label%%', $user_level_label, $subject); $message = str_ireplace('%%user_level_label%%', $user_level_label, $message); $user_ccaps = implode(',', c_ws_plugin__s2member_user_access::user_access_ccaps($user)); $recipients = str_ireplace('%%user_ccaps%%', $user_ccaps, $recipients); $subject = str_ireplace('%%user_ccaps%%', $user_ccaps, $subject); $message = str_ireplace('%%user_ccaps%%', $user_ccaps, $message); if (is_array($fields = get_user_option('s2member_custom_fields', $user->ID))) { foreach ($fields as $_key => $_value) { $_serialized_value = maybe_serialize($_value); $recipients = str_ireplace('%%' . $_key . '%%', $_serialized_value, $recipients); $subject = str_ireplace('%%' . $_key . '%%', $_serialized_value, $subject); $message = str_ireplace('%%' . $_key . '%%', $_serialized_value, $message); } unset($_key, $_value, $_serialized_value); // Housekeeping. } foreach (preg_split('/\\|/', get_user_option('s2member_custom', $user->ID)) as $_key => $_value) { $recipients = str_ireplace('%%cv' . $_key . '%%', $_value, $recipients); $subject = str_ireplace('%%cv' . $_key . '%%', $_value, $subject); $message = str_ireplace('%%cv' . $_key . '%%', $_value, $message); } unset($_key, $_value); // Housekeeping. $eot_offset = get_option('gmt_offset') * HOUR_IN_SECONDS; $eot_local_time = $eot['time'] + $eot_offset; // `date_i18n()` $eot_date = date_i18n(get_option('date_format'), $eot_local_time); $recipients = str_ireplace('%%eot_date%%', $eot_date, $recipients); $subject = str_ireplace('%%eot_date%%', $eot_date, $subject); $message = str_ireplace('%%eot_date%%', $eot_date, $message); $eot_time = date_i18n(get_option('time_format'), $eot_local_time); $recipients = str_ireplace('%%eot_time%%', $eot_time, $recipients); $subject = str_ireplace('%%eot_time%%', $eot_time, $subject); $message = str_ireplace('%%eot_time%%', $eot_time, $message); $eot_tz = date_i18n('T', $eot_local_time); $recipients = str_ireplace('%%eot_tz%%', $eot_tz, $recipients); $subject = str_ireplace('%%eot_tz%%', $eot_tz, $subject); $message = str_ireplace('%%eot_tz%%', $eot_tz, $message); $eot_date_time_tz = $eot_date . ' ' . $eot_time . ' ' . $eot_tz; $recipients = str_ireplace('%%eot_date_time_tz%%', $eot_date_time_tz, $recipients); $subject = str_ireplace('%%eot_date_time_tz%%', $eot_date_time_tz, $subject); $message = str_ireplace('%%eot_date_time_tz%%', $eot_date_time_tz, $message); $eot_descriptive_time = c_ws_plugin__s2member_utils_time::approx_time_difference(self::$now, $eot['time'], 'floor'); $recipients = str_ireplace('%%eot_descriptive_time%%', $eot_descriptive_time, $recipients); $subject = str_ireplace('%%eot_descriptive_time%%', $eot_descriptive_time, $subject); $message = str_ireplace('%%eot_descriptive_time%%', $eot_descriptive_time, $message); // This allows developers to build a list of custom replacement codes if they'd like; using a WP filter. foreach (apply_filters('ws_plugin__s2member_pro_eot_reminder_email_custom_rcs', array(), get_defined_vars()) as $_custom_rc_key => $_custom_rc_value) { if (!is_string($_custom_rc_key) || !is_scalar($_custom_rc_value)) { continue; // Requires string key and scalar value. } $recipients = str_ireplace('%%' . $_custom_rc_key . '%%', (string) $_custom_rc_value, $recipients); $subject = str_ireplace('%%' . $_custom_rc_key . '%%', (string) $_custom_rc_value, $subject); $message = str_ireplace('%%' . $_custom_rc_key . '%%', (string) $_custom_rc_value, $message); } unset($_custom_rc_key, $_custom_rc_value); // Housekeeping. $recipients = trim(preg_replace('/%%(.+?)%%/i', '', $recipients)); // Remove remaining. $subject = trim(preg_replace('/%%(.+?)%%/i', '', $subject)); // Remove any remaining. $message = trim(preg_replace('/%%(.+?)%%/i', '', $message)); // Remove any remaining. if (!is_multisite() || !c_ws_plugin__s2member_utils_conds::is_multisite_farm() || is_main_site()) { // $evl_vars = get_defined_vars(); // Defined vars; minus primaries. unset($evl_vars['recipients'], $evl_vars['subject'], $evl_vars['message']); $recipients = c_ws_plugin__s2member_utilities::evl($recipients, $evl_vars); $subject = c_ws_plugin__s2member_utilities::evl($subject, $evl_vars); $message = c_ws_plugin__s2member_utilities::evl($message, $evl_vars); } }