PluginProbe
s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions / 261011
s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions v261011
261011 261001 260927 260917 260913 260909 260829 260814 260805 110710 110731 110812 110815 110912 110913 110915 110926 110927 111002 111003 111011 111017 111029 111105 111206 All 192 releases
s2member / src / includes / classes / profile-mods-in.inc.php

profile-mods-in.inc.php in s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions 261011, at src/includes/classes/profile-mods-in.inc.php

214 lines 12.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 // @codingStandardsIgnoreFile
3 /**
4 * s2Member Profile modifications (inner processing routines).
5 *
6 * Copyright: © 2009-2011
7 * {@link http://websharks-inc.com/ WebSharks, Inc.}
8 * (coded in the USA)
9 *
10 * Released under the terms of the GNU General Public License.
11 * You should have received a copy of the GNU General Public License,
12 * along with this software. In the main directory, see: /licensing/
13 * If not, see: {@link http://www.gnu.org/licenses/}.
14 *
15 * @package s2Member\Profiles
16 * @since 3.5
17 */
18 if(!defined('WPINC')) // MUST have WordPress.
19 exit('Do not access this file directly.');
20
21 if(!class_exists('c_ws_plugin__s2member_profile_mods_in'))
22 {
23 /**
24 * s2Member Profile modifications (inner processing routines).
25 *
26 * @package s2Member\Profiles
27 * @since 3.5
28 */
29 class c_ws_plugin__s2member_profile_mods_in
30 {
31 /**
32 * Handles Profile modifications.
33 *
34 * @package s2Member\Profiles
35 * @since 3.5
36 *
37 * @attaches-to ``add_action('init');``
38 */
39 public static function handle_profile_modifications()
40 {
41 global $current_user; // We'll need to update this global object.
42
43 $user = & $current_user; // Shorter reference to the $current_user object.
44
45 do_action('ws_plugin__s2member_before_handle_profile_modifications', get_defined_vars());
46
47 if(!empty($_POST['ws_plugin__s2member_profile_save']) && is_user_logged_in() && is_object($user) && !empty($user->ID) && ($user_id = $user->ID))
48 {
49 if(is_string($nonce = $_POST['ws_plugin__s2member_profile_save']) && wp_verify_nonce($nonce, 'ws-plugin--s2member-profile-save'))
50 {
51 $GLOBALS['ws_plugin__s2member_profile_saved'] = FALSE;
52 unset($GLOBALS['ws_plugin__s2member_profile_error']);
53
54 $_p = c_ws_plugin__s2member_utils_strings::trim_deep(stripslashes_deep($_POST)); // Clean ``$_POST`` vars.
55 $userdata = array('ID' => $user_id);
56 $profile_error = '';
57
58 //261006.0145 Account fields are scalar strings; custom profile fields may legitimately contain arrays.
59 foreach(array('email', 'password1', 'password2', 'first_name', 'last_name', 'display_name') as $account_field)
60 if(isset($_p['ws_plugin__s2member_profile_'.$account_field]) && !is_string($_p['ws_plugin__s2member_profile_'.$account_field]))
61 $profile_error = _x('Invalid profile field value.', 's2member-front', 's2member');
62
63 if(!$profile_error && !empty($_p['ws_plugin__s2member_profile_email']))
64 {
65 $email = $_p['ws_plugin__s2member_profile_email'];
66 if(!is_email($email))
67 $profile_error = _x('Please enter a valid email address.', 's2member-front', 's2member');
68 else if(($email_owner = email_exists($email)) && (int)$email_owner !== (int)$user_id)
69 $profile_error = _x('That email address is already in use.', 's2member-front', 's2member');
70 else if(strcasecmp($email, $user->user_email) !== 0)
71 {
72 //261006.0145 Email-domain validation applies only when the account email changes.
73 $profile_error = c_ws_plugin__s2member_registrations::registration_email_domain_validation_error($email);
74 $userdata['user_email'] = $email;
75 $email_change = $user->user_email;
76 }
77 }
78 if(!$profile_error && isset($_p['ws_plugin__s2member_profile_password1']) && $_p['ws_plugin__s2member_profile_password1'] !== '' && $user->user_login !== 'demo')
79 {
80 //261006.0145 Password changes require confirmation and the site's configured password policy on the server.
81 $password = $_p['ws_plugin__s2member_profile_password1'];
82 if(!isset($_p['ws_plugin__s2member_profile_password2']) || $password !== $_p['ws_plugin__s2member_profile_password2'])
83 $profile_error = _x('Please enter matching passwords.', 's2member-front', 's2member');
84 else if(strlen($password) < c_ws_plugin__s2member_user_securities::min_password_length())
85 $profile_error = sprintf(_x('Password must contain at least %d characters.', 's2member-front', 's2member'), c_ws_plugin__s2member_user_securities::min_password_length());
86 else if(c_ws_plugin__s2member_user_securities::password_strength_score($password) < c_ws_plugin__s2member_user_securities::min_password_strength_score())
87 $profile_error = _x('Password does not meet the configured minimum strength.', 's2member-front', 's2member');
88 else $userdata['user_pass'] = $password;
89 }
90
91 if(!empty($_p['ws_plugin__s2member_profile_first_name']))
92 $userdata['first_name'] = $_p['ws_plugin__s2member_profile_first_name'];
93
94 if(!empty($_p['ws_plugin__s2member_profile_display_name']))
95 $userdata['display_name'] = $_p['ws_plugin__s2member_profile_display_name'];
96
97 if(!empty($_p['ws_plugin__s2member_profile_last_name']))
98 $userdata['last_name'] = $_p['ws_plugin__s2member_profile_last_name'];
99
100 //261006.0145 Custom fields and post-save integrations run only after validation and a successful account update.
101 if(!$profile_error && is_wp_error($user_update = wp_update_user(wp_slash($userdata))))
102 $profile_error = $user_update->get_error_message();
103
104 if($profile_error)
105 {
106 $GLOBALS['ws_plugin__s2member_profile_error'] = $profile_error;
107 if(empty($_p['ws_plugin__s2member_sc_profile_save']))
108 {
109 echo '<script type="text/javascript">window.alert(\''.c_ws_plugin__s2member_utils_strings::esc_js_sq($profile_error).'\'); window.history.back();</script>'."\n";
110 exit();
111 }
112 do_action('ws_plugin__s2member_after_handle_profile_modifications', get_defined_vars());
113 return;
114 }
115 $GLOBALS['ws_plugin__s2member_profile_saved'] = TRUE;
116
117 if($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_fields'])
118 if($fields_applicable = c_ws_plugin__s2member_custom_reg_fields::custom_fields_configured_at_level('auto-detection', 'profile'))
119 {
120 $fields = array(); // Initialize the array of fields.
121 $_existing_fields = get_user_option('s2member_custom_fields', $user_id);
122
123 foreach(json_decode($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_fields'], TRUE) as $field)
124 {
125 $field_var = preg_replace('/[^a-z0-9]/i', '_', strtolower($field['id']));
126 $field_id_class = preg_replace('/_/', '-', $field_var);
127
128 if(!in_array($field['id'], $fields_applicable) || strpos($field['editable'], 'no') === 0)
129 {
130 if(isset($_existing_fields[$field_var]) && ((is_array($_existing_fields[$field_var]) && !empty($_existing_fields[$field_var])) || (is_string($_existing_fields[$field_var]) && strlen($_existing_fields[$field_var]))))
131 $fields[$field_var] = $_existing_fields[$field_var];
132 else unset($fields[$field_var]);
133 }
134 else if( // If the field is required but missing; or it was provided but invalid...
135 ($field['required'] === 'yes' && (!isset ($_p['ws_plugin__s2member_profile_'.$field_var])
136 || (!is_array($_p['ws_plugin__s2member_profile_'.$field_var]) && !is_string($_p['ws_plugin__s2member_profile_'.$field_var]))
137 || (is_array($_p['ws_plugin__s2member_profile_'.$field_var]) && empty($_p['ws_plugin__s2member_profile_'.$field_var]))
138 || (is_string($_p['ws_plugin__s2member_profile_'.$field_var]) && !strlen($_p['ws_plugin__s2member_profile_'.$field_var]))))
139 || (isset($_p['ws_plugin__s2member_profile_'.$field_var]) && c_ws_plugin__s2member_custom_reg_fields::validation_errors(array($field_var => $_p['ws_plugin__s2member_profile_'.$field_var]), array($field)))
140 )
141 {
142 if(isset($_existing_fields[$field_var]) && ((is_array($_existing_fields[$field_var]) && !empty($_existing_fields[$field_var])) || (is_string($_existing_fields[$field_var]) && strlen($_existing_fields[$field_var]))))
143 $fields[$field_var] = $_existing_fields[$field_var];
144 else unset($fields[$field_var]);
145 }
146 else if(isset($_p['ws_plugin__s2member_profile_'.$field_var]))
147 {
148 if(((is_array($_p['ws_plugin__s2member_profile_'.$field_var]) && !empty($_p['ws_plugin__s2member_profile_'.$field_var]))
149 || (is_string($_p['ws_plugin__s2member_profile_'.$field_var]) && strlen($_p['ws_plugin__s2member_profile_'.$field_var])))
150 && !c_ws_plugin__s2member_custom_reg_fields::validation_errors(array($field_var => $_p['ws_plugin__s2member_profile_'.$field_var]), array($field))
151 )
152 $fields[$field_var] = $_p['ws_plugin__s2member_profile_'.$field_var];
153 else unset($fields[$field_var]);
154 }
155 else unset($fields[$field_var]);
156 }
157 if(!empty($fields))
158 update_user_option($user_id, 's2member_custom_fields', $fields);
159 else // Else delete their Custom Fields?
160 delete_user_option($user_id, 's2member_custom_fields');
161 }
162 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
163 do_action('ws_plugin__s2member_during_handle_profile_modifications', get_defined_vars());
164 unset($__refs, $__v);
165
166 clean_user_cache($user_id);
167 wp_cache_delete($user_id, 'user_meta');
168 $user = new WP_User ($user_id); // Fresh object.
169 if(function_exists('setup_userdata')) setup_userdata();
170
171 //260829.0040 Give integrations a post-save point where s2Member custom fields are stored and the user's caches/object have been refreshed.
172 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
173 do_action('ws_plugin__s2member_during_handle_profile_modifications_after_user_refresh', get_defined_vars());
174 unset($__refs, $__v);
175
176 $role = c_ws_plugin__s2member_user_access::user_access_role($user);
177 $level = c_ws_plugin__s2member_user_access::user_access_role_to_level($role);
178
179 if(!empty($email_change) && $role && $level >= 0)
180 {
181 c_ws_plugin__s2member_list_servers::process_list_server_removals($role, $level, $user->user_login, ((!empty($userdata['user_pass'])) ? $userdata['user_pass'] : ''), $email_change, $user->first_name, $user->last_name, c_ws_plugin__s2member_utils_ip::current(), TRUE, $user_id);
182 }
183 if(!empty($_p['ws_plugin__s2member_profile_opt_in']) && $role && $level >= 0)
184 {
185 c_ws_plugin__s2member_list_servers::process_list_servers($role, $level, $user->user_login, ((!empty($userdata['user_pass'])) ? $userdata['user_pass'] : ''), $user->user_email, $user->first_name, $user->last_name, c_ws_plugin__s2member_utils_ip::current(), TRUE, TRUE, $user_id);
186 }
187 else if($role && $level >= 0 && $GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_opt_in'])
188 {
189 c_ws_plugin__s2member_list_servers::process_list_server_removals($role, $level, $user->user_login, ((!empty($userdata['user_pass'])) ? $userdata['user_pass'] : ''), $user->user_email, $user->first_name, $user->last_name, c_ws_plugin__s2member_utils_ip::current(), TRUE, $user_id);
190 }
191 $lwp = c_ws_plugin__s2member_login_redirects::login_redirection_url($user);
192 if(!$lwp)
193 {
194 //261006.0202 Profile saves fall back to the home page when no existing Login Welcome Page is configured.
195 $welcome_page_id = (int)$GLOBALS['WS_PLUGIN__']['s2member']['o']['login_welcome_page'];
196 $lwp = ($welcome_page_id > 0 && get_post($welcome_page_id)) ? get_page_link($welcome_page_id) : home_url('/');
197 }
198
199 if(empty($_p['ws_plugin__s2member_sc_profile_save']))
200 {
201 echo '<script type="text/javascript">'."\n";
202 echo "if(window.parent && window.parent != window) { window.parent.alert('".c_ws_plugin__s2member_utils_strings::esc_js_sq(_x('Profile updated successfully.', 's2member-front', 's2member'))."'); window.parent.location = '".c_ws_plugin__s2member_utils_strings::esc_js_sq($lwp)."'; }";
203 echo "else if(window.opener) { window.alert('".c_ws_plugin__s2member_utils_strings::esc_js_sq(_x('Profile updated successfully.', 's2member-front', 's2member'))."'); window.opener.location = '".c_ws_plugin__s2member_utils_strings::esc_js_sq($lwp)."'; window.close(); }";
204 echo "else { alert('".c_ws_plugin__s2member_utils_strings::esc_js_sq(_x('Profile updated successfully.', 's2member-front', 's2member'))."'); window.location = '".c_ws_plugin__s2member_utils_strings::esc_js_sq($lwp)."'; }";
205 echo '</script>'."\n";
206 exit();
207 }
208 }
209 }
210 do_action('ws_plugin__s2member_after_handle_profile_modifications', get_defined_vars());
211 }
212 }
213 }
214