PageRenderTime 30ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/wp-content/plugins/s2member/includes/classes/registrations.inc.php

https://gitlab.com/Gashler/dp
PHP | 783 lines | 477 code | 110 blank | 196 comment | 268 complexity | 03e5f165b39877419100923f8d2bff67 MD5 | raw file
  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. if (!class_exists ("c_ws_plugin__s2member_registrations"))
  20. {
  21. /**
  22. * Registration handlers.
  23. *
  24. * @package s2Member\Registrations
  25. * @since 3.5
  26. */
  27. class c_ws_plugin__s2member_registrations
  28. {
  29. /**
  30. * Filters WordPress® randomly generated Passwords.
  31. *
  32. * Also captures Passwords generated by WordPress®
  33. * *(with a global var)*, for internal use.
  34. *
  35. * @package s2Member\Registrations
  36. * @since 3.5
  37. *
  38. * @attaches-to ``add_filter("random_password");``
  39. *
  40. * @param str $password Expects a plain text Password passed through by the Filter.
  41. * @return str Password, possibly assigned through s2Member Custom Registration/Profile Field input.
  42. */
  43. public static function generate_password ($password = FALSE)
  44. {
  45. foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
  46. do_action ("ws_plugin__s2member_before_generate_password", get_defined_vars ());
  47. unset /* Unset defined __refs, __v. */ ($__refs, $__v);
  48. 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")))
  49. {
  50. if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_password"] && !empty ($_POST["ws_plugin__s2member_custom_reg_field_user_pass1"]))
  51. {
  52. if (($custom = trim (stripslashes ((string)$_POST["ws_plugin__s2member_custom_reg_field_user_pass1"]))))
  53. $password = $custom; // Yes, use s2Member custom Password supplied by User.
  54. }
  55. 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"]))
  56. {
  57. if (($custom = trim (stripslashes ((string)$GLOBALS["ws_plugin__s2member_generate_password_return"]))))
  58. $password = $custom; // Yes, use s2Member custom Password supplied by Remote Op.
  59. }
  60. }
  61. return apply_filters ("ws_plugin__s2member_generate_password", ($GLOBALS["ws_plugin__s2member_generate_password_return"] = $password), get_defined_vars ());
  62. }
  63. /**
  64. * Filters Multisite User validation.
  65. *
  66. * This can ONLY be fired through `/wp-signup.php` on the front-side.
  67. * Or through `/register` via BuddyPress.
  68. *
  69. * @package s2Member\Registrations
  70. * @since 3.5
  71. *
  72. * @attaches-to ``add_filter("wpmu_validate_user_signup");``
  73. *
  74. * @param array $result Expects a ``$result`` array to be passed through by the Filter.
  75. * @return array The Filtered ``$result`` array. Possibly containing errors introduced by s2Member.
  76. */
  77. public static function ms_validate_user_signup ($result = FALSE)
  78. {
  79. foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
  80. do_action ("ws_plugin__s2member_before_ms_validate_user_signup", get_defined_vars ());
  81. unset /* Unset defined __refs, __v. */ ($__refs, $__v);
  82. if (is_multisite ()) // This event should ONLY be processed with Multisite Networking.
  83. 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 ())))
  84. {
  85. if (in_array ($result["errors"]->get_error_code (), array ("user_name", "user_email", "user_email_used")))
  86. if (c_ws_plugin__s2member_utils_users::ms_user_login_email_exists_but_not_on_blog ($result["user_name"], $result["user_email"]))
  87. $result["errors"] = new WP_Error ();
  88. foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
  89. do_action ("ws_plugin__s2member_during_ms_validate_user_signup", get_defined_vars ());
  90. unset /* Unset defined __refs, __v. */ ($__refs, $__v);
  91. }
  92. return apply_filters ("ws_plugin__s2member_ms_validate_user_signup", $result, get_defined_vars ());
  93. }
  94. /**
  95. * Adds hidden fields for ``$_POST`` vars on signup.
  96. *
  97. * This can ONLY be fired through `/wp-signup.php` on the front-side.
  98. * Or through `/register` via BuddyPress.
  99. *
  100. * @package s2Member\Registrations
  101. * @since 3.5
  102. *
  103. * @attaches-to ``add_filter("signup_hidden_fields");``
  104. *
  105. * @return null
  106. */
  107. public static function ms_process_signup_hidden_fields ()
  108. {
  109. do_action ("ws_plugin__s2member_before_ms_process_signup_hidden_fields", get_defined_vars ());
  110. if (is_multisite ()) // This event should ONLY be processed with Multisite Networking.
  111. 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 ())))
  112. {
  113. foreach (c_ws_plugin__s2member_utils_strings::trim_deep (stripslashes_deep ($_POST)) as $key => $value)
  114. if (preg_match ("/^ws_plugin__s2member_(custom_reg_field|user_new)_/", $key))
  115. if ($key = preg_replace ("/_user_new_/", "_custom_reg_field_", $key))
  116. echo '<input type="hidden" name="' . esc_attr ($key) . '" value="' . esc_attr (maybe_serialize ($value)) . '" />' . "\n";
  117. do_action ("ws_plugin__s2member_during_ms_process_signup_hidden_fields", get_defined_vars ());
  118. }
  119. do_action ("ws_plugin__s2member_after_ms_process_signup_hidden_fields", get_defined_vars ());
  120. return /* Return for uniformity. */;
  121. }
  122. /**
  123. * Adds Customs Fields to ``$meta`` on signup.
  124. *
  125. * This can ONLY be fired through `/wp-signup.php` on the front-side.
  126. * Or possibly through `/user-new.php` in the admin.
  127. * Or through `/register` via BuddyPress.
  128. *
  129. * @package s2Member\Registrations
  130. * @since 3.5
  131. *
  132. * @attaches-to ``add_filter("add_signup_meta");``
  133. * @attaches-to ``add_filter("bp_signup_usermeta");``
  134. *
  135. * @param array $meta Expects an array of meta-data to be passed in by the Filter.
  136. * @return array Full ``$meta`` array with s2Member Custom Fields included.
  137. */
  138. public static function ms_process_signup_meta ($meta = FALSE)
  139. {
  140. global /* Multisite Networking. */ $current_site, $current_blog;
  141. global $pagenow; // Need this to detect the current admin page.
  142. foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
  143. do_action ("ws_plugin__s2member_before_ms_process_signup_meta", get_defined_vars ());
  144. unset /* Unset defined __refs, __v. */ ($__refs, $__v);
  145. if (is_multisite ()) // This event should ONLY be processed with Multisite Networking.
  146. 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 ())))))
  147. {
  148. c_ws_plugin__s2member_email_configs::email_config (); // Configures `From:` header used in notifications.
  149. $meta["add_to_blog"] = (empty ($meta["add_to_blog"])) ? $current_blog->blog_id : $meta["add_to_blog"];
  150. $meta["new_role"] = (empty ($meta["new_role"])) ? get_option ("default_role") : $meta["new_role"];
  151. foreach (c_ws_plugin__s2member_utils_strings::trim_deep (stripslashes_deep ($_POST)) as $key => $value)
  152. if (preg_match ("/^ws_plugin__s2member_(custom_reg_field|user_new)_/", $key))
  153. if ($key = preg_replace ("/_user_new_/", "_custom_reg_field_", $key))
  154. $meta["s2member_ms_signup_meta"][$key] = maybe_unserialize ($value);
  155. }
  156. return apply_filters ("ws_plugin__s2member_ms_process_signup_meta", $meta, get_defined_vars ());
  157. }
  158. /**
  159. * Intersects with ``wpmu_activate_signup()`` through s2Member's Multisite Networking patch.
  160. *
  161. * This function should return the same array that `wpmu_activate_signup()` returns; with the assumption that ``$user_already_exists``.
  162. * Which is exactly where this function intersects inside the `/wp-includes/ms-functions.php`.
  163. *
  164. * This can ONLY be fired through `/wp-activate.php` on the front-side.
  165. * Or through `/activate` via BuddyPress.
  166. *
  167. * @package s2Member\Registrations
  168. * @since 3.5
  169. *
  170. * @attaches-to ``add_filter("_wpmu_activate_existing_error_");``
  171. *
  172. * @param obj $_error Expects a `WP_Error` object to be passed through by the Filter.
  173. * @param array $vars Expects the defined variables from the scope of the calling Filter.
  174. * @return obj|array If unable to add an existing User, the original ``$_error`` obj is returned.
  175. * Otherwise we return an array of User details for continued processing by the caller.
  176. */
  177. public static function ms_activate_existing_user ($_error = FALSE, $vars = FALSE)
  178. {
  179. foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
  180. do_action ("ws_plugin__s2member_before_ms_activate_existing_user", get_defined_vars ());
  181. unset /* Unset defined __refs, __v. */ ($__refs, $__v);
  182. extract ($vars); // Extract all variables from ``wpmu_activate_signup()`` function.
  183. if (is_multisite ()) // This event should ONLY be processed with Multisite Networking.
  184. if (!is_admin () && ((preg_match ("/\/wp-activate\.php/", $_SERVER["REQUEST_URI"])) || (c_ws_plugin__s2member_utils_conds::bp_is_installed () && bp_is_activation_page ())))
  185. {
  186. if (!empty ($user_id) && !empty ($user_login) && !empty ($user_email) && !empty ($password) && !empty ($meta) && !empty ($meta["add_to_blog"]) && !empty ($meta["new_role"]))
  187. 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"]))
  188. {
  189. add_user_to_blog ($meta["add_to_blog"], $user_id, $meta["new_role"]); // Add this User to the specified Blog.
  190. wp_update_user (array ("ID" => $user_id, "user_pass" => $password)); // Update Password so it's the same as in the following msg.
  191. wpmu_welcome_user_notification ($user_id, $password, $meta); // Send welcome letter via email just like ``wpmu_activate_signup()`` does.
  192. do_action ("wpmu_activate_user", $user_id, $password, $meta); // Process Hook that would have been fired inside ``wpmu_activate_signup()``.
  193. return apply_filters ("ws_plugin__s2member_ms_activate_existing_user", array ("user_id" => $user_id, "password" => $password, "meta" => $meta), get_defined_vars ());
  194. }
  195. }
  196. return apply_filters ("ws_plugin__s2member_ms_activate_existing_user", $_error, get_defined_vars ()); // Else, return the standardized error.
  197. }
  198. /**
  199. * Configures new Users on a Multisite Network installation.
  200. *
  201. * This can ONLY be fired in the admin via `/user-new.php`.
  202. * Or also during an actual activation; through `/wp-activate.php`.
  203. * Or also during an actual activation; through `/activate` via BuddyPress.
  204. *
  205. * @package s2Member\Registrations
  206. * @since 3.5
  207. *
  208. * @attaches-to ``add_action("wpmu_activate_user");``
  209. *
  210. * @param int|str $user_id A numeric WordPress® User ID.
  211. * @param str $password Plain text Password should be passed through by the Action Hook.
  212. * @param array $meta Expects an array of ``$meta`` details, passed through by the Action Hook.
  213. * @return null
  214. */
  215. public static function configure_user_on_ms_user_activation ($user_id = FALSE, $password = FALSE, $meta = FALSE)
  216. {
  217. global $pagenow; // Need this to detect the current admin page.
  218. foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
  219. do_action ("ws_plugin__s2member_before_configure_user_on_ms_user_activation", get_defined_vars ());
  220. unset /* Unset defined __refs, __v. */ ($__refs, $__v);
  221. if (is_multisite ()) // This event should ONLY be processed with Multisite Networking.
  222. 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 ()))))
  223. {
  224. 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 ()));
  225. delete_user_meta ($user_id, "s2member_ms_signup_meta");
  226. }
  227. do_action ("ws_plugin__s2member_after_configure_user_on_ms_user_activation", get_defined_vars ());
  228. return /* Return for uniformity. */;
  229. }
  230. /**
  231. * Configures new Users on a Multisite Network installation.
  232. *
  233. * This does NOT fire for a Super Admin managing Network Blogs.
  234. * Actually it does; BUT it's blocked by the routine below.
  235. * A Super Admin should NOT trigger this event.
  236. *
  237. * This function should ONLY be fired through `/wp-activate.php`.
  238. * Or also through `/activate` via BuddyPress.
  239. *
  240. * @package s2Member\Registrations
  241. * @since 3.5
  242. *
  243. * @attaches-to ``add_action("wpmu_activate_blog");``
  244. *
  245. * @param int|str $blog_id A numeric WordPress® Blog ID.
  246. * @param int|str $user_id A numeric WordPress® User ID.
  247. * @param str $password Plain text Password should be passed through by the Action Hook.
  248. * @param str $title The title that a User chose during signup; for their new Blog on the Network.
  249. * @param array $meta Expects an array of ``$meta`` details, passed through by the Action Hook.
  250. * @return null
  251. */
  252. public static function configure_user_on_ms_blog_activation ($blog_id = FALSE, $user_id = FALSE, $password = FALSE, $title = FALSE, $meta = FALSE)
  253. {
  254. foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
  255. do_action ("ws_plugin__s2member_before_configure_user_on_ms_blog_activation", get_defined_vars ());
  256. unset /* Unset defined __refs, __v. */ ($__refs, $__v);
  257. if (is_multisite ()) // This event should ONLY be processed with Multisite Networking.
  258. if (!is_admin () && ((preg_match ("/\/wp-activate\.php/", $_SERVER["REQUEST_URI"])) || (c_ws_plugin__s2member_utils_conds::bp_is_installed () && bp_is_activation_page ())))
  259. {
  260. 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 ()));
  261. delete_user_meta ($user_id, "s2member_ms_signup_meta");
  262. }
  263. do_action ("ws_plugin__s2member_after_configure_user_on_ms_blog_activation", get_defined_vars ());
  264. return /* Return for uniformity. */;
  265. }
  266. /**
  267. * Intersects with ``register_new_user()`` through s2Member's Multisite Networking patch.
  268. *
  269. * This function Filters registration errors inside `/wp-login.php` via ``register_new_user()``.
  270. * When an existing Multisite User is registering, this takes over registration processing.
  271. *
  272. * This can ONLY be fired through `/wp-login.php` on the front-side.
  273. *
  274. * @package s2Member\Registrations
  275. * @since 3.5
  276. *
  277. * @attaches-to ``add_filter("registration_errors");``
  278. *
  279. * @param obj $errors Expects a `WP_Error` object passed in by the Filter.
  280. * @param str $user_login Expects the User's Username, passed in by the Filter.
  281. * @param str $user_email Expects the User's Email Address, passed in by the Filter.
  282. * @return obj A `WP_Error` object, or exits script execution after handling registration redirection.
  283. */
  284. public static function ms_register_existing_user ($errors = FALSE, $user_login = FALSE, $user_email = FALSE)
  285. {
  286. foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
  287. do_action ("ws_plugin__s2member_before_ms_register_existing_user", get_defined_vars ());
  288. unset /* Unset defined __refs, __v. */ ($__refs, $__v);
  289. if (is_multisite ()) // This event should ONLY be processed with Multisite Networking.
  290. if (!is_admin () && /* `/wp-login.php`? */ preg_match ("/\/wp-login\.php/", $_SERVER["REQUEST_URI"]))
  291. if (is_wp_error ($errors) && $errors->get_error_codes ()) // Errors?
  292. {
  293. if (($user_id = c_ws_plugin__s2member_utils_users::ms_user_login_email_exists_but_not_on_blog ($user_login, $user_email)))
  294. {
  295. foreach ($errors->get_error_codes () as $error_code)
  296. if (!in_array ($error_code, array ("username_exists", "email_exists")))
  297. $other_important_errors_exist[] = $error_code;
  298. if (empty ($other_important_errors_exist)) // Only if/when NO other important errors exist already.
  299. {
  300. $user_pass = wp_generate_password (); // A new Password for this User/Member will be generated now.
  301. c_ws_plugin__s2member_registrations::ms_create_existing_user ($user_login, $user_email, $user_pass, $user_id);
  302. update_user_option ($user_id, "default_password_nag", true, true); // Setup Password-change nag screen.
  303. wp_new_user_notification ($user_id, $user_pass); // Welcome email, just like ``register_new_user()``.
  304. $redirect_to = (!empty ($_REQUEST["redirect_to"])) ? trim (stripslashes ($_REQUEST["redirect_to"])) : false;
  305. $redirect_to = ($redirect_to) ? $redirect_to : add_query_arg ("checkemail", urlencode ("registered"), wp_login_url ());
  306. do_action ("ws_plugin__s2member_during_ms_register_existing_user", get_defined_vars ());
  307. wp_safe_redirect ($redirect_to) . exit (); // Safe, like: ``register_new_user()``.
  308. }
  309. }
  310. }
  311. else if (($ms = wpmu_validate_user_signup ($user_login, $user_email)) && isset ($ms["errors"]) && is_wp_error ($ms["errors"]) && $ms["errors"]->get_error_code ())
  312. $errors->add ($ms["errors"]->get_error_code (), $ms["errors"]->get_error_message ());
  313. return apply_filters ("ws_plugin__s2member_ms_register_existing_user", $errors, get_defined_vars ());
  314. }
  315. /**
  316. * For Multisite Networks, this function is used to add a User to an existing Blog; and to simulate ``wp_create_user()`` behavior.
  317. *
  318. * The ``$user_id`` value will be returned by this function, just like ``wp_create_user()`` does.
  319. * This function will fire the Hook `user_register`.
  320. *
  321. * @package s2Member\Registrations
  322. * @since 3.5
  323. *
  324. * @param str $user_login Expects the User's Username.
  325. * @param str $user_email Expects the User's Email Address.
  326. * @param str $user_pass Expects the User's plain text Password.
  327. * @param int|str $user_id Optional. A numeric WordPress® User ID.
  328. * If unspecified, a lookup is performed with ``$user_login`` and ``$user_email``.
  329. * @return int|false Returns numeric ``$user_id`` on success, else false on failure.
  330. */
  331. public static function ms_create_existing_user ($user_login = FALSE, $user_email = FALSE, $user_pass = FALSE, $user_id = FALSE)
  332. {
  333. foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
  334. do_action ("ws_plugin__s2member_before_ms_create_existing_user", get_defined_vars ());
  335. unset /* Unset defined __refs, __v. */ ($__refs, $__v);
  336. if (is_multisite ()) // This event should ONLY be processed with Multisite Networking.
  337. {
  338. 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)
  339. {
  340. $role = get_option ("default_role"); // Use default Role.
  341. add_existing_user_to_blog (array ("user_id" => $user_id, "role" => $role)); // Add User.
  342. wp_update_user (array ("ID" => $user_id, "user_pass" => $user_pass)); // Update to ``$user_pass``.
  343. do_action ("ws_plugin__s2member_during_ms_create_existing_user", get_defined_vars ());
  344. do_action ("user_register", $user_id); // So s2Member knows a User is registering.
  345. return apply_filters ("ws_plugin__s2member_ms_create_existing_user", $user_id, get_defined_vars ());
  346. }
  347. }
  348. return apply_filters ("ws_plugin__s2member_ms_create_existing_user", false, get_defined_vars ());
  349. }
  350. /**
  351. * Configures all new Users.
  352. *
  353. * The Hook `user_register` is also fired by calling:
  354. * ``c_ws_plugin__s2member_registrations::ms_create_existing_user()`` and/or ``wpmu_create_user()``.
  355. *
  356. * This function also receives hand-offs from s2Member's handlers for these two Hooks:
  357. * `wpmu_activate_user` and `wpmu_activate_blog`.
  358. *
  359. * @package s2Member\Registrations
  360. * @since 3.5
  361. *
  362. * @attaches-to ``add_action("user_register");``
  363. *
  364. * @param int|str $user_id A numeric WordPress® User ID.
  365. * @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.
  366. * @param array $meta Optional in most cases. Defaults to false. An array of meta data for a User/Member.
  367. * @return null No return value. Returns `null` in possible every scenario.
  368. *
  369. * @todo Impossible to delete cookies when fired inside: `/wp-activate.php`?
  370. */
  371. public static function configure_user_registration ($user_id = FALSE, $password = FALSE, $meta = FALSE)
  372. {
  373. global /* Global database object reference. */ $wpdb;
  374. global $pagenow; // We need this to detect the current administration page.
  375. global $current_site, $current_blog; // Adds support for Multisite Networking.
  376. static $email_config, $processed; // Static vars prevent duplicate processing.
  377. foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
  378. do_action ("ws_plugin__s2member_before_configure_user_registration", get_defined_vars ());
  379. unset /* Unset defined __refs, __v. */ ($__refs, $__v);
  380. // With Multisite Networking, we need this to run on `user_register` ahead of `wpmu_activate_[user|blog]`.
  381. if (!isset ($email_config) && ($email_config = true)) // Anytime this routine is fired; we configure email.
  382. c_ws_plugin__s2member_email_configs::email_config (); // Configures `From:` email header.
  383. $_p = /* Grab global ``$_POST`` array here, if it's possible to do so. */ (isset ($_POST)) ? $_POST : null;
  384. $rvs = (isset ($GLOBALS["ws_plugin__s2member_registration_vars"])) ? $GLOBALS["ws_plugin__s2member_registration_vars"] : null;
  385. if (!$processed /* Process only once. Safeguard this routine against duplicate processing via plugins (or even WordPress® itself). */)
  386. 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))
  387. if (!(is_multisite () && is_blog_admin () && $pagenow === "user-new.php" && isset ($_p["noconfirmation"]) && is_super_admin () && !is_array ($meta)))
  388. if (!(preg_match ("/\/wp-activate\.php/", $_SERVER["REQUEST_URI"]) && !is_array ($meta)) /* If activating; we absolutely MUST have a ``$meta`` array. */)
  389. if (!(c_ws_plugin__s2member_utils_conds::bp_is_installed () && bp_is_activation_page () && !is_array ($meta)) /* If activating; MUST have ``$meta``. */)
  390. 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)))
  391. if ($user_id && is_object ($user = new WP_User ($user_id)) && !empty ($user->ID) && ($user_id = $user->ID) && ($processed = true))
  392. {
  393. settype /* Force arrays here. */ ($_p, "array") . settype ($meta, "array") . settype ($rvs, "array");
  394. $_p = c_ws_plugin__s2member_utils_strings::trim_deep (stripslashes_deep ($_p));
  395. $meta = c_ws_plugin__s2member_utils_strings::trim_deep (stripslashes_deep ($meta));
  396. $rvs = c_ws_plugin__s2member_utils_strings::trim_deep /* Do NOT strip. */ ($rvs);
  397. foreach ($_p as $_key => $_value) // Scan ``$_p`` vars; adding `custom_reg_field` keys.
  398. if (preg_match ("/^ws_plugin__s2member_user_new_/", $_key)) // Look for keys.
  399. if ($_key = str_replace ("_user_new_", "_custom_reg_field_", $_key))
  400. $_p[$_key] = $_value; // Add each of these key conversions.
  401. unset /* Just a little housekeeping here. */ ($_key, $_value);
  402. 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"])))
  403. exit (_x ("s2Member security violation. You attempted to POST administrative variables that will NOT be trusted in a NON-administrative zone!", "s2member-front", "s2member"));
  404. $_pmr = array_merge ($_p, $meta, $rvs); // Merge all of these arrays together now, in this specific order.
  405. unset ($_p, $meta, $rvs); // These variables can all be unset now; we have them all in the ``$_pmr`` array.
  406. $custom_reg_display_name = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_display_name"]; // Can be configured by the site owner.
  407. 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))
  408. { /* This routine could be processed through `/wp-login.php?action=register`, `/wp-activate.php`, or `/activate` via BuddyPress`.
  409. This may also be processed through a standard BuddyPress installation, or another plugin calling `user_register`.
  410. If processed through `/wp-activate.php`, it could've originated inside the admin — via `/user-new.php`. */
  411. $processed = "yes"; // Mark this as yes.
  412. $current_role = c_ws_plugin__s2member_user_access::user_access_role ($user);
  413. @list ($level, $ccaps, $eotper) = preg_split ("/\:/", $item_number, 3);
  414. $role = "s2member_level" . $level; // Membership Level.
  415. $email = $user->user_email;
  416. $login = $user->user_login;
  417. $ip = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_registration_ip"];
  418. $ip = (!$ip) ? $_SERVER["REMOTE_ADDR"] : $ip; // Else use environment variable.
  419. $cv = preg_split ("/\|/", $custom);
  420. if (!($auto_eot_time = "") && $eotper) // If a specific EOT Period is included.
  421. $auto_eot_time = c_ws_plugin__s2member_utils_time::auto_eot_time ("", "", "", $eotper);
  422. $notes = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_notes"];
  423. $opt_in = (!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_opt_in"]) ? true : false;
  424. $opt_in = (!$opt_in && !empty ($_pmr["ws_plugin__s2member_custom_reg_field_opt_in"])) ? true : $opt_in;
  425. if (!($fname = $user->first_name))
  426. if (!empty ($_pmr["ws_plugin__s2member_custom_reg_field_first_name"]))
  427. $fname = (string)$_pmr["ws_plugin__s2member_custom_reg_field_first_name"];
  428. if (!$fname) // Also try BuddyPress.
  429. if (!empty ($_pmr["field_1"])) // BuddyPress?
  430. $fname = trim (preg_replace ("/ (.*)$/", "", (string)$_pmr["field_1"]));
  431. if (!($lname = $user->last_name))
  432. if (!empty ($_pmr["ws_plugin__s2member_custom_reg_field_last_name"]))
  433. $lname = (string)$_pmr["ws_plugin__s2member_custom_reg_field_last_name"];
  434. if (!$lname) // Also try BuddyPress.
  435. if (!empty ($_pmr["field_1"]) && preg_match ("/^(.+?) (.+)$/", (string)$_pmr["field_1"]))
  436. $lname = trim (preg_replace ("/^(.+?) (.+)$/", "$2", (string)$_pmr["field_1"]));
  437. if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_names"] && !$fname && $login)
  438. { $fname = trim ($login); $lname = ""; } // Username and empty Last Name.
  439. $name = trim ($fname . " " . $lname); // Both names.
  440. if (!($pass = $password)) // Try s2Member's generator.
  441. if (!empty ($GLOBALS["ws_plugin__s2member_generate_password_return"]))
  442. $pass = (string)$GLOBALS["ws_plugin__s2member_generate_password_return"];
  443. if (!$pass) // Also try BuddyPress Password.
  444. if (!empty ($_pmr["signup_password"])) // BuddyPress?
  445. $pass = (string)$_pmr["signup_password"];
  446. if ($pass) // No Password nag. Update this globally.
  447. {
  448. (!headers_sent ()) ? delete_user_setting ("default_password_nag", $user_id) : null;
  449. update_user_option ($user_id, "default_password_nag", false, true);
  450. }
  451. update_user_option ($user_id, "s2member_registration_ip", $ip);
  452. update_user_option ($user_id, "s2member_auto_eot_time", $auto_eot_time);
  453. update_user_option ($user_id, "s2member_subscr_gateway", $subscr_gateway);
  454. update_user_option ($user_id, "s2member_subscr_id", $subscr_id);
  455. update_user_option ($user_id, "s2member_custom", $custom);
  456. update_user_option ($user_id, "s2member_notes", $notes);
  457. if (!$user->first_name && $fname)
  458. update_user_meta ($user_id, "first_name", $fname);
  459. if (!$user->last_name && $lname)
  460. update_user_meta ($user_id, "last_name", $lname);
  461. if (!$user->display_name || $user->display_name === $user->user_login)
  462. {
  463. if ($custom_reg_display_name === "full" && $name)
  464. wp_update_user (array ("ID" => $user_id, "display_name" => $name));
  465. else if ($custom_reg_display_name === "first" && $fname)
  466. wp_update_user (array ("ID" => $user_id, "display_name" => $fname));
  467. else if ($custom_reg_display_name === "last" && $lname)
  468. wp_update_user (array ("ID" => $user_id, "display_name" => $lname));
  469. else if ($custom_reg_display_name === "login" && $login)
  470. wp_update_user (array ("ID" => $user_id, "display_name" => $login));
  471. }
  472. if (is_multisite ()) // Should we handle Main Site permissions and Originating Blog ID#?
  473. {
  474. if (!is_main_site () && strtotime ($user->user_registered) >= strtotime ("-10 seconds"))
  475. remove_user_from_blog ($user_id, $current_site->blog_id); // No Main Site Role.
  476. if (!get_user_meta ($user_id, "s2member_originating_blog", true)) // Recorded yet?
  477. update_user_meta ($user_id, "s2member_originating_blog", $current_blog->blog_id);
  478. }
  479. if ($current_role !== $role) // Only if NOT the current Role.
  480. $user->set_role ($role); // s2Member.
  481. if ($ccaps && preg_match ("/^-all/", str_replace ("+", "", $ccaps)))
  482. foreach ($user->allcaps as $cap => $cap_enabled)
  483. if (preg_match ("/^access_s2member_ccap_/", $cap))
  484. $user->remove_cap ($ccap = $cap);
  485. if ($ccaps && preg_replace ("/^-all[\r\n\t\s;,]*/", "", str_replace ("+", "", $ccaps)))
  486. foreach (preg_split ("/[\r\n\t\s;,]+/", preg_replace ("/^-all[\r\n\t\s;,]*/", "", str_replace ("+", "", $ccaps))) as $ccap)
  487. if (strlen ($ccap = trim (strtolower (preg_replace ("/[^a-z_0-9]/i", "", $ccap)))))
  488. $user->add_cap ("access_s2member_ccap_" . $ccap);
  489. if (!($fields = array ()) && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"])
  490. foreach (json_decode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
  491. {
  492. $field_var = preg_replace ("/[^a-z0-9]/i", "_", strtolower ($field["id"]));
  493. $field_id_class = preg_replace ("/_/", "-", $field_var);
  494. if (isset ($_pmr["ws_plugin__s2member_custom_reg_field_" . $field_var]))
  495. $fields[$field_var] = $_pmr["ws_plugin__s2member_custom_reg_field_" . $field_var];
  496. }
  497. unset($field, $field_var, $field_id_class); // Housekeeping.
  498. if (!empty ($fields)) // Only if NOT empty.
  499. update_user_option ($user_id, "s2member_custom_fields", $fields);
  500. if ($level > 0) // We ONLY process this if they are higher than Level #0.
  501. {
  502. $pr_times = get_user_option ("s2member_paid_registration_times", $user_id);
  503. $pr_times["level"] = (empty ($pr_times["level"])) ? time () : $pr_times["level"];
  504. $pr_times["level" . $level] = (empty ($pr_times["level" . $level])) ? time () : $pr_times["level" . $level];
  505. update_user_option ($user_id, "s2member_paid_registration_times", $pr_times); // Update now.
  506. }
  507. if (($transient = "s2m_" . md5 ("s2member_transient_ipn_signup_vars_" . $subscr_id)) && is_array ($ipn_signup_vars = get_transient ($transient)))
  508. {
  509. update_user_option ($user_id, "s2member_ipn_signup_vars", $ipn_signup_vars); // For future reference.
  510. delete_transient ($transient); // This can be deleted now.
  511. }
  512. if (($transient = "s2m_" . md5 ("s2member_transient_ipn_subscr_payment_" . $subscr_id)) && is_array ($subscr_payment = get_transient ($transient)) && !empty ($subscr_payment["subscr_gateway"]))
  513. {
  514. $proxy = array ("s2member_paypal_proxy" => stripslashes ((string)$subscr_payment["subscr_gateway"]), "s2member_paypal_proxy_verification" => c_ws_plugin__s2member_paypal_utilities::paypal_proxy_key_gen ());
  515. c_ws_plugin__s2member_utils_urls::remote (site_url ("/?s2member_paypal_notify=1"), array_merge(stripslashes_deep ($subscr_payment), $proxy), array ("timeout" => 20));
  516. delete_transient ($transient); // This can be deleted now.
  517. }
  518. if (($transient = "s2m_" . md5 ("s2member_transient_ipn_subscr_eot_" . $subscr_id)) && is_array ($subscr_eot = get_transient ($transient)) && !empty ($subscr_eot["subscr_gateway"]))
  519. {
  520. $proxy = array ("s2member_paypal_proxy" => stripslashes ((string)$subscr_eot["subscr_gateway"]), "s2member_paypal_proxy_verification" => c_ws_plugin__s2member_paypal_utilities::paypal_proxy_key_gen ());
  521. c_ws_plugin__s2member_utils_urls::remote (site_url ("/?s2member_paypal_notify=1"), array_merge(stripslashes_deep ($subscr_eot), $proxy), array ("timeout" => 20));
  522. delete_transient ($transient); // This can be deleted now.
  523. }
  524. if (!headers_sent ()) // Only if headers are NOT yet sent. Here we establish both Signup and Payment Tracking Cookies.
  525. @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);
  526. foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
  527. do_action ("ws_plugin__s2member_during_configure_user_registration_front_side_paid", get_defined_vars ());
  528. do_action ("ws_plugin__s2member_during_configure_user_registration_front_side", get_defined_vars ());
  529. unset /* Unset defined __refs, __v. */ ($__refs, $__v);
  530. }
  531. 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")))
  532. { /* This routine could be processed through `/wp-login.php?action=register`, `/wp-activate.php`, or `/activate` via BuddyPress`.
  533. This may also be processed through a standard BuddyPress installation, or another plugin calling `user_register`.
  534. If processed through `/wp-activate.php`, it could've originated inside the admin, via `/user-new.php`. */
  535. $processed = "yes"; // Mark this as yes.
  536. $current_role = c_ws_plugin__s2member_user_access::user_access_role ($user);
  537. $role = ""; // Initialize ``$role`` to an empty string here, before processing.
  538. $role = (!$role && ($level = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_level"]) > 0) ? "s2member_level" . $level : $role;
  539. $role = (!$role && ($level = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_level"]) === "0") ? "subscriber" : $role;
  540. $role = (!$role && $current_role) ? $current_role : $role; // Use existing Role?
  541. $role = (!$role) ? get_option ("default_role") : $role; // Otherwise default.
  542. $level = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_level"];
  543. $level = (!$level && preg_match ("/^(administrator|editor|author|contributor)$/i", $role)) ? $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"] : $level;
  544. $level = (!$level && preg_match ("/^s2member_level[1-9][0-9]*$/i", $role)) ? preg_replace ("/^s2member_level/", "", $role) : $level;
  545. $level = (!$level && preg_match ("/^subscriber$/i", $role)) ? "0" : $level;
  546. $level = (!$level) ? "0" : $level;
  547. $ccaps = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_ccaps"];
  548. $email = $user->user_email;
  549. $login = $user->user_login;
  550. $ip = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_registration_ip"];
  551. $ip = (!$ip) ? $_SERVER["REMOTE_ADDR"] : $ip; // Else use environment variable.
  552. $custom = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_custom"];
  553. $subscr_id = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_subscr_id"];
  554. $subscr_gateway = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_subscr_gateway"];
  555. $cv = preg_split ("/\|/", (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_custom"]);
  556. $auto_eot_time = ($eot = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_auto_eot_time"]) ? strtotime ($eot) : "";
  557. $notes = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_notes"];
  558. $opt_in = (!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_opt_in"]) ? true : false;
  559. $opt_in = (!$opt_in && !empty ($_pmr["ws_plugin__s2member_custom_reg_field_opt_in"])) ? true : $opt_in;
  560. if (!($fname = $user->first_name))
  561. if (!empty ($_pmr["ws_plugin__s2member_custom_reg_field_first_name"]))
  562. $fname = (string)$_pmr["ws_plugin__s2member_custom_reg_field_first_name"];
  563. if (!$fname) // Also try BuddyPress.
  564. if (!empty ($_pmr["field_1"])) // BuddyPress?
  565. $fname = trim (preg_replace ("/ (.*)$/", "", (string)$_pmr["field_1"]));
  566. if (!($lname = $user->last_name))
  567. if (!empty ($_pmr["ws_plugin__s2member_custom_reg_field_last_name"]))
  568. $lname = (string)$_pmr["ws_plugin__s2member_custom_reg_field_last_name"];
  569. if (!$lname) // Also try BuddyPress.
  570. if (!empty ($_pmr["field_1"]) && preg_match ("/^(.+?) (.+)$/", (string)$_pmr["field_1"]))
  571. $lname = trim (preg_replace ("/^(.+?) (.+)$/", "$2", (string)$_pmr["field_1"]));
  572. if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_names"] && !$fname && $login)
  573. { $fname = trim ($login); $lname = ""; } // Username and empty Last Name.
  574. $name = trim ($fname . " " . $lname); // Both names.
  575. if (!($pass = $password)) // Try s2Member's generator.
  576. if (!empty ($GLOBALS["ws_plugin__s2member_generate_password_return"]))
  577. $pass = (string)$GLOBALS["ws_plugin__s2member_generate_password_return"];
  578. if (!$pass) // Also try BuddyPress Password.
  579. if (!empty ($_pmr["signup_password"])) // BuddyPress?
  580. $pass = (string)$_pmr["signup_password"];
  581. if ($pass) // No Password nag. Update this globally.
  582. {
  583. (!headers_sent ()) ? delete_user_setting ("default_password_nag", $user_id) : null;
  584. update_user_option ($user_id, "default_password_nag", false, true);
  585. }
  586. update_user_option ($user_id, "s2member_registration_ip", $ip);
  587. update_user_option ($user_id, "s2member_auto_eot_time", $auto_eot_time);
  588. update_user_option ($user_id, "s2member_subscr_gateway", $subscr_gateway);
  589. update_user_option ($user_id, "s2member_subscr_id", $subscr_id);
  590. update_user_option ($user_id, "s2member_custom", $custom);
  591. update_user_option ($user_id, "s2member_notes", $notes);
  592. if (!$user->first_name && $fname)
  593. update_user_meta ($user_id, "first_name", $fname);
  594. if (!$user->last_name && $lname)
  595. update_user_meta ($user_id, "last_name", $lname);
  596. if (!$user->display_name || $user->display_name === $user->user_login)
  597. {
  598. if ($custom_reg_display_name === "full" && $name)
  599. wp_update_user (array ("ID" => $user_id, "display_name" => $name));
  600. else if ($custom_reg_display_name === "first" && $fname)
  601. wp_update_user (array ("ID" => $user_id, "display_name" => $fname));
  602. else if ($custom_reg_display_name === "last" && $lname)
  603. wp_update_user (array ("ID" => $user_id, "display_name" => $lname));
  604. else if ($custom_reg_display_name === "login" && $login)
  605. wp_update_user (array ("ID" => $user_id, "display_name" => $login));
  606. }
  607. if /* Should we handle Main Site permissions and Originating Blog ID#? */(is_multisite ())
  608. {
  609. if (!is_main_site () && strtotime ($user->user_registered) >= strtotime ("-10 seconds"))
  610. remove_user_from_blog /* No Main Site Role. */($user_id, $current_site->blog_id);
  611. if /* Recorded yet? */(!get_user_meta ($user_id, "s2member_originating_blog", true))
  612. update_user_meta ($user_id, "s2member_originating_blog", $current_blog->blog_id);
  613. }
  614. if ($current_role !== $role) // Only if NOT the current Role.
  615. $user->set_role ($role); // s2Member.
  616. if ($ccaps && preg_match ("/^-all/", str_replace ("+", "", $ccaps)))
  617. foreach ($user->allcaps as $cap => $cap_enabled)
  618. if (preg_match ("/^access_s2member_ccap_/", $cap))
  619. $user->remove_cap ($ccap = $cap);
  620. if ($ccaps && preg_replace ("/^-all[\r\n\t\s;,]*/", "", str_replace ("+", "", $ccaps)))
  621. foreach (preg_split ("/[\r\n\t\s;,]+/", preg_replace ("/^-all[\r\n\t\s;,]*/", "", str_replace ("+", "", $ccaps))) as $ccap)
  622. if (strlen ($ccap = trim (strtolower (preg_replace ("/[^a-z_0-9]/i", "", $ccap)))))
  623. $user->add_cap ("access_s2member_ccap_" . $ccap);
  624. if (!($fields = array ()) && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"])
  625. foreach (json_decode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
  626. {
  627. $field_var = preg_replace ("/[^a-z0-9]/i", "_", strtolower ($field["id"]));
  628. $field_id_class = preg_replace ("/_/", "-", $field_var);
  629. if (isset ($_pmr["ws_plugin__s2member_custom_reg_field_" . $field_var]))
  630. $fields[$field_var] = $_pmr["ws_plugin__s2member_custom_reg_field_" . $field_var];
  631. }
  632. unset($field, $field_var, $field_id_class); // Housekeeping.
  633. if (!empty ($fields)) // Only if NOT empty.
  634. update_user_option ($user_id, "s2member_custom_fields", $fields);
  635. if ($level > 0) // We ONLY process this if they are higher than Level#0.
  636. {
  637. $pr_times = get_user_option ("s2member_paid_registration_times", $user_id);
  638. $pr_times["level"] = (empty ($pr_times["level"])) ? time () : $pr_times["level"];
  639. $pr_times["level" . $level] = (empty ($pr_times["level" . $level])) ? time () : $pr_times["level" . $level];
  640. update_user_option ($user_id, "s2member_paid_registration_times", $pr_times); // Update now.
  641. }
  642. foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
  643. do_action ("ws_plugin__s2member_during_configure_user_registration_front_side_free", get_defined_vars ());
  644. do_action ("ws_plugin__s2member_during_configure_user_registration_front_side", get_defined_vars ());
  645. unset /* Unset defined __refs, __v. */ ($__refs, $__v);
  646. }
  647. 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")))
  648. { // Can only be processed through `/user-new.php` in the Admin panel, or through Remote Op: `create_user`.
  649. $processed = "yes"; // Mark this as yes, to indicate that a routine was processed.
  650. $current_role = c_ws_plugin__s2member_user_access::user_access_role ($user);
  651. $role = ""; // Initialize $role to an empty string here, before processing.
  652. $role = (!$role && ($level = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_level"]) > 0) ? "s2member_level" . $level : $role;
  653. $role = (!$role && ($level = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_level"]) === "0") ? "subscriber" : $role;
  654. $role = (!$role && $current_role) ? $current_role : $role; // Use existing Role?
  655. $role = (!$role) ? get_option ("default_role") : $role; // Otherwise default.
  656. $level = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_level"];
  657. $level = (!$level && preg_match ("/^(administrator|editor|author|contributor)$/i", $role)) ? $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"] : $level;
  658. $level = (!$level && preg_match ("/^s2member_level[1-9][0-9]*$/i", $role)) ? preg_replace ("/^s2member_level/", "", $role) : $level;
  659. $level = (!$level && preg_match ("/^subscriber$/i", $role)) ? "0" : $level;
  660. $level = (!$level) ? "0" : $level;
  661. $ccaps = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_ccaps"];
  662. $email = $user->user_email;
  663. $login = $user->user_login;
  664. $ip = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_registration_ip"];
  665. $custom = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_custom"];
  666. $subscr_id = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_subscr_id"];
  667. $subscr_gateway = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_subscr_gateway"];
  668. $cv = preg_split ("/\|/", (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_custom"]);
  669. $auto_eot_time = ($eot = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_auto_eot_time"]) ? strtotime ($eot) : "";
  670. $notes = (string)@$_pmr["ws_plugin__s2member_custom_reg_field_s2member_notes"];
  671. $opt_in = (!empty ($_pmr["ws_plugin__s2member_custom_reg_field_opt_in"])) ? true : false;
  672. if (!($fname = $user->first_name)) // `Users -› Add New`.
  673. if (!empty ($_pmr["ws_plugin__s2