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

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

1,032 lines 64.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Registration handlers.
4 *
5 * Copyright: © 2009-2011
6 * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
7 * ( coded in the USA )
8 *
9 * Released under the terms of the GNU General Public License.
10 * You should have received a copy of the GNU General Public License,
11 * along with this software. In the main directory, see: /licensing/
12 * If not, see: {@link http://www.gnu.org/licenses/}.
13 *
14 * @package s2Member\Registrations
15 * @since 3.5
16 */
17 if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
18 exit ("Do not access this file directly.");
19 /**/
20 if (!class_exists ("c_ws_plugin__s2member_registrations"))
21 {
22 /**
23 * Registration handlers.
24 *
25 * @package s2Member\Registrations
26 * @since 3.5
27 */
28 class c_ws_plugin__s2member_registrations
29 {
30 /**
31 * Filters WordPress® randomly generated Passwords.
32 *
33 * Also captures Passwords generated by WordPress®
34 * *( with a global var )*, for internal use.
35 *
36 * @package s2Member\Registrations
37 * @since 3.5
38 *
39 * @attaches-to: ``add_filter("random_password");``
40 *
41 * @param str $password Expects a plain text Password passed through by the Filter.
42 * @return str Password, possibly assigned through s2Member Custom Registration Field input.
43 */
44 public static function generate_password ($password = FALSE)
45 {
46 eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
47 do_action ("ws_plugin__s2member_before_generate_password", get_defined_vars ());
48 unset ($__refs, $__v); /* Unset defined __refs, __v. */
49 /**/
50 if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_password"] || (c_ws_plugin__s2member_utils_conds::pro_is_installed () && c_ws_plugin__s2member_pro_remote_ops::is_remote_op ("create_user")))
51 {
52 if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_password"] && !empty ($_POST["ws_plugin__s2member_custom_reg_field_user_pass1"]))
53 {
54 if (($custom = trim (stripslashes ($_POST["ws_plugin__s2member_custom_reg_field_user_pass1"]))))
55 $password = $custom; /* Yes, use s2Member custom Password supplied by User. */
56 }
57 else if (c_ws_plugin__s2member_utils_conds::pro_is_installed () && c_ws_plugin__s2member_pro_remote_ops::is_remote_op ("create_user") && !empty ($GLOBALS["ws_plugin__s2member_generate_password_return"]))
58 {
59 if (($custom = trim (stripslashes ($GLOBALS["ws_plugin__s2member_generate_password_return"]))))
60 $password = $custom; /* Yes, use s2Member custom Password supplied by Remote Op. */
61 }
62 }
63 /**/
64 $GLOBALS["ws_plugin__s2member_generate_password_return"] = $password; /* Global reference. */
65 /**/
66 return apply_filters ("ws_plugin__s2member_generate_password", $password, get_defined_vars ());
67 }
68 /**
69 * Filters Multisite User validation.
70 *
71 * This can ONLY be fired through `/wp-signup.php` on the front-side.
72 * Or through `/register` via BuddyPress.
73 *
74 * @package s2Member\Registrations
75 * @since 3.5
76 *
77 * @attaches-to: ``add_filter("wpmu_validate_user_signup");``
78 *
79 * @param array $result Expects a ``$result`` array to be passed through by the Filter.
80 * @return array The Filtered ``$result`` array. Possibly containing errors introduced by s2Member.
81 */
82 public static function ms_validate_user_signup ($result = FALSE)
83 {
84 eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
85 do_action ("ws_plugin__s2member_before_ms_validate_user_signup", get_defined_vars ());
86 unset ($__refs, $__v); /* Unset defined __refs, __v. */
87 /**/
88 if (is_multisite ()) /* This event should ONLY be processed with Multisite Networking. */
89 if (!is_admin () && isset ($result["user_name"], $result["user_email"]) && ((preg_match ("/\/wp-signup\.php/", $_SERVER["REQUEST_URI"]) && !empty ($_POST["stage"]) && preg_match ("/^validate-(user|blog)-signup$/", $_POST["stage"])) || (c_ws_plugin__s2member_utils_conds::bp_is_installed () && bp_is_register_page ())))
90 {
91 if (c_ws_plugin__s2member_utils_users::ms_user_login_email_exists_but_not_on_blog ($result["user_name"], $result["user_email"]))
92 $result["errors"] = new WP_Error ();
93 /**/
94 eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
95 do_action ("ws_plugin__s2member_during_ms_validate_user_signup", get_defined_vars ());
96 unset ($__refs, $__v); /* Unset defined __refs, __v. */
97 }
98 /**/
99 return apply_filters ("ws_plugin__s2member_ms_validate_user_signup", $result, get_defined_vars ());
100 }
101 /**
102 * Adds hidden fields for ``$_POST`` vars on signup.
103 *
104 * This can ONLY be fired through `/wp-signup.php` on the front-side.
105 * Or through `/register` via BuddyPress.
106 *
107 * @package s2Member\Registrations
108 * @since 3.5
109 *
110 * @attaches-to: ``add_filter("signup_hidden_fields");``
111 *
112 * @return null
113 */
114 public static function ms_process_signup_hidden_fields ()
115 {
116 do_action ("ws_plugin__s2member_before_ms_process_signup_hidden_fields", get_defined_vars ());
117 /**/
118 if (is_multisite ()) /* This event should ONLY be processed with Multisite Networking. */
119 if (!is_admin () && !empty ($_POST) && ((preg_match ("/\/wp-signup\.php/", $_SERVER["REQUEST_URI"]) && !empty ($_POST["stage"]) && preg_match ("/^validate-(user|blog)-signup$/", $_POST["stage"])) || (c_ws_plugin__s2member_utils_conds::bp_is_installed () && bp_is_register_page ())))
120 {
121 foreach ((array)c_ws_plugin__s2member_utils_strings::trim_deep (stripslashes_deep ($_POST)) as $key => $value)
122 if (preg_match ("/^ws_plugin__s2member_(custom_reg_field|user_new)_/", $key))
123 if ($key = preg_replace ("/_user_new_/", "_custom_reg_field_", $key))
124 echo '<input type="hidden" name="' . esc_attr ($key) . '" value="' . esc_attr (maybe_serialize ($value)) . '" />' . "\n";
125 /**/
126 do_action ("ws_plugin__s2member_during_ms_process_signup_hidden_fields", get_defined_vars ());
127 }
128 /**/
129 do_action ("ws_plugin__s2member_after_ms_process_signup_hidden_fields", get_defined_vars ());
130 /**/
131 return; /* Return for uniformity. */
132 }
133 /**
134 * Adds Customs Fields to ``$meta`` on signup.
135 *
136 * This can ONLY be fired through `/wp-signup.php` on the front-side.
137 * Or possibly through `/user-new.php` in the admin.
138 * Or through `/register` via BuddyPress.
139 *
140 * @package s2Member\Registrations
141 * @since 3.5
142 *
143 * @attaches-to: ``add_filter("add_signup_meta");``
144 * @attaches-to: ``add_filter("bp_signup_usermeta");``
145 *
146 * @param array $meta Expects an array of meta-data to be passed in by the Filter.
147 * @return array Full ``$meta`` array with s2Member Custom Fields included.
148 */
149 public static function ms_process_signup_meta ($meta = FALSE)
150 {
151 global $pagenow; /* Need this to detect the current admin page. */
152 /**/
153 eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
154 do_action ("ws_plugin__s2member_before_ms_process_signup_meta", get_defined_vars ());
155 unset ($__refs, $__v); /* Unset defined __refs, __v. */
156 /**/
157 if (is_multisite ()) /* This event should ONLY be processed with Multisite Networking. */
158 if ((is_blog_admin () && !empty ($_POST) && $pagenow === "user-new.php") || (!is_admin () && !empty ($_POST) && ((preg_match ("/\/wp-signup\.php/", $_SERVER["REQUEST_URI"]) && !empty ($_POST["stage"]) && preg_match ("/^validate-(user|blog)-signup$/", $_POST["stage"])) || (c_ws_plugin__s2member_utils_conds::bp_is_installed () && bp_is_register_page ()))))
159 {
160 c_ws_plugin__s2member_email_configs::email_config (); /* Configures From: header used in notifications. */
161 /**/
162 foreach ((array)c_ws_plugin__s2member_utils_strings::trim_deep (stripslashes_deep ($_POST)) as $key => $value)
163 if (preg_match ("/^ws_plugin__s2member_(custom_reg_field|user_new)_/", $key))
164 if ($key = preg_replace ("/_user_new_/", "_custom_reg_field_", $key))
165 $meta["s2member_ms_signup_meta"][$key] = maybe_unserialize ($value);
166 }
167 /**/
168 return apply_filters ("ws_plugin__s2member_ms_process_signup_meta", $meta, get_defined_vars ());
169 }
170 /**
171 * Intersects with ``wpmu_activate_signup()`` through s2Member's Multisite Networking patch.
172 *
173 * This function should return the same array that `wpmu_activate_signup()` returns; with the assumption that ``$user_already_exists``.
174 * Which is exactly where this function intersects inside the `/wp-includes/ms-functions.php`.
175 *
176 * This can ONLY be fired through `/wp-activate.php` on the front-side.
177 * Or through `/activate` via BuddyPress.
178 *
179 * @package s2Member\Registrations
180 * @since 3.5
181 *
182 * @attaches-to: ``add_filter("_wpmu_activate_existing_error_");``
183 *
184 * @param obj $_error Expects a `WP_Error` object to be passed through by the Filter.
185 * @param array $vars Expects the defined variables from the scope of the calling Filter.
186 * @return obj|array If unable to add an existing User, the original ``$_error`` obj is returned.
187 * Otherwise we return an array of User details for continued processing by the caller.
188 */
189 public static function ms_activate_existing_user ($_error = FALSE, $vars = FALSE)
190 {
191 eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
192 do_action ("ws_plugin__s2member_before_ms_activate_existing_user", get_defined_vars ());
193 unset ($__refs, $__v); /* Unset defined __refs, __v. */
194 /**/
195 extract ($vars); /* Extract all variables from ``wpmu_activate_signup()`` function. */
196 /**/
197 if (is_multisite ()) /* This event should ONLY be processed with Multisite Networking. */
198 if (!is_admin () && ((preg_match ("/\/wp-activate\.php/", $_SERVER["REQUEST_URI"])) || (c_ws_plugin__s2member_utils_conds::bp_is_installed () && bp_is_activation_page ())))
199 {
200 if (!empty ($user_id) && !empty ($user_login) && !empty ($user_email) && !empty ($password) && !empty ($meta) && !empty ($meta["add_to_blog"]) && !empty ($meta["new_role"]))
201 if (!empty ($user_already_exists) && c_ws_plugin__s2member_utils_users::ms_user_login_email_exists_but_not_on_blog ($user_login, $user_email))
202 {
203 add_user_to_blog ($meta["add_to_blog"], $user_id, $meta["new_role"]); /* Add this User to the specified Blog. */
204 wp_update_user (array ("ID" => $user_id, "user_pass" => $password)); /* Update Password so it's the same as in the following msg. */
205 wpmu_welcome_user_notification ($user_id, $password, $meta); /* Send welcome letter via email just like ``wpmu_activate_signup()`` does. */
206 /**/
207 do_action ("wpmu_activate_user", $user_id, $password, $meta); /* Process Hook that would have been fired inside `wpmu_activate_signup()`. */
208 /**/
209 return apply_filters ("ws_plugin__s2member_ms_activate_existing_user", array ("user_id" => $user_id, "password" => $password, "meta" => $meta), get_defined_vars ());
210 }
211 }
212 /**/
213 return apply_filters ("ws_plugin__s2member_ms_activate_existing_user", $_error, get_defined_vars ()); /* Else, return the standardized error. */
214 }
215 /**
216 * Configures new Users on a Multisite Network installation.
217 *
218 * This can ONLY be fired in the admin via `/user-new.php`.
219 * Or also during an actual activation; through `/wp-activate.php`.
220 * Or also during an actual activation; through `/activate` via BuddyPress.
221 *
222 * @package s2Member\Registrations
223 * @since 3.5
224 *
225 * @attaches-to: ``add_action("wpmu_activate_user");``
226 *
227 * @param int|str $user_id A numeric WordPress® User ID.
228 * @param str $password Plain text Password should be passed through by the Action Hook.
229 * @param array $meta Expects an array of ``$meta`` details, passed through by the Action Hook.
230 * @return null
231 */
232 public static function configure_user_on_ms_user_activation ($user_id = FALSE, $password = FALSE, $meta = FALSE)
233 {
234 global $pagenow; /* Need this to detect the current admin page. */
235 /**/
236 eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
237 do_action ("ws_plugin__s2member_before_configure_user_on_ms_user_activation", get_defined_vars ());
238 unset ($__refs, $__v); /* Unset defined __refs, __v. */
239 /**/
240 if (is_multisite ()) /* This event should ONLY be processed with Multisite Networking. */
241 if ((is_blog_admin () && $pagenow === "user-new.php" && isset ($_POST["noconfirmation"])) || (!is_admin () && ((preg_match ("/\/wp-activate\.php/", $_SERVER["REQUEST_URI"])) || (c_ws_plugin__s2member_utils_conds::bp_is_installed () && bp_is_activation_page ()))))
242 {
243 c_ws_plugin__s2member_registrations::configure_user_registration ($user_id, $password, ((isset ($meta["s2member_ms_signup_meta"])) ? $meta["s2member_ms_signup_meta"] : false));
244 delete_user_meta ($user_id, "s2member_ms_signup_meta");
245 }
246 /**/
247 do_action ("ws_plugin__s2member_after_configure_user_on_ms_user_activation", get_defined_vars ());
248 /**/
249 return; /* Return for uniformity. */
250 }
251 /**
252 * Configures new Users on a Multisite Network installation.
253 *
254 * This does NOT fire for a Super Admin managing Network Blogs.
255 * Actually it does; BUT it's blocked by the routine below.
256 * A Super Admin should NOT trigger this event.
257 *
258 * This function should ONLY be fired through `/wp-activate.php`.
259 * Or also through `/activate` via BuddyPress.
260 *
261 * @package s2Member\Registrations
262 * @since 3.5
263 *
264 * @attaches-to: ``add_action("wpmu_activate_blog");``
265 *
266 * @param int|str $blog_id A numeric WordPress® Blog ID.
267 * @param int|str $user_id A numeric WordPress® User ID.
268 * @param str $password Plain text Password should be passed through by the Action Hook.
269 * @param str $title The title that a User chose during signup; for their new Blog on the Network.
270 * @param array $meta Expects an array of ``$meta`` details, passed through by the Action Hook.
271 * @return null
272 */
273 public static function configure_user_on_ms_blog_activation ($blog_id = FALSE, $user_id = FALSE, $password = FALSE, $title = FALSE, $meta = FALSE)
274 {
275 eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
276 do_action ("ws_plugin__s2member_before_configure_user_on_ms_blog_activation", get_defined_vars ());
277 unset ($__refs, $__v); /* Unset defined __refs, __v. */
278 /**/
279 if (is_multisite ()) /* This event should ONLY be processed with Multisite Networking. */
280 if (!is_admin () && ((preg_match ("/\/wp-activate\.php/", $_SERVER["REQUEST_URI"])) || (c_ws_plugin__s2member_utils_conds::bp_is_installed () && bp_is_activation_page ())))
281 {
282 c_ws_plugin__s2member_registrations::configure_user_registration ($user_id, $password, ((isset ($meta["s2member_ms_signup_meta"])) ? $meta["s2member_ms_signup_meta"] : false));
283 delete_user_meta ($user_id, "s2member_ms_signup_meta");
284 }
285 /**/
286 do_action ("ws_plugin__s2member_after_configure_user_on_ms_blog_activation", get_defined_vars ());
287 /**/
288 return; /* Return for uniformity. */
289 }
290 /**
291 * Intersects with ``register_new_user()`` through s2Member's Multisite Networking patch.
292 *
293 * This function Filters registration errors inside `/wp-login.php` via ``register_new_user()``.
294 * When an existing Multisite User is registering, this takes over registration processing.
295 *
296 * This can ONLY be fired through `/wp-login.php` on the front-side.
297 *
298 * @package s2Member\Registrations
299 * @since 3.5
300 *
301 * @attaches-to: ``add_filter("registration_errors");``
302 *
303 * @param obj $errors Expects a `WP_Error` object passed in by the Filter.
304 * @param str $user_login Expects the User's Username, passed in by the Filter.
305 * @param str $user_email Expects the User's Email Address, passed in by the Filter.
306 * @return obj A `WP_Error` object, or exits script execution after handling registration redirection.
307 */
308 public static function ms_register_existing_user ($errors = FALSE, $user_login = FALSE, $user_email = FALSE)
309 {
310 eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
311 do_action ("ws_plugin__s2member_before_ms_register_existing_user", get_defined_vars ());
312 unset ($__refs, $__v); /* Unset defined __refs, __v. */
313 /**/
314 if (is_multisite ()) /* Should ONLY be processed with Multisite Networking. */
315 if (!is_admin () && preg_match ("/\/wp-login\.php/", $_SERVER["REQUEST_URI"]))
316 if (is_wp_error ($errors) && $errors->get_error_code ())
317 {
318 if (($user_id = c_ws_plugin__s2member_utils_users::ms_user_login_email_exists_but_not_on_blog ($user_login, $user_email)))
319 {
320 foreach ($errors->get_error_codes () as $error_code)
321 if (!preg_match ("/^(username_exists|email_exists)$/i", $error_code))
322 $other_important_errors_exist = true;
323 /**/
324 if (empty ($other_important_errors_exist)) /* Only if/when NO other important errors exist. */
325 {
326 $user_pass = wp_generate_password (); /* A new Password is now generated here. */
327 c_ws_plugin__s2member_registrations::ms_create_existing_user ($user_login, $user_email, $user_pass, $user_id);
328 update_user_option ($user_id, "default_password_nag", true, true); /* Set up the Password change nag screen. */
329 wp_new_user_notification ($user_id, $user_pass); /* Welcome email, just like `register_new_user()` does. */
330 /**/
331 $redirect_to = (!empty ($_REQUEST["redirect_to"])) ? trim (stripslashes ($_REQUEST["redirect_to"])) : false;
332 $redirect_to = ($redirect_to) ? $redirect_to : add_query_arg ("checkemail", urlencode ("registered"), wp_login_url ());
333 /**/
334 do_action ("ws_plugin__s2member_during_ms_register_existing_user", get_defined_vars ());
335 /**/
336 wp_safe_redirect ($redirect_to); /* Use safe redirect; like `register_new_user()`. */
337 /**/
338 exit (); /* Clean exit. */
339 }
340 }
341 }
342 else if (($r = wpmu_validate_user_signup ($user_login, $user_email)) && isset ($r["errors"]) && is_wp_error ($e = $r["errors"]) && $e->get_error_code ())
343 $errors->add ($e->get_error_code (), $e->get_error_message ());
344 /**/
345 do_action ("ws_plugin__s2member_after_ms_register_existing_user", get_defined_vars ());
346 /**/
347 return apply_filters ("ws_plugin__s2member_ms_register_existing_user", $errors, get_defined_vars ());
348 }
349 /**
350 * For Multisite Networks, this function is used to add a User to an existing Blog; and to simulate ``wp_create_user()`` behavior.
351 *
352 * The ``$user_id`` value will be returned by this function, just like ``wp_create_user()`` does.
353 * This function will fire the Hook `user_register`.
354 *
355 * @package s2Member\Registrations
356 * @since 3.5
357 *
358 * @param str $user_login Expects the User's Username.
359 * @param str $user_email Expects the User's Email Address.
360 * @param str $user_pass Expects the User's plain text Password.
361 * @param int|str $user_id Optional. A numeric WordPress® User ID.
362 * If unspecified, a lookup is performed with ``$user_login`` and ``$user_email``.
363 * @return int|false Returns numeric ``$user_id`` on success, else false on failure.
364 */
365 public static function ms_create_existing_user ($user_login = FALSE, $user_email = FALSE, $user_pass = FALSE, $user_id = FALSE)
366 {
367 eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
368 do_action ("ws_plugin__s2member_before_ms_create_existing_user", get_defined_vars ());
369 unset ($__refs, $__v); /* Unset defined __refs, __v. */
370 /**/
371 if (is_multisite ()) /* This event should ONLY be processed with Multisite Networking. */
372 {
373 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)
374 {
375 $role = get_option ("default_role"); /* Use default Role. */
376 add_existing_user_to_blog (array ("user_id" => $user_id, "role" => $role)); /* Add existing User. */
377 wp_update_user (array ("ID" => $user_id, "user_pass" => $user_pass)); /* Update Password to $user_pass. */
378 /**/
379 do_action ("ws_plugin__s2member_during_ms_create_existing_user", get_defined_vars ());
380 do_action ("user_register", $user_id); /* So s2Member knows a User is registering. */
381 /**/
382 return apply_filters ("ws_plugin__s2member_ms_create_existing_user", $user_id, get_defined_vars ());
383 }
384 }
385 /**/
386 return apply_filters ("ws_plugin__s2member_ms_create_existing_user", false, get_defined_vars ());
387 }
388 /**
389 * Configures all new Users.
390 *
391 * The Hook `user_register` is also fired by calling:
392 * ``c_ws_plugin__s2member_registrations::ms_create_existing_user()`` and/or ``wpmu_create_user()``.
393 *
394 * This function also receives hand-offs from s2Member's handlers for these two Hooks:
395 * ``wpmu_activate_user`` and ``wpmu_activate_blog``.
396 *
397 * @package s2Member\Registrations
398 * @since 3.5
399 *
400 * @attaches-to: ``add_action("user_register");``
401 *
402 * @param int|str $user_id A numeric WordPress® User ID.
403 * @param str $password Optional in most cases. A User's plain text Password.
404 * If unspecified, attempts are made to collect the plain text Password from other sources.
405 * @param array $meta Optional in most cases. An array of meta data added by s2Member for Multisite Network processing.
406 * @return null
407 *
408 * @todo Continue optimizing with ``empty()`` and ``isset()``.
409 * @todo Impossible to delete cookies when fired inside: `/wp-activate.php`?
410 */
411 public static function configure_user_registration ($user_id = FALSE, $password = FALSE, $meta = FALSE)
412 {
413 global $wpdb; /* Global database object may be required for this routine. */
414 global $pagenow; /* Need this to detect the current admin page. */
415 global $current_site, $current_blog; /* Multisite Networking. */
416 static $email_config, $processed; /* No duplicate processing. */
417 /**/
418 eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
419 do_action ("ws_plugin__s2member_before_configure_user_registration", get_defined_vars ());
420 unset ($__refs, $__v); /* Unset defined __refs, __v. */
421 /**/
422 /* With Multisite Networking, we need this to run on `user_register` ahead of `wpmu_activate_user|blog`. */
423 if (!$email_config && ($email_config = true)) /* Anytime this routine is fired; we config email; no exceptions. */
424 c_ws_plugin__s2member_email_configs::email_config (); /* Configures From: header in new user notifications. */
425 /**/
426 if (!$processed /* Process only once. Safeguard this routine against duplicate processing via plugins ( or even WordPress® itself ). */
427 /**/
428 && ((!empty ($_POST) && is_array ($_p = c_ws_plugin__s2member_utils_strings::trim_deep (stripslashes_deep ($_POST)))) || is_array ($meta))/**/
429 /**/
430 /* These negative matches are designed to prevent this routine from running under certain conditions; where we need to wait for `wpmu_activate_user|blog`. */
431 && !(is_multisite () && is_blog_admin () && $pagenow === "user-new.php" && isset ($_p["noconfirmation"]) && is_super_admin () && func_num_args () !== 3) /* OK? */
432 && !(preg_match ("/\/wp-activate\.php/", $_SERVER["REQUEST_URI"]) && func_num_args () !== 3) /* If activating; we MUST have a $meta arg to proceed. Otherwise ignore. */
433 && !(c_ws_plugin__s2member_utils_conds::pro_is_installed () && c_ws_plugin__s2member_pro_remote_ops::is_remote_op ("create_user") && empty ($GLOBALS["ws_plugin__s2member_registration_vars"]))/**/
434 && !(c_ws_plugin__s2member_utils_conds::bp_is_installed () && bp_is_activation_page () && func_num_args () !== 3)
435 /**/
436 && $user_id && is_object ($user = new WP_User ($user_id)) && ($user_id = $user->ID) && ($processed = true))
437 {
438 settype ($_p, "array") . settype ($meta, "array");
439 settype ($GLOBALS["ws_plugin__s2member_registration_vars"], "array");
440 /**/
441 foreach ($_p as $key => $value) /* Scan $_p vars; adding `custom_reg_field` keys. */
442 if (preg_match ("/^ws_plugin__s2member_user_new_/", $key)) /* Look for `user_new` keys. */
443 if ($key = preg_replace ("/_user_new_/", "_custom_reg_field_", $key))
444 $_p[$key] = $value; /* Add these keys for uniformity. */
445 unset ($key, $value); /* Prevents bleeding vars into Hooks/Filters. */
446 /**/
447 $meta = c_ws_plugin__s2member_utils_strings::trim_deep (stripslashes_deep ($meta));
448 /**/
449 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_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"])))
450 exit ("s2Member security violation. You attempted to POST administrative variables that will NOT be trusted in a NON-administrative zone!");
451 /**/
452 $_pmr = array_merge ($_p, $meta, $GLOBALS["ws_plugin__s2member_registration_vars"]); /* Merge these all together now. */
453 unset ($_p, $meta, $GLOBALS["ws_plugin__s2member_registration_vars"]); /* These vars can all be unset now; we now have them all inside $_pmr. */
454 /**/
455 $custom_reg_display_name = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_display_name"]; /* Can be configured by the site owner. */
456 /**/
457 if (!is_admin () && (!c_ws_plugin__s2member_utils_conds::pro_is_installed () || !c_ws_plugin__s2member_pro_remote_ops::is_remote_op ("create_user"))/**/
458 && ($reg_cookies = c_ws_plugin__s2member_register_access::reg_cookies_ok ()) && extract ($reg_cookies)) /* A Customer? */
459 { /* This routine could be processed through `wp-login.php?action=register`, `wp-activate.php`, or `/activate` via BuddyPress`.
460 This may also be processed through a standard BuddyPress installation, or another plugin calling `user_register`.
461 If processed through `wp-activate.php`, it could've originated inside the admin, via `user-new.php`. */
462 $processed = "yes"; /* Mark this as yes, to indicate that a routine was processed. */
463 /**/
464 $current_role = c_ws_plugin__s2member_user_access::user_access_role ($user);
465 list ($level, $ccaps, $eotper) = preg_split ("/\:/", $item_number, 3);
466 $role = "s2member_level" . $level; /* Membership Level. */
467 /**/
468 $email = $user->user_email;
469 $login = $user->user_login;
470 $ip = $_pmr["ws_plugin__s2member_custom_reg_field_s2member_registration_ip"];
471 $ip = (!$ip) ? $_SERVER["REMOTE_ADDR"] : $ip; /* Else use this value. */
472 $cv = preg_split ("/\|/", $custom);
473 /**/
474 if (!($auto_eot_time = "") && $eotper) /* If a specific EOT Period is included. */
475 $auto_eot_time = c_ws_plugin__s2member_utils_time::auto_eot_time ("", "", "", $eotper);
476 /**/
477 $notes = $_pmr["ws_plugin__s2member_custom_reg_field_s2member_notes"];
478 /**/
479 $opt_in = (!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_opt_in"]) ? true : false;
480 $opt_in = (!$opt_in && $_pmr["ws_plugin__s2member_custom_reg_field_opt_in"]) ? true : $opt_in;
481 /**/
482 if (!($fname = $user->first_name))
483 if ($_pmr["ws_plugin__s2member_custom_reg_field_first_name"])
484 $fname = $_pmr["ws_plugin__s2member_custom_reg_field_first_name"];
485 /**/
486 if (!$fname) /* Also try BuddyPress. */
487 if ($_pmr["field_1"]) /* BuddyPress. */
488 $fname = trim (preg_replace ("/ (.*)$/", "", $_pmr["field_1"]));
489 /**/
490 if (!($lname = $user->last_name))
491 if ($_pmr["ws_plugin__s2member_custom_reg_field_last_name"])
492 $lname = $_pmr["ws_plugin__s2member_custom_reg_field_last_name"];
493 /**/
494 if (!$lname) /* Also try BuddyPress. */
495 if ($_pmr["field_1"] && preg_match ("/^(.+?) (.+)$/", $_pmr["field_1"]))
496 $lname = trim (preg_replace ("/^(.+?) (.+)$/", "$2", $_pmr["field_1"]));
497 /**/
498 if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_names"] && !$fname)
499 if ($login) /* Username and empty Last Name. */
500 eval ('$fname = trim ($login); $lname = "";');
501 /**/
502 $name = trim ($fname . " " . $lname); /* Both names. */
503 /**/
504 if (!($pass = $password)) /* Try s2Member's generator. */
505 if ($GLOBALS["ws_plugin__s2member_generate_password_return"])
506 $pass = $GLOBALS["ws_plugin__s2member_generate_password_return"];
507 /**/
508 if (!$pass) /* Also try BuddyPress Password. */
509 if ($_pmr["signup_password"]) /* BuddyPress. */
510 $pass = $_pmr["signup_password"];
511 /**/
512 if ($pass) /* No Password nag. Update this globally. */
513 {
514 /* Note: `delete_user_setting()` uses cookies. */
515 delete_user_setting ("default_password_nag", $user_id);
516 update_user_option ($user_id, "default_password_nag", false, true);
517 }
518 /**/
519 update_user_option ($user_id, "s2member_registration_ip", $ip);
520 update_user_option ($user_id, "s2member_auto_eot_time", $auto_eot_time);
521 update_user_option ($user_id, "s2member_subscr_gateway", $subscr_gateway);
522 update_user_option ($user_id, "s2member_subscr_id", $subscr_id);
523 update_user_option ($user_id, "s2member_custom", $custom);
524 update_user_option ($user_id, "s2member_notes", $notes);
525 /**/
526 if (!$user->first_name && $fname)
527 update_user_meta ($user_id, "first_name", $fname);
528 /**/
529 if (!$user->last_name && $lname)
530 update_user_meta ($user_id, "last_name", $lname);
531 /**/
532 if (!$user->display_name || $user->display_name === $user->user_login)
533 {
534 if ($custom_reg_display_name === "full" && $name)
535 wp_update_user (array ("ID" => $user_id, "display_name" => $name));
536 else if ($custom_reg_display_name === "first" && $fname)
537 wp_update_user (array ("ID" => $user_id, "display_name" => $fname));
538 else if ($custom_reg_display_name === "last" && $lname)
539 wp_update_user (array ("ID" => $user_id, "display_name" => $lname));
540 else if ($custom_reg_display_name === "login" && $login)
541 wp_update_user (array ("ID" => $user_id, "display_name" => $login));
542 }
543 /**/
544 if (is_multisite ()) /* Should we handle Main Site permissions and Originating Blog ID#? */
545 {
546 if (!is_main_site () && strtotime ($user->user_registered) >= strtotime ("-10 seconds"))
547 remove_user_from_blog ($user_id, $current_site->blog_id); /* No Main Site Role. */
548 /**/
549 if (!get_user_meta ($user_id, "s2member_originating_blog", true)) /* Recorded yet? */
550 update_user_meta ($user_id, "s2member_originating_blog", $current_blog->blog_id);
551 }
552 /**/
553 if ($current_role !== $role) /* Only if NOT the current Role. */
554 $user->set_role ($role); /* s2Member. */
555 /**/
556 if ($ccaps && preg_match ("/^-all/", str_replace ("+", "", $ccaps)))
557 foreach ($user->allcaps as $cap => $cap_enabled)
558 if (preg_match ("/^access_s2member_ccap_/", $cap))
559 $user->remove_cap ($ccap = $cap);
560 /**/
561 if ($ccaps && preg_replace ("/^-all[\r\n\t\s;,]*/", "", str_replace ("+", "", $ccaps)))
562 foreach (preg_split ("/[\r\n\t\s;,]+/", preg_replace ("/^-all[\r\n\t\s;,]*/", "", str_replace ("+", "", $ccaps))) as $ccap)
563 if (strlen ($ccap = trim (strtolower (preg_replace ("/[^a-z_0-9]/i", "", $ccap)))))
564 $user->add_cap ("access_s2member_ccap_" . $ccap);
565 /**/
566 if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"])
567 foreach (json_decode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
568 {
569 $field_var = preg_replace ("/[^a-z0-9]/i", "_", strtolower ($field["id"]));
570 $field_id_class = preg_replace ("/_/", "-", $field_var);
571 /**/
572 if (isset ($_pmr["ws_plugin__s2member_custom_reg_field_" . $field_var]))
573 $fields[$field_var] = $_pmr["ws_plugin__s2member_custom_reg_field_" . $field_var];
574 }
575 /**/
576 update_user_option ($user_id, "s2member_custom_fields", $fields);
577 /**/
578 if ($level > 0) /* We ONLY process this if they are higher than Level#0. */
579 {
580 $pr_times = get_user_option ("s2member_paid_registration_times", $user_id);
581 $pr_times["level"] = (!$pr_times["level"]) ? time () : $pr_times["level"]; /* Preserve. */
582 $pr_times["level" . $level] = (!$pr_times["level" . $level]) ? time () : $pr_times["level" . $level];
583 update_user_option ($user_id, "s2member_paid_registration_times", $pr_times); /* Update now. */
584 }
585 /**/
586 if (($transient = "s2m_" . md5 ("s2member_transient_ipn_signup_vars_" . $subscr_id)) && is_array ($ipn_signup_vars = get_transient ($transient)))
587 {
588 update_user_option ($user_id, "s2member_ipn_signup_vars", $ipn_signup_vars); /* For future reference. */
589 delete_transient ($transient); /* This can be deleted now. */
590 }
591 if (($transient = "s2m_" . md5 ("s2member_transient_ipn_subscr_payment_" . $subscr_id)) && is_array ($subscr_payment = get_transient ($transient)))
592 {
593 $proxy = array ("s2member_paypal_notify" => "1", "s2member_paypal_proxy" => stripslashes ($subscr_payment["subscr_gateway"]), "s2member_paypal_proxy_verification" => c_ws_plugin__s2member_paypal_utilities::paypal_proxy_key_gen ());
594 c_ws_plugin__s2member_utils_urls::remote (add_query_arg (urlencode_deep ($proxy), site_url ("/")), stripslashes_deep ($subscr_payment), array ("timeout" => 20));
595 delete_transient ($transient); /* This can be deleted now. */
596 }
597 if (($transient = "s2m_" . md5 ("s2member_transient_ipn_subscr_eot_" . $subscr_id)) && is_array ($subscr_eot = get_transient ($transient)))
598 {
599 $proxy = array ("s2member_paypal_notify" => "1", "s2member_paypal_proxy" => stripslashes ($subscr_eot["subscr_gateway"]), "s2member_paypal_proxy_verification" => c_ws_plugin__s2member_paypal_utilities::paypal_proxy_key_gen ());
600 c_ws_plugin__s2member_utils_urls::remote (add_query_arg (urlencode_deep ($proxy), site_url ("/")), stripslashes_deep ($subscr_eot), array ("timeout" => 20));
601 delete_transient ($transient); /* This can be deleted now. */
602 }
603 /**/
604 if (!headers_sent ()) /* Only if headers are NOT yet sent. Here we establish both Signup and Payment Tracking Cookies. */
605 @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);
606 /**/
607 eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
608 do_action ("ws_plugin__s2member_during_configure_user_registration_front_side_paid", get_defined_vars ());
609 do_action ("ws_plugin__s2member_during_configure_user_registration_front_side", get_defined_vars ());
610 unset ($__refs, $__v); /* Unset defined __refs, __v. */
611 }
612 /**/
613 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")))
614 { /* This routine could be processed through `wp-login.php?action=register`, `wp-activate.php`, or `/activate` via BuddyPress`.
615 This may also be processed through a standard BuddyPress installation, or another plugin calling `user_register`.
616 If processed through `wp-activate.php`, it could've originated inside the admin, via `user-new.php`. */
617 $processed = "yes"; /* Mark this as yes, to indicate that a routine was processed. */
618 /**/
619 $current_role = c_ws_plugin__s2member_user_access::user_access_role ($user);
620 $role = ""; /* Initialize $role to an empty string here, before processing. */
621 $role = (!$role && ($level = $_pmr["ws_plugin__s2member_custom_reg_field_s2member_level"]) > 0) ? "s2member_level" . $level : $role;
622 $role = (!$role && ($level = $_pmr["ws_plugin__s2member_custom_reg_field_s2member_level"]) === "0") ? "subscriber" : $role;
623 $role = (!$role && $current_role) ? $current_role : $role; /* Use existing Role? */
624 $role = (!$role) ? get_option ("default_role") : $role; /* Otherwise default. */
625 /**/
626 $level = $_pmr["ws_plugin__s2member_custom_reg_field_s2member_level"];
627 $level = (!$level && preg_match ("/^(administrator|editor|author|contributor)$/i", $role)) ? "4" : $level;
628 $level = (!$level && preg_match ("/^s2member_level[1-9][0-9]*$/i", $role)) ? preg_replace ("/^s2member_level/", "", $role) : $level;
629 $level = (!$level && preg_match ("/^subscriber$/i", $role)) ? "0" : $level;
630 $level = (!$level) ? "0" : $level;
631 /**/
632 $ccaps = $_pmr["ws_plugin__s2member_custom_reg_field_s2member_ccaps"];
633 /**/
634 $email = $user->user_email;
635 $login = $user->user_login;
636 $ip = $_pmr["ws_plugin__s2member_custom_reg_field_s2member_registration_ip"];
637 $ip = (!$ip) ? $_SERVER["REMOTE_ADDR"] : $ip; /* Else use this value. */
638 $custom = $_pmr["ws_plugin__s2member_custom_reg_field_s2member_custom"];
639 $subscr_id = $_pmr["ws_plugin__s2member_custom_reg_field_s2member_subscr_id"];
640 $subscr_gateway = $_pmr["ws_plugin__s2member_custom_reg_field_s2member_subscr_gateway"];
641 $cv = preg_split ("/\|/", $_pmr["ws_plugin__s2member_custom_reg_field_s2member_custom"]);
642 /**/
643 $auto_eot_time = ($eot = $_pmr["ws_plugin__s2member_custom_reg_field_s2member_auto_eot_time"]) ? strtotime ($eot) : "";
644 $notes = $_pmr["ws_plugin__s2member_custom_reg_field_s2member_notes"];
645 /**/
646 $opt_in = (!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_opt_in"]) ? true : false;
647 $opt_in = (!$opt_in && $_pmr["ws_plugin__s2member_custom_reg_field_opt_in"]) ? true : $opt_in;
648 /**/
649 if (!($fname = $user->first_name))
650 if ($_pmr["ws_plugin__s2member_custom_reg_field_first_name"])
651 $fname = $_pmr["ws_plugin__s2member_custom_reg_field_first_name"];
652 /**/
653 if (!$fname) /* Also try BuddyPress. */
654 if ($_pmr["field_1"]) /* BuddyPress. */
655 $fname = trim (preg_replace ("/ (.*)$/", "", $_pmr["field_1"]));
656 /**/
657 if (!($lname = $user->last_name))
658 if ($_pmr["ws_plugin__s2member_custom_reg_field_last_name"])
659 $lname = $_pmr["ws_plugin__s2member_custom_reg_field_last_name"];
660 /**/
661 if (!$lname) /* Also try BuddyPress. */
662 if ($_pmr["field_1"] && preg_match ("/^(.+?) (.+)$/", $_pmr["field_1"]))
663 $lname = trim (preg_replace ("/^(.+?) (.+)$/", "$2", $_pmr["field_1"]));
664 /**/
665 if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_names"] && !$fname)
666 if ($login) /* Username and empty Last Name. */
667 eval ('$fname = trim ($login); $lname = "";');
668 /**/
669 $name = trim ($fname . " " . $lname); /* Both names. */
670 /**/
671 if (!($pass = $password)) /* Try s2Member's generator. */
672 if ($GLOBALS["ws_plugin__s2member_generate_password_return"])
673 $pass = $GLOBALS["ws_plugin__s2member_generate_password_return"];
674 /**/
675 if (!$pass) /* Also try BuddyPress Password. */
676 if ($_pmr["signup_password"]) /* BuddyPress. */
677 $pass = $_pmr["signup_password"];
678 /**/
679 if ($pass) /* No Password nag. Update this globally. */
680 {
681 /* Note: `delete_user_setting()` uses cookies. */
682 delete_user_setting ("default_password_nag", $user_id);
683 update_user_option ($user_id, "default_password_nag", false, true);
684 }
685 /**/
686 update_user_option ($user_id, "s2member_registration_ip", $ip);
687 update_user_option ($user_id, "s2member_auto_eot_time", $auto_eot_time);
688 update_user_option ($user_id, "s2member_subscr_gateway", $subscr_gateway);
689 update_user_option ($user_id, "s2member_subscr_id", $subscr_id);
690 update_user_option ($user_id, "s2member_custom", $custom);
691 update_user_option ($user_id, "s2member_notes", $notes);
692 /**/
693 if (!$user->first_name && $fname)
694 update_user_meta ($user_id, "first_name", $fname);
695 /**/
696 if (!$user->last_name && $lname)
697 update_user_meta ($user_id, "last_name", $lname);
698 /**/
699 if (!$user->display_name || $user->display_name === $user->user_login)
700 {
701 if ($custom_reg_display_name === "full" && $name)
702 wp_update_user (array ("ID" => $user_id, "display_name" => $name));
703 else if ($custom_reg_display_name === "first" && $fname)
704 wp_update_user (array ("ID" => $user_id, "display_name" => $fname));
705 else if ($custom_reg_display_name === "last" && $lname)
706 wp_update_user (array ("ID" => $user_id, "display_name" => $lname));
707 else if ($custom_reg_display_name === "login" && $login)
708 wp_update_user (array ("ID" => $user_id, "display_name" => $login));
709 }
710 /**/
711 if (is_multisite ()) /* Should we handle Main Site permissions and Originating Blog ID#? */
712 {
713 if (!is_main_site () && strtotime ($user->user_registered) >= strtotime ("-10 seconds"))
714 remove_user_from_blog ($user_id, $current_site->blog_id); /* No Main Site Role. */
715 /**/
716 if (!get_user_meta ($user_id, "s2member_originating_blog", true)) /* Recorded yet? */
717 update_user_meta ($user_id, "s2member_originating_blog", $current_blog->blog_id);
718 }
719 /**/
720 if ($current_role !== $role) /* Only if NOT the current Role. */
721 $user->set_role ($role); /* s2Member. */
722 /**/
723 if ($ccaps && preg_match ("/^-all/", str_replace ("+", "", $ccaps)))
724 foreach ($user->allcaps as $cap => $cap_enabled)
725 if (preg_match ("/^access_s2member_ccap_/", $cap))
726 $user->remove_cap ($ccap = $cap);
727 /**/
728 if ($ccaps && preg_replace ("/^-all[\r\n\t\s;,]*/", "", str_replace ("+", "", $ccaps)))
729 foreach (preg_split ("/[\r\n\t\s;,]+/", preg_replace ("/^-all[\r\n\t\s;,]*/", "", str_replace ("+", "", $ccaps))) as $ccap)
730 if (strlen ($ccap = trim (strtolower (preg_replace ("/[^a-z_0-9]/i", "", $ccap)))))
731 $user->add_cap ("access_s2member_ccap_" . $ccap);
732 /**/
733 if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"])
734 foreach (json_decode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
735 {
736 $field_var = preg_replace ("/[^a-z0-9]/i", "_", strtolower ($field["id"]));
737 $field_id_class = preg_replace ("/_/", "-", $field_var);
738 /**/
739 if (isset ($_pmr["ws_plugin__s2member_custom_reg_field_" . $field_var]))
740 $fields[$field_var] = $_pmr["ws_plugin__s2member_custom_reg_field_" . $field_var];
741 }
742 /**/
743 update_user_option ($user_id, "s2member_custom_fields", $fields);
744 /**/
745 if ($level > 0) /* We ONLY process this if they are higher than Level#0. */
746 {
747 $pr_times = get_user_option ("s2member_paid_registration_times", $user_id);
748 $pr_times["level"] = (!$pr_times["level"]) ? time () : $pr_times["level"]; /* Preserve. */
749 $pr_times["level" . $level] = (!$pr_times["level" . $level]) ? time () : $pr_times["level" . $level];
750 update_user_option ($user_id, "s2member_paid_registration_times", $pr_times); /* Update now. */
751 }
752 /**/
753 eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
754 do_action ("ws_plugin__s2member_during_configure_user_registration_front_side_free", get_defined_vars ());
755 do_action ("ws_plugin__s2member_during_configure_user_registration_front_side", get_defined_vars ());
756 unset ($__refs, $__v); /* Unset defined __refs, __v. */
757 }
758 /**/
759 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")))
760 { /* Can only be processed through `user-new.php` in the Admin panel, or through Remote Op: `create_user`. */
761 $processed = "yes"; /* Mark this as yes, to indicate that a routine was processed. */
762 /**/
763 $current_role = c_ws_plugin__s2member_user_access::user_access_role ($user);
764 $role = ""; /* Initialize $role to an empty string here, before processing. */
765 $role = (!$role && ($level = $_pmr["ws_plugin__s2member_custom_reg_field_s2member_level"]) > 0) ? "s2member_level" . $level : $role;
766 $role = (!$role && ($level = $_pmr["ws_plugin__s2member_custom_reg_field_s2member_level"]) === "0") ? "subscriber" : $role;
767 $role = (!$role && $current_role) ? $current_role : $role; /* Use existing Role? */
768 $role = (!$role) ? get_option ("default_role") : $role; /* Otherwise default. */
769 /**/
770 $level = $_pmr["ws_plugin__s2member_custom_reg_field_s2member_level"];
771 $level = (!$level && preg_match ("/^(administrator|editor|author|contributor)$/i", $role)) ? "4" : $level;
772 $level = (!$level && preg_match ("/^s2member_level[1-9][0-9]*$/i", $role)) ? preg_replace ("/^s2member_level/", "", $role) : $level;
773 $level = (!$level && preg_match ("/^subscriber$/i", $role)) ? "0" : $level;
774 $level = (!$level) ? "0" : $level;
775 /**/
776 $ccaps = $_pmr["ws_plugin__s2member_custom_reg_field_s2member_ccaps"];
777 /**/
778 $email = $user->user_email;
779 $login = $user->user_login;
780 $ip = $_pmr["ws_plugin__s2member_custom_reg_field_s2member_registration_ip"];
781 $custom = $_pmr["ws_plugin__s2member_custom_reg_field_s2member_custom"];
782 $subscr_id = $_pmr["ws_plugin__s2member_custom_reg_field_s2member_subscr_id"];
783 $subscr_gateway = $_pmr["ws_plugin__s2member_custom_reg_field_s2member_subscr_gateway"];
784 $cv = preg_split ("/\|/", $_pmr["ws_plugin__s2member_custom_reg_field_s2member_custom"]);
785 /**/
786 $auto_eot_time = ($eot = $_pmr["ws_plugin__s2member_custom_reg_field_s2member_auto_eot_time"]) ? strtotime ($eot) : "";
787 $notes = $_pmr["ws_plugin__s2member_custom_reg_field_s2member_notes"];
788 /**/
789 $opt_in = ($_pmr["ws_plugin__s2member_custom_reg_field_opt_in"]) ? true : false;
790 /**/
791 if (!($fname = $user->first_name)) /* `Users -> Add New`. */
792 if ($_pmr["ws_plugin__s2member_custom_reg_field_first_name"])
793 $fname = $_pmr["ws_plugin__s2member_custom_reg_field_first_name"];
794 /**/
795 if (!($lname = $user->last_name)) /* `Users -> Add New`. */
796 if ($_pmr["ws_plugin__s2member_custom_reg_field_last_name"])
797 $lname = $_pmr["ws_plugin__s2member_custom_reg_field_last_name"];
798 /**/
799 if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_names"] && !$fname)
800 if ($login) /* Username and empty Last Name. */
801 eval ('$fname = trim ($login); $lname = "";');
802 /**/
803 $name = trim ($fname . " " . $lname); /* Both names. */
804 /**/
805 if (!($pass = $password)) /* Try s2Member's generator. */
806 if ($GLOBALS["ws_plugin__s2member_generate_password_return"])
807 $pass = $GLOBALS["ws_plugin__s2member_generate_password_return"];
808 /**/
809 if (!$pass) /* Also try the `Users -> Add New` form. */
810 if ($_pmr["pass1"]) /* Field in user-new.php. */
811 $pass = $_pmr["pass1"];
812 /**/
813 if ($pass) /* No Password nag. Update this globally. */
814 {
815 /* Note: `delete_user_setting()` uses cookies. */
816 delete_user_setting ("default_password_nag", $user_id);
817 update_user_option ($user_id, "default_password_nag", false, true);
818 }
819 /**/
820 update_user_option ($user_id, "s2member_registration_ip", $ip);
821 update_user_option ($user_id, "s2member_auto_eot_time", $auto_eot_time);
822 update_user_option ($user_id, "s2member_subscr_gateway", $subscr_gateway);
823 update_user_option ($user_id, "s2member_subscr_id", $subscr_id);
824 update_user_option ($user_id, "s2member_custom", $custom);
825 update_user_option ($user_id, "s2member_notes", $notes);
826 /**/
827 if (!$user->first_name && $fname)
828 update_user_meta ($user_id, "first_name", $fname);
829 /**/
830 if (!$user->last_name && $lname)
831 update_user_meta ($user_id, "last_name", $lname);
832 /**/
833 if (!$user->display_name || $user->display_name === $user->user_login)
834 {
835 if ($custom_reg_display_name === "full" && $name)
836 wp_update_user (array ("ID" => $user_id, "display_name" => $name));
837 else if ($custom_reg_display_name === "first" && $fname)
838 wp_update_user (array ("ID" => $user_id, "display_name" => $fname));
839 else if ($custom_reg_display_name === "last" && $lname)
840 wp_update_user (array ("ID" => $user_id, "display_name" => $lname));
841 else if ($custom_reg_display_name === "login" && $login)
842 wp_update_user (array ("ID" => $user_id, "display_name" => $login));
843 }
844 /**/
845 if (is_multisite ()) /* Should we handle Main Site permissions and Originating Blog ID#? */
846 {
847 if (!is_main_site () && strtotime ($user->user_registered) >= strtotime ("-10 seconds"))
848 remove_user_from_blog ($user_id, $current_site->blog_id); /* No Main Site Role. */
849 /**/
850 if (!get_user_meta ($user_id, "s2member_originating_blog", true)) /* Recorded yet? */
851 update_user_meta ($user_id, "s2member_originating_blog", $current_blog->blog_id);
852 }
853 /**/
854 if ($current_role !== $role) /* Only if NOT the current Role. */
855 $user->set_role ($role); /* s2Member. */
856 /**/
857 if ($ccaps && preg_match ("/^-all/", str_replace ("+", "", $ccaps)))
858 foreach ($user->allcaps as $cap => $cap_enabled)
859 if (preg_match ("/^access_s2member_ccap_/", $cap))
860 $user->remove_cap ($ccap = $cap);
861 /**/
862 if ($ccaps && preg_replace ("/^-all[\r\n\t\s;,]*/", "", str_replace ("+", "", $ccaps)))
863 foreach (preg_split ("/[\r\n\t\s;,]+/", preg_replace ("/^-all[\r\n\t\s;,]*/", "", str_replace ("+", "", $ccaps))) as $ccap)
864 if (strlen ($ccap = trim (strtolower (preg_replace ("/[^a-z_0-9]/i", "", $ccap)))))
865 $user->add_cap ("access_s2member_ccap_" . $ccap);
866 /**/
867 if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"])
868 foreach (json_decode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
869 {
870 $field_var = preg_replace ("/[^a-z0-9]/i", "_", strtolower ($field["id"]));
871 $field_id_class = preg_replace ("/_/", "-", $field_var);
872 /**/
873 if (isset ($_pmr["ws_plugin__s2member_custom_reg_field_" . $field_var]))
874 $fields[$field_var] = $_pmr["ws_plugin__s2member_custom_reg_field_" . $field_var];
875 }
876 /**/
877 update_user_option ($user_id, "s2member_custom_fields", $fields);
878 /**/
879 if ($level > 0) /* We ONLY process this if they are higher than Level#0. */
880 {
881 $pr_times = get_user_option ("s2member_paid_registration_times", $user_id);
882 $pr_times["level"] = (!$pr_times["level"]) ? time () : $pr_times["level"]; /* Preserve. */
883 $pr_times["level" . $level] = (!$pr_times["level" . $level]) ? time () : $pr_times["level" . $level];
884 update_user_option ($user_id, "s2member_paid_registration_times", $pr_times); /* Update now. */
885 }
886 /**/
887 eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
888 do_action ("ws_plugin__s2member_during_configure_user_registration_admin_side", get_defined_vars ());
889 unset ($__refs, $__v); /* Unset defined __refs, __v. */
890 }
891 /**/
892 if ($processed === "yes") /* If registration was processed by one of the routines above. */
893 {
894 if ($urls = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["registration_notification_urls"])
895 /**/
896 foreach (preg_split ("/[\r\n\t]+/", $urls) as $url) /* Notify each of the urls. */
897 /**/
898 if (($url = preg_replace ("/%%cv([0-9]+)%%/ei", 'urlencode(trim($cv[$1]))', $url)))
899 if (($url = preg_replace ("/%%role%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($role)), $url)))
900 if (($url = preg_replace ("/%%level%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($level)), $url)))
901 if (($url = preg_replace ("/%%ccaps%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($ccaps)), $url)))
902 if (($url = preg_replace ("/%%auto_eot_time%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($auto_eot_time)), $url)))
903 if (($url = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($fname)), $url)))
904 if (($url = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($lname)), $url)))
905 if (($url = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($name)), $url)))
906 if (($url = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($email)), $url)))
907 if (($url = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($login)), $url)))
908 if (($url = preg_replace ("/%%user_pass%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($pass)), $url)))
909 if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($ip)), $url)))
910 if (($url = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_id)), $url)))
911 {
912 if (is_array ($fields) && !empty ($fields))
913 foreach ($fields as $var => $val) /* Custom Registration Fields. */
914 if (!($url = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (maybe_serialize ($val))), $url)))
915 break;
916 /**/
917 if (($url = trim (preg_replace ("/%%(.+?)%%/i", "", $url))))
918 c_ws_plugin__s2member_utils_urls::remote ($url);
919 }
920 /**/
921 if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["registration_notification_recipients"])
922 {
923 $msg = $sbj = "( s2Member / API Notification Email ) - Registration";
924 $msg .= "\n\n"; /* Spacing in the message body. */
925 /**/
926 $msg .= "role: %%role%%\n";
927 $msg .= "level: %%level%%\n";
928 $msg .= "ccaps: %%ccaps%%\n";
929 $msg .= "auto_eot_time: %%auto_eot_time%%\n";
930 $msg .= "user_first_name: %%user_first_name%%\n";
931 $msg .= "user_last_name: %%user_last_name%%\n";
932 $msg .= "user_full_name: %%user_full_name%%\n";
933 $msg .= "user_email: %%user_email%%\n";
934 $msg .= "user_login: %%user_login%%\n";
935 $msg .= "user_pass: %%user_pass%%\n";
936 $msg .= "user_ip: %%user_ip%%\n";
937 $msg .= "user_id: %%user_id%%\n";
938 /**/
939 if (is_array ($fields) && !empty ($fields))
940 foreach ($fields as $var => $val)
941 $msg .= $var . ": %%" . $var . "%%\n";
942 /**/
943 $msg .= "cv0: %%cv0%%\n";
944 $msg .= "cv1: %%cv1%%\n";
945 $msg .= "cv2: %%cv2%%\n";
946 $msg .= "cv3: %%cv3%%\n";
947 $msg .= "cv4: %%cv4%%\n";
948 $msg .= "cv5: %%cv5%%\n";
949 $msg .= "cv6: %%cv6%%\n";
950 $msg .= "cv7: %%cv7%%\n";
951 $msg .= "cv8: %%cv8%%\n";
952 $msg .= "cv9: %%cv9%%";
953 /**/
954 if (($msg = preg_replace ("/%%cv([0-9]+)%%/ei", 'trim($cv[$1])', $msg)))
955 if (($msg = preg_replace ("/%%role%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($role), $msg)))
956 if (($msg = preg_replace ("/%%level%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($level), $msg)))
957 if (($msg = preg_replace ("/%%ccaps%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($ccaps), $msg)))
958 if (($msg = preg_replace ("/%%auto_eot_time%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($auto_eot_time), $msg)))
959 if (($msg = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($fname), $msg)))
960 if (($msg = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($lname), $msg)))
961 if (($msg = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($name), $msg)))
962 if (($msg = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($email), $msg)))
963 if (($msg = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($login), $msg)))
964 if (($msg = preg_replace ("/%%user_pass%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($pass), $msg)))
965 if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($ip), $msg)))
966 if (($msg = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $msg)))
967 {
968 if (is_array ($fields) && !empty ($fields))
969 foreach ($fields as $var => $val) /* Custom Registration Fields. */
970 if (!($msg = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (maybe_serialize ($val)), $msg)))
971 break;
972 /**/
973 if (($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg))))
974 foreach (c_ws_plugin__s2member_utils_strings::trim_deep (preg_split ("/;+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["registration_notification_recipients"])) as $recipient)
975 ($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 ()), "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") : null;
976 }
977 }
978 /**/
979 if ($url = $GLOBALS["ws_plugin__s2member_registration_return_url"])
980 /**/
981 if (($url = preg_replace ("/%%cv([0-9]+)%%/ei", 'urlencode(trim($cv[$1]))', $url)))
982 if (($url = preg_replace ("/%%role%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($role)), $url)))
983 if (($url = preg_replace ("/%%level%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($level)), $url)))
984 if (($url = preg_replace ("/%%ccaps%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($ccaps)), $url)))
985 if (($url = preg_replace ("/%%auto_eot_time%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($auto_eot_time)), $url)))
986 if (($url = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($fname)), $url)))
987 if (($url = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($lname)), $url)))
988 if (($url = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($name)), $url)))
989 if (($url = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($email)), $url)))
990 if (($url = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($login)), $url)))
991 if (($url = preg_replace ("/%%user_pass%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($pass)), $url)))
992 if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($ip)), $url)))
993 if (($url = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_id)), $url)))
994 {
995 if (is_array ($fields) && !empty ($fields))
996 foreach ($fields as $var => $val) /* Custom Registration Fields. */
997 if (!($url = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (maybe_serialize ($val))), $url)))
998 break;
999 /**/
1000 if (($url = trim ($url))) /* Preserve remaining Replacements. */
1001 /* Because the parent routine may perform replacements too. */
1002 $GLOBALS["ws_plugin__s2member_registration_return_url"] = $url;
1003 }
1004 /**/
1005 c_ws_plugin__s2member_list_servers::process_list_servers ($role, $level, $login, $pass, $email, $fname, $lname, $ip, $opt_in, true, $user_id);
1006 /*
1007 Suppress errors here in case this routine is fired in unexpected locations; or with odd output buffering techniques.
1008 @todo: It may also be impossible to delete cookies when fired inside: `/wp-activate.php`.
1009 */
1010 if (!headers_sent ()) /* Only if headers are NOT yet sent. */
1011 {
1012 @setcookie ("s2member_subscr_gateway", "", time () + 31556926, COOKIEPATH, COOKIE_DOMAIN) . @setcookie ("s2member_subscr_gateway", "", time () + 31556926, SITECOOKIEPATH, COOKIE_DOMAIN);
1013 @setcookie ("s2member_subscr_id", "", time () + 31556926, COOKIEPATH, COOKIE_DOMAIN) . @setcookie ("s2member_subscr_id", "", time () + 31556926, SITECOOKIEPATH, COOKIE_DOMAIN);
1014 @setcookie ("s2member_custom", "", time () + 31556926, COOKIEPATH, COOKIE_DOMAIN) . @setcookie ("s2member_custom", "", time () + 31556926, SITECOOKIEPATH, COOKIE_DOMAIN);
1015 @setcookie ("s2member_item_number", "", time () + 31556926, COOKIEPATH, COOKIE_DOMAIN) . @setcookie ("s2member_item_number", "", time () + 31556926, SITECOOKIEPATH, COOKIE_DOMAIN);
1016 }
1017 /**/
1018 eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
1019 do_action ("ws_plugin__s2member_during_configure_user_registration", get_defined_vars ());
1020 unset ($__refs, $__v); /* Unset defined __refs, __v. */
1021 }
1022 }
1023 /**/
1024 eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
1025 do_action ("ws_plugin__s2member_after_configure_user_registration", get_defined_vars ());
1026 unset ($__refs, $__v); /* Unset defined __refs, __v. */
1027 /**/
1028 return; /* Return for uniformity. */
1029 }
1030 }
1031 }
1032 ?>