PluginProbe
s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions / 260814
s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions v260814
260917 260913 260909 260829 260814 260805 110710 110731 110812 110815 110912 110913 110915 110926 110927 111002 111003 111011 111017 111029 111105 111206 111216 111220 120213 All 189 releases
s2member / src / includes / classes / registrations.inc.php

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

1,276 lines 74.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 // @codingStandardsIgnoreFile
3 /**
4 * Registration handlers.
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\Registrations
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_registrations'))
22 {
23 /**
24 * Registration handlers.
25 *
26 * @package s2Member\Registrations
27 * @since 3.5
28 */
29 class c_ws_plugin__s2member_registrations
30 {
31 /**
32 * Custom password; else randomly generated password.
33 *
34 * @package s2Member\Registrations
35 * @since 150826
36 *
37 * @param string $password Expects plain text pass.
38 *
39 * @return string Password.
40 */
41 public static function maybe_custom_pass(&$password)
42 {
43 $GLOBALS['ws_plugin__s2member_custom_password'] = ''; // Initialize.
44 $password = trim(stripslashes((string)$password));
45
46 if($password && $GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_password'])
47 {
48 $GLOBALS['ws_plugin__s2member_custom_password'] = $password;
49 return ($GLOBALS['ws_plugin__s2member_plain_text_pass'] = $GLOBALS['ws_plugin__s2member_custom_password']);
50 }
51 if($password && c_ws_plugin__s2member_utils_conds::pro_is_installed() && c_ws_plugin__s2member_pro_remote_ops::is_remote_op('create_user'))
52 {
53 $GLOBALS['ws_plugin__s2member_custom_password'] = $password;
54 return ($GLOBALS['ws_plugin__s2member_plain_text_pass'] = $GLOBALS['ws_plugin__s2member_custom_password']);
55 }
56 return ($GLOBALS['ws_plugin__s2member_plain_text_pass'] = wp_generate_password());
57 }
58
59 /**
60 * Filters WordPress-generated passwords.
61 *
62 * This can ONLY be fired through `/wp-login.php` on the front-side.
63 * Or through `/register` via BuddyPress.
64 *
65 * @package s2Member\Registrations
66 * @since 3.5
67 *
68 * @attaches-to ``add_filter('random_password');``
69 *
70 * @param string $password Expects a plain text password passed through by the filter.
71 *
72 * @return string Plain text password value.
73 */
74 public static function generate_password($password = '')
75 {
76 if (did_action('retrieve_password') || did_action('login_form_rp') || did_action('login_form_resetpass')) //260214
77 return $password;
78
79 static $did_generate_password = false; // Once only.
80
81 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
82 do_action('ws_plugin__s2member_before_generate_password', get_defined_vars());
83 unset($__refs, $__v); // Housekeeping.
84
85 $ci = $GLOBALS['WS_PLUGIN__']['s2member']['o']['ruris_case_sensitive'] ? '' : 'i';
86
87 if(!empty($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_password']) && !$did_generate_password && !is_admin() && ((preg_match('/\/wp-login\.php/'.$ci, $_SERVER['REQUEST_URI']) && did_action('login_form_register')) || (c_ws_plugin__s2member_utils_conds::bp_is_installed() && bp_is_register_page()))) //260214
88 {
89 $GLOBALS['ws_plugin__s2member_custom_wp_login_bp_password'] = false; // Initialize.
90
91 if(!empty($_POST['ws_plugin__s2member_custom_reg_field_user_pass1']) && preg_match('/\/wp-login\.php/'.$ci, $_SERVER['REQUEST_URI']))
92 {
93 $password = self::maybe_custom_pass($_POST['ws_plugin__s2member_custom_reg_field_user_pass1']);
94 $GLOBALS['ws_plugin__s2member_custom_wp_login_bp_password'] = !empty($GLOBALS['ws_plugin__s2member_custom_password']) && $password === $GLOBALS['ws_plugin__s2member_custom_password'];
95 }
96 $GLOBALS['ws_plugin__s2member_plain_text_wp_login_bp_pass'] = $password; // Plain-text password.
97 $GLOBALS['ws_plugin__s2member_plain_text_pass'] = $password; // Plain-text password.
98
99 remove_filter('random_password', 'c_ws_plugin__s2member_registrations::generate_password');
100 $did_generate_password = true; // One time only.
101 }
102 return apply_filters('ws_plugin__s2member_generate_password', $password, get_defined_vars());
103 }
104
105 /**
106 * Intersects with ``register_new_user()`` in the WordPress core.
107 *
108 * This function Filters registration errors inside `/wp-login.php` via ``register_new_user()``.
109 *
110 * This can ONLY be fired through `/wp-login.php` on the front-side.
111 *
112 * @package s2Member\Registrations
113 * @since 140518
114 *
115 * @attaches-to ``add_filter('registration_errors');``
116 *
117 * @param WP_Error $errors Expects a `WP_Error` object passed in by the Filter.
118 * @param string $user_login Expects the User's Username, passed in by the Filter.
119 * @param string $user_email Expects the User's Email Address, passed in by the Filter.
120 *
121 * @return WP_Error A `WP_Error` object instance.
122 */
123 public static function custom_registration_field_errors($errors = NULL, $user_login = '', $user_email = '')
124 {
125 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
126 do_action('ws_plugin__s2member_before_custom_registration_field_errors', get_defined_vars());
127 unset($__refs, $__v); // Housekeeping.
128
129 $ci = $GLOBALS['WS_PLUGIN__']['s2member']['o']['ruris_case_sensitive'] ? '' : 'i';
130
131 if(!is_admin() && preg_match('/\/wp-login\.php/'.$ci, $_SERVER['REQUEST_URI']))
132 if(is_wp_error($errors) && !empty($_POST) && is_array($_POST))
133 {
134 foreach(c_ws_plugin__s2member_utils_strings::trim_deep(stripslashes_deep($_POST)) as $_key => $_value)
135 if(strpos($_key, 'ws_plugin__s2member_custom_reg_field_') === 0)
136 $input[str_replace('ws_plugin__s2member_custom_reg_field_', '', $_key)] = $_value;
137
138 $fields_to_validate = c_ws_plugin__s2member_custom_reg_fields::custom_fields_configured_at_level('auto-detection', 'registration', TRUE);
139 $validation_errors = c_ws_plugin__s2member_custom_reg_fields::validation_errors(!empty($input) ? $input : array(), $fields_to_validate);
140
141 if($validation_errors) foreach($validation_errors as $_field_var => $_error)
142 $errors->add('custom_reg_field_'.$_field_var, $_error);
143 unset($_field_var, $_error);
144 }
145 return apply_filters('ws_plugin__s2member_custom_registration_field_errors', $errors, get_defined_vars());
146 }
147
148 /**
149 * Intersects with ``bp_core_screen_signup()`` in the BuddyPress core.
150 *
151 * This can ONLY be fired through `/register` via BuddyPress.
152 *
153 * @package s2Member\Registrations
154 * @since 140518
155 *
156 * @attaches-to ``add_action('bp_signup_validate');``
157 */
158 public static function custom_registration_field_errors_4bp()
159 {
160 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
161 do_action('ws_plugin__s2member_before_custom_registration_field_errors_4bp', get_defined_vars());
162 unset($__refs, $__v); // Housekeeping.
163
164 if(!is_admin() && c_ws_plugin__s2member_utils_conds::bp_is_installed() && bp_is_register_page())
165 if(in_array('registration', $GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_fields_4bp']))
166 if(apply_filters('ws_plugin__s2member_custom_registration_fields_4bp_display', TRUE, get_defined_vars()))
167 if(!empty($GLOBALS['bp']->signup) && is_object($GLOBALS['bp']->signup) && !empty($_POST) && is_array($_POST))
168 {
169 foreach(c_ws_plugin__s2member_utils_strings::trim_deep(stripslashes_deep($_POST)) as $_key => $_value)
170 if(strpos($_key, 'ws_plugin__s2member_custom_reg_field_') === 0)
171 $input[str_replace('ws_plugin__s2member_custom_reg_field_', '', $_key)] = $_value;
172
173 $fields_to_validate = c_ws_plugin__s2member_custom_reg_fields::custom_fields_configured_at_level('auto-detection', 'registration', TRUE);
174 $validation_errors = c_ws_plugin__s2member_custom_reg_fields::validation_errors(!empty($input) ? $input : array(), $fields_to_validate);
175
176 if($validation_errors) foreach($validation_errors as $_field_var => $_error)
177 $GLOBALS['bp']->signup->errors['custom_reg_field_'.$_field_var] = $_error;
178 unset($_field_var, $_error);
179 }
180 }
181
182 /**
183 * Filters Multisite User validation.
184 *
185 * This can ONLY be fired through `/wp-signup.php` on the front-side.
186 * Or through `/register` via BuddyPress.
187 *
188 * @package s2Member\Registrations
189 * @since 3.5
190 *
191 * @attaches-to ``add_filter('wpmu_validate_user_signup');``
192 *
193 * @param array $result Expects a ``$result`` array to be passed through by the Filter.
194 *
195 * @return array The Filtered ``$result`` array. Possibly containing errors introduced by s2Member.
196 */
197 public static function ms_validate_user_signup($result = array())
198 {
199 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
200 do_action('ws_plugin__s2member_before_ms_validate_user_signup', get_defined_vars());
201 unset($__refs, $__v); // Housekeeping.
202
203 $ci = $GLOBALS['WS_PLUGIN__']['s2member']['o']['ruris_case_sensitive'] ? '' : 'i';
204
205 if(is_multisite()) // This event should ONLY be processed with Multisite Networking.
206 if(!is_admin() && isset ($result['user_name'], $result['user_email'], $result['errors']) && ((preg_match('/\/wp-signup\.php/'.$ci, $_SERVER['REQUEST_URI']) && !empty($_POST['stage']) && preg_match('/^validate-(user|blog)-signup$/', (string)$_POST['stage'])) || (c_ws_plugin__s2member_utils_conds::bp_is_installed() && bp_is_register_page())))
207 {
208 $errors =& $result['errors'];
209 /** @var $errors WP_Error Reference for IDEs. Needed in the routines below. */
210
211 if(in_array($errors->get_error_code(), array('user_name', 'user_email', 'user_email_used')))
212 if(c_ws_plugin__s2member_utils_users::ms_user_login_email_exists_but_not_on_blog($result['user_name'], $result['user_email']))
213 {
214 unset($errors->errors['user_name'], $errors->errors['user_email'], $errors->errors['user_email_used']);
215 unset($errors->error_data['user_name'], $errors->error_data['user_email'], $errors->error_data['user_email_used']);
216 }
217 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
218 do_action('ws_plugin__s2member_during_ms_validate_user_signup', get_defined_vars());
219 unset($__refs, $__v); // Housekeeping.
220 }
221 return apply_filters('ws_plugin__s2member_ms_validate_user_signup', $result, get_defined_vars());
222 }
223
224 /**
225 * Adds hidden fields for ``$_POST`` vars on signup.
226 *
227 * This can ONLY be fired through `/wp-signup.php` on the front-side.
228 * Or through `/register` via BuddyPress.
229 *
230 * @package s2Member\Registrations
231 * @since 3.5
232 *
233 * @attaches-to ``add_filter('signup_hidden_fields');``
234 */
235 public static function ms_process_signup_hidden_fields()
236 {
237 do_action('ws_plugin__s2member_before_ms_process_signup_hidden_fields', get_defined_vars());
238
239 $ci = $GLOBALS['WS_PLUGIN__']['s2member']['o']['ruris_case_sensitive'] ? '' : 'i';
240
241 if(is_multisite()) // This event should ONLY be processed with Multisite Networking.
242 if(!is_admin() && !empty($_POST) && is_array($_POST) && ((preg_match('/\/wp-signup\.php/'.$ci, $_SERVER['REQUEST_URI']) && !empty($_POST['stage']) && preg_match('/^validate-(user|blog)-signup$/', (string)$_POST['stage'])) || (c_ws_plugin__s2member_utils_conds::bp_is_installed() && bp_is_register_page())))
243 {
244 foreach(c_ws_plugin__s2member_utils_strings::trim_deep(stripslashes_deep($_POST)) as $key => $value)
245 if(preg_match('/^ws_plugin__s2member_(custom_reg_field|user_new)_/', $key))
246 if($key = preg_replace('/_user_new_/', '_custom_reg_field_', $key))
247 echo '<input type="hidden" name="'.esc_attr($key).'" value="'.esc_attr(maybe_serialize($value)).'" />'."\n";
248
249 do_action('ws_plugin__s2member_during_ms_process_signup_hidden_fields', get_defined_vars());
250 }
251 do_action('ws_plugin__s2member_after_ms_process_signup_hidden_fields', get_defined_vars());
252 }
253
254 /**
255 * Adds Customs Fields to ``$meta`` on signup.
256 *
257 * This can ONLY be fired through `/wp-signup.php` on the front-side.
258 * Or possibly through `/user-new.php` in the admin.
259 * Or through `/register` via BuddyPress.
260 *
261 * @package s2Member\Registrations
262 * @since 3.5
263 *
264 * @attaches-to ``add_filter('add_signup_meta');``
265 * @attaches-to ``add_filter('bp_signup_usermeta');``
266 *
267 * @param array $meta Expects an array of meta-data to be passed in by the Filter.
268 *
269 * @return array Full ``$meta`` array with s2Member Custom Fields included.
270 */
271 public static function ms_process_signup_meta($meta = array())
272 {
273 global /* Multisite Networking. */
274 $current_site, $current_blog;
275 global $pagenow; // Need this to detect the current admin page.
276
277 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
278 do_action('ws_plugin__s2member_before_ms_process_signup_meta', get_defined_vars());
279 unset($__refs, $__v); // Housekeeping.
280
281 $ci = $GLOBALS['WS_PLUGIN__']['s2member']['o']['ruris_case_sensitive'] ? '' : 'i';
282
283 if(is_multisite()) // This event should ONLY be processed with Multisite Networking.
284 if(!empty($_POST) && is_array($_POST) && ((is_blog_admin() && $pagenow === 'user-new.php') || (!is_admin() && ((preg_match('/\/wp-signup\.php/'.$ci, $_SERVER['REQUEST_URI']) && !empty($_POST['stage']) && preg_match('/^validate-(user|blog)-signup$/', (string)$_POST['stage'])) || (c_ws_plugin__s2member_utils_conds::bp_is_installed() && bp_is_register_page())))))
285 {
286 c_ws_plugin__s2member_email_configs::email_config(); // Configures `From:` header used in notifications.
287
288 $meta['add_to_blog'] = (empty($meta['add_to_blog'])) ? $current_blog->blog_id : $meta['add_to_blog'];
289 $meta['new_role'] = (empty($meta['new_role'])) ? get_option('default_role') : $meta['new_role'];
290
291 foreach(c_ws_plugin__s2member_utils_strings::trim_deep(stripslashes_deep($_POST)) as $key => $value)
292 if(preg_match('/^ws_plugin__s2member_(custom_reg_field|user_new)_/', $key))
293 if($key = preg_replace('/_user_new_/', '_custom_reg_field_', $key))
294 $meta['s2member_ms_signup_meta'][$key] = c_ws_plugin__s2member_utils_arrays::maybe_unserialize($value);
295 }
296 return apply_filters('ws_plugin__s2member_ms_process_signup_meta', $meta, get_defined_vars());
297 }
298
299 /**
300 * Intersects with ``wpmu_activate_signup()`` through s2Member's Multisite Networking patch.
301 *
302 * This function should return the same array that `wpmu_activate_signup()` returns; with the assumption that ``$user_already_exists``.
303 * Which is exactly where this function intersects inside the `/wp-includes/ms-functions.php`.
304 *
305 * This can ONLY be fired through `/wp-activate.php` on the front-side.
306 * Or through `/activate` via BuddyPress.
307 *
308 * @package s2Member\Registrations
309 * @since 3.5
310 *
311 * @attaches-to ``add_filter('_wpmu_activate_existing_error_');``
312 *
313 * @param WP_Error $_error Expects a `WP_Error` object to be passed through by the Filter.
314 * @param array $vars Expects the defined variables from the scope of the calling Filter.
315 *
316 * @return WP_Error|array If unable to add an existing User, the original ``$_error`` obj is returned.
317 * Otherwise we return an array of User details for continued processing by the caller.
318 */
319 public static function ms_activate_existing_user($_error = NULL, $vars = array())
320 {
321 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
322 do_action('ws_plugin__s2member_before_ms_activate_existing_user', get_defined_vars());
323 unset($__refs, $__v); // Housekeeping.
324
325 extract($vars); // Extract all variables from ``wpmu_activate_signup()`` function.
326
327 $ci = $GLOBALS['WS_PLUGIN__']['s2member']['o']['ruris_case_sensitive'] ? '' : 'i';
328
329 if(is_multisite()) // This event should ONLY be processed with Multisite Networking.
330 if(!is_admin() && ((preg_match('/\/wp-activate\.php/'.$ci, $_SERVER['REQUEST_URI'])) || (c_ws_plugin__s2member_utils_conds::bp_is_installed() && bp_is_activation_page())))
331 {
332 if(!empty($user_id) && !empty($user_login) && !empty($user_email) && !empty($password) && !empty($meta) && !empty($meta['add_to_blog']) && !empty($meta['new_role']))
333 if(!empty($user_already_exists) && c_ws_plugin__s2member_utils_users::ms_user_login_email_exists_but_not_on_blog($user_login, $user_email, $meta['add_to_blog']))
334 {
335 add_user_to_blog($meta['add_to_blog'], $user_id, $meta['new_role']); // Add this User to the specified Blog.
336 wp_update_user(wp_slash(array('ID' => $user_id, 'user_pass' => $password))); // Update Password so it's the same as in the following msg.
337 wpmu_welcome_user_notification($user_id, $password, $meta); // Send welcome letter via email just like ``wpmu_activate_signup()`` does.
338
339 do_action('wpmu_activate_user', $user_id, $password, $meta); // Process Hook that would have been fired inside ``wpmu_activate_signup()``.
340
341 return apply_filters('ws_plugin__s2member_ms_activate_existing_user', array('user_id' => $user_id, 'password' => $password, 'meta' => $meta), get_defined_vars());
342 }
343 }
344 return apply_filters('ws_plugin__s2member_ms_activate_existing_user', $_error, get_defined_vars()); // Else, return the standardized error.
345 }
346
347 /**
348 * Configures new Users on a Multisite Network installation.
349 *
350 * This can ONLY be fired in the admin via `/user-new.php`.
351 * Or also during an actual activation; through `/wp-activate.php`.
352 * Or also during an actual activation; through `/activate` via BuddyPress.
353 *
354 * @package s2Member\Registrations
355 * @since 3.5
356 *
357 * @attaches-to ``add_action('wpmu_activate_user');``
358 *
359 * @param int|string $user_id A numeric WordPress User ID.
360 * @param string $password Plain text Password should be passed through by the Action Hook.
361 * @param array $meta Expects an array of ``$meta`` details, passed through by the Action Hook.
362 */
363 public static function configure_user_on_ms_user_activation($user_id = '', $password = '', $meta = array())
364 {
365 global $pagenow; // Detect the current admin page.
366
367 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
368 do_action('ws_plugin__s2member_before_configure_user_on_ms_user_activation', get_defined_vars());
369 unset($__refs, $__v); // Housekeeping.
370
371 $ci = $GLOBALS['WS_PLUGIN__']['s2member']['o']['ruris_case_sensitive'] ? '' : 'i';
372
373 if(is_multisite()) // This event should ONLY be processed with Multisite Networking.
374 if((is_blog_admin() && $pagenow === 'user-new.php' && isset ($_POST['noconfirmation'])) || (!is_admin() && ((preg_match('/\/wp-activate\.php/'.$ci, $_SERVER['REQUEST_URI'])) || (c_ws_plugin__s2member_utils_conds::bp_is_installed() && bp_is_activation_page()))))
375 {
376 c_ws_plugin__s2member_registrations::configure_user_registration($user_id, $password, ((isset ($meta['s2member_ms_signup_meta']) && is_array($meta['s2member_ms_signup_meta'])) ? $meta['s2member_ms_signup_meta'] : array()));
377 delete_user_meta($user_id, 's2member_ms_signup_meta');
378 }
379 do_action('ws_plugin__s2member_after_configure_user_on_ms_user_activation', get_defined_vars());
380 }
381
382 /**
383 * Configures new Users on a Multisite Network installation.
384 *
385 * This does NOT fire for a Super Admin managing Network Blogs.
386 * Actually it does; BUT it's blocked by the routine below.
387 * A Super Admin should NOT trigger this event.
388 *
389 * This function should ONLY be fired through `/wp-activate.php`.
390 * Or also through `/activate` via BuddyPress.
391 *
392 * @package s2Member\Registrations
393 * @since 3.5
394 *
395 * @attaches-to ``add_action('wpmu_activate_blog');``
396 *
397 * @param int|string $blog_id A numeric WordPress Blog ID.
398 * @param int|string $user_id A numeric WordPress User ID.
399 * @param string $password Plain text Password should be passed through by the Action Hook.
400 * @param string $title The title that a User chose during signup; for their new Blog on the Network.
401 * @param array $meta Expects an array of ``$meta`` details, passed through by the Action Hook.
402 */
403 public static function configure_user_on_ms_blog_activation($blog_id = '', $user_id = '', $password = '', $title = '', $meta = array())
404 {
405 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
406 do_action('ws_plugin__s2member_before_configure_user_on_ms_blog_activation', get_defined_vars());
407 unset($__refs, $__v); // Housekeeping.
408
409 $ci = $GLOBALS['WS_PLUGIN__']['s2member']['o']['ruris_case_sensitive'] ? '' : 'i';
410
411 if(is_multisite()) // This event should ONLY be processed with Multisite Networking.
412 if(!is_admin() && ((preg_match('/\/wp-activate\.php/'.$ci, $_SERVER['REQUEST_URI'])) || (c_ws_plugin__s2member_utils_conds::bp_is_installed() && bp_is_activation_page())))
413 {
414 c_ws_plugin__s2member_registrations::configure_user_registration($user_id, $password, ((isset ($meta['s2member_ms_signup_meta']) && is_array($meta['s2member_ms_signup_meta'])) ? $meta['s2member_ms_signup_meta'] : array()));
415 delete_user_meta($user_id, 's2member_ms_signup_meta');
416 }
417 do_action('ws_plugin__s2member_after_configure_user_on_ms_blog_activation', get_defined_vars());
418 }
419
420 /**
421 * Assigns the proper role/ccaps on BP user activation.
422 *
423 * @attaches-to `bp_core_activated_user`
424 *
425 * @param string|integer $user_id Passed in by hook.
426 */
427 public static function bp_user_activation($user_id)
428 {
429 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
430 do_action('ws_plugin__s2member_before_bp_user_activation', get_defined_vars());
431 unset($__refs, $__v); // Housekeeping.
432
433 if(is_multisite() || !$user_id) return; // Nothing to do.
434
435 $role = get_user_option('s2member_bp_activation_role', $user_id);
436 $ccaps = get_user_option('s2member_bp_activation_ccaps', $user_id);
437
438 delete_user_option($user_id, 's2member_bp_activation_role');
439 delete_user_option($user_id, 's2member_bp_activation_ccaps');
440
441 if($role && ($user = new WP_User($user_id)) && $user->ID)
442 {
443 $user->set_role($role);
444 if($ccaps && is_array($ccaps)) foreach($ccaps as $_ccap)
445 $user->add_cap('access_s2member_ccap_'.$_ccap);
446 unset($_ccap); // Housekeeping.
447 }
448 }
449
450 /**
451 * Intersects with ``register_new_user()`` through s2Member's Multisite Networking patch.
452 *
453 * This function Filters registration errors inside `/wp-login.php` via ``register_new_user()``.
454 * When an existing Multisite User is registering, this takes over registration processing.
455 *
456 * This can ONLY be fired through `/wp-login.php` on the front-side.
457 *
458 * @package s2Member\Registrations
459 * @since 3.5
460 *
461 * @attaches-to ``add_filter('registration_errors');``
462 *
463 * @param WP_Error $errors Expects a `WP_Error` object passed in by the Filter.
464 * @param string $user_login Expects the User's Username, passed in by the Filter.
465 * @param string $user_email Expects the User's Email Address, passed in by the Filter.
466 *
467 * @return WP_Error A `WP_Error` object, or exits script execution after handling registration redirection.
468 */
469 public static function ms_register_existing_user($errors = NULL, $user_login = '', $user_email = '')
470 {
471 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
472 do_action('ws_plugin__s2member_before_ms_register_existing_user', get_defined_vars());
473 unset($__refs, $__v); // Housekeeping.
474
475 /** @var $ms_errors WP_Error Reference for IDEs. This is needed below. */
476 $ci = $GLOBALS['WS_PLUGIN__']['s2member']['o']['ruris_case_sensitive'] ? '' : 'i';
477
478 if(is_multisite()) // This event should ONLY be processed with Multisite Networking.
479 if(!is_admin() && preg_match('/\/wp-login\.php/'.$ci, $_SERVER['REQUEST_URI']))
480 if(is_wp_error($errors) && $errors->get_error_codes()) // Errors?
481 {
482 if(($user_id = c_ws_plugin__s2member_utils_users::ms_user_login_email_exists_but_not_on_blog($user_login, $user_email)))
483 {
484 foreach($errors->get_error_codes() as $error_code)
485 if(!in_array($error_code, array('username_exists', 'email_exists')))
486 $other_important_errors_exist[] = $error_code;
487
488 if(empty($other_important_errors_exist)) // Only if/when NO other important errors exist already.
489 {
490 $user_pass = wp_generate_password(); // Generate password for this user.
491 $has_custom_password = !empty($GLOBALS['ws_plugin__s2member_custom_password'])
492 && $user_pass === $GLOBALS['ws_plugin__s2member_custom_password'];
493 c_ws_plugin__s2member_registrations::ms_create_existing_user($user_login, $user_email, $user_pass, $user_id);
494
495 update_user_option($user_id, 'default_password_nag', $has_custom_password ? false : true, true);
496
497 if (version_compare(get_bloginfo('version'), '4.3.1', '>='))
498 wp_new_user_notification($user_id, null, $has_custom_password ? 'admin' : 'both', $user_pass);
499 else if (version_compare(get_bloginfo('version'), '4.3', '>='))
500 wp_new_user_notification($user_id, $has_custom_password ? 'admin' : 'both', $user_pass);
501 else wp_new_user_notification($user_id, $user_pass);
502
503 $redirect_to = !empty($_REQUEST['redirect_to']) ? trim(stripslashes($_REQUEST['redirect_to'])) : FALSE;
504 $redirect_to = $redirect_to ? $redirect_to // Note: the `checkemail` message is translated if using custom passwords.
505 : add_query_arg('checkemail', urlencode('registered'), wp_login_url());
506
507 do_action('ws_plugin__s2member_during_ms_register_existing_user', get_defined_vars());
508
509 wp_safe_redirect($redirect_to).exit (); // Safe, like: ``register_new_user()``.
510 }
511 }
512 }
513 else if(($ms = wpmu_validate_user_signup($user_login, $user_email)) && isset ($ms['errors']) && is_wp_error($ms_errors = $ms['errors']) && $ms_errors->get_error_code())
514 $errors->add($ms_errors->get_error_code(), $ms_errors->get_error_message());
515
516 return apply_filters('ws_plugin__s2member_ms_register_existing_user', $errors, get_defined_vars());
517 }
518
519 /**
520 * For Multisite Networks, this function is used to add a User to an existing Blog; and to simulate ``wp_create_user()`` behavior.
521 *
522 * The ``$user_id`` value will be returned by this function, just like ``wp_create_user()`` does.
523 * This function will fire the Hook `user_register`.
524 *
525 * @package s2Member\Registrations
526 * @since 3.5
527 *
528 * @param string $user_login Expects the User's Username.
529 * @param string $user_email Expects the User's Email Address.
530 * @param string $user_pass Expects the User's plain text Password.
531 * @param int|string $user_id Optional. A numeric WordPress User ID.
532 * If unspecified, a lookup is performed with ``$user_login`` and ``$user_email``.
533 *
534 * @return int|false Returns numeric ``$user_id`` on success, else false on failure.
535 */
536 public static function ms_create_existing_user($user_login = '', $user_email = '', $user_pass = '', $user_id = '')
537 {
538 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
539 do_action('ws_plugin__s2member_before_ms_create_existing_user', get_defined_vars());
540 unset($__refs, $__v); // Housekeeping.
541
542 if(is_multisite()) // This event should ONLY be processed with Multisite Networking.
543 {
544 if(($user_id || ($user_id = c_ws_plugin__s2member_utils_users::ms_user_login_email_exists_but_not_on_blog($user_login, $user_email))) && $user_pass)
545 {
546 $role = get_option('default_role'); // Use default Role.
547 add_existing_user_to_blog(array('user_id' => $user_id, 'role' => $role)); // Add User.
548 wp_update_user(wp_slash(array('ID' => $user_id, 'user_pass' => $user_pass))); // Update to ``$user_pass``.
549
550 do_action('ws_plugin__s2member_during_ms_create_existing_user', get_defined_vars());
551 do_action('user_register', $user_id); // So s2Member knows a User is registering.
552
553 return apply_filters('ws_plugin__s2member_ms_create_existing_user', $user_id, get_defined_vars());
554 }
555 }
556 return apply_filters('ws_plugin__s2member_ms_create_existing_user', FALSE, get_defined_vars());
557 }
558
559 /**
560 * Configures all new Users.
561 *
562 * The Hook `user_register` is also fired by calling:
563 * ``c_ws_plugin__s2member_registrations::ms_create_existing_user()`` and/or ``wpmu_create_user()``.
564 *
565 * This function also receives hand-offs from s2Member's handlers for these two Hooks:
566 * `wpmu_activate_user` and `wpmu_activate_blog`.
567 *
568 * @package s2Member\Registrations
569 * @since 3.5
570 *
571 * @attaches-to ``add_action('user_register');``
572 *
573 * @param int|string $user_id A numeric WordPress User ID.
574 * @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.
575 * @param array $meta Optional in most cases. Defaults to false. An array of meta data for a User/Member.
576 *
577 * @TODO Impossible to delete cookies when fired inside: `/wp-activate.php`?
578 */
579 public static function configure_user_registration($user_id = '', $password = '', $meta = array())
580 {
581 global $wpdb; // Global database object reference.
582 global $pagenow; // We need this to detect the current administration page.
583 global $current_site, $current_blog; // Adds support for Multisite Networking.
584 static $email_config, $processed; // Static vars prevent duplicate processing.
585
586 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
587 do_action('ws_plugin__s2member_before_configure_user_registration', get_defined_vars());
588 unset($__refs, $__v); // Housekeeping.
589
590 // With Multisite Networking, we need this to run on `user_register` ahead of `wpmu_activate_[user|blog]`.
591 if(!isset ($email_config) && ($email_config = TRUE)) // Anytime this routine is fired; we configure email.
592 c_ws_plugin__s2member_email_configs::email_config(); // Configures `From:` email header.
593
594 $_p = (isset ($_POST)) ? $_POST : NULL; // Grab global ``$_POST`` array here, if it's possible to do so.
595 $rvs = (isset ($GLOBALS['ws_plugin__s2member_registration_vars'])) ? $GLOBALS['ws_plugin__s2member_registration_vars'] : NULL;
596
597 if(!$processed /* Process only once. Safeguard this routine against duplicate processing via plugins (or even WordPress itself). */)
598
599 if(is_array($_p) || is_array($meta) || is_array($rvs) /* We MUST have at least ONE of these three arrays. Any of these will do in most cases. */)
600
601 if(!(is_multisite() && is_blog_admin() && $pagenow === 'user-new.php' && isset ($_p['noconfirmation']) && is_super_admin() && !is_array($meta)))
602 if(!(preg_match('/\/wp-activate\.php/', $_SERVER['REQUEST_URI']) && !is_array($meta)) /* If activating; we absolutely MUST have a ``$meta`` array. */)
603 if(!(c_ws_plugin__s2member_utils_conds::bp_is_installed() && bp_is_activation_page() && !is_array($meta)) /* If activating; MUST have ``$meta``. */)
604 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)))
605
606 if($user_id && is_object($user = new WP_User ($user_id)) && !empty($user->ID) && ($user_id = $user->ID) && ($processed = TRUE))
607 {
608 settype($_p, 'array').settype($meta, 'array').settype($rvs, 'array'); // Force arrays here.
609
610 $_p = c_ws_plugin__s2member_utils_strings::trim_deep(stripslashes_deep($_p));
611 $meta = c_ws_plugin__s2member_utils_strings::trim_deep(stripslashes_deep($meta));
612 $rvs = c_ws_plugin__s2member_utils_strings::trim_deep($rvs /* Do NOT strip. */);
613
614 foreach($_p as $_key => $_value) // Scan ``$_p`` vars; adding `custom_reg_field` keys.
615 if(preg_match('/^ws_plugin__s2member_user_new_/', $_key)) // Look for keys.
616 if($_key = str_replace('_user_new_', '_custom_reg_field_', $_key))
617 $_p[$_key] = $_value; // Add each of these key conversions.
618 unset ($_key, $_value /* Just a little housekeeping here. */);
619
620 if(!is_admin()
621 && (isset ($_p['ws_plugin__s2member_custom_reg_field_s2member_subscr_gateway'])
622 || isset ($_p['ws_plugin__s2member_custom_reg_field_s2member_subscr_id'])
623 || isset ($_p['ws_plugin__s2member_custom_reg_field_s2member_subscr_baid'])
624 || isset ($_p['ws_plugin__s2member_custom_reg_field_s2member_subscr_cid'])
625 || isset ($_p['ws_plugin__s2member_custom_reg_field_s2member_custom'])
626 || isset ($_p['ws_plugin__s2member_custom_reg_field_s2member_level']) //240321
627 || isset ($_p['ws_plugin__s2member_custom_reg_field_s2member_ccaps'])
628 || isset ($_p['ws_plugin__s2member_custom_reg_field_s2member_auto_eot_time'])
629 || isset ($_p['ws_plugin__s2member_custom_reg_field_s2member_notes']))
630 )
631 exit (_x('s2Member security violation. You attempted to POST administrative variables that will NOT be trusted in a NON-administrative zone!', 's2member-front', 's2member'));
632
633 $_pmr = array_merge($_p, $meta, $rvs); // Merge all of these arrays together now, in this specific order.
634 unset($_p, $meta, $rvs); // These variables can all be unset now; we have them all in the ``$_pmr`` array.
635
636 $custom_reg_display_name = $GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_display_name']; // Can be configured by the site owner.
637
638 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))
639 { /* This routine could be processed through `/wp-login.php?action=register`, `/wp-activate.php`, or `/activate` via BuddyPress`.
640 This may also be processed through a standard BuddyPress installation, or another plugin calling `user_register`.
641 If processed through `/wp-activate.php`, it could've originated inside the admin—via `/user-new.php`. */
642 /**
643 * @var $subscr_gateway string Reference for IDEs.
644 * @var $subscr_id string Reference for IDEs.
645 * @var $custom string Reference for IDEs.
646 * @var $item_number string Reference for IDEs.
647 */
648 $processed = 'yes'; // Mark this as yes.
649
650 $current_role = c_ws_plugin__s2member_user_access::user_access_role($user);
651 @list ($level, $ccaps, $eotper) = preg_split('/\:/', $item_number, 3);
652 $role = 's2member_level'.$level; // Membership Level.
653
654 $email = $user->user_email;
655 $login = $user->user_login;
656 $ip = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_registration_ip'];
657 $ip = (!$ip) ? c_ws_plugin__s2member_utils_ip::current() : $ip;
658 $subscr_baid = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_baid'];
659 $subscr_cid = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_cid'];
660
661 if(!($auto_eot_time = '') && $eotper) // If a specific EOT Period is included.
662 $auto_eot_time = c_ws_plugin__s2member_utils_time::auto_eot_time('', '', '', $eotper);
663
664 $notes = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_notes'];
665
666 $opt_in = (!$GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_opt_in']) ? TRUE : FALSE;
667 $opt_in = (!$opt_in && !empty($_pmr['ws_plugin__s2member_custom_reg_field_opt_in'])) ? TRUE : $opt_in;
668
669 if(!($fname = $user->first_name))
670 if(!empty($_pmr['ws_plugin__s2member_custom_reg_field_first_name']))
671 $fname = (string)$_pmr['ws_plugin__s2member_custom_reg_field_first_name'];
672
673 if(!$fname) // Also try BuddyPress.
674 if(!empty($_pmr['field_1'])) // BuddyPress?
675 $fname = trim(preg_replace('/ (.*)$/', '', (string)$_pmr['field_1']));
676
677 if(!($lname = $user->last_name))
678 if(!empty($_pmr['ws_plugin__s2member_custom_reg_field_last_name']))
679 $lname = (string)$_pmr['ws_plugin__s2member_custom_reg_field_last_name'];
680
681 if(!$lname) // Also try BuddyPress.
682 if(!empty($_pmr['field_1']) && preg_match('/^(.+?) (.+)$/', (string)$_pmr['field_1']))
683 $lname = trim(preg_replace('/^(.+?) (.+)$/', '$2', (string)$_pmr['field_1']));
684
685 if($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_names'] && !$fname && $login)
686 {
687 $fname = trim($login);
688 $lname = ''; // Username and empty Last Name.
689 }
690 $name = trim($fname.' '.$lname); // Both names.
691
692 if(!($pass = $password)) // Try s2Member's generator.
693 if(!empty($GLOBALS['ws_plugin__s2member_plain_text_pass']))
694 $pass = (string)$GLOBALS['ws_plugin__s2member_plain_text_pass'];
695
696 if(!$pass) // Also try BuddyPress Password.
697 if(!empty($_pmr['signup_password'])) // BuddyPress?
698 $pass = (string)$_pmr['signup_password'];
699
700 if($pass) // No Password nag. Update this globally.
701 {
702 (!headers_sent()) ? delete_user_setting('default_password_nag', $user_id) : NULL;
703 update_user_option($user_id, 'default_password_nag', FALSE, TRUE);
704 }
705 update_user_option($user_id, 's2member_registration_ip', $ip);
706 update_user_option($user_id, 's2member_auto_eot_time', $auto_eot_time);
707 update_user_option($user_id, 's2member_subscr_gateway', $subscr_gateway);
708 update_user_option($user_id, 's2member_subscr_id', $subscr_id);
709 update_user_option($user_id, 's2member_subscr_baid', $subscr_baid);
710 update_user_option($user_id, 's2member_subscr_cid', $subscr_cid);
711 update_user_option($user_id, 's2member_custom', $custom);
712 update_user_option($user_id, 's2member_notes', $notes);
713
714 if(!$user->first_name && $fname)
715 update_user_meta($user_id, 'first_name', $fname);
716
717 if(!$user->last_name && $lname)
718 update_user_meta($user_id, 'last_name', $lname);
719
720 if(!$user->display_name || $user->display_name === $user->user_login)
721 {
722 if($custom_reg_display_name === 'full' && $name)
723 wp_update_user(wp_slash(array('ID' => $user_id, 'display_name' => $name)));
724 else if($custom_reg_display_name === 'first' && $fname)
725 wp_update_user(wp_slash(array('ID' => $user_id, 'display_name' => $fname)));
726 else if($custom_reg_display_name === 'last' && $lname)
727 wp_update_user(wp_slash(array('ID' => $user_id, 'display_name' => $lname)));
728 else if($custom_reg_display_name === 'login' && $login)
729 wp_update_user(wp_slash(array('ID' => $user_id, 'display_name' => $login)));
730 }
731 if(is_multisite()) // Should we handle Main Site permissions and Originating Blog ID#?
732 {
733 if(!is_main_site() && strtotime($user->user_registered) >= strtotime('-10 seconds'))
734 remove_user_from_blog($user_id, $current_site->blog_id); // No Main Site Role.
735
736 if(!get_user_meta($user_id, 's2member_originating_blog', TRUE)) // Recorded yet?
737 update_user_meta($user_id, 's2member_originating_blog', $current_blog->blog_id);
738 }
739 if($current_role !== $role) // Only if NOT the current Role.
740 $user->set_role($role); // s2Member.
741
742 if($ccaps && preg_match('/^-all/', str_replace('+', '', $ccaps)))
743 foreach($user->allcaps as $cap => $cap_enabled)
744 if(preg_match('/^access_s2member_ccap_/', $cap))
745 $user->remove_cap($ccap = $cap);
746
747 if($ccaps && preg_replace('/^-all['."\r\n\t".'\s;,]*/', '', str_replace('+', '', $ccaps)))
748 foreach(preg_split('/['."\r\n\t".'\s;,]+/', preg_replace('/^-all['."\r\n\t".'\s;,]*/', '', str_replace('+', '', $ccaps))) as $ccap)
749 if(strlen($ccap = trim(strtolower(preg_replace('/[^a-z_0-9]/i', '', $ccap)))))
750 $user->add_cap('access_s2member_ccap_'.$ccap);
751
752 if(!($fields = array()) && $GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_fields'])
753 foreach(json_decode($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_fields'], TRUE) as $field)
754 {
755 $field_var = preg_replace('/[^a-z0-9]/i', '_', strtolower($field['id']));
756 $field_id_class = preg_replace('/_/', '-', $field_var);
757
758 if(isset ($_pmr['ws_plugin__s2member_custom_reg_field_'.$field_var]))
759 $fields[$field_var] = $_pmr['ws_plugin__s2member_custom_reg_field_'.$field_var];
760 }
761 unset($field, $field_var, $field_id_class); // Housekeeping.
762
763 if(!empty($fields)) // Only if NOT empty.
764 update_user_option($user_id, 's2member_custom_fields', $fields);
765
766 if($level > 0) // We ONLY process this if they are higher than Level #0.
767 {
768 $pr_times = get_user_option('s2member_paid_registration_times', $user_id);
769 $pr_times['level'] = (empty($pr_times['level'])) ? time() : $pr_times['level'];
770 $pr_times['level'.$level] = (empty($pr_times['level'.$level])) ? time() : $pr_times['level'.$level];
771 update_user_option($user_id, 's2member_paid_registration_times', $pr_times); // Update now.
772 }
773 if(!is_multisite() && c_ws_plugin__s2member_utils_conds::bp_is_installed() && bp_is_register_page())
774 {
775 update_user_option($user_id, 's2member_bp_activation_role', $role);
776 update_user_option($user_id, 's2member_bp_activation_ccaps', c_ws_plugin__s2member_user_access::user_access_ccaps($user));
777 }
778 if(($transient = 's2m_'.md5('s2member_transient_ipn_signup_vars_'.$subscr_id)) && is_array($ipn_signup_vars = get_transient($transient)))
779 {
780 update_user_option($user_id, 's2member_ipn_signup_vars', $ipn_signup_vars); // For future reference.
781 delete_transient($transient); // This can be deleted now.
782 }
783 if(($transient = 's2m_'.md5('s2member_transient_ipn_subscr_payment_'.$subscr_id)) && is_array($subscr_payment = get_transient($transient)) && !empty($subscr_payment['subscr_gateway']))
784 {
785 $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());
786 c_ws_plugin__s2member_utils_urls::remote(home_url('/?s2member_paypal_notify=1'), array_merge(stripslashes_deep($subscr_payment), $proxy), array('timeout' => 20));
787 delete_transient($transient); // This can be deleted now.
788 }
789 if(($transient = 's2m_'.md5('s2member_transient_ipn_subscr_eot_'.$subscr_id)) && is_array($subscr_eot = get_transient($transient)) && !empty($subscr_eot['subscr_gateway']))
790 {
791 $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());
792 c_ws_plugin__s2member_utils_urls::remote(home_url('/?s2member_paypal_notify=1'), array_merge(stripslashes_deep($subscr_eot), $proxy), array('timeout' => 20));
793 delete_transient($transient); // This can be deleted now.
794 }
795 if(!headers_sent()) // Only if headers are NOT yet sent. Here we establish both Signup and Payment Tracking Cookies.
796 @setcookie('s2member_tracking', ($s2member_tracking = c_ws_plugin__s2member_utils_encryption::encrypt($subscr_id)), time() + 31556926, COOKIEPATH, COOKIE_DOMAIN).
797 @setcookie('s2member_tracking', $s2member_tracking, time() + 31556926, SITECOOKIEPATH, COOKIE_DOMAIN).
798 ($_COOKIE['s2member_tracking'] = $s2member_tracking);
799
800 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
801 do_action('ws_plugin__s2member_during_configure_user_registration_front_side_paid', get_defined_vars());
802 do_action('ws_plugin__s2member_during_configure_user_registration_front_side', get_defined_vars());
803 unset($__refs, $__v);
804 }
805 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')))
806 { /* This routine could be processed through `/wp-login.php?action=register`, `/wp-activate.php`, or `/activate` via BuddyPress`.
807 This may also be processed through a standard BuddyPress installation, or another plugin calling `user_register`.
808 If processed through `/wp-activate.php`, it could've originated inside the admin, via `/user-new.php`. */
809
810 $processed = 'yes'; // Mark this as yes.
811
812 $current_role = c_ws_plugin__s2member_user_access::user_access_role($user);
813 $role = ''; // Initialize ``$role`` to an empty string here, before processing.
814 $role = (!$role && ($level = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_level']) > 0) ? 's2member_level'.$level : $role;
815 $role = (!$role && ($level = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_level']) === '0') ? 'subscriber' : $role;
816 $role = (!$role && $current_role) ? $current_role : $role; // Use existing Role?
817 $role = (!$role) ? get_option('default_role') : $role; // Otherwise default.
818
819 $level = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_level'];
820 $level = (!$level && preg_match('/^(administrator|editor|author|contributor)$/i', $role)) ? $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels'] : $level;
821 $level = (!$level && preg_match('/^s2member_level[1-9][0-9]*$/i', $role)) ? preg_replace('/^s2member_level/', '', $role) : $level;
822 $level = (!$level && preg_match('/^subscriber$/i', $role)) ? '0' : $level;
823 $level = (!$level) ? '0' : $level;
824
825 $ccaps = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_ccaps'];
826
827 $email = $user->user_email;
828 $login = $user->user_login;
829 $ip = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_registration_ip'];
830 $ip = (!$ip) ? c_ws_plugin__s2member_utils_ip::current() : $ip;
831 $custom = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_custom'];
832 $subscr_id = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_id'];
833 $subscr_baid = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_baid'];
834 $subscr_cid = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_cid'];
835 $subscr_gateway = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_gateway'];
836
837 $auto_eot_time = ($eot = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_auto_eot_time']) ? strtotime($eot) : '';
838 $notes = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_notes'];
839
840 $opt_in = (!$GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_opt_in']) ? TRUE : FALSE;
841 $opt_in = (!$opt_in && !empty($_pmr['ws_plugin__s2member_custom_reg_field_opt_in'])) ? TRUE : $opt_in;
842
843 if(!($fname = $user->first_name))
844 if(!empty($_pmr['ws_plugin__s2member_custom_reg_field_first_name']))
845 $fname = (string)$_pmr['ws_plugin__s2member_custom_reg_field_first_name'];
846
847 if(!$fname) // Also try BuddyPress.
848 if(!empty($_pmr['field_1'])) // BuddyPress?
849 $fname = trim(preg_replace('/ (.*)$/', '', (string)$_pmr['field_1']));
850
851 if(!($lname = $user->last_name))
852 if(!empty($_pmr['ws_plugin__s2member_custom_reg_field_last_name']))
853 $lname = (string)$_pmr['ws_plugin__s2member_custom_reg_field_last_name'];
854
855 if(!$lname) // Also try BuddyPress.
856 if(!empty($_pmr['field_1']) && preg_match('/^(.+?) (.+)$/', (string)$_pmr['field_1']))
857 $lname = trim(preg_replace('/^(.+?) (.+)$/', '$2', (string)$_pmr['field_1']));
858
859 if($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_names'] && !$fname && $login)
860 {
861 $fname = trim($login);
862 $lname = ''; // Username and empty Last Name.
863 }
864 $name = trim($fname.' '.$lname); // Both names.
865
866 if(!($pass = $password)) // Try s2Member's generator.
867 if(!empty($GLOBALS['ws_plugin__s2member_plain_text_pass']))
868 $pass = (string)$GLOBALS['ws_plugin__s2member_plain_text_pass'];
869
870 if(!$pass) // Also try BuddyPress Password.
871 if(!empty($_pmr['signup_password'])) // BuddyPress?
872 $pass = (string)$_pmr['signup_password'];
873
874 if($pass) // No Password nag. Update this globally.
875 {
876 (!headers_sent()) ? delete_user_setting('default_password_nag', $user_id) : NULL;
877 update_user_option($user_id, 'default_password_nag', FALSE, TRUE);
878 }
879 update_user_option($user_id, 's2member_registration_ip', $ip);
880 update_user_option($user_id, 's2member_auto_eot_time', $auto_eot_time);
881 update_user_option($user_id, 's2member_subscr_gateway', $subscr_gateway);
882 update_user_option($user_id, 's2member_subscr_id', $subscr_id);
883 update_user_option($user_id, 's2member_subscr_baid', $subscr_baid);
884 update_user_option($user_id, 's2member_subscr_cid', $subscr_cid);
885 update_user_option($user_id, 's2member_custom', $custom);
886 update_user_option($user_id, 's2member_notes', $notes);
887
888 if(!$user->first_name && $fname)
889 update_user_meta($user_id, 'first_name', $fname);
890
891 if(!$user->last_name && $lname)
892 update_user_meta($user_id, 'last_name', $lname);
893
894 if(!$user->display_name || $user->display_name === $user->user_login)
895 {
896 if($custom_reg_display_name === 'full' && $name)
897 wp_update_user(wp_slash(array('ID' => $user_id, 'display_name' => $name)));
898 else if($custom_reg_display_name === 'first' && $fname)
899 wp_update_user(wp_slash(array('ID' => $user_id, 'display_name' => $fname)));
900 else if($custom_reg_display_name === 'last' && $lname)
901 wp_update_user(wp_slash(array('ID' => $user_id, 'display_name' => $lname)));
902 else if($custom_reg_display_name === 'login' && $login)
903 wp_update_user(wp_slash(array('ID' => $user_id, 'display_name' => $login)));
904 }
905 if(is_multisite( /* Should we handle Main Site permissions and Originating Blog ID#? */))
906 {
907 if(!is_main_site() && strtotime($user->user_registered) >= strtotime('-10 seconds'))
908 remove_user_from_blog($user_id, $current_site->blog_id); // No Main Site Role.
909
910 if(!get_user_meta($user_id, 's2member_originating_blog', TRUE)) // Recorded yet?
911 update_user_meta($user_id, 's2member_originating_blog', $current_blog->blog_id);
912 }
913 if($current_role !== $role) // Only if NOT the current Role.
914 $user->set_role($role); // s2Member.
915
916 if($ccaps && preg_match('/^-all/', str_replace('+', '', $ccaps)))
917 foreach($user->allcaps as $cap => $cap_enabled)
918 if(preg_match('/^access_s2member_ccap_/', $cap))
919 $user->remove_cap($ccap = $cap);
920
921 if($ccaps && preg_replace('/^-all['."\r\n\t".'\s;,]*/', '', str_replace('+', '', $ccaps)))
922 foreach(preg_split('/['."\r\n\t".'\s;,]+/', preg_replace('/^-all['."\r\n\t".'\s;,]*/', '', str_replace('+', '', $ccaps))) as $ccap)
923 if(strlen($ccap = trim(strtolower(preg_replace('/[^a-z_0-9]/i', '', $ccap)))))
924 $user->add_cap('access_s2member_ccap_'.$ccap);
925
926 if(!($fields = array()) && $GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_fields'])
927 foreach(json_decode($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_fields'], TRUE) as $field)
928 {
929 $field_var = preg_replace('/[^a-z0-9]/i', '_', strtolower($field['id']));
930 $field_id_class = preg_replace('/_/', '-', $field_var);
931
932 if(isset ($_pmr['ws_plugin__s2member_custom_reg_field_'.$field_var]))
933 $fields[$field_var] = $_pmr['ws_plugin__s2member_custom_reg_field_'.$field_var];
934 }
935 unset($field, $field_var, $field_id_class); // Housekeeping.
936
937 if(!empty($fields)) // Only if NOT empty.
938 update_user_option($user_id, 's2member_custom_fields', $fields);
939
940 if($level > 0) // We ONLY process this if they are higher than Level#0.
941 {
942 $pr_times = get_user_option('s2member_paid_registration_times', $user_id);
943 $pr_times['level'] = (empty($pr_times['level'])) ? time() : $pr_times['level'];
944 $pr_times['level'.$level] = (empty($pr_times['level'.$level])) ? time() : $pr_times['level'.$level];
945 update_user_option($user_id, 's2member_paid_registration_times', $pr_times); // Update now.
946 }
947 if(!is_multisite() && c_ws_plugin__s2member_utils_conds::bp_is_installed() && bp_is_register_page())
948 {
949 update_user_option($user_id, 's2member_bp_activation_role', $role);
950 update_user_option($user_id, 's2member_bp_activation_ccaps', c_ws_plugin__s2member_user_access::user_access_ccaps($user));
951 }
952 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
953 do_action('ws_plugin__s2member_during_configure_user_registration_front_side_free', get_defined_vars());
954 do_action('ws_plugin__s2member_during_configure_user_registration_front_side', get_defined_vars());
955 unset($__refs, $__v);
956 }
957 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')))
958 { // Can only be processed through `/user-new.php` in the Admin panel, or through Remote Op: `create_user`.
959
960 $processed = 'yes'; // Mark this as yes, to indicate that a routine was processed.
961
962 $current_role = c_ws_plugin__s2member_user_access::user_access_role($user);
963 $role = ''; // Initialize $role to an empty string here, before processing.
964 $role = (!$role && ($level = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_level']) > 0) ? 's2member_level'.$level : $role;
965 $role = (!$role && ($level = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_level']) === '0') ? 'subscriber' : $role;
966 $role = (!$role && $current_role) ? $current_role : $role; // Use existing Role?
967 $role = (!$role) ? get_option('default_role') : $role; // Otherwise default.
968
969 $level = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_level'];
970 $level = (!$level && preg_match('/^(administrator|editor|author|contributor)$/i', $role)) ? $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels'] : $level;
971 $level = (!$level && preg_match('/^s2member_level[1-9][0-9]*$/i', $role)) ? preg_replace('/^s2member_level/', '', $role) : $level;
972 $level = (!$level && preg_match('/^subscriber$/i', $role)) ? '0' : $level;
973 $level = (!$level) ? '0' : $level;
974
975 $ccaps = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_ccaps'];
976
977 $email = $user->user_email;
978 $login = $user->user_login;
979 $ip = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_registration_ip'];
980 $custom = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_custom'];
981 $subscr_id = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_id'];
982 $subscr_baid = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_baid'];
983 $subscr_cid = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_cid'];
984 $subscr_gateway = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_subscr_gateway'];
985
986 $auto_eot_time = ($eot = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_auto_eot_time']) ? strtotime($eot) : '';
987 $notes = (string)@$_pmr['ws_plugin__s2member_custom_reg_field_s2member_notes'];
988
989 $opt_in = (!empty($_pmr['ws_plugin__s2member_custom_reg_field_opt_in'])) ? TRUE : FALSE;
990
991 if(!($fname = $user->first_name)) // `Users → Add New`.
992 if(!empty($_pmr['ws_plugin__s2member_custom_reg_field_first_name']))
993 $fname = (string)$_pmr['ws_plugin__s2member_custom_reg_field_first_name'];
994
995 if(!($lname = $user->last_name)) // `Users → Add New`.
996 if(!empty($_pmr['ws_plugin__s2member_custom_reg_field_last_name']))
997 $lname = (string)$_pmr['ws_plugin__s2member_custom_reg_field_last_name'];
998
999 if($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_names'] && !$fname && $login)
1000 {
1001 $fname = trim($login);
1002 $lname = ''; // Username and empty Last Name.
1003 }
1004 $name = trim($fname.' '.$lname); // Both names.
1005
1006 if(!($pass = $password)) // Try s2Member's generator.
1007 if(!empty($GLOBALS['ws_plugin__s2member_plain_text_pass']))
1008 $pass = (string)$GLOBALS['ws_plugin__s2member_plain_text_pass'];
1009
1010 if(!$pass) // Also try the `Users → Add New` form.
1011 if(!empty($_pmr['pass1'])) // Field in `/user-new.php`.
1012 $pass = (string)$_pmr['pass1'];
1013
1014 if($pass) // No Password nag. Update this globally.
1015 {
1016 (!headers_sent()) ? delete_user_setting('default_password_nag', $user_id) : NULL;
1017 update_user_option($user_id, 'default_password_nag', FALSE, TRUE);
1018 }
1019 update_user_option($user_id, 's2member_registration_ip', $ip);
1020 update_user_option($user_id, 's2member_auto_eot_time', $auto_eot_time);
1021 update_user_option($user_id, 's2member_subscr_gateway', $subscr_gateway);
1022 update_user_option($user_id, 's2member_subscr_id', $subscr_id);
1023 update_user_option($user_id, 's2member_subscr_baid', $subscr_baid);
1024 update_user_option($user_id, 's2member_subscr_cid', $subscr_cid);
1025 update_user_option($user_id, 's2member_custom', $custom);
1026 update_user_option($user_id, 's2member_notes', $notes);
1027
1028 if(!$user->first_name && $fname)
1029 update_user_meta($user_id, 'first_name', $fname);
1030
1031 if(!$user->last_name && $lname)
1032 update_user_meta($user_id, 'last_name', $lname);
1033
1034 if(!$user->display_name || $user->display_name === $user->user_login)
1035 {
1036 if($custom_reg_display_name === 'full' && $name)
1037 wp_update_user(wp_slash(array('ID' => $user_id, 'display_name' => $name)));
1038 else if($custom_reg_display_name === 'first' && $fname)
1039 wp_update_user(wp_slash(array('ID' => $user_id, 'display_name' => $fname)));
1040 else if($custom_reg_display_name === 'last' && $lname)
1041 wp_update_user(wp_slash(array('ID' => $user_id, 'display_name' => $lname)));
1042 else if($custom_reg_display_name === 'login' && $login)
1043 wp_update_user(wp_slash(array('ID' => $user_id, 'display_name' => $login)));
1044 }
1045 if(is_multisite()) // Should we handle Main Site permissions and Originating Blog ID#?
1046 {
1047 if(!is_main_site() && strtotime($user->user_registered) >= strtotime('-10 seconds'))
1048 remove_user_from_blog($user_id, $current_site->blog_id); // No Main Site Role.
1049
1050 if(!get_user_meta($user_id, 's2member_originating_blog', TRUE)) // Recorded yet?
1051 update_user_meta($user_id, 's2member_originating_blog', $current_blog->blog_id);
1052 }
1053 if($current_role !== $role) // Only if NOT the current Role.
1054 $user->set_role($role); // s2Member.
1055
1056 if($ccaps && preg_match('/^-all/', str_replace('+', '', $ccaps)))
1057 foreach($user->allcaps as $cap => $cap_enabled)
1058 if(preg_match('/^access_s2member_ccap_/', $cap))
1059 $user->remove_cap($ccap = $cap);
1060
1061 if($ccaps && preg_replace('/^-all['."\r\n\t".'\s;,]*/', '', str_replace('+', '', $ccaps)))
1062 foreach(preg_split('/['."\r\n\t".'\s;,]+/', preg_replace('/^-all['."\r\n\t".'\s;,]*/', '', str_replace('+', '', $ccaps))) as $ccap)
1063 if(strlen($ccap = trim(strtolower(preg_replace('/[^a-z_0-9]/i', '', $ccap)))))
1064 $user->add_cap('access_s2member_ccap_'.$ccap);
1065
1066 if(!($fields = array()) && $GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_fields'])
1067 foreach(json_decode($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_fields'], TRUE) as $field)
1068 {
1069 $field_var = preg_replace('/[^a-z0-9]/i', '_', strtolower($field['id']));
1070 $field_id_class = preg_replace('/_/', '-', $field_var);
1071
1072 if(isset ($_pmr['ws_plugin__s2member_custom_reg_field_'.$field_var]))
1073 $fields[$field_var] = $_pmr['ws_plugin__s2member_custom_reg_field_'.$field_var];
1074 }
1075 unset($field, $field_var, $field_id_class); // Housekeeping.
1076
1077 if(!empty($fields)) // Only if NOT empty.
1078 update_user_option($user_id, 's2member_custom_fields', $fields);
1079
1080 if($level > 0) // We ONLY process this if they are higher than Level#0.
1081 {
1082 $pr_times = get_user_option('s2member_paid_registration_times', $user_id);
1083 $pr_times['level'] = (empty($pr_times['level'])) ? time() : $pr_times['level'];
1084 $pr_times['level'.$level] = (empty($pr_times['level'.$level])) ? time() : $pr_times['level'.$level];
1085 update_user_option($user_id, 's2member_paid_registration_times', $pr_times); // Update now.
1086 }
1087 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
1088 do_action('ws_plugin__s2member_during_configure_user_registration_admin_side', get_defined_vars());
1089 unset($__refs, $__v);
1090 }
1091
1092 //260223 Plaintext password should not remain available beyond account configuration.
1093 // Blank it before notifications, return URL replacements, list-server processing, logs, and later hooks.
1094 $pass = 'xxxxxxxx/pass';
1095 $password = 'xxxxxxxx/pass';
1096
1097 if($processed === 'yes') // If registration was processed by one of the routines above.
1098 {
1099 /**
1100 * If processed, all of these will have been defined by now.
1101 *
1102 * @var $role string Reference for IDEs.
1103 * @var $level string Reference for IDEs.
1104 * @var $ccaps string Reference for IDEs.
1105 * @var $auto_eot_time string|integer Reference for IDEs.
1106 * @var $fname string Reference for IDEs.
1107 * @var $lname string Reference for IDEs.
1108 * @var $name string Reference for IDEs.
1109 * @var $email string Reference for IDEs.
1110 * @var $login string Reference for IDEs.
1111 * @var $pass string Reference for IDEs.
1112 * @var $ip string Reference for IDEs.
1113 * @var $opt_in boolean Reference for IDEs.
1114 * @var $fields array Reference for IDEs.
1115 */
1116 if($urls = $GLOBALS['WS_PLUGIN__']['s2member']['o']['registration_notification_urls'])
1117
1118 foreach(preg_split('/['."\r\n\t".']+/', $urls) as $url) // Notify each of the URLs.
1119
1120 if(($url = c_ws_plugin__s2member_utils_strings::fill_cvs($url, $custom, true)))
1121 if(($url = preg_replace('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($role)), $url)))
1122 if(($url = preg_replace('/%%level%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($level)), $url)))
1123 if(($url = preg_replace('/%%ccaps%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($ccaps)), $url)))
1124 if(($url = preg_replace('/%%auto_eot_time%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($auto_eot_time)), $url)))
1125 if(($url = preg_replace('/%%user_first_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($fname)), $url)))
1126 if(($url = preg_replace('/%%user_last_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($lname)), $url)))
1127 if(($url = preg_replace('/%%user_full_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($name)), $url)))
1128 if(($url = preg_replace('/%%user_email%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($email)), $url)))
1129 if(($url = preg_replace('/%%user_login%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($login)), $url)))
1130 if(($url = preg_replace('/%%user_pass%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($pass)), $url)))
1131 if(($url = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($ip)), $url)))
1132 if(($url = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user_id)), $url)))
1133 {
1134 foreach($fields as $var => $val) // Custom Fields.
1135 if(!($url = preg_replace('/%%'.preg_quote($var, '/').'%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode(maybe_serialize($val))), $url)))
1136 break;
1137
1138 if(($url = trim(preg_replace('/%%(.+?)%%/i', '', $url))))
1139 c_ws_plugin__s2member_utils_urls::remote($url);
1140 }
1141 unset($urls, $url, $var, $val); // Housekeeping.
1142
1143 if($GLOBALS['WS_PLUGIN__']['s2member']['o']['registration_notification_recipients'])
1144 {
1145 $email_configs_were_on = c_ws_plugin__s2member_email_configs::email_config_status();
1146 c_ws_plugin__s2member_email_configs::email_config_release();
1147
1148 $msg = $sbj = '(s2Member / API Notification Email) - Registration';
1149 $msg .= "\n\n"; // Spacing in the message body.
1150
1151 $msg .= 'role: %%role%%'."\n";
1152 $msg .= 'level: %%level%%'."\n";
1153 $msg .= 'ccaps: %%ccaps%%'."\n";
1154 $msg .= 'auto_eot_time: %%auto_eot_time%%'."\n";
1155 $msg .= 'user_first_name: %%user_first_name%%'."\n";
1156 $msg .= 'user_last_name: %%user_last_name%%'."\n";
1157 $msg .= 'user_full_name: %%user_full_name%%'."\n";
1158 $msg .= 'user_email: %%user_email%%'."\n";
1159 $msg .= 'user_login: %%user_login%%'."\n";
1160 //$msg .= 'user_pass: %%user_pass%%'."\n";
1161 $msg .= 'user_ip: %%user_ip%%'."\n";
1162 $msg .= 'user_id: %%user_id%%'."\n";
1163
1164 foreach($fields as $var => $val)
1165 $msg .= $var.': %%'.$var.'%%'."\n";
1166
1167 $msg .= 'cv0: %%cv0%%'."\n";
1168 $msg .= 'cv1: %%cv1%%'."\n";
1169 $msg .= 'cv2: %%cv2%%'."\n";
1170 $msg .= 'cv3: %%cv3%%'."\n";
1171 $msg .= 'cv4: %%cv4%%'."\n";
1172 $msg .= 'cv5: %%cv5%%'."\n";
1173 $msg .= 'cv6: %%cv6%%'."\n";
1174 $msg .= 'cv7: %%cv7%%'."\n";
1175 $msg .= 'cv8: %%cv8%%'."\n";
1176 $msg .= 'cv9: %%cv9%%';
1177
1178 if(($msg = c_ws_plugin__s2member_utils_strings::fill_cvs($msg, $custom)))
1179 if(($msg = preg_replace('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($role), $msg)))
1180 if(($msg = preg_replace('/%%level%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($level), $msg)))
1181 if(($msg = preg_replace('/%%ccaps%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($ccaps), $msg)))
1182 if(($msg = preg_replace('/%%auto_eot_time%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($auto_eot_time), $msg)))
1183 if(($msg = preg_replace('/%%user_first_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($fname), $msg)))
1184 if(($msg = preg_replace('/%%user_last_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($lname), $msg)))
1185 if(($msg = preg_replace('/%%user_full_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($name), $msg)))
1186 if(($msg = preg_replace('/%%user_email%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($email), $msg)))
1187 if(($msg = preg_replace('/%%user_login%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($login), $msg)))
1188 if(($msg = preg_replace('/%%user_pass%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($pass), $msg)))
1189 if(($msg = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($ip), $msg)))
1190 if(($msg = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs($user_id), $msg)))
1191 {
1192 foreach($fields as $var => $val) // Custom Fields.
1193 if(!($msg = preg_replace('/%%'.preg_quote($var, '/').'%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(maybe_serialize($val)), $msg)))
1194 break;
1195
1196 if($sbj && ($msg = trim(preg_replace('/%%(.+?)%%/i', '', $msg)))) // Still have a ``$sbj`` and a ``$msg``?
1197
1198 foreach(c_ws_plugin__s2member_utils_strings::parse_emails($GLOBALS['WS_PLUGIN__']['s2member']['o']['registration_notification_recipients']) as $recipient)
1199 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');
1200 }
1201 if($email_configs_were_on) // Back on?
1202 c_ws_plugin__s2member_email_configs::email_config();
1203
1204 unset($sbj, $msg, $var, $val, $recipient, $email_configs_were_on); // Housekeeping.
1205 }
1206
1207 if(!empty($GLOBALS['ws_plugin__s2member_registration_return_url']) && ($url = $GLOBALS['ws_plugin__s2member_registration_return_url']))
1208
1209 if(($url = c_ws_plugin__s2member_utils_strings::fill_cvs($url, $custom, true)))
1210 if(($url = preg_replace('/%%role%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($role)), $url)))
1211 if(($url = preg_replace('/%%level%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($level)), $url)))
1212 if(($url = preg_replace('/%%ccaps%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($ccaps)), $url)))
1213 if(($url = preg_replace('/%%auto_eot_time%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($auto_eot_time)), $url)))
1214 if(($url = preg_replace('/%%user_first_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($fname)), $url)))
1215 if(($url = preg_replace('/%%user_last_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($lname)), $url)))
1216 if(($url = preg_replace('/%%user_full_name%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($name)), $url)))
1217 if(($url = preg_replace('/%%user_email%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($email)), $url)))
1218 if(($url = preg_replace('/%%user_login%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($login)), $url)))
1219 if(($url = preg_replace('/%%user_pass%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($pass)), $url)))
1220 if(($url = preg_replace('/%%user_ip%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($ip)), $url)))
1221 if(($url = preg_replace('/%%user_id%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode($user_id)), $url)))
1222 {
1223 foreach($fields as $var => $val) // Custom Fields.
1224 if(!($url = preg_replace('/%%'.preg_quote($var, '/').'%%/i', c_ws_plugin__s2member_utils_strings::esc_refs(urlencode(maybe_serialize($val))), $url)))
1225 break;
1226
1227 if(($url = trim($url))) // Preserve remaining Replacements; because the parent routine may perform replacements too.
1228 $GLOBALS['ws_plugin__s2member_registration_return_url'] = $url;
1229 }
1230 unset($url, $var, $val); // Housekeeping.
1231
1232 c_ws_plugin__s2member_list_servers::process_list_servers($role, $level, $login, $pass, $email, $fname, $lname, $ip, $opt_in, TRUE, $user_id);
1233 /*
1234 Suppress errors here in case this routine is fired in unexpected locations; or with odd output buffering techniques.
1235 @TODO It may also be impossible to delete cookies when fired inside: `/wp-activate.php`.
1236 */
1237 if(!headers_sent()) // Only if headers are NOT yet sent.
1238 {
1239 @setcookie('s2member_subscr_gateway', '', time() + 31556926, COOKIEPATH, COOKIE_DOMAIN).@setcookie('s2member_subscr_gateway', '', time() + 31556926, SITECOOKIEPATH, COOKIE_DOMAIN);
1240 @setcookie('s2member_subscr_id', '', time() + 31556926, COOKIEPATH, COOKIE_DOMAIN).@setcookie('s2member_subscr_id', '', time() + 31556926, SITECOOKIEPATH, COOKIE_DOMAIN);
1241 @setcookie('s2member_custom', '', time() + 31556926, COOKIEPATH, COOKIE_DOMAIN).@setcookie('s2member_custom', '', time() + 31556926, SITECOOKIEPATH, COOKIE_DOMAIN);
1242 @setcookie('s2member_item_number', '', time() + 31556926, COOKIEPATH, COOKIE_DOMAIN).@setcookie('s2member_item_number', '', time() + 31556926, SITECOOKIEPATH, COOKIE_DOMAIN);
1243 }
1244 /* If debugging/logging is enabled; we need to append ``$reg_vars`` to the log file.
1245 Logging now supports Multisite Networking as well. */
1246
1247 $reg_vars = get_defined_vars(); // All defined vars.
1248 $reg_vars['_COOKIE'] = $_COOKIE; // Record cookies also.
1249 // No need to include these in the logs. Unset before log entry.
1250 unset($reg_vars['wpdb'], $reg_vars['current_site'], $reg_vars['current_blog']);
1251
1252 //260223 Do not log passwords or password-like fields (even generated ones).
1253 unset($reg_vars['pass'], $reg_vars['password']);
1254 if(!empty($reg_vars['_pmr']) && is_array($reg_vars['_pmr']))
1255 foreach(array_keys($reg_vars['_pmr']) as $_k)
1256 if(preg_match('/pass_?(?:word)?/i', $_k))
1257 unset($reg_vars['_pmr'][$_k]);
1258 if(!empty($reg_vars['fields']) && is_array($reg_vars['fields']))
1259 foreach(array_keys($reg_vars['fields']) as $_k)
1260 if(preg_match('/pass_?(?:word)?/i', $_k))
1261 unset($reg_vars['fields'][$_k]);
1262 unset($_k);
1263
1264 c_ws_plugin__s2member_utils_logs::log_entry('reg-handler', $reg_vars);
1265 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
1266 do_action('ws_plugin__s2member_during_configure_user_registration', get_defined_vars());
1267 unset($__refs, $__v);
1268 }
1269 }
1270 foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v;
1271 do_action('ws_plugin__s2member_after_configure_user_registration', get_defined_vars());
1272 unset($__refs, $__v); // Housekeeping.
1273 }
1274 }
1275 }
1276