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

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

282 lines 22.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 // @codingStandardsIgnoreFile
3 /**
4 * New User handlers (inner processing routines).
5 *
6 * Copyright: © 2009-2011
7 * {@link http://websharks-inc.com/ WebSharks, Inc.}
8 * (coded in the USA)
9 *
10 * Released under the terms of the GNU General Public License.
11 * You should have received a copy of the GNU General Public License,
12 * along with this software. In the main directory, see: /licensing/
13 * If not, see: {@link http://www.gnu.org/licenses/}.
14 *
15 * @package s2Member\New_Users
16 * @since 3.5
17 */
18 if(!defined('WPINC')) // MUST have WordPress.
19 exit ("Do not access this file directly.");
20
21 if (!class_exists ("c_ws_plugin__s2member_user_new_in"))
22 {
23 /**
24 * New User handlers (inner processing routines).
25 *
26 * @package s2Member\New_Users
27 * @since 3.5
28 */
29 class c_ws_plugin__s2member_user_new_in
30 {
31 /**
32 * Callback adds Custom Fields to `/wp-admin/user-new.php`.
33 *
34 * We have to buffer because `/user-new.php` has NO Hooks.
35 *
36 * @package s2Member\New_Users
37 * @since 3.5
38 *
39 * @attaches-to ``ob_start("c_ws_plugin__s2member_user_new_in::_admin_user_new_fields");``
40 *
41 * @return string Output buffer.
42 */
43 public static function _admin_user_new_fields ($buffer = FALSE)
44 {
45 global $pagenow; // The current admin page file name.
46
47 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
48 do_action("_ws_plugin__s2member_before_admin_user_new_fields", get_defined_vars ());
49 unset($__refs, $__v);
50
51 if (is_blog_admin () && $pagenow === "user-new.php" && current_user_can ("create_users"))
52 {
53 $_p = c_ws_plugin__s2member_utils_strings::trim_deep (stripslashes_deep ($_POST));
54
55 $unfs = '<div style="margin:25px 0 25px 0; height:1px; line-height:1px; background:#CCCCCC;"></div>' . "\n";
56
57 $unfs .= '<h3 style="position:relative;"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/src/images/large-icon.png" title="s2Member (a Membership management system for WordPress)" alt="" style="position:absolute; top:-15px; right:0; border:0;" />s2Member Configuration &amp; Profile Fields' . ((is_multisite ()) ? ' (for this Blog)' : '') . '</h3>' . "\n";
58
59 $unfs .= '<table class="form-table">' . "\n";
60
61 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
62 do_action("_ws_plugin__s2member_during_admin_user_new_fields_before", get_defined_vars ());
63 unset($__refs, $__v);
64
65 if (is_multisite ()) // Multisite Networking is currently lacking these fields; we pop them in.
66 {
67 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
68 do_action("_ws_plugin__s2member_during_admin_user_new_fields_before_first_name", get_defined_vars ());
69 unset($__refs, $__v);
70
71 $unfs .= '<tr>' . "\n";
72 $unfs .= '<th><label for="ws-plugin--s2member-user-new-first-name">First Name:</label></th>' . "\n";
73 $unfs .= '<td><input type="text" autocomplete="off" name="ws_plugin__s2member_user_new_first_name" id="ws-plugin--s2member-user-new-first-name" value="' . esc_attr ($_p["ws_plugin__s2member_user_new_first_name"]) . '" class="regular-text" /></td>' . "\n";
74 $unfs .= '</tr>' . "\n";
75
76 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
77 do_action("_ws_plugin__s2member_during_admin_user_new_fields_after_first_name", get_defined_vars ());
78 unset($__refs, $__v);
79
80 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
81 do_action("_ws_plugin__s2member_during_admin_user_new_fields_before_last_name", get_defined_vars ());
82 unset($__refs, $__v);
83
84 $unfs .= '<tr>' . "\n";
85 $unfs .= '<th><label for="ws-plugin--s2member-user-new-last-name">Last Name:</label></th>' . "\n";
86 $unfs .= '<td><input type="text" autocomplete="off" name="ws_plugin__s2member_user_new_last_name" id="ws-plugin--s2member-user-new-last-name" value="' . esc_attr ($_p["ws_plugin__s2member_user_new_last_name"]) . '" class="regular-text" /></td>' . "\n";
87 $unfs .= '</tr>' . "\n";
88
89 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
90 do_action("_ws_plugin__s2member_during_admin_user_new_fields_after_last_name", get_defined_vars ());
91 unset($__refs, $__v);
92 }
93
94 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
95 do_action("_ws_plugin__s2member_during_admin_user_new_fields_before_subscr_gateway", get_defined_vars ());
96 unset($__refs, $__v);
97
98 $unfs .= '<tr>' . "\n";
99 $unfs .= '<th><label for="ws-plugin--s2member-user-new-s2member-subscr-gateway">Paid Subscr. Gateway:</label> <a href="#" onclick="alert(\'A Payment Gateway code is associated with the Paid Subscr. ID below. A Paid Subscription ID (or a Buy Now Transaction ID) is only valid for paid Members. Also known as (a Recurring Profile ID, a ClickBank Receipt #, a Google Order ID, an AliPay Trade No.). Under normal circumstances, this is filled automatically by s2Member. This field is ONLY here for Customer Service purposes; just in case you ever need to enter a Paid Subscr. Gateway/ID manually. This field will be empty for Free Subscribers, and/or anyone who is NOT paying you.\\n\\nThe value of Paid Subscr. ID, can be a PayPal Standard `Subscription ID`, or a PayPal Pro `Recurring Profile ID`, or a PayPal `Transaction ID`; depending on the type of sale. Your PayPal account will supply this information. If you\\\'re using Google Wallet, use the Google Order ID. ClickBank provides a Receipt #, ccBill provides a Subscription ID, Authorize.Net provides a Subscription ID, and AliPay provides a Transaction ID. The general rule is... IF there\\\'s a Subscription ID, use that! If there\\\'s NOT, use the Transaction ID.\'); return false;" tabindex="-1">[?]</a></th>' . "\n";
100 $unfs .= '<td><select name="ws_plugin__s2member_user_new_s2member_subscr_gateway" id="ws-plugin--s2member-user-new-s2member-subscr-gateway" style="width:25em;"><option value=""></option>' . "\n";
101 foreach (apply_filters("ws_plugin__s2member_profile_s2member_subscr_gateways", array("paypal" => "PayPal (code: paypal)"), get_defined_vars ()) as $gateway => $gateway_name)
102 $unfs .= '<option value="' . esc_attr ($gateway) . '"' . (($gateway === $_p["ws_plugin__s2member_user_new_s2member_subscr_gateway"]) ? ' selected="selected"' : '') . '>' . esc_html ($gateway_name) . '</option>' . "\n";
103 $unfs .= '</select>' . "\n";
104 $unfs .= '</td>' . "\n";
105 $unfs .= '</tr>' . "\n";
106
107 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
108 do_action("_ws_plugin__s2member_during_admin_user_new_fields_after_subscr_gateway", get_defined_vars ());
109 unset($__refs, $__v);
110
111 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
112 do_action("_ws_plugin__s2member_during_admin_user_new_fields_before_subscr_id", get_defined_vars ());
113 unset($__refs, $__v);
114
115 $unfs .= '<tr>' . "\n";
116 $unfs .= '<th><label for="ws-plugin--s2member-user-new-s2member-subscr-id">Paid Subscr. ID:</label> <a href="#" onclick="alert(\'A Paid Subscription ID (or a Buy Now Transaction ID) is only valid for paid Members. Also known as (a Recurring Profile ID, a ClickBank Receipt #, a Google Order ID, an AliPay Trade No.). Under normal circumstances, this is filled automatically by s2Member. This field is ONLY here for Customer Service purposes; just in case you ever need to enter a Paid Subscr. Gateway/ID manually. This field will be empty for Free Subscribers, and/or anyone who is NOT paying you.\\n\\nThe value of Paid Subscr. ID, can be a PayPal Standard `Subscription ID`, or a PayPal Pro `Recurring Profile ID`, or a PayPal `Transaction ID`; depending on the type of sale. Your PayPal account will supply this information. If you\\\'re using Google Wallet, use the Google Order ID. ClickBank provides a Receipt #, ccBill provides a Subscription ID, Authorize.Net provides a Subscription ID, and AliPay provides a Transaction ID. The general rule is... if there\\\'s a Subscription ID, use that! If there\\\'s NOT, use the Transaction ID.\'); return false;" tabindex="-1">[?]</a></th>' . "\n";
117 $unfs .= '<td><input type="text" autocomplete="off" name="ws_plugin__s2member_user_new_s2member_subscr_id" id="ws-plugin--s2member-user-new-s2member-subscr-id" value="' . format_to_edit ($_p["ws_plugin__s2member_user_new_s2member_subscr_id"]) . '" class="regular-text" /></td>' . "\n";
118 $unfs .= '</tr>' . "\n";
119
120 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
121 do_action("_ws_plugin__s2member_during_admin_user_new_fields_after_subscr_id", get_defined_vars ());
122 unset($__refs, $__v);
123
124 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
125 do_action("_ws_plugin__s2member_during_admin_user_new_fields_before_custom", get_defined_vars ());
126 unset($__refs, $__v);
127
128 $unfs .= '<tr>' . "\n";
129 $unfs .= '<th><label for="ws-plugin--s2member-user-new-s2member-custom">Custom Value:</label> <a href="#" onclick="alert(\'A Paid Subscription is always associated with a Custom String that is passed through the custom=\\\'\\\'' . c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"]), 3) . '\\\'\\\' attribute of your Shortcode. This Custom Value, MUST always start with your domain name. However, you can also pipe delimit additional values after your domain, if you need to.\\n\\nFor example:\n' . c_ws_plugin__s2member_utils_strings::esc_js_sq (esc_attr ($_SERVER["HTTP_HOST"]), 3) . '|cv1|cv2|cv3\'); return false;" tabindex="-1">[?]</a></th>' . "\n";
130 $unfs .= '<td><input type="text" autocomplete="off" name="ws_plugin__s2member_user_new_s2member_custom" id="ws-plugin--s2member-user-new-s2member-custom" value="' . format_to_edit ($_p["ws_plugin__s2member_user_new_s2member_custom"]) . '" class="regular-text" /></td>' . "\n";
131 $unfs .= '</tr>' . "\n";
132
133 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
134 do_action("_ws_plugin__s2member_during_admin_user_new_fields_after_custom", get_defined_vars ());
135 unset($__refs, $__v);
136
137 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
138 do_action("_ws_plugin__s2member_during_admin_user_new_fields_before_registration_ip", get_defined_vars ());
139 unset($__refs, $__v);
140
141 $unfs .= '<tr>' . "\n";
142 $unfs .= '<th><label for="ws-plugin--s2member-user-new-s2member-registration-ip">Registration IP:</label> <a href="#" onclick="alert(\'This is the IP Address the User had at the time of registration. If you don\\\'t know the User\\\'s IP Address, just leave this blank. If this is left empty, s2Member will make attempts in the future to grab the User\\\'s IP Address.\'); return false;" tabindex="-1">[?]</a></th>' . "\n";
143 $unfs .= '<td><input type="text" autocomplete="off" name="ws_plugin__s2member_user_new_s2member_registration_ip" id="ws-plugin--s2member-user-new-s2member-registration-ip" value="' . format_to_edit ($_p["ws_plugin__s2member_user_new_s2member_registration_ip"]) . '" class="regular-text" /></td>' . "\n";
144 $unfs .= '</tr>' . "\n";
145
146 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
147 do_action("_ws_plugin__s2member_during_admin_user_new_fields_after_registration_ip", get_defined_vars ());
148 unset($__refs, $__v);
149
150 if (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ())
151 // ^ Will change once Custom Capabilities are compatible with a Blog Farm.
152 {
153 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
154 do_action("_ws_plugin__s2member_during_admin_user_new_fields_before_ccaps", get_defined_vars ());
155 unset($__refs, $__v);
156
157 $unfs .= '<tr>' . "\n";
158 $unfs .= '<th><label for="ws-plugin--s2member-user-new-s2member-ccaps">Custom Capabilities:</label> <a href="#" onclick="alert(\'Optional. This is VERY advanced.\\nSee: s2Member → API Scripting → Custom Capabilities.' . ((is_multisite ()) ? '\\n\\nCustom Capabilities are assigned on a per-Blog basis. So having a set of Custom Capabilities for one Blog, and having NO Custom Capabilities on another Blog - is very common. This is how permissions are designed to work.' : '') . '\'); return false;" tabindex="-1">[?]</a></th>' . "\n";
159 $unfs .= '<td><input type="text" autocomplete="off" name="ws_plugin__s2member_user_new_s2member_ccaps" id="ws-plugin--s2member-user-new-s2member-ccaps" value="' . format_to_edit ($_p["ws_plugin__s2member_user_new_s2member_ccaps"]) . '" class="regular-text" onkeyup="if(this.value.match(/[^a-z_0-9,]/)) this.value = jQuery.trim (jQuery.trim (this.value).replace (/[ \-]/g, \'_\').replace (/[^a-z_0-9,]/gi, \'\').toLowerCase ());" /></td>' . "\n";
160 $unfs .= '</tr>' . "\n";
161
162 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
163 do_action("_ws_plugin__s2member_during_admin_user_new_fields_after_ccaps", get_defined_vars ());
164 unset($__refs, $__v);
165 }
166
167 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
168 do_action("_ws_plugin__s2member_during_admin_user_new_fields_before_auto_eot_time", get_defined_vars ());
169 unset($__refs, $__v);
170
171 $unfs .= '<tr>' . "\n";
172 $unfs .= '<th><label for="ws-plugin--s2member-user-new-auto-eot-time">Automatic EOT Time:</label> <a href="#" onclick="alert(\'EOT = End Of Term. ( i.e., Account Expiration / Termination. ).\\n\\nIf you leave this empty, s2Member will configure an EOT Time automatically, based on the paid Subscription associated with this account. In other words, if a paid Subscription expires, is cancelled, terminated, refunded, reversed, or charged back to you; s2Member will deal with the EOT automatically.\\n\\nThat being said, if you would rather take control over this, you can. If you type in a date manually, s2Member will obey the Auto-EOT Time that you\\\'ve given, no matter what. In other words, you can force certain Members to expire automatically, at a time that you specify. s2Member will obey.\\n\\nValid formats for Automatic EOT Time:\\n\\nmm/dd/yyyy\\nyyyy-mm-dd\\n+1 year\\n+2 weeks\\n+2 months\\n+10 minutes\\nnext thursday\\ntomorrow\\ntoday\\n\\n* anything compatible with PHP\\\'s strtotime() function.\'); return false;" tabindex="-1">[?]</a>' . (($auto_eot_time) ? '<br /><small>(<a href="http://www.world-time-zones.org/zones/greenwich-mean-time.htm" target="_blank" rel="external">Universal Time / GMT</a>)</small>' : '') . '</th>' . "\n";
173 $unfs .= '<td><input type="text" autocomplete="off" name="ws_plugin__s2member_user_new_s2member_auto_eot_time" id="ws-plugin--s2member-user-new-auto-eot-time" value="' . format_to_edit ($_p["ws_plugin__s2member_user_new_s2member_auto_eot_time"]) . '" class="regular-text" /></td>' . "\n";
174 $unfs .= '</tr>' . "\n";
175
176 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
177 do_action("_ws_plugin__s2member_during_admin_user_new_fields_after_auto_eot_time", get_defined_vars ());
178 unset($__refs, $__v);
179
180 if (c_ws_plugin__s2member_list_servers::list_servers_integrated ()) // Only if integrated with s2Member.
181 {
182 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
183 do_action("_ws_plugin__s2member_during_admin_user_new_fields_before_opt_in", get_defined_vars ());
184 unset($__refs, $__v);
185
186 $unfs .= '<tr>' . "\n";
187 $unfs .= '<th><label for="ws-plugin--s2member-user-new-opt-in">Process List Servers:</label> <a href="#" onclick="alert(\'You have at least one List Server integrated with s2Member. Would you like to process a confirmation request for this new User? If not, just leave the box unchecked.\'); return false;" tabindex="-1">[?]</a></th>' . "\n";
188 $unfs .= '<td><label><input type="checkbox" name="ws_plugin__s2member_user_new_opt_in" id="ws-plugin--s2member-user-new-opt-in" value="1"' . (($_p["ws_plugin__s2member_user_new_opt_in"]) ? ' checked="checked"' : '') . ' /> Yes, send a mailing list confirmation email to this new User.</label></td>' . "\n";
189 $unfs .= '</tr>' . "\n";
190
191 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
192 do_action("_ws_plugin__s2member_during_admin_user_new_fields_after_opt_in", get_defined_vars ());
193 unset($__refs, $__v);
194 }
195
196 if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"]) // Now, do we have Custom Fields?
197 if ($fields_applicable = c_ws_plugin__s2member_custom_reg_fields::custom_fields_configured_at_level ("any", "administrative"))
198 {
199 $unfs .= '<tr>' . "\n";
200 $unfs .= '<td colspan="2">' . "\n";
201 $unfs .= '<div style="height:1px; line-height:1px; background:#CCCCCC;"></div>' . "\n";
202 $unfs .= '</td>' . "\n";
203 $unfs .= '</tr>' . "\n";
204
205 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
206 do_action("_ws_plugin__s2member_during_admin_user_new_fields_before_custom_fields", get_defined_vars ());
207 unset($__refs, $__v);
208
209 foreach (json_decode ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"], true) as $field)
210 {
211 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
212 do_action("_ws_plugin__s2member_during_admin_user_new_fields_during_custom_fields_before", get_defined_vars ());
213 unset($__refs, $__v);
214
215 if (in_array($field["id"], $fields_applicable)) // Field applicable?
216 {
217 $field_var = preg_replace ("/[^a-z0-9]/i", "_", strtolower ($field["id"]));
218 $field_id_class = preg_replace ("/_/", "-", $field_var);
219
220 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
221 if (apply_filters("_ws_plugin__s2member_during_admin_user_new_fields_during_custom_fields_display", true, get_defined_vars ()))
222 {
223 if (!empty($field["section"]) && $field["section"] === "yes") // Starts a new section?
224 $unfs .= '<tr><td colspan="2"><div class="ws-plugin--s2member-user-new-divider-section' . ((!empty($field["sectitle"])) ? '-title' : '') . '">' . ((!empty($field["sectitle"])) ? $field["sectitle"] : '') . '</div></td></tr>';
225
226 $unfs .= '<tr>' . "\n";
227 $unfs .= '<th><label for="ws-plugin--s2member-user-new-' . esc_attr ($field_id_class) . '">' . ((preg_match ("/^(checkbox|pre_checkbox)$/", $field["type"])) ? ucwords (preg_replace ("/_/", " ", $field_var)) : $field["label"]) . ':</label></th>' . "\n";
228 $unfs .= '<td>' . c_ws_plugin__s2member_custom_reg_fields::custom_field_gen (__FUNCTION__, $field, "ws_plugin__s2member_user_new_", "ws-plugin--s2member-user-new-", "", ((preg_match ("/^(text|textarea|select|selects)$/", $field["type"])) ? "width:99%;" : ""), "", "", $_p, $_p["ws_plugin__s2member_user_new_" . $field_var], "administrative") . '</td>' . "\n";
229 $unfs .= '</tr>' . "\n";
230 }
231 unset($__refs, $__v);
232 }
233
234 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
235 do_action("_ws_plugin__s2member_during_admin_user_new_fields_during_custom_fields_after", get_defined_vars ());
236 unset($__refs, $__v);
237 }
238
239 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
240 do_action("_ws_plugin__s2member_during_admin_user_new_fields_after_custom_fields", get_defined_vars ());
241 unset($__refs, $__v);
242
243 $unfs .= '<tr>' . "\n";
244 $unfs .= '<td colspan="2">' . "\n";
245 $unfs .= '<div style="height:1px; line-height:1px; background:#CCCCCC;"></div>' . "\n";
246 $unfs .= '</td>' . "\n";
247 $unfs .= '</tr>' . "\n";
248 }
249
250 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
251 do_action("_ws_plugin__s2member_during_admin_user_new_fields_before_notes", get_defined_vars ());
252 unset($__refs, $__v);
253
254 $unfs .= '<tr>' . "\n";
255 $unfs .= '<th><label for="ws-plugin--s2member-user-new-s2member-notes">Administrative Notes:</label> <a href="#" onclick="alert(\'This is for Administrative purposes. You can keep a list of Notations about this account. These Notations are private; Users/Members will never see these.\\n\\n*Note* The s2Member software may `append` Notes to this field occasionally, under special circumstances. For example, when/if s2Member demotes a paid Member at EOT, s2Member will leave a Note in this field.\'); return false;" tabindex="-1">[?]</a><br /><br /><small>These Notations are private; Users/Members will never see any of these notes.</small></th>' . "\n";
256 $unfs .= '<td><textarea name="ws_plugin__s2member_user_new_s2member_notes" id="ws-plugin--s2member-user-new-s2member-notes" rows="5" wrap="off" spellcheck="false" style="width:99%;">' . format_to_edit ($_p["ws_plugin__s2member_user_new_s2member_notes"]) . '</textarea></td>' . "\n";
257 $unfs .= '</tr>' . "\n";
258
259 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
260 do_action("_ws_plugin__s2member_during_admin_user_new_fields_after_notes", get_defined_vars ());
261 unset($__refs, $__v);
262
263 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
264 do_action("_ws_plugin__s2member_during_admin_user_new_fields_after", get_defined_vars ());
265 unset($__refs, $__v);
266
267 $unfs .= '</table>' . "\n";
268
269 $unfs .= '<div style="margin:25px 0 25px 0; height:1px; line-height:1px; background:#CCCCCC;"></div>' . "\n";
270
271 $buffer = preg_replace ("/(\<\/table\>)(\s*)(\<p\s+class\s*\=\s*['\"]submit['\"]\s*\>)(\s*)(\<input\s+type\s*\=\s*['\"]submit['\"]\s+name\s*\=\s*['\"]createuser['\"])/", "$1$2\n" . $unfs . "$3$4$5", $buffer);
272 }
273
274 foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;
275 do_action("_ws_plugin__s2member_after_admin_user_new_fields", get_defined_vars ());
276 unset($__refs, $__v);
277
278 return apply_filters("_ws_plugin__s2member_admin_user_new_fields", $buffer, get_defined_vars ());
279 }
280 }
281 }
282