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

1,036 lines 69.3 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/Profile 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"]) && is_array ($meta["s2member_ms_signup_meta"])) ? $meta["s2member_ms_signup_meta"] : array ()));
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"]) && is_array ($meta["s2member_ms_signup_meta"])) ? $meta["s2member_ms_signup_meta"] : array ()));
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[] = $error_code;
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) . exit (); /* Safe, like: ``register_new_user()``. */
340 }
341 }
342 }
343 else if (($ms = wpmu_validate_user_signup ($user_login, $user_email)) && isset ($ms["errors"]) && is_wp_error ($ms["errors"]) && $ms["errors"]->get_error_code ())
344 $errors->add ($ms["errors"]->get_error_code (), $ms["errors"]->get_error_message ());
345 /**/
346 return apply_filters ("ws_plugin__s2member_ms_register_existing_user", $errors, get_defined_vars ());
347 }
348 /**
349 * For Multisite Networks, this function is used to add a User to an existing Blog; and to simulate ``wp_create_user()`` behavior.
350 *
351 * The ``$user_id`` value will be returned by this function, just like ``wp_create_user()`` does.
352 * This function will fire the Hook `user_register`.
353 *
354 * @package s2Member\Registrations
355 * @since 3.5
356 *
357 * @param str $user_login Expects the User's Username.
358 * @param str $user_email Expects the User's Email Address.
359 * @param str $user_pass Expects the User's plain text Password.
360 * @param int|str $user_id Optional. A numeric WordPress® User ID.
361 * If unspecified, a lookup is performed with ``$user_login`` and ``$user_email``.
362 * @return int|false Returns numeric ``$user_id`` on success, else false on failure.
363 */
364 public static function ms_create_existing_user ($user_login = FALSE, $user_email = FALSE, $user_pass = FALSE, $user_id = FALSE)
365 {
366 eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
367 do_action ("ws_plugin__s2member_before_ms_create_existing_user", get_defined_vars ());
368 unset ($__refs, $__v); /* Unset defined __refs, __v. */
369 /**/
370 if (is_multisite ()) /* This event should ONLY be processed with Multisite Networking. */
371 {
372 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)
373 {
374 $role = get_option ("default_role"); /* Use default Role. */
375 add_existing_user_to_blog (array ("user_id" => $user_id, "role" => $role)); /* Add User. */
376 wp_update_user (array ("ID" => $user_id, "user_pass" => $user_pass)); /* Update to ``$user_pass``. */
377 /**/
378 do_action ("ws_plugin__s2member_during_ms_create_existing_user", get_defined_vars ());
379 do_action ("user_register", $user_id); /* So s2Member knows a User is registering. */
380 /**/
381 return apply_filters ("ws_plugin__s2member_ms_create_existing_user", $user_id, get_defined_vars ());
382 }
383 }
384 /**/
385 return apply_filters ("ws_plugin__s2member_ms_create_existing_user", false, get_defined_vars ());
386 }
387 /**
388 * Configures all new Users.
389 *
390 * The Hook `user_register` is also fired by calling:
391 * ``c_ws_plugin__s2member_registrations::ms_create_existing_user()`` and/or ``wpmu_create_user()``.
392 *
393 * This function also receives hand-offs from s2Member's handlers for these two Hooks:
394 * `wpmu_activate_user` and `wpmu_activate_blog`.
395 *
396 * @package s2Member\Registrations
397 * @since 3.5
398 *
399 * @attaches-to ``add_action("user_register");``
400 *
401 * @param int|str $user_id A numeric WordPress® User ID.
402 * @param str $password Optional in most cases. A User's plain text Password. If unspecified, attempts are made to collect the plain text Password from other sources.
403 * @param array $meta Optional in most cases. Defaults to false. An array of meta data for a User/Member.
404 * @return null No return value. Returns `null` in possible every scenario.
405 *
406 * @todo Impossible to delete cookies when fired inside: `/wp-activate.php`?
407 */
408 public static function configure_user_registration ($user_id = FALSE, $password = FALSE, $meta = FALSE)
409 {
410 global $wpdb; /* Global database object reference. */
411 global $pagenow; /* We need this to detect the current administration page. */
412 global $current_site, $current_blog; /* Adds support for Multisite Networking. */
413 static $email_config, $processed; /* Static vars prevent duplicate processing. */
414 /**/
415 eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
416 do_action ("ws_plugin__s2member_before_configure_user_registration", get_defined_vars ());
417 unset ($__refs, $__v); /* Unset defined __refs, __v. */
418 /**/
419 /* With Multisite Networking, we need this to run on `user_register` ahead of `wpmu_activate_[user|blog]`. */
420 if (!isset ($email_config) && ($email_config = true)) /* Anytime this routine is fired; we configure email. */
421 c_ws_plugin__s2member_email_configs::email_config (); /* Configures `From:` email header. */
422 /**/
423 $_p = /* Grab global ``$_POST`` array here, if it's possible to do so. */ (isset ($_POST)) ? $_POST : null;
424 $rvs = (isset ($GLOBALS["ws_plugin__s2member_registration_vars"])) ? $GLOBALS["ws_plugin__s2member_registration_vars"] : null;
425 /**/
426 if (!$processed /* Process only once. Safeguard this routine against duplicate processing via plugins ( or even WordPress® itself ). */)
427 /**/
428 if ( /* We MUST have at least ONE of these three arrays. Any of these will do in most cases. */is_array ($_p) || is_array ($meta) || is_array ($rvs))
429 /**/
430 if (!(is_multisite () && is_blog_admin () && $pagenow === "user-new.php" && isset ($_p["noconfirmation"]) && is_super_admin () && !is_array ($meta)))
431 if (!(preg_match ("/\/wp-activate\.php/", $_SERVER["REQUEST_URI"]) && !is_array ($meta)) /* If activating; we absolutely MUST have a ``$meta`` array. */)
432 if (!(c_ws_plugin__s2member_utils_conds::bp_is_installed () && bp_is_activation_page () && !is_array ($meta)) /* If activating; MUST have ``$meta``. */)
433 if (!(c_ws_plugin__s2member_utils_conds::pro_is_installed () && c_ws_plugin__s2member_pro_remote_ops::is_remote_op ("create_user") && !is_array ($rvs)))
434 /**/
435 if ($user_id && is_object ($user = new WP_User ($user_id)) && !empty ($user->ID) && ($user_id = $user->ID) && ($processed = true))
436 {
437 settype /* Force arrays here. */ ($_p, "array") . settype ($meta, "array") . settype ($rvs, "array");
438 /**/
439 $_p = c_ws_plugin__s2member_utils_strings::trim_deep (stripslashes_deep ($_p));
440 $meta = c_ws_plugin__s2member_utils_strings::trim_deep (stripslashes_deep ($meta));
441 $rvs = c_ws_plugin__s2member_utils_strings::trim_deep /* Do NOT strip. */ ($rvs);
442 /**/
443 foreach ($_p as $_key => $_value) /* Scan ``$_p`` vars; adding `custom_reg_field` keys. */
444 if (preg_match ("/^ws_plugin__s2member_user_new_/", $_key)) /* Look for keys. */
445 if ($_key = str_replace ("_user_new_", "_custom_reg_field_", $_key))
446 $_p[$_key] = $_value; /* Add each of these key conversions. */
447 unset /* Just a little housekeeping here. */ ($_key, $_value);
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, $rvs); /* Merge all of these arrays together now, in this specific order. */
453 unset ($_p, $meta, $rvs); /* These variables can all be unset now; we have them all in the ``$_pmr`` array. */
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 (!headers_sent ()) ? delete_user_setting ("default_password_nag", $user_id) : null;
515 update_user_option ($user_id, "default_password_nag", false, true);
516 }
517 /**/
518 update_user_option ($user_id, "s2member_registration_ip", $ip);
519 update_user_option ($user_id, "s2member_auto_eot_time", $auto_eot_time);
520 update_user_option ($user_id, "s2member_subscr_gateway", $subscr_gateway);
521 update_user_option ($user_id, "s2member_subscr_id", $subscr_id);
522 update_user_option ($user_id, "s2member_custom", $custom);
523 update_user_option ($user_id, "s2member_notes", $notes);
524 /**/
525 if (!$user->first_name && $fname)
526 update_user_meta ($user_id, "first_name", $fname);
527 /**/
528 if (!$user->last_name && $lname)
529 update_user_meta ($user_id, "last_name", $lname);
530 /**/
531 if (!$user->display_name || $user->display_name === $user->user_login)
532 {
533 if ($custom_reg_display_name === "full" && $name)
534 wp_update_user (array ("ID" => $user_id, "display_name" => $name));
535 else if ($custom_reg_display_name === "first" && $fname)
536 wp_update_user (array ("ID" => $user_id, "display_name" => $fname));
537 else if ($custom_reg_display_name === "last" && $lname)
538 wp_update_user (array ("ID" => $user_id, "display_name" => $lname));
539 else if ($custom_reg_display_name === "login" && $login)
540 wp_update_user (array ("ID" => $user_id, "display_name" => $login));
541 }
542 /**/
543 if (is_multisite ()) /* Should we handle Main Site permissions and Originating Blog ID#? */
544 {
545 if (!is_main_site () && strtotime ($user->user_registered) >= strtotime ("-10 seconds"))
546 remove_user_from_blog ($user_id, $current_site->blog_id); /* No Main Site Role. */
547 /**/
548 if (!get_user_meta ($user_id, "s2member_originating_blog", true)) /* Recorded yet? */
549 update_user_meta ($user_id, "s2member_originating_blog", $current_blog->blog_id);
550 }
551 /**/
552 if ($current_role !== $role) /* Only if NOT the current Role. */
553 $user->set_role ($role); /* s2Member. */
554 /**/
555 if ($ccaps && preg_match ("/^-all/", str_replace ("+", "", $ccaps)))
556 foreach ($user->allcaps as $cap => $cap_enabled)
557 if (preg_match ("/^access_s2member_ccap_/", $cap))
558 $user->remove_cap ($ccap = $cap);
559 /**/
560 if ($ccaps && preg_replace ("/^-all[\r\n\t\s;,]*/", "", str_replace ("+", "", $ccaps)))
561 foreach (preg_split ("/[\r\n\t\s;,]+/", preg_replace ("/^-all[\r\n\t\s;,]*/", "", str_replace ("+", "", $ccaps))) as $ccap)
562 if (strlen ($ccap = trim (strtolower (preg_replace ("/[^a-z_0-9]/i", "", $ccap)))))
563 $user->add_cap ("access_s2member_ccap_" . $ccap);
564 /**/
565 if (!($fields = array ()) && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"])
566 foreach (json_decode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
567 {
568 $field_var = preg_replace ("/[^a-z0-9]/i", "_", strtolower ($field["id"]));
569 $field_id_class = preg_replace ("/_/", "-", $field_var);
570 /**/
571 if (isset ($_pmr["ws_plugin__s2member_custom_reg_field_" . $field_var]))
572 $fields[$field_var] = $_pmr["ws_plugin__s2member_custom_reg_field_" . $field_var];
573 }
574 /**/
575 if (!empty ($fields)) /* Only if NOT empty. */
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"] = (empty ($pr_times["level"])) ? time () : $pr_times["level"];
582 $pr_times["level" . $level] = (empty ($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)) && !empty ($subscr_payment["subscr_gateway"]))
592 {
593 $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 ());
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)) && !empty ($subscr_eot["subscr_gateway"]))
598 {
599 $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 ());
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 /**/
618 $processed = "yes"; /* Mark this as yes. */
619 /**/
620 $current_role = c_ws_plugin__s2member_user_access::user_access_role ($user);
621 $role = ""; /* Initialize ``$role`` to an empty string here, before processing. */
622 $role = (!$role && ($level = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_level"]) > 0) ? "s2member_level" . $level : $role;
623 $role = (!$role && ($level = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_level"]) === "0") ? "subscriber" : $role;
624 $role = (!$role && $current_role) ? $current_role : $role; /* Use existing Role? */
625 $role = (!$role) ? get_option ("default_role") : $role; /* Otherwise default. */
626 /**/
627 $level = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_level"];
628 $level = (!$level && preg_match ("/^(administrator|editor|author|contributor)$/i", $role)) ? "4" : $level;
629 $level = (!$level && preg_match ("/^s2member_level[1-9][0-9]*$/i", $role)) ? preg_replace ("/^s2member_level/", "", $role) : $level;
630 $level = (!$level && preg_match ("/^subscriber$/i", $role)) ? "0" : $level;
631 $level = (!$level) ? "0" : $level;
632 /**/
633 $ccaps = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_ccaps"];
634 /**/
635 $email = $user->user_email;
636 $login = $user->user_login;
637 $ip = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_registration_ip"];
638 $ip = (!$ip) ? $_SERVER["REMOTE_ADDR"] : $ip; /* Else use environment variable. */
639 $custom = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_custom"];
640 $subscr_id = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_subscr_id"];
641 $subscr_gateway = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_subscr_gateway"];
642 $cv = preg_split ("/\|/", (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_custom"]);
643 /**/
644 $auto_eot_time = ($eot = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_auto_eot_time"]) ? strtotime ($eot) : "";
645 $notes = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_notes"];
646 /**/
647 $opt_in = (!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_opt_in"]) ? true : false;
648 $opt_in = (!$opt_in && !empty ($_pmr["ws_plugin__s2member_custom_reg_field_opt_in"])) ? true : $opt_in;
649 /**/
650 if (!($fname = $user->first_name))
651 if (!empty ($_pmr["ws_plugin__s2member_custom_reg_field_first_name"]))
652 $fname = (string)$_pmr["ws_plugin__s2member_custom_reg_field_first_name"];
653 /**/
654 if (!$fname) /* Also try BuddyPress. */
655 if (!empty ($_pmr["field_1"])) /* BuddyPress? */
656 $fname = trim (preg_replace ("/ (.*)$/", "", (string)$_pmr["field_1"]));
657 /**/
658 if (!($lname = $user->last_name))
659 if (!empty ($_pmr["ws_plugin__s2member_custom_reg_field_last_name"]))
660 $lname = (string)$_pmr["ws_plugin__s2member_custom_reg_field_last_name"];
661 /**/
662 if (!$lname) /* Also try BuddyPress. */
663 if (!empty ($_pmr["field_1"]) && preg_match ("/^(.+?) (.+)$/", (string)$_pmr["field_1"]))
664 $lname = trim (preg_replace ("/^(.+?) (.+)$/", "$2", (string)$_pmr["field_1"]));
665 /**/
666 if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_names"] && !$fname)
667 if ($login) /* Username and empty Last Name. */
668 eval ('$fname = trim ($login); $lname = "";');
669 /**/
670 $name = trim ($fname . " " . $lname); /* Both names. */
671 /**/
672 if (!($pass = $password)) /* Try s2Member's generator. */
673 if (!empty ($GLOBALS["ws_plugin__s2member_generate_password_return"]))
674 $pass = (string)$GLOBALS["ws_plugin__s2member_generate_password_return"];
675 /**/
676 if (!$pass) /* Also try BuddyPress Password. */
677 if (!empty ($_pmr["signup_password"])) /* BuddyPress? */
678 $pass = (string)$_pmr["signup_password"];
679 /**/
680 if ($pass) /* No Password nag. Update this globally. */
681 {
682 (!headers_sent ()) ? delete_user_setting ("default_password_nag", $user_id) : null;
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 (!($fields = array ()) && $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 if (!empty ($fields)) /* Only if NOT empty. */
744 update_user_option ($user_id, "s2member_custom_fields", $fields);
745 /**/
746 if ($level > 0) /* We ONLY process this if they are higher than Level#0. */
747 {
748 $pr_times = get_user_option ("s2member_paid_registration_times", $user_id);
749 $pr_times["level"] = (empty ($pr_times["level"])) ? time () : $pr_times["level"];
750 $pr_times["level" . $level] = (empty ($pr_times["level" . $level])) ? time () : $pr_times["level" . $level];
751 update_user_option ($user_id, "s2member_paid_registration_times", $pr_times); /* Update now. */
752 }
753 /**/
754 eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
755 do_action ("ws_plugin__s2member_during_configure_user_registration_front_side_free", get_defined_vars ());
756 do_action ("ws_plugin__s2member_during_configure_user_registration_front_side", get_defined_vars ());
757 unset ($__refs, $__v); /* Unset defined __refs, __v. */
758 }
759 /**/
760 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")))
761 { /* Can only be processed through `/user-new.php` in the Admin panel, or through Remote Op: `create_user`. */
762 /**/
763 $processed = "yes"; /* Mark this as yes, to indicate that a routine was processed. */
764 /**/
765 $current_role = c_ws_plugin__s2member_user_access::user_access_role ($user);
766 $role = ""; /* Initialize $role to an empty string here, before processing. */
767 $role = (!$role && ($level = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_level"]) > 0) ? "s2member_level" . $level : $role;
768 $role = (!$role && ($level = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_level"]) === "0") ? "subscriber" : $role;
769 $role = (!$role && $current_role) ? $current_role : $role; /* Use existing Role? */
770 $role = (!$role) ? get_option ("default_role") : $role; /* Otherwise default. */
771 /**/
772 $level = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_level"];
773 $level = (!$level && preg_match ("/^(administrator|editor|author|contributor)$/i", $role)) ? "4" : $level;
774 $level = (!$level && preg_match ("/^s2member_level[1-9][0-9]*$/i", $role)) ? preg_replace ("/^s2member_level/", "", $role) : $level;
775 $level = (!$level && preg_match ("/^subscriber$/i", $role)) ? "0" : $level;
776 $level = (!$level) ? "0" : $level;
777 /**/
778 $ccaps = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_ccaps"];
779 /**/
780 $email = $user->user_email;
781 $login = $user->user_login;
782 $ip = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_registration_ip"];
783 $custom = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_custom"];
784 $subscr_id = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_subscr_id"];
785 $subscr_gateway = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_subscr_gateway"];
786 $cv = preg_split ("/\|/", (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_custom"]);
787 /**/
788 $auto_eot_time = ($eot = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_auto_eot_time"]) ? strtotime ($eot) : "";
789 $notes = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_notes"];
790 /**/
791 $opt_in = (!empty ($_pmr["ws_plugin__s2member_custom_reg_field_opt_in"])) ? true : false;
792 /**/
793 if (!($fname = $user->first_name)) /* `Users -> Add New`. */
794 if (!empty ($_pmr["ws_plugin__s2member_custom_reg_field_first_name"]))
795 $fname = (string)$_pmr["ws_plugin__s2member_custom_reg_field_first_name"];
796 /**/
797 if (!($lname = $user->last_name)) /* `Users -> Add New`. */
798 if (!empty ($_pmr["ws_plugin__s2member_custom_reg_field_last_name"]))
799 $lname = (string)$_pmr["ws_plugin__s2member_custom_reg_field_last_name"];
800 /**/
801 if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_names"] && !$fname)
802 if ($login) /* Username and empty Last Name. */
803 eval ('$fname = trim ($login); $lname = "";');
804 /**/
805 $name = trim ($fname . " " . $lname); /* Both names. */
806 /**/
807 if (!($pass = $password)) /* Try s2Member's generator. */
808 if (!empty ($GLOBALS["ws_plugin__s2member_generate_password_return"]))
809 $pass = (string)$GLOBALS["ws_plugin__s2member_generate_password_return"];
810 /**/
811 if (!$pass) /* Also try the `Users -> Add New` form. */
812 if (!empty ($_pmr["pass1"])) /* Field in `/user-new.php`. */
813 $pass = (string)$_pmr["pass1"];
814 /**/
815 if ($pass) /* No Password nag. Update this globally. */
816 {
817 (!headers_sent ()) ? delete_user_setting ("default_password_nag", $user_id) : null;
818 update_user_option ($user_id, "default_password_nag", false, true);
819 }
820 /**/
821 update_user_option ($user_id, "s2member_registration_ip", $ip);
822 update_user_option ($user_id, "s2member_auto_eot_time", $auto_eot_time);
823 update_user_option ($user_id, "s2member_subscr_gateway", $subscr_gateway);
824 update_user_option ($user_id, "s2member_subscr_id", $subscr_id);
825 update_user_option ($user_id, "s2member_custom", $custom);
826 update_user_option ($user_id, "s2member_notes", $notes);
827 /**/
828 if (!$user->first_name && $fname)
829 update_user_meta ($user_id, "first_name", $fname);
830 /**/
831 if (!$user->last_name && $lname)
832 update_user_meta ($user_id, "last_name", $lname);
833 /**/
834 if (!$user->display_name || $user->display_name === $user->user_login)
835 {
836 if ($custom_reg_display_name === "full" && $name)
837 wp_update_user (array ("ID" => $user_id, "display_name" => $name));
838 else if ($custom_reg_display_name === "first" && $fname)
839 wp_update_user (array ("ID" => $user_id, "display_name" => $fname));
840 else if ($custom_reg_display_name === "last" && $lname)
841 wp_update_user (array ("ID" => $user_id, "display_name" => $lname));
842 else if ($custom_reg_display_name === "login" && $login)
843 wp_update_user (array ("ID" => $user_id, "display_name" => $login));
844 }
845 /**/
846 if (is_multisite ()) /* Should we handle Main Site permissions and Originating Blog ID#? */
847 {
848 if (!is_main_site () && strtotime ($user->user_registered) >= strtotime ("-10 seconds"))
849 remove_user_from_blog ($user_id, $current_site->blog_id); /* No Main Site Role. */
850 /**/
851 if (!get_user_meta ($user_id, "s2member_originating_blog", true)) /* Recorded yet? */
852 update_user_meta ($user_id, "s2member_originating_blog", $current_blog->blog_id);
853 }
854 /**/
855 if ($current_role !== $role) /* Only if NOT the current Role. */
856 $user->set_role ($role); /* s2Member. */
857 /**/
858 if ($ccaps && preg_match ("/^-all/", str_replace ("+", "", $ccaps)))
859 foreach ($user->allcaps as $cap => $cap_enabled)
860 if (preg_match ("/^access_s2member_ccap_/", $cap))
861 $user->remove_cap ($ccap = $cap);
862 /**/
863 if ($ccaps && preg_replace ("/^-all[\r\n\t\s;,]*/", "", str_replace ("+", "", $ccaps)))
864 foreach (preg_split ("/[\r\n\t\s;,]+/", preg_replace ("/^-all[\r\n\t\s;,]*/", "", str_replace ("+", "", $ccaps))) as $ccap)
865 if (strlen ($ccap = trim (strtolower (preg_replace ("/[^a-z_0-9]/i", "", $ccap)))))
866 $user->add_cap ("access_s2member_ccap_" . $ccap);
867 /**/
868 if (!($fields = array ()) && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"])
869 foreach (json_decode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
870 {
871 $field_var = preg_replace ("/[^a-z0-9]/i", "_", strtolower ($field["id"]));
872 $field_id_class = preg_replace ("/_/", "-", $field_var);
873 /**/
874 if (isset ($_pmr["ws_plugin__s2member_custom_reg_field_" . $field_var]))
875 $fields[$field_var] = $_pmr["ws_plugin__s2member_custom_reg_field_" . $field_var];
876 }
877 /**/
878 if (!empty ($fields)) /* Only if NOT empty. */
879 update_user_option ($user_id, "s2member_custom_fields", $fields);
880 /**/
881 if ($level > 0) /* We ONLY process this if they are higher than Level#0. */
882 {
883 $pr_times = get_user_option ("s2member_paid_registration_times", $user_id);
884 $pr_times["level"] = (empty ($pr_times["level"])) ? time () : $pr_times["level"];
885 $pr_times["level" . $level] = (empty ($pr_times["level" . $level])) ? time () : $pr_times["level" . $level];
886 update_user_option ($user_id, "s2member_paid_registration_times", $pr_times); /* Update now. */
887 }
888 /**/
889 eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
890 do_action ("ws_plugin__s2member_during_configure_user_registration_admin_side", get_defined_vars ());
891 unset ($__refs, $__v); /* Unset defined __refs, __v. */
892 }
893 /**/
894 if ($processed === "yes") /* If registration was processed by one of the routines above. */
895 {
896 if ($urls = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["registration_notification_urls"])
897 /**/
898 foreach (preg_split ("/[\r\n\t]+/", $urls) as $url) /* Notify each of the URLs. */
899 /**/
900 if (($url = preg_replace ("/%%cv([0-9]+)%%/ei", 'urlencode(trim($cv[$1]))', $url)))
901 if (($url = preg_replace ("/%%role%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($role)), $url)))
902 if (($url = preg_replace ("/%%level%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($level)), $url)))
903 if (($url = preg_replace ("/%%ccaps%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($ccaps)), $url)))
904 if (($url = preg_replace ("/%%auto_eot_time%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($auto_eot_time)), $url)))
905 if (($url = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($fname)), $url)))
906 if (($url = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($lname)), $url)))
907 if (($url = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($name)), $url)))
908 if (($url = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($email)), $url)))
909 if (($url = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($login)), $url)))
910 if (($url = preg_replace ("/%%user_pass%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($pass)), $url)))
911 if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($ip)), $url)))
912 if (($url = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_id)), $url)))
913 {
914 foreach ($fields as $var => $val) /* Custom Fields. */
915 if (!($url = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (maybe_serialize ($val))), $url)))
916 break;
917 /**/
918 if (($url = trim (preg_replace ("/%%(.+?)%%/i", "", $url))))
919 c_ws_plugin__s2member_utils_urls::remote ($url);
920 }
921 /**/
922 if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["registration_notification_recipients"])
923 {
924 $email_configs_were_on = c_ws_plugin__s2member_email_configs::email_config_status ();
925 c_ws_plugin__s2member_email_configs::email_config_release ();
926 /**/
927 $msg = $sbj = "( s2Member / API Notification Email ) - Registration";
928 $msg .= "\n\n"; /* Spacing in the message body. */
929 /**/
930 $msg .= "role: %%role%%\n";
931 $msg .= "level: %%level%%\n";
932 $msg .= "ccaps: %%ccaps%%\n";
933 $msg .= "auto_eot_time: %%auto_eot_time%%\n";
934 $msg .= "user_first_name: %%user_first_name%%\n";
935 $msg .= "user_last_name: %%user_last_name%%\n";
936 $msg .= "user_full_name: %%user_full_name%%\n";
937 $msg .= "user_email: %%user_email%%\n";
938 $msg .= "user_login: %%user_login%%\n";
939 $msg .= "user_pass: %%user_pass%%\n";
940 $msg .= "user_ip: %%user_ip%%\n";
941 $msg .= "user_id: %%user_id%%\n";
942 /**/
943 foreach ($fields as $var => $val)
944 $msg .= $var . ": %%" . $var . "%%\n";
945 /**/
946 $msg .= "cv0: %%cv0%%\n";
947 $msg .= "cv1: %%cv1%%\n";
948 $msg .= "cv2: %%cv2%%\n";
949 $msg .= "cv3: %%cv3%%\n";
950 $msg .= "cv4: %%cv4%%\n";
951 $msg .= "cv5: %%cv5%%\n";
952 $msg .= "cv6: %%cv6%%\n";
953 $msg .= "cv7: %%cv7%%\n";
954 $msg .= "cv8: %%cv8%%\n";
955 $msg .= "cv9: %%cv9%%";
956 /**/
957 if (($msg = preg_replace ("/%%cv([0-9]+)%%/ei", 'trim($cv[$1])', $msg)))
958 if (($msg = preg_replace ("/%%role%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($role), $msg)))
959 if (($msg = preg_replace ("/%%level%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($level), $msg)))
960 if (($msg = preg_replace ("/%%ccaps%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($ccaps), $msg)))
961 if (($msg = preg_replace ("/%%auto_eot_time%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($auto_eot_time), $msg)))
962 if (($msg = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($fname), $msg)))
963 if (($msg = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($lname), $msg)))
964 if (($msg = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($name), $msg)))
965 if (($msg = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($email), $msg)))
966 if (($msg = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($login), $msg)))
967 if (($msg = preg_replace ("/%%user_pass%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($pass), $msg)))
968 if (($msg = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($ip), $msg)))
969 if (($msg = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds ($user_id), $msg)))
970 {
971 foreach ($fields as $var => $val) /* Custom Fields. */
972 if (!($msg = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (maybe_serialize ($val)), $msg)))
973 break;
974 /**/
975 if ($sbj && ($msg = trim (preg_replace ("/%%(.+?)%%/i", "", $msg)))) /* Still have a ``$sbj`` and a ``$msg``? */
976 /**/
977 foreach (c_ws_plugin__s2member_utils_strings::parse_emails ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["registration_notification_recipients"]) as $recipient)
978 wp_mail ($recipient, apply_filters ("ws_plugin__s2member_registration_notification_email_sbj", $sbj, get_defined_vars ()), apply_filters ("ws_plugin__s2member_registration_notification_email_msg", $msg, get_defined_vars ()), "Content-Type: text/plain; charset=utf-8");
979 }
980 /**/
981 if ($email_configs_were_on) /* Back on? */
982 c_ws_plugin__s2member_email_configs::email_config ();
983 }
984 /**/
985 if ($url = $GLOBALS["ws_plugin__s2member_registration_return_url"])
986 /**/
987 if (($url = preg_replace ("/%%cv([0-9]+)%%/ei", 'urlencode(trim($cv[$1]))', $url)))
988 if (($url = preg_replace ("/%%role%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($role)), $url)))
989 if (($url = preg_replace ("/%%level%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($level)), $url)))
990 if (($url = preg_replace ("/%%ccaps%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($ccaps)), $url)))
991 if (($url = preg_replace ("/%%auto_eot_time%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($auto_eot_time)), $url)))
992 if (($url = preg_replace ("/%%user_first_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($fname)), $url)))
993 if (($url = preg_replace ("/%%user_last_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($lname)), $url)))
994 if (($url = preg_replace ("/%%user_full_name%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($name)), $url)))
995 if (($url = preg_replace ("/%%user_email%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($email)), $url)))
996 if (($url = preg_replace ("/%%user_login%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($login)), $url)))
997 if (($url = preg_replace ("/%%user_pass%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($pass)), $url)))
998 if (($url = preg_replace ("/%%user_ip%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($ip)), $url)))
999 if (($url = preg_replace ("/%%user_id%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode ($user_id)), $url)))
1000 {
1001 foreach ($fields as $var => $val) /* Custom Fields. */
1002 if (!($url = preg_replace ("/%%" . preg_quote ($var, "/") . "%%/i", c_ws_plugin__s2member_utils_strings::esc_ds (urlencode (maybe_serialize ($val))), $url)))
1003 break;
1004 /**/
1005 if (($url = trim ($url))) /* Preserve remaining Replacements; because the parent routine may perform replacements too. */
1006 $GLOBALS["ws_plugin__s2member_registration_return_url"] = $url;
1007 }
1008 /**/
1009 c_ws_plugin__s2member_list_servers::process_list_servers ($role, $level, $login, $pass, $email, $fname, $lname, $ip, $opt_in, true, $user_id);
1010 /*
1011 Suppress errors here in case this routine is fired in unexpected locations; or with odd output buffering techniques.
1012 @todo It may also be impossible to delete cookies when fired inside: `/wp-activate.php`.
1013 */
1014 if (!headers_sent ()) /* Only if headers are NOT yet sent. */
1015 {
1016 @setcookie ("s2member_subscr_gateway", "", time () + 31556926, COOKIEPATH, COOKIE_DOMAIN) . @setcookie ("s2member_subscr_gateway", "", time () + 31556926, SITECOOKIEPATH, COOKIE_DOMAIN);
1017 @setcookie ("s2member_subscr_id", "", time () + 31556926, COOKIEPATH, COOKIE_DOMAIN) . @setcookie ("s2member_subscr_id", "", time () + 31556926, SITECOOKIEPATH, COOKIE_DOMAIN);
1018 @setcookie ("s2member_custom", "", time () + 31556926, COOKIEPATH, COOKIE_DOMAIN) . @setcookie ("s2member_custom", "", time () + 31556926, SITECOOKIEPATH, COOKIE_DOMAIN);
1019 @setcookie ("s2member_item_number", "", time () + 31556926, COOKIEPATH, COOKIE_DOMAIN) . @setcookie ("s2member_item_number", "", time () + 31556926, SITECOOKIEPATH, COOKIE_DOMAIN);
1020 }
1021 /**/
1022 eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
1023 do_action ("ws_plugin__s2member_during_configure_user_registration", get_defined_vars ());
1024 unset ($__refs, $__v); /* Unset defined __refs, __v. */
1025 }
1026 }
1027 /**/
1028 eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
1029 do_action ("ws_plugin__s2member_after_configure_user_registration", get_defined_vars ());
1030 unset ($__refs, $__v); /* Unset defined __refs, __v. */
1031 /**/
1032 return; /* Return for uniformity. */
1033 }
1034 }
1035 }
1036 ?>