PluginProbe
s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions / 110927
s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions v110927
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 / includes / classes / registrations.inc.php

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

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