PluginProbe
s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions / 110926
s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions v110926
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 / menu-pages / gen-ops.inc.php

gen-ops.inc.php in s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions 110926, at includes/menu-pages/gen-ops.inc.php

1,284 lines 88.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Menu page for the s2Member plugin ( General Options page ).
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\Menu_Pages
15 * @since 3.0
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_menu_page_gen_ops"))
21 {
22 /**
23 * Menu page for the s2Member plugin ( General Options page ).
24 *
25 * @package s2Member\Menu_Pages
26 * @since 110531
27 */
28 class c_ws_plugin__s2member_menu_page_gen_ops
29 {
30 public function __construct ()
31 {
32 echo '<div class="wrap ws-menu-page">' . "\n";
33 /**/
34 echo '<div id="icon-plugins" class="icon32"><br /></div>' . "\n";
35 echo '<h2>s2Member® General Options</h2>' . "\n";
36 /**/
37 echo '<table class="ws-menu-page-table">' . "\n";
38 echo '<tbody class="ws-menu-page-table-tbody">' . "\n";
39 echo '<tr class="ws-menu-page-table-tr">' . "\n";
40 echo '<td class="ws-menu-page-table-l">' . "\n";
41 /**/
42 echo '<form method="post" name="ws_plugin__s2member_options_form" id="ws-plugin--s2member-options-form">' . "\n";
43 echo '<input type="hidden" name="ws_plugin__s2member_options_save" id="ws-plugin--s2member-options-save" value="' . esc_attr (wp_create_nonce ("ws-plugin--s2member-options-save")) . '" />' . "\n";
44 echo '<input type="hidden" name="ws_plugin__s2member_configured" id="ws-plugin--s2member-configured" value="1" />' . "\n";
45 /**/
46 do_action ("ws_plugin__s2member_during_gen_ops_page_before_left_sections", get_defined_vars ());
47 /**/
48 if (apply_filters ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_display_deactivation", (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site () || is_super_admin ()), get_defined_vars ()))
49 {
50 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_before_deactivation", get_defined_vars ());
51 /**/
52 echo '<div class="ws-menu-page-group" title="Deactivation Safeguards"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["run_deactivation_routines"]) ? ' default-state="open"' : '') . '>' . "\n";
53 /**/
54 echo '<div class="ws-menu-page-section ws-plugin--s2member-deactivation-section">' . "\n";
55 echo '<h3>Deactivation Safeguards ( highly recommended )</h3>' . "\n";
56 echo (is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site () && is_super_admin ()) ? '<p><em class="ws-menu-page-hilite">On a Multisite Blog Farm, this panel is ONLY visible to YOU, as a Super Administrator. s2Member automatically Safeguards everything on a Multisite Blog Farm. However, as the Super Administrator, you may turn this off; on a per-Blog basis. For example, if you\'re going to de-activate s2Member on this particular Blog, you can turn OFF the Safeguards below, so that s2Member will completely erase itself.</em></p>' . "\n" : '<p>By default, s2Member will retain all of it\'s Roles, Capabilities, and your Configuration Options when/if you deactivate s2Member from the Plugins Menu in WordPress®. However, if you would like for s2Member to erase itself completely, please choose: <code>No ( upon deactivation, erase all data/options )</code>.</p>' . "\n";
57 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_deactivation", get_defined_vars ());
58 /**/
59 echo '<table class="form-table">' . "\n";
60 echo '<tbody>' . "\n";
61 echo '<tr>' . "\n";
62 /**/
63 echo '<th>' . "\n";
64 echo '<label for="ws-plugin--s2member-run-deactivation-routines">' . "\n";
65 echo 'Safeguard s2Member Data/Options?' . "\n";
66 echo '</label>' . "\n";
67 echo '</th>' . "\n";
68 /**/
69 echo '</tr>' . "\n";
70 echo '<tr>' . "\n";
71 /**/
72 echo '<td>' . "\n";
73 echo '<select name="ws_plugin__s2member_run_deactivation_routines" id="ws-plugin--s2member-run-deactivation-routines">' . "\n";
74 echo '<option value="0"' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["run_deactivation_routines"]) ? ' selected="selected"' : '') . '>Yes ( safeguard all data/options )</option>' . "\n";
75 echo '<option value="1"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["run_deactivation_routines"]) ? ' selected="selected"' : '') . '>No ( upon deactivation, erase all data/options )</option>' . "\n";
76 echo '</select><br />' . "\n";
77 echo 'Recommended setting: ( <code>Yes, safeguard all data/options</code> )' . "\n";
78 echo '</td>' . "\n";
79 /**/
80 echo '</tr>' . "\n";
81 echo '</tbody>' . "\n";
82 echo '</table>' . "\n";
83 echo '</div>' . "\n";
84 /**/
85 echo '</div>' . "\n";
86 /**/
87 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_after_deactivation", get_defined_vars ());
88 }
89 /**/
90 if (apply_filters ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_display_security", true, get_defined_vars ()))
91 {
92 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_before_security", get_defined_vars ());
93 /**/
94 echo '<div class="ws-menu-page-group" title="Security Encryption Key">' . "\n";
95 /**/
96 echo '<div class="ws-menu-page-section ws-plugin--s2member-security-section">' . "\n";
97 echo '<img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/large-icon.png" title="s2Member ( a Membership management system for WordPress® )" alt="" style="float:right; margin:0 0 0 25px; border:0;" />' . "\n";
98 echo '<h3>Security Encryption Key ( optional, for tighter security )</h3>' . "\n";
99 echo '<p>Just like WordPress®, s2Member is open-source software. Which is wonderful. However, this also makes it possible for anyone to grab a copy of the software, and try to learn their way around its security measures. In order to keep your installation of s2Member unique/secure, you should configure a Security Encryption Key. s2Member will use your Security Encryption Key to protect itself against hackers. It does this by encrypting all sensitive information with your Key. A Security Encryption Key is unique to your installation.</p>' . "\n";
100 echo '<p>Once you configure this, you do NOT want to change it; not ever. In fact, it is a VERY good idea to keep this backed up in a safe place, just in case you need to move your site, or re-install s2Member in the future. Some of the sensitive data that s2Member stores, will be encrypted with this Key. If you change it, that data can no longer be read, even by s2Member itself. In other words, don\'t use s2Member for six months, then decide to change your Key. That would break your installation. You configure this once, for each installation of s2Member; and you NEVER change it.</p>' . "\n";
101 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_security", get_defined_vars ());
102 /**/
103 echo '<table class="form-table">' . "\n";
104 echo '<tbody>' . "\n";
105 echo '<tr>' . "\n";
106 /**/
107 echo '<th>' . "\n";
108 echo '<label for="ws-plugin--s2member-sec-encryption-key">' . "\n";
109 echo 'Security Encryption Key ( at least 60 chars )' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sec_encryption_key"]) ? ' <a href="#" onclick="ws_plugin__s2member_enableSecurityKey(); return false;" title="( not recommended )">edit key</a>' : ' <a href="#" onclick="ws_plugin__s2member_generateSecurityKey(); return false;" title="Insert an auto-generated Key. ( recommended )">auto-generate</a>') . "\n";
110 echo '</label>' . "\n";
111 echo '</th>' . "\n";
112 /**/
113 echo '</tr>' . "\n";
114 echo '<tr>' . "\n";
115 /**/
116 echo '<td>' . "\n";
117 echo '<input type="text" name="ws_plugin__s2member_sec_encryption_key" id="ws-plugin--s2member-sec-encryption-key" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sec_encryption_key"]) . '" maxlength="256" autocomplete="off"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sec_encryption_key"]) ? ' disabled="disabled"' : '') . ' />' . "\n";
118 echo (!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sec_encryption_key"]) ? '<br />This may contain letters, numbers, spaces; even punctuation. Up to 256 characters.<br /><em>Ex: <code>' . esc_html (strtoupper (c_ws_plugin__s2member_utils_strings::random_str_gen (64))) . '</code></em>' . "\n" : '';
119 echo (count ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sec_encryption_key_history"]) > 1) ? '<br /><a href="#" onclick="ws_plugin__s2member_securityKeyHistory(); return false;">Click here</a> for a history of your last 10 Encryption Keys.<div id="ws-plugin--s2member-sec-encryption-key-history" style="display:none;"><code>' . implode ('</code><br /><code>', $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sec_encryption_key_history"]) . '</code></div>' . "\n" : '';
120 echo '</td>' . "\n";
121 /**/
122 echo '</tr>' . "\n";
123 echo '</tbody>' . "\n";
124 echo '</table>' . "\n";
125 echo '</div>' . "\n";
126 /**/
127 echo '</div>' . "\n";
128 /**/
129 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_after_security", get_defined_vars ());
130 }
131 /**/
132 if (apply_filters ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_display_localhost_info", (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site () || is_super_admin ()), get_defined_vars ()))
133 {
134 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_before_localhost_info", get_defined_vars ());
135 /**/
136 echo '<div class="ws-menu-page-group" title="Localhost WAMP/MAMP Developers">' . "\n";
137 /**/
138 echo '<div class="ws-menu-page-section ws-plugin--s2member-localhost-info-section">' . "\n";
139 echo '<h3>Localhost WAMP/MAMP Installs ( are you a developer? )</h3>' . "\n";
140 echo '<p>If you\'re developing your site in a <code>localhost</code> environment, running something like WAMP/MAMP, or <a href="http://www.easyphp.org/" target="_blank" rel="external">EasyPHP</a>, please add this line to your <code>/wp-config.php</code> file: <code><span style="color:#0000BB;">define</span><span style="color:#007700;">(</span><span style="color:#DD0000;">"LOCALHOST"</span>, <span style="color:#0000BB;">true</span><span style="color:#007700;">);</span></code>.</p>' . "\n";
141 echo '<p>This lets s2Member know definitively that your site is in a <code>localhost</code> environment. s2Member will adjust itself accordingly, maximizing functionality during your developement. s2Member can usually auto-detect this, but in cases where your <code>localhost</code> installation runs on something other than <code>127.0.0.1/localhost</code>, you need to tell s2Member definitively, by adding that line to your <code>/wp-config.php</code> file. For instance, s2Member needs to know when your server IP is the same as all User IPs.</p>' . "\n";
142 echo '<p><em>Once your site goes live, please remove the line. If you\'re already on a live server connected to the web, please ignore this section.</em></p>' . "\n";
143 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_localhost_info", get_defined_vars ());
144 echo '</div>' . "\n";
145 /**/
146 echo '</div>' . "\n";
147 /**/
148 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_after_localhost_info", get_defined_vars ());
149 }
150 /**/
151 if (apply_filters ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_display_s_badge_wp_footer_code", true, get_defined_vars ()))
152 {
153 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_before_s_badge_wp_footer_code", get_defined_vars ());
154 /**/
155 echo '<div class="ws-menu-page-group" title="s2Member® Security Badge">' . "\n";
156 /**/
157 echo '<div class="ws-menu-page-section ws-plugin--s2member-s-badge-wp-footer-code-section">' . "\n";
158 echo '<h3>Security Badge &amp; Footer Configuration ( optional )</h3>' . "\n";
159 echo '<div class="ws-menu-page-right">' . c_ws_plugin__s2member_utilities::s_badge_gen ("1", true, true) . '</div>' . "\n";
160 echo '<p>An s2Member® Security Badge <em>( optional )</em>, can be used to express your site\'s concern for security; demonstrating to all Users/Members that your site <em>( and the s2Member software )</em>, takes security seriously. However, in order to qualify your site, you MUST generate a Security Encryption Key <em>( previous section )</em>, and then click "Save All Changes". Only then, will s2Member officially verify your installation <em>( verification occurs automatically )</em>. Once you\'ve properly configured all aspects of s2Member, your s2Member® Security Badge will be verified. *Note: to see the "verified" version of your Security Badge, you might need to refresh your browser after saving all changes <em>( i.e. after you create a Security Encryption Key )</em>. Also, s2Member will NOT "verify" your site if you turn off Unique IP Restrictions, Brute Force Login Protection, or if your <code>/wp-config.php</code> file lacks <a href="http://codex.wordpress.org/Editing_wp-config.php#Security_Keys" target="_blank" rel="external">Security Keys</a> <em>( at least 60 chars in length, each )</em>.</p>' . "\n";
161 echo '<p><strong>How does s2Member know when my site is secure?</strong><br />If enabled below, an API call for "Security Badge Status", will allow web service connections to determine your status. Clicking <a href="' . esc_attr (site_url ("/?s2member_s_badge_status=1")) . '" target="_blank" rel="external">this link</a> will report <code>1</code> <em>( secure )</em>, <code>0</code> <em>( at risk )</em>, or <code>-</code> <em>( API disabled )</em>. Once all security considerations are satisfied, s2Member will report <code>1</code> <em>( secure )</em> for your installation. *Note, this simple API will NOT, and should not, report any other information. It will ONLY report the current status of your Security Badge, as determined by your installation of s2Member. When/if you install the s2Member Security Badge, s2Member will make a connection to your site "once per day", to test the status of your Security Badge.</p>' . "\n";
162 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_s_badge_wp_footer_code", get_defined_vars ());
163 /**/
164 echo '<table class="form-table">' . "\n";
165 echo '<tbody>' . "\n";
166 echo '<tr>' . "\n";
167 /**/
168 echo '<th>' . "\n";
169 echo '<label for="ws-plugin--s2member-s-badge-status-enabled">' . "\n";
170 echo 'Enable Security Badge Status API?' . "\n";
171 echo '</label>' . "\n";
172 echo '</th>' . "\n";
173 /**/
174 echo '</tr>' . "\n";
175 echo '<tr>' . "\n";
176 /**/
177 echo '<td>' . "\n";
178 echo '<select name="ws_plugin__s2member_s_badge_status_enabled" id="ws-plugin--s2member-s-badge-status-enabled">' . "\n";
179 echo '<option value="0"' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["s_badge_status_enabled"]) ? ' selected="selected"' : '') . '>No ( default, Badge Status API is disabled )</option>' . "\n";
180 echo '<option value="1"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["s_badge_status_enabled"]) ? ' selected="selected"' : '') . '>Yes ( enable Badge Status API for verification )</option>' . "\n";
181 echo '</select><br />' . "\n";
182 echo 'This must be enabled if you want s2Member to verify your Security Badge.' . "\n";
183 echo '</td>' . "\n";
184 /**/
185 echo '</tr>' . "\n";
186 echo '<tr>' . "\n";
187 /**/
188 echo '<th>' . "\n";
189 echo '<label for="ws-plugin--s2member-wp-footer-code">' . "\n";
190 echo 'Customize WordPress® Footer:<br />' . "\n";
191 echo '<small>[ <a href="#" onclick="this.$code = jQuery(\'textarea#ws-plugin--s2member-wp-footer-code\'); this.$code.val(jQuery.trim(unescape(\'' . rawurlencode ('[s2Member-Security-Badge v="1" /]') . '\')+\'\n\'+this.$code.val())); return false;">Click HERE to insert your Security Badge</a> ],<br />or use Shortcode <code>[s2Member-Security-Badge v="1" /]</code> in a Post/Page/Widget.</small>' . "\n";
192 echo '</label>' . "\n";
193 echo '</th>' . "\n";
194 /**/
195 echo '</tr>' . "\n";
196 echo '<tr>' . "\n";
197 /**/
198 echo '<td>' . "\n";
199 echo '<textarea name="ws_plugin__s2member_wp_footer_code" id="ws-plugin--s2member-wp-footer-code" rows="8" wrap="off" spellcheck="false" style="font-family:Consolas, monospace;">' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["wp_footer_code"]) . '</textarea><br />' . "\n";
200 echo 'Any valid XHTML / JavaScript' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' ( or even PHP )') . ' code will work just fine here.' . "\n";
201 echo '</td>' . "\n";
202 /**/
203 echo '</tr>' . "\n";
204 echo '</tbody>' . "\n";
205 echo '</table>' . "\n";
206 echo '</div>' . "\n";
207 /**/
208 echo '</div>' . "\n";
209 /**/
210 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_after_s_badge_wp_footer_code", get_defined_vars ());
211 }
212 /**/
213 if (apply_filters ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_display_email_config", true, get_defined_vars ()))
214 {
215 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_before_email_config", get_defined_vars ());
216 /**/
217 echo '<div class="ws-menu-page-group" title="Email Configuration">' . "\n";
218 /**/
219 echo '<div class="ws-menu-page-section ws-plugin--s2member-email-section">' . "\n";
220 echo '<h3 style="margin:0;">Email From: ' . esc_html ('"Name" <address>') . '</h3>' . "\n";
221 echo '<p style="margin:0;">This is the name/address that will appear in outgoing email notifications sent by the s2Member plugin.</p>' . "\n";
222 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_email_from_name_config", get_defined_vars ());
223 /**/
224 echo '<table class="form-table">' . "\n";
225 echo '<tbody>' . "\n";
226 echo '<tr>' . "\n";
227 /**/
228 echo '<th>' . "\n";
229 echo '<label for="ws-plugin--s2member-reg-email-from-name">' . "\n";
230 echo 'Email From Name:' . "\n";
231 echo '</label>' . "\n";
232 echo '</th>' . "\n";
233 /**/
234 echo '</tr>' . "\n";
235 echo '<tr>' . "\n";
236 /**/
237 echo '<td>' . "\n";
238 echo '<input type="text" name="ws_plugin__s2member_reg_email_from_name" id="ws-plugin--s2member-reg-email-from-name" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . '" /><br />' . "\n";
239 echo 'We recommend that you use the name of your site here.' . "\n";
240 echo '</td>' . "\n";
241 /**/
242 echo '</tr>' . "\n";
243 echo '<tr>' . "\n";
244 /**/
245 echo '<th>' . "\n";
246 echo '<label for="ws-plugin--s2member-reg-email-from-email">' . "\n";
247 echo 'Email From Address:' . "\n";
248 echo '</label>' . "\n";
249 echo '</th>' . "\n";
250 /**/
251 echo '</tr>' . "\n";
252 echo '<tr>' . "\n";
253 /**/
254 echo '<td>' . "\n";
255 echo '<input type="text" name="ws_plugin__s2member_reg_email_from_email" id="ws-plugin--s2member-reg-email-from-email" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"]) . '" /><br />' . "\n";
256 echo 'We recommend something like: support@your-domain.com.' . "\n";
257 echo '</td>' . "\n";
258 /**/
259 echo '</tr>' . "\n";
260 echo '<tr>' . "\n";
261 /**/
262 echo '<th>' . "\n";
263 echo '<label for="ws-plugin--s2member-reg-email-support-link">' . "\n";
264 echo 'Email Support/Contact Link:' . "\n";
265 echo '</label>' . "\n";
266 echo '</th>' . "\n";
267 /**/
268 echo '</tr>' . "\n";
269 echo '<tr>' . "\n";
270 /**/
271 echo '<td>' . "\n";
272 echo '<input type="text" name="ws_plugin__s2member_reg_email_support_link" id="ws-plugin--s2member-reg-email-support-link" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_support_link"]) . '" /><br />' . "\n";
273 echo 'Ex: <code>mailto:support@your-domain.com</code> ( <em>mailto link</em> ).<br />' . "\n";
274 echo 'Or: <code>' . esc_html (site_url ("/contact-us/")) . '</code>.' . "\n";
275 echo '</td>' . "\n";
276 /**/
277 echo '</tr>' . "\n";
278 echo '</tbody>' . "\n";
279 echo '</table>' . "\n";
280 /**/
281 echo '<div class="ws-menu-page-hr"></div>' . "\n";
282 /**/
283 echo '<h3 style="margin:0;">New User Email Configuration</h3>' . "\n";
284 echo '<input type="hidden" id="ws-plugin--s2member-pluggables-wp-new-user-notification" value="' . esc_attr ((empty ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["pluggables"]["wp_new_user_notification"])) ? '0' : '1') . '" />' . "\n";
285 echo (empty ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["pluggables"]["wp_new_user_notification"])) ? '<p class="ws-menu-page-error" style="margin:0;"><em><strong>Conflict warning:</strong> You have another theme or plugin installed that is preventing s2Member from controlling this aspect of your installation. When the pluggable function <code><a href="http://codex.wordpress.org/Function_Reference/wp_new_user_notification" target="_blank" rel="external">wp_new_user_notification()</a></code> is handled by another plugin, it\'s not possible for s2Member to allow customization of New User Emails. This is NOT a major issue. In fact, in some cases, it might be desirable. That being said, if you DO want to use s2Member\'s customization of New User Emails, you will need to deactivate one plugin at a time until this conflict warning goes away.</em></p>' . "\n" : '';
286 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_new_user_emails", get_defined_vars ());
287 /**/
288 echo '<table class="form-table">' . "\n";
289 echo '<tbody>' . "\n";
290 echo '<tr>' . "\n";
291 /**/
292 echo '<td>' . "\n";
293 echo '<select name="ws_plugin__s2member_new_user_emails_enabled" id="ws-plugin--s2member-new-user-emails-enabled">' . "\n";
294 echo '<option value="0"' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["new_user_emails_enabled"]) ? ' selected="selected"' : '') . '>No ( default, use WordPress® defaults )</option>' . "\n";
295 echo '<option value="1"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["new_user_emails_enabled"]) ? ' selected="selected"' : '') . '>Yes ( customize New User Emails with s2Member )</option>' . "\n";
296 echo '</select>' . "\n";
297 echo '</td>' . "\n";
298 /**/
299 echo '</tr>' . "\n";
300 echo '</tbody>' . "\n";
301 echo '</table>' . "\n";
302 /**/
303 echo '<div id="ws-plugin--s2member-new-user-emails">' . "\n";
304 /**/
305 echo '<div class="ws-menu-page-hr"></div>' . "\n";
306 /**/
307 echo '<h3 style="margin:0;">New User Email Message ( <a href="#" onclick="jQuery(\'div#ws-plugin--s2member-new-user-email-details\').toggle(); return false;" class="ws-dotted-link">click to customize</a> )</h3>' . "\n";
308 echo '<p style="margin:0;">This email is sent to all new Users/Members. It should always contain their Username/Password. In addition to this email, s2Member will also send new paying Customers a Signup Confirmation Email, which you can customize from your Dashboard, under: <code>s2Member -> PayPal® Options</code>. You may wish to customize these emails further, by providing details that are specifically geared to your site.</p>' . "\n";
309 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_new_user_email", get_defined_vars ());
310 /**/
311 echo '<div id="ws-plugin--s2member-new-user-email-details" style="display:none;">' . "\n";
312 echo '<table class="form-table">' . "\n";
313 echo '<tbody>' . "\n";
314 echo '<tr>' . "\n";
315 /**/
316 echo '<th>' . "\n";
317 echo '<label for="ws-plugin--s2member-new-user-email-subject">' . "\n";
318 echo 'New User Email Subject:' . "\n";
319 echo '</label>' . "\n";
320 echo '</th>' . "\n";
321 /**/
322 echo '</tr>' . "\n";
323 echo '<tr>' . "\n";
324 /**/
325 echo '<td>' . "\n";
326 echo '<input type="text" name="ws_plugin__s2member_new_user_email_subject" id="ws-plugin--s2member-new-user-email-subject" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["new_user_email_subject"]) . '" /><br />' . "\n";
327 echo 'Subject Line used in the email sent to new Users/Members.' . "\n";
328 echo '</td>' . "\n";
329 /**/
330 echo '</tr>' . "\n";
331 echo '<tr>' . "\n";
332 /**/
333 echo '<th>' . "\n";
334 echo '<label for="ws-plugin--s2member-new-user-email-message">' . "\n";
335 echo 'New User Email Message:' . "\n";
336 echo '</label>' . "\n";
337 echo '</th>' . "\n";
338 /**/
339 echo '</tr>' . "\n";
340 echo '<tr>' . "\n";
341 /**/
342 echo '<td>' . "\n";
343 echo '<textarea name="ws_plugin__s2member_new_user_email_message" id="ws-plugin--s2member-new-user-email-message" rows="10">' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["new_user_email_message"]) . '</textarea><br />' . "\n";
344 echo 'Message Body used in the email sent to new Users/Members.<br /><br />' . "\n";
345 echo '<strong>You can also use these special Replacement Codes if you need them:</strong>' . "\n";
346 echo '<ul>' . "\n";
347 echo '<li><code>%%user_first_name%%</code> = The First Name of the Member who registered their Username.</li>' . "\n";
348 echo '<li><code>%%user_last_name%%</code> = The Last Name of the Member who registered their Username.</li>' . "\n";
349 echo '<li><code>%%user_full_name%%</code> = The Full Name ( First &amp; Last ) of the Member who registered their Username.</li>' . "\n";
350 echo '<li><code>%%user_email%%</code> = The Email Address of the Member who registered their Username.</li>' . "\n";
351 echo '<li><code>%%user_login%%</code> = The Username the Member selected during registration.</li>' . "\n";
352 echo '<li><code>%%user_pass%%</code> = The Password selected or generated during registration.</li>' . "\n";
353 echo '<li><code>%%user_ip%%</code> = The User\'s IP Address, detected via <code>$_SERVER["REMOTE_ADDR"]</code>.</li>' . "\n";
354 echo '<li><code>%%user_id%%</code> = A unique WordPress® User ID generated during registration.</li>' . "\n";
355 echo '<li><code>%%wp_login_url%%</code> = The full URL where Users can get logged into your site.</li>' . "\n";
356 echo '</ul>' . "\n";
357 /**/
358 echo '<strong>Custom Registration Fields are also supported in this email:</strong>' . "\n";
359 echo '<ul>' . "\n";
360 echo '<li><code>%%date_of_birth%%</code> would be valid; if you have a Custom Registration Field with the ID <code>date_of_birth</code>.</li>' . "\n";
361 echo '<li><code>%%street_address%%</code> would be valid; if you have a Custom Registration Field with the ID <code>street_address</code>.</li>' . "\n";
362 echo '<li><code>%%country%%</code> would be valid; if you have a Custom Registration Field with the ID <code>country</code>.</li>' . "\n";
363 echo '<li><em><code>%%etc, etc...%%</code> <strong>see:</strong> s2Member -> General Options -> Custom Registration Fields</em>.</li>' . "\n";
364 echo '</ul>' . "\n";
365 /**/
366 echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>' . "\n";
367 echo '<ul>' . "\n";
368 echo '<li><code>%%cv0%%</code> = The domain of your site, which is passed through the `custom` attribute in your Shortcode.</li>' . "\n";
369 echo '<li><code>%%cv1%%</code> = If you need to track additional custom variables, you can pipe delimit them into the `custom` attribute; inside your Shortcode, like this: <code>custom="' . esc_html ($_SERVER["HTTP_HOST"]) . '|cv1|cv2|cv3"</code>. You can have an unlimited number of custom variables. Obviously, this is for advanced webmasters; but the functionality has been made available for those who need it.</li>' . "\n";
370 echo '</ul>' . "\n";
371 echo '<strong>This example uses cv1 to record a special marketing campaign:</strong><br />' . "\n";
372 echo '<em>( The campaign ( i.e. christmas-promo ) could be referenced using <code>%%cv1%%</code> )</em><br />' . "\n";
373 echo '<code>custom="' . esc_html ($_SERVER["HTTP_HOST"]) . '|christmas-promo"</code>' . "\n";
374 /**/
375 echo '</td>' . "\n";
376 /**/
377 echo '</tr>' . "\n";
378 echo '</tbody>' . "\n";
379 echo '</table>' . "\n";
380 echo '</div>' . "\n";
381 /**/
382 echo '<div class="ws-menu-page-hr"></div>' . "\n";
383 /**/
384 echo '<h3 style="margin:0;">Administrative: New User Notification ( <a href="#" onclick="jQuery(\'div#ws-plugin--s2member-new-user-admin-email-details\').toggle(); return false;" class="ws-dotted-link">click to customize</a> )</h3>' . "\n";
385 echo '<p style="margin:0;">This email notification is sent to you, each time a new User/Member registers.</p>' . "\n";
386 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_new_user_admin_email", get_defined_vars ());
387 /**/
388 echo '<div id="ws-plugin--s2member-new-user-admin-email-details" style="display:none;">' . "\n";
389 echo '<table class="form-table">' . "\n";
390 echo '<tbody>' . "\n";
391 echo '<tr>' . "\n";
392 /**/
393 echo '<th>' . "\n";
394 echo '<label for="ws-plugin--s2member-new-user-admin-email-recipients">' . "\n";
395 echo 'New User Notification Recipients:' . "\n";
396 echo '</label>' . "\n";
397 echo '</th>' . "\n";
398 /**/
399 echo '</tr>' . "\n";
400 echo '<tr>' . "\n";
401 /**/
402 echo '<td>' . "\n";
403 echo '<input type="text" name="ws_plugin__s2member_new_user_admin_email_recipients" id="ws-plugin--s2member-new-user-admin-email-recipients" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["new_user_admin_email_recipients"]) . '" /><br />' . "\n";
404 echo 'This is a semicolon ( ; ) delimited list of Recipients. Here is an example:<br />' . "\n";
405 echo '<code>"Name" &lt;user@example.com&gt;; admin@example.com; "Webmaster" &lt;webmaster@example.com&gt;</code>' . "\n";
406 echo '</td>' . "\n";
407 /**/
408 echo '</tr>' . "\n";
409 echo '<tr>' . "\n";
410 /**/
411 echo '<th>' . "\n";
412 echo '<label for="ws-plugin--s2member-new-user-admin-email-subject">' . "\n";
413 echo 'New User Notification Subject:' . "\n";
414 echo '</label>' . "\n";
415 echo '</th>' . "\n";
416 /**/
417 echo '</tr>' . "\n";
418 echo '<tr>' . "\n";
419 /**/
420 echo '<td>' . "\n";
421 echo '<input type="text" name="ws_plugin__s2member_new_user_admin_email_subject" id="ws-plugin--s2member-new-user-admin-email-subject" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["new_user_admin_email_subject"]) . '" /><br />' . "\n";
422 echo 'Subject Line used in the email notification sent to Administrator.' . "\n";
423 echo '</td>' . "\n";
424 /**/
425 echo '</tr>' . "\n";
426 echo '<tr>' . "\n";
427 /**/
428 echo '<th>' . "\n";
429 echo '<label for="ws-plugin--s2member-new-user-admin-email-message">' . "\n";
430 echo 'New User Notification Message:' . "\n";
431 echo '</label>' . "\n";
432 echo '</th>' . "\n";
433 /**/
434 echo '</tr>' . "\n";
435 echo '<tr>' . "\n";
436 /**/
437 echo '<td>' . "\n";
438 echo '<textarea name="ws_plugin__s2member_new_user_admin_email_message" id="ws-plugin--s2member-new-user-admin-email-message" rows="10">' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["new_user_admin_email_message"]) . '</textarea><br />' . "\n";
439 echo 'Message Body used in the email notification sent to Administrator.<br /><br />' . "\n";
440 echo '<strong>You can also use these special Replacement Codes if you need them:</strong>' . "\n";
441 echo '<ul>' . "\n";
442 echo '<li><code>%%user_first_name%%</code> = The First Name of the Member who registered their Username.</li>' . "\n";
443 echo '<li><code>%%user_last_name%%</code> = The Last Name of the Member who registered their Username.</li>' . "\n";
444 echo '<li><code>%%user_full_name%%</code> = The Full Name ( First &amp; Last ) of the Member who registered their Username.</li>' . "\n";
445 echo '<li><code>%%user_email%%</code> = The Email Address of the Member who registered their Username.</li>' . "\n";
446 echo '<li><code>%%user_login%%</code> = The Username the Member selected during registration.</li>' . "\n";
447 echo '<li><code>%%user_pass%%</code> = The Password selected or generated during registration.</li>' . "\n";
448 echo '<li><code>%%user_ip%%</code> = The User\'s IP Address, detected via <code>$_SERVER["REMOTE_ADDR"]</code>.</li>' . "\n";
449 echo '<li><code>%%user_id%%</code> = A unique WordPress® User ID generated during registration.</li>' . "\n";
450 echo '<li><code>%%wp_login_url%%</code> = The full URL where Users can get logged into your site.</li>' . "\n";
451 echo '</ul>' . "\n";
452 /**/
453 echo '<strong>Custom Registration Fields are also supported in this email:</strong>' . "\n";
454 echo '<ul>' . "\n";
455 echo '<li><code>%%date_of_birth%%</code> would be valid; if you have a Custom Registration Field with the ID <code>date_of_birth</code>.</li>' . "\n";
456 echo '<li><code>%%street_address%%</code> would be valid; if you have a Custom Registration Field with the ID <code>street_address</code>.</li>' . "\n";
457 echo '<li><code>%%country%%</code> would be valid; if you have a Custom Registration Field with the ID <code>country</code>.</li>' . "\n";
458 echo '<li><em><code>%%etc, etc...%%</code> <strong>see:</strong> s2Member -> General Options -> Custom Registration Fields</em>.</li>' . "\n";
459 echo '</ul>' . "\n";
460 /**/
461 echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>' . "\n";
462 echo '<ul>' . "\n";
463 echo '<li><code>%%cv0%%</code> = The domain of your site, which is passed through the `custom` attribute in your Shortcode.</li>' . "\n";
464 echo '<li><code>%%cv1%%</code> = If you need to track additional custom variables, you can pipe delimit them into the `custom` attribute; inside your Shortcode, like this: <code>custom="' . esc_html ($_SERVER["HTTP_HOST"]) . '|cv1|cv2|cv3"</code>. You can have an unlimited number of custom variables. Obviously, this is for advanced webmasters; but the functionality has been made available for those who need it.</li>' . "\n";
465 echo '</ul>' . "\n";
466 echo '<strong>This example uses cv1 to record a special marketing campaign:</strong><br />' . "\n";
467 echo '<em>( The campaign ( i.e. christmas-promo ) could be referenced using <code>%%cv1%%</code> )</em><br />' . "\n";
468 echo '<code>custom="' . esc_html ($_SERVER["HTTP_HOST"]) . '|christmas-promo"</code>' . "\n";
469 /**/
470 echo '</td>' . "\n";
471 /**/
472 echo '</tr>' . "\n";
473 echo '</tbody>' . "\n";
474 echo '</table>' . "\n";
475 echo '</div>' . "\n";
476 echo '</div>' . "\n";
477 /**/
478 echo '</div>' . "\n";
479 /**/
480 echo '</div>' . "\n";
481 /**/
482 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_after_email_config", get_defined_vars ());
483 }
484 /**/
485 if (apply_filters ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_display_open_registration", true, get_defined_vars ()))
486 {
487 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_before_open_registration", get_defined_vars ());
488 /**/
489 if (is_multisite () && is_main_site ()) /* A Multisite Network, and we're on the Main Site? */
490 {
491 echo '<div class="ws-menu-page-group" title="Open Registration">' . "\n";
492 /**/
493 echo '<div class="ws-menu-page-section ws-plugin--s2member-open-registration-section">' . "\n";
494 echo '<h3>Open Registration / Free Subscribers ( optional )</h3>' . "\n";
495 echo '<p>On the Main Site of a Multisite Network, the settings for Open Registration are consolidated into the <code>s2Member -> Multisite (Config)</code> panel.</p>' . "\n";
496 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_open_registration", get_defined_vars ());
497 echo '</div>' . "\n";
498 /**/
499 echo '</div>' . "\n";
500 }
501 else /* Else we display this section normally. No special considerations are required in this case. */
502 {
503 echo '<div class="ws-menu-page-group" title="Open Registration">' . "\n";
504 /**/
505 echo '<div class="ws-menu-page-section ws-plugin--s2member-open-registration-section">' . "\n";
506 echo '<h3>Open Registration / Free Subscribers ( optional )</h3>' . "\n";
507 echo '<p>s2Member supports Free Subscribers ( at Level #0 ), along with four Primary Levels [1-4] of paid Membership. If you want your visitors to be capable of registering absolutely free, you will want to "allow" Open Registration. Whenever a visitor registers without paying, they\'ll automatically become a Free Subscriber, at Level #0.</p>' . "\n";
508 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_open_registration", get_defined_vars ());
509 /**/
510 echo '<table class="form-table">' . "\n";
511 echo '<tbody>' . "\n";
512 echo '<tr>' . "\n";
513 /**/
514 echo '<th>' . "\n";
515 echo '<label for="ws-plugin--s2member-allow-subscribers-in">' . "\n";
516 echo 'Allow Open Registration? ( Free Subscribers )' . "\n";
517 echo '</label>' . "\n";
518 echo '</th>' . "\n";
519 /**/
520 echo '</tr>' . "\n";
521 echo '<tr>' . "\n";
522 /**/
523 echo '<td>' . "\n";
524 echo '<select name="ws_plugin__s2member_allow_subscribers_in" id="ws-plugin--s2member-allow-subscribers-in">' . "\n";
525 echo '<option value="0"' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["allow_subscribers_in"]) ? ' selected="selected"' : '') . '>No ( do NOT allow Open Registration )</option>' . "\n";
526 echo '<option value="1"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["allow_subscribers_in"]) ? ' selected="selected"' : '') . '>Yes ( allow Open Registration; Free Subscribers at Level #0 )</option>' . "\n";
527 echo '</select><br />' . "\n";
528 echo 'If you set this to <code>Yes</code>, you\'re unlocking <a href="' . esc_attr (c_ws_plugin__s2member_utils_urls::wp_register_url ()) . '" target="_blank" rel="external">wp-login.php?action=register</a>. When a visitor registers without paying, they\'ll automatically become a Free Subscriber, at Level #0. The s2Member software reserves Level #0; to be used ONLY for Free Subscribers. All other Membership Levels [1-4] require payment.' . "\n";
529 echo '</td>' . "\n";
530 /**/
531 echo '</tr>' . "\n";
532 echo '</tbody>' . "\n";
533 echo '</table>' . "\n";
534 echo '</div>' . "\n";
535 /**/
536 echo '</div>' . "\n";
537 }
538 /**/
539 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_after_open_registration", get_defined_vars ());
540 }
541 /**/
542 if (apply_filters ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_display_membership_levels", true, get_defined_vars ()))
543 {
544 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_before_membership_levels", get_defined_vars ());
545 /**/
546 echo '<div class="ws-menu-page-group" title="Membership Levels/Labels">' . "\n";
547 /**/
548 echo '<div class="ws-menu-page-section ws-plugin--s2member-membership-levels-section">' . "\n";
549 echo '<h3>Membership Levels ( required, please customize these )</h3>' . "\n";
550 echo '<p>The default Membership Levels are labeled generically; feel free to modify them as needed. s2Member supports Free Subscribers <em>( at Level #0 )</em>, along with several Primary Roles for paid Membership <em>( i.e. Levels 1-4 )</em>, created by the s2Member plugin.' . ((!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? ' s2Member also supports unlimited Custom Capability Packages <em>( see <code>s2Member -> API Scripting -> Custom Capabilities</code> )</em>' : '') . '. That being said, you don\'t have to use all of the Membership Levels if you don\'t want to. To use only 1 or 2 of these Levels, just create and/or modify your Membership Options Page, so that it only includes payment Buttons for the Levels you wish to use.</p>' . "\n";
551 echo (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? '<p><em><strong>TIP:</strong> <strong>Unlimited Membership Levels</strong> are only possible with <a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank" rel="external">s2Member Pro</a>. However, Custom Capabilities are possible in all versions of s2Member, including the free version. Custom Capabilities are a great way to extend s2Member in creative ways. If you\'re an advanced site owner, a theme designer, or a web developer integrating s2Member for a client, please check your Dashboard, under: <code>s2Member -> API Scripting -> Custom Capabilities</code>. We also recommend the <a href="http://www.primothemes.com/forums/viewforum.php?f=40" target="_blank" rel="external">s2Member Codex</a>.</em></p>' . "\n" : '';
552 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_membership_levels", get_defined_vars ());
553 /**/
554 echo '<table class="form-table">' . "\n";
555 echo '<tbody>' . "\n";
556 /**/
557 for ($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)
558 {
559 echo '<tr>' . "\n";
560 /**/
561 echo '<th>' . "\n";
562 echo '<label for="ws-plugin--s2member-level' . $n . '-label">' . "\n";
563 echo ($n === 0) ? 'Level #' . $n . ' <em>( Free Subscribers )</em>:' . "\n" : 'Level #' . $n . ' Members:' . "\n";
564 echo '</label>' . "\n";
565 echo '</th>' . "\n";
566 /**/
567 echo '</tr>' . "\n";
568 echo '<tr>' . "\n";
569 /**/
570 echo '<td>' . "\n";
571 echo '<input type="text" name="ws_plugin__s2member_level' . $n . '_label" id="ws-plugin--s2member-level' . $n . '-label" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["level" . $n . "_label"]) . '" /><br />' . "\n";
572 echo 'This is the Label for Level #' . $n . (($n === 0) ? ' ( Free Subscribers )' : ' Members') . '.<br />' . "\n";
573 echo '</td>' . "\n";
574 /**/
575 echo '</tr>' . "\n";
576 }
577 /**/
578 echo '</tbody>' . "\n";
579 echo '</table>' . "\n";
580 /**/
581 echo '<div class="ws-menu-page-hr"></div>' . "\n";
582 /**/
583 echo '<table class="form-table" style="margin-top:0;">' . "\n";
584 echo '<tbody>' . "\n";
585 echo '<tr>' . "\n";
586 /**/
587 echo '<th style="padding-top:0;">' . "\n";
588 echo '<label for="ws-plugin--s2member-apply-label-translations">' . "\n";
589 echo 'Force WordPress® to use your Labels?' . "\n";
590 echo '</label>' . "\n";
591 echo '</th>' . "\n";
592 /**/
593 echo '</tr>' . "\n";
594 echo '<tr>' . "\n";
595 /**/
596 echo '<td>' . "\n";
597 echo '<input type="radio" name="ws_plugin__s2member_apply_label_translations" id="ws-plugin--s2member-apply-label-translations-0" value="0"' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["apply_label_translations"]) ? ' checked="checked"' : '') . ' /> <label for="ws-plugin--s2member-apply-label-translations-0">No</label> &nbsp;&nbsp;&nbsp; <input type="radio" name="ws_plugin__s2member_apply_label_translations" id="ws-plugin--s2member-apply-label-translations-1" value="1"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["apply_label_translations"]) ? ' checked="checked"' : '') . ' /> <label for="ws-plugin--s2member-apply-label-translations-1">Yes, force WordPress® to use my Labels.</label><br />' . "\n";
598 echo 'This particular option affects your administrative Dashboard only <em>( i.e. your list of Users )</em>. s2Member can force WordPress® to use your Labels instead of referencing Roles by `s2Member Level #`. If this is your first installation of s2Member, we suggest leaving this set to <code>no</code> until you\'ve had a chance to get acclimated with s2Member\'s functionality. In fact, many site owners choose to leave this off, because they find it less confusing when Roles are referred to by their s2Member Level #.' . "\n";
599 echo '</td>' . "\n";
600 /**/
601 echo '</tr>' . "\n";
602 echo '</tbody>' . "\n";
603 echo '</table>' . "\n";
604 echo '</div>' . "\n";
605 /**/
606 echo '</div>' . "\n";
607 /**/
608 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_after_membership_levels", get_defined_vars ());
609 }
610 /**/
611 if (apply_filters ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_display_login_registration", true, get_defined_vars ()))
612 {
613 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_before_login_registration", get_defined_vars ());
614 /**/
615 echo '<div class="ws-menu-page-group" title="Login/Registration Design">' . "\n";
616 /**/
617 echo '<div class="ws-menu-page-section ws-plugin--s2member-login-registration-section">' . "\n";
618 echo '<h3>Login/Registration Page Customization ( required )</h3>' . "\n";
619 echo '<p>These settings allow you to customize the user interface for your Login / Registration Pages:<br />( <a href="' . esc_attr (c_ws_plugin__s2member_utils_urls::wp_register_url ()) . '" target="_blank" rel="external">' . esc_html (c_ws_plugin__s2member_utils_urls::wp_register_url ()) . '</a> )</p>' . "\n";
620 echo (is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && is_main_site ()) ? '<p><em>A Multisite Blog Farm uses this Form instead, powered by your theme.<br />( <a href="' . esc_attr (c_ws_plugin__s2member_utils_urls::wp_signup_url ()) . '" target="_blank" rel="external">' . esc_html (c_ws_plugin__s2member_utils_urls::wp_signup_url ()) . '</a> )</em></p>' . "\n" : '';
621 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_login_registration", get_defined_vars ());
622 /**/
623 echo '<table class="form-table">' . "\n";
624 echo '<tbody>' . "\n";
625 echo '<tr>' . "\n";
626 /**/
627 echo '<td>' . "\n";
628 echo '<h3 style="margin:0;">Overall Font/Size Configuration</h3>' . "\n";
629 echo '<p style="margin:0;">These settings are all focused on your Login/Registration Fonts.</p>' . "\n";
630 echo '</td>' . "\n";
631 /**/
632 echo '</tr>' . "\n";
633 echo '<tr>' . "\n";
634 /**/
635 echo '<th>' . "\n";
636 echo '<label for="ws-plugin--s2member-login-reg-font-size">' . "\n";
637 echo 'Overall Font Size:' . "\n";
638 echo '</label>' . "\n";
639 echo '</th>' . "\n";
640 /**/
641 echo '</tr>' . "\n";
642 echo '<tr>' . "\n";
643 /**/
644 echo '<td>' . "\n";
645 echo '<input type="text" name="ws_plugin__s2member_login_reg_font_size" id="ws-plugin--s2member-login-reg-font-size" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_reg_font_size"]) . '" /><br />' . "\n";
646 echo 'Set this to a numeric value, calculated in pixels.' . "\n";
647 echo '</td>' . "\n";
648 /**/
649 echo '</tr>' . "\n";
650 echo '<tr>' . "\n";
651 /**/
652 echo '<th>' . "\n";
653 echo '<label for="ws-plugin--s2member-login-reg-font-family">' . "\n";
654 echo 'Overall Font Family:' . "\n";
655 echo '</label>' . "\n";
656 echo '</th>' . "\n";
657 /**/
658 echo '</tr>' . "\n";
659 echo '<tr>' . "\n";
660 /**/
661 echo '<td>' . "\n";
662 echo '<input type="text" name="ws_plugin__s2member_login_reg_font_family" id="ws-plugin--s2member-login-reg-font-family" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_reg_font_family"]) . '" /><br />' . "\n";
663 echo 'Set this to a web-safe font family.' . "\n";
664 echo '</td>' . "\n";
665 /**/
666 echo '</tr>' . "\n";
667 echo '<tr>' . "\n";
668 /**/
669 echo '<th>' . "\n";
670 echo '<label for="ws-plugin--s2member-login-reg-font-field-size">' . "\n";
671 echo 'Form Field Font Size:' . "\n";
672 echo '</label>' . "\n";
673 echo '</th>' . "\n";
674 /**/
675 echo '</tr>' . "\n";
676 echo '<tr>' . "\n";
677 /**/
678 echo '<td>' . "\n";
679 echo '<input type="text" name="ws_plugin__s2member_login_reg_font_field_size" id="ws-plugin--s2member-login-reg-font-field-size" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_reg_font_field_size"]) . '" /><br />' . "\n";
680 echo 'Set this to a numeric value, calculated in pixels.' . "\n";
681 echo '</td>' . "\n";
682 /**/
683 echo '</tr>' . "\n";
684 echo '</tbody>' . "\n";
685 echo '</table>' . "\n";
686 /**/
687 echo '<div class="ws-menu-page-hr"></div>' . "\n";
688 /**/
689 echo '<table class="form-table" style="margin-top:0;">' . "\n";
690 echo '<tbody>' . "\n";
691 echo '<tr>' . "\n";
692 /**/
693 echo '<td>' . "\n";
694 echo '<h3 style="margin:0;">Background Configuration</h3>' . "\n";
695 echo '<p style="margin:0;">These settings are all focused on your Login/Registration Background.</p>' . "\n";
696 echo '</td>' . "\n";
697 /**/
698 echo '</tr>' . "\n";
699 echo '<tr>' . "\n";
700 /**/
701 echo '<th>' . "\n";
702 echo '<label for="ws-plugin--s2member-login-reg-background-color">' . "\n";
703 echo 'Background Color:' . "\n";
704 echo '</label>' . "\n";
705 echo '</th>' . "\n";
706 /**/
707 echo '</tr>' . "\n";
708 echo '<tr>' . "\n";
709 /**/
710 echo '<td>' . "\n";
711 echo '<input type="text" name="ws_plugin__s2member_login_reg_background_color" id="ws-plugin--s2member-login-reg-background-color" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_reg_background_color"]) . '" /><br />' . "\n";
712 echo 'Set this to a 6-digit hex color code.' . "\n";
713 echo '</td>' . "\n";
714 /**/
715 echo '</tr>' . "\n";
716 echo '<tr>' . "\n";
717 /**/
718 echo '<th>' . "\n";
719 echo '<label for="ws-plugin--s2member-login-reg-background-image">' . "\n";
720 echo 'Background Image:' . "\n";
721 echo '</label>' . "\n";
722 echo '</th>' . "\n";
723 /**/
724 echo '</tr>' . "\n";
725 echo '<tr>' . "\n";
726 /**/
727 echo '<td>' . "\n";
728 echo '<input type="text" name="ws_plugin__s2member_login_reg_background_image" id="ws-plugin--s2member-login-reg-background-image" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_reg_background_image"]) . '" /><br />' . "\n";
729 echo '<input type="button" id="ws-plugin--s2member-login-reg-background-image-media-btn" value="Open Media Library" class="ws-menu-page-media-btn" rel="ws-plugin--s2member-login-reg-background-image" />' . "\n";
730 echo 'Set this to the URL of your Background Image. ( this is optional )<br />';
731 echo 'If supplied, your Background Image will be tiled.' . "\n";
732 echo '</td>' . "\n";
733 /**/
734 echo '</tr>' . "\n";
735 echo '<tr>' . "\n";
736 /**/
737 echo '<th>' . "\n";
738 echo '<label for="ws-plugin--s2member-login-reg-background-image-repeat">' . "\n";
739 echo 'Background Image Tile:' . "\n";
740 echo '</label>' . "\n";
741 echo '</th>' . "\n";
742 /**/
743 echo '</tr>' . "\n";
744 echo '<tr>' . "\n";
745 /**/
746 echo '<td>' . "\n";
747 echo '<select name="ws_plugin__s2member_login_reg_background_image_repeat" id="ws-plugin--s2member-login-reg-background-image-repeat">' . "\n";
748 echo '<option value="repeat"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_reg_background_image_repeat"] === "repeat") ? ' selected="selected"' : '') . '>Seamless Tile ( background-repeat: repeat; )</option>' . "\n";
749 echo '<option value="repeat-x"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_reg_background_image_repeat"] === "repeat-x") ? ' selected="selected"' : '') . '>Tile Horizontally ( background-repeat: repeat-x; )</option>' . "\n";
750 echo '<option value="repeat-y"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_reg_background_image_repeat"] === "repeat-y") ? ' selected="selected"' : '') . '>Tile Vertically ( background-repeat: repeat-y; )</option>' . "\n";
751 echo '<option value="no-repeat"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_reg_background_image_repeat"] === "no-repeat") ? ' selected="selected"' : '') . '>No Tiles ( background-repeat: no-repeat; )</option>' . "\n";
752 echo '</select><br />' . "\n";
753 echo 'This controls the way your Background Image is styled with CSS. [ <a href="http://www.w3schools.com/css/pr_background-repeat.asp" target="_blank" rel="external">learn more</a> ]' . "\n";
754 echo '</td>' . "\n";
755 /**/
756 echo '</tr>' . "\n";
757 echo '<tr>' . "\n";
758 /**/
759 echo '<th>' . "\n";
760 echo '<label for="ws-plugin--s2member-login-reg-background-text-color">' . "\n";
761 echo 'Color of Text on top of your Background:' . "\n";
762 echo '</label>' . "\n";
763 echo '</th>' . "\n";
764 /**/
765 echo '</tr>' . "\n";
766 echo '<tr>' . "\n";
767 /**/
768 echo '<td>' . "\n";
769 echo '<input type="text" name="ws_plugin__s2member_login_reg_background_text_color" id="ws-plugin--s2member-login-reg-background-text-color" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_reg_background_text_color"]) . '" /><br />' . "\n";
770 echo 'Set this to a 6-digit hex color code.' . "\n";
771 echo '</td>' . "\n";
772 /**/
773 echo '</tr>' . "\n";
774 echo '<tr>' . "\n";
775 /**/
776 echo '<th>' . "\n";
777 echo '<label for="ws-plugin--s2member-login-reg-background-text-shadow-color">' . "\n";
778 echo 'Shadow Color for Text on top of your Background:' . "\n";
779 echo '</label>' . "\n";
780 echo '</th>' . "\n";
781 /**/
782 echo '</tr>' . "\n";
783 echo '<tr>' . "\n";
784 /**/
785 echo '<td>' . "\n";
786 echo '<input type="text" name="ws_plugin__s2member_login_reg_background_text_shadow_color" id="ws-plugin--s2member-login-reg-background-text-shadow-color" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_reg_background_text_shadow_color"]) . '" /><br />' . "\n";
787 echo 'Set this to a 6-digit hex color code.' . "\n";
788 echo '</td>' . "\n";
789 /**/
790 echo '</tr>' . "\n";
791 echo '<tr>' . "\n";
792 /**/
793 echo '<th>' . "\n";
794 echo '<label for="ws-plugin--s2member-login-reg-background-box-shadow-color">' . "\n";
795 echo 'Shadow Color for Boxes on top of your Background:' . "\n";
796 echo '</label>' . "\n";
797 echo '</th>' . "\n";
798 /**/
799 echo '</tr>' . "\n";
800 echo '<tr>' . "\n";
801 /**/
802 echo '<td>' . "\n";
803 echo '<input type="text" name="ws_plugin__s2member_login_reg_background_box_shadow_color" id="ws-plugin--s2member-login-reg-background-box-shadow-color" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_reg_background_box_shadow_color"]) . '" /><br />' . "\n";
804 echo 'Set this to a 6-digit hex color code.' . "\n";
805 echo '</td>' . "\n";
806 /**/
807 echo '</tr>' . "\n";
808 echo '</tbody>' . "\n";
809 echo '</table>' . "\n";
810 /**/
811 echo '<div class="ws-menu-page-hr"></div>' . "\n";
812 /**/
813 echo '<table class="form-table" style="margin-top:0;">' . "\n";
814 echo '<tbody>' . "\n";
815 echo '<tr>' . "\n";
816 /**/
817 echo '<td>' . "\n";
818 echo '<h3 style="margin:0;">Logo Image Configuration</h3>' . "\n";
819 echo '<p style="margin:0;">These settings are all focused on your Login/Registration Logo.</p>' . "\n";
820 echo '</td>' . "\n";
821 /**/
822 echo '</tr>' . "\n";
823 echo '<tr>' . "\n";
824 /**/
825 echo '<th>' . "\n";
826 echo '<label for="ws-plugin--s2member-login-reg-logo-src">' . "\n";
827 echo 'Logo Image Location:' . "\n";
828 echo '</label>' . "\n";
829 echo '</th>' . "\n";
830 /**/
831 echo '</tr>' . "\n";
832 echo '<tr>' . "\n";
833 /**/
834 echo '<td>' . "\n";
835 echo '<input type="text" name="ws_plugin__s2member_login_reg_logo_src" id="ws-plugin--s2member-login-reg-logo-src" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_reg_logo_src"]) . '" /><br />' . "\n";
836 echo '<input type="button" id="ws-plugin--s2member-login-reg-logo-src-media-btn" value="Open Media Library" class="ws-menu-page-media-btn" rel="ws-plugin--s2member-login-reg-logo-src" />' . "\n";
837 echo 'Set this to the URL of your Logo Image.<br />' . "\n";
838 echo 'Suggested size is around 500 x 100.' . "\n";
839 echo '</td>' . "\n";
840 /**/
841 echo '</tr>' . "\n";
842 echo '<tr>' . "\n";
843 /**/
844 echo '<th>' . "\n";
845 echo '<label for="ws-plugin--s2member-login-reg-logo-src-width">' . "\n";
846 echo 'Logo Image Width:' . "\n";
847 echo '</label>' . "\n";
848 echo '</th>' . "\n";
849 /**/
850 echo '</tr>' . "\n";
851 echo '<tr>' . "\n";
852 /**/
853 echo '<td>' . "\n";
854 echo '<input type="text" name="ws_plugin__s2member_login_reg_logo_src_width" id="ws-plugin--s2member-login-reg-logo-src-width" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_reg_logo_src_width"]) . '" /><br />' . "\n";
855 echo 'The pixel Width of your Logo Image. <em>* This ALSO affects the overall width of your Login/Registration forms. If you want wider form fields, use a wider Logo.</em>' . "\n";
856 echo '</td>' . "\n";
857 /**/
858 echo '</tr>' . "\n";
859 echo '<tr>' . "\n";
860 /**/
861 echo '<th>' . "\n";
862 echo '<label for="ws-plugin--s2member-login-reg-logo-src-height">' . "\n";
863 echo 'Logo Image Height:' . "\n";
864 echo '</label>' . "\n";
865 echo '</th>' . "\n";
866 /**/
867 echo '</tr>' . "\n";
868 echo '<tr>' . "\n";
869 /**/
870 echo '<td>' . "\n";
871 echo '<input type="text" name="ws_plugin__s2member_login_reg_logo_src_height" id="ws-plugin--s2member-login-reg-logo-src-height" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_reg_logo_src_height"]) . '" /><br />' . "\n";
872 echo 'The pixel Height of your Logo Image.' . "\n";
873 echo '</td>' . "\n";
874 /**/
875 echo '</tr>' . "\n";
876 echo '<tr>' . "\n";
877 /**/
878 echo '<th>' . "\n";
879 echo '<label for="ws-plugin--s2member-login-reg-logo-url">' . "\n";
880 echo 'Logo Image Click URL:' . "\n";
881 echo '</label>' . "\n";
882 echo '</th>' . "\n";
883 /**/
884 echo '</tr>' . "\n";
885 echo '<tr>' . "\n";
886 /**/
887 echo '<td>' . "\n";
888 echo '<input type="text" name="ws_plugin__s2member_login_reg_logo_url" id="ws-plugin--s2member-login-reg-logo-url" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_reg_logo_url"]) . '" /><br />' . "\n";
889 echo 'Set this to the Click URL for your Logo Image.' . "\n";
890 echo '</td>' . "\n";
891 /**/
892 echo '</tr>' . "\n";
893 echo '<tr>' . "\n";
894 /**/
895 echo '<th>' . "\n";
896 echo '<label for="ws-plugin--s2member-login-reg-logo-title">' . "\n";
897 echo 'Logo Image Title Attribute:' . "\n";
898 echo '</label>' . "\n";
899 echo '</th>' . "\n";
900 /**/
901 echo '</tr>' . "\n";
902 echo '<tr>' . "\n";
903 /**/
904 echo '<td>' . "\n";
905 echo '<input type="text" name="ws_plugin__s2member_login_reg_logo_title" id="ws-plugin--s2member-login-reg-logo-title" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_reg_logo_title"]) . '" /><br />' . "\n";
906 echo 'Used as the <code>title=""</code> attribute for your Logo Image.' . "\n";
907 echo '</td>' . "\n";
908 /**/
909 echo '</tr>' . "\n";
910 echo '</tbody>' . "\n";
911 echo '</table>' . "\n";
912 /**/
913 echo '<div class="ws-menu-page-hr"></div>' . "\n";
914 /**/
915 echo '<table class="form-table" style="margin-top:0;">' . "\n";
916 echo '<tbody>' . "\n";
917 echo '<tr>' . "\n";
918 /**/
919 echo '<td>' . "\n";
920 echo '<h3 style="margin:0;">Footer Design ( i.e. Bottom )</h3>' . "\n";
921 echo '<p style="margin:0;">This field accepts raw HTML' . ((!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? ' ( and/or PHP )' : '') . ' code.</p>' . "\n";
922 echo '</td>' . "\n";
923 /**/
924 echo '</tr>' . "\n";
925 echo '<tr>' . "\n";
926 /**/
927 echo '<th>' . "\n";
928 echo '<label for="ws-plugin--s2member-login-reg-footer-design">' . "\n";
929 echo 'Login/Registration Footer Design ( optional ):' . "\n";
930 echo '</label>' . "\n";
931 echo '</th>' . "\n";
932 /**/
933 echo '</tr>' . "\n";
934 echo '<tr>' . "\n";
935 /**/
936 echo '<td>' . "\n";
937 echo '<textarea name="ws_plugin__s2member_login_reg_footer_design" id="ws-plugin--s2member-login-reg-footer-design" rows="3" wrap="off" spellcheck="false">' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_reg_footer_design"]) . '</textarea><br />' . "\n";
938 echo 'This optional HTML' . ((!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? ' ( and/or PHP )' : '') . ' code will appear at the very bottom of your Login/Registration Forms.' . "\n";
939 echo '</td>' . "\n";
940 /**/
941 echo '</tr>' . "\n";
942 echo '</tbody>' . "\n";
943 echo '</table>' . "\n";
944 echo '</div>' . "\n";
945 /**/
946 echo '</div>' . "\n";
947 /**/
948 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_after_login_registration", get_defined_vars ());
949 }
950 /**/
951 if (apply_filters ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_display_custom_reg_fields", true, get_defined_vars ()))
952 {
953 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_before_custom_reg_fields", get_defined_vars ());
954 /**/
955 echo '<div class="ws-menu-page-group" title="Custom Registration Fields/Options">' . "\n";
956 /**/
957 echo '<div class="ws-menu-page-section ws-plugin--s2member-custom-reg-fields-section">' . "\n";
958 echo '<h3>Custom Registration Fields ( optional, for further customization )</h3>' . "\n";
959 echo '<p>Some fields are already built-in by default. The defaults are: <code>*Username*, *Email*, *First Name*, *Last Name*</code>.</p>' . "\n";
960 /**/
961 echo '<p>Custom Fields will appear in your Standard Registration Form:<br />( <a href="' . esc_attr (c_ws_plugin__s2member_utils_urls::wp_register_url ()) . '" target="_blank" rel="external">' . esc_html (c_ws_plugin__s2member_utils_urls::wp_register_url ()) . '</a> )</p>' . "\n";
962 echo (is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && is_main_site ()) ? '<p><em>A Multisite Blog Farm uses this Form instead. It supports Custom Fields too.<br />( <a href="' . esc_attr (c_ws_plugin__s2member_utils_urls::wp_signup_url ()) . '" target="_blank" rel="external">' . esc_html (c_ws_plugin__s2member_utils_urls::wp_signup_url ()) . '</a> )</em></p>' . "\n" : '';
963 /**/
964 if (is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && is_main_site ())
965 echo '<p><em>* For security purposes, Custom Passwords are NOT possible on the Main Site of a Blog Farm. A User MUST wait for the activation/confirmation email; where a randomly generated Password will be assigned. Please note... this limitation only affects your Main Site, via <code>/wp-signup.php</code>. In other words, your Customers ( i.e. other Blog Owners ) will still have the ability to allow Custom Passwords with s2Member. YOU are affected by this limitation, NOT them. * NOTE: s2Member (Pro) removes this limitation. If you install the s2Member Pro Module, you WILL be able to allow Custom Passwords through s2Member Pro Forms; even on a Multisite Blog Farm.</em></p>' . "\n";
966 /**/
967 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_custom_reg_fields", get_defined_vars ());
968 /**/
969 echo '<table class="form-table">' . "\n";
970 echo '<tbody>' . "\n";
971 echo '<tr>' . "\n";
972 /**/
973 echo '<th>' . "\n";
974 echo '<label>' . "\n";
975 echo 'Custom Registration Fields:' . "\n";
976 echo '</label>' . "\n";
977 echo '</th>' . "\n";
978 /**/
979 echo '</tr>' . "\n";
980 echo '<tr>' . "\n";
981 /**/
982 echo '<td>' . "\n";
983 echo '<input type="hidden" name="ws_plugin__s2member_custom_reg_fields" id="ws-plugin--s2member-custom-reg-fields" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields"]) . '" />' . "\n";
984 echo '<div id="ws-plugin--s2member-custom-reg-field-configuration"></div>' . "\n"; /* This is filled by JavaScript routines. */
985 echo '</td>' . "\n";
986 /**/
987 echo '</tr>' . "\n";
988 echo '<tr>' . "\n";
989 /**/
990 echo '<th>' . "\n";
991 echo '<label for="ws-plugin--s2member-custom-reg-names">' . "\n";
992 echo 'Collect First/Last Names during Registration?' . "\n";
993 echo '</label>' . "\n";
994 echo '</th>' . "\n";
995 /**/
996 echo '</tr>' . "\n";
997 echo '<tr>' . "\n";
998 /**/
999 echo '<td>' . "\n";
1000 echo '<select name="ws_plugin__s2member_custom_reg_names" id="ws-plugin--s2member-custom-reg-names">' . "\n";
1001 echo '<option value="1"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_password"]) ? ' selected="selected"' : '') . '>Yes ( always collect First/Last Names during registration )</option>' . "\n";
1002 echo '<option value="0"' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_names"]) ? ' selected="selected"' : '') . '>No ( do NOT collect First/Last Names during registration )</option>' . "\n";
1003 echo '</select><br />' . "\n";
1004 echo 'Recommended setting ( <code>Yes</code> ). It\'s usually a good idea to leave this on.' . "\n";
1005 echo (c_ws_plugin__s2member_utils_conds::pro_is_installed ()) ? '<br /><em>* s2Member Pro (Checkout) Forms always require a First/Last Name.</em>' . "\n" : '';
1006 echo '</td>' . "\n";
1007 /**/
1008 echo '</tr>' . "\n";
1009 echo '<tr>' . "\n";
1010 /**/
1011 echo '<th>' . "\n";
1012 echo '<label for="ws-plugin--s2member-custom-reg-display-name">' . "\n";
1013 echo 'Set "Display Name" during Registration?' . "\n";
1014 echo '</label>' . "\n";
1015 echo '</th>' . "\n";
1016 /**/
1017 echo '</tr>' . "\n";
1018 echo '<tr>' . "\n";
1019 /**/
1020 echo '<td>' . "\n";
1021 echo '<select name="ws_plugin__s2member_custom_reg_display_name" id="ws-plugin--s2member-custom-reg-display-name">' . "\n";
1022 echo '<option value="full"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_display_name"] === "full") ? ' selected="selected"' : '') . '>Yes ( set Display Name to User\'s Full Name )</option>' . "\n";
1023 echo '<option value="first"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_display_name"] === "first") ? ' selected="selected"' : '') . '>Yes ( set Display Name to User\'s First Name )</option>' . "\n";
1024 echo '<option value="last"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_display_name"] === "last") ? ' selected="selected"' : '') . '>Yes ( set Display Name to User\'s Last Name )</option>' . "\n";
1025 echo '<option value="login"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_display_name"] === "login") ? ' selected="selected"' : '') . '>Yes ( set Display Name to User\'s Username )</option>' . "\n";
1026 echo '<option value="0"' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_display_name"]) ? ' selected="selected"' : '') . '>No ( leave Display Name at default WordPress® value )</option>' . "\n";
1027 echo '</select>' . "\n";
1028 echo '</td>' . "\n";
1029 /**/
1030 echo '</tr>' . "\n";
1031 echo '<tr>' . "\n";
1032 /**/
1033 echo '<th>' . "\n";
1034 echo '<label for="ws-plugin--s2member-custom-reg-password">' . "\n";
1035 echo 'Allow Custom Passwords during Registration?' . "\n";
1036 echo '</label>' . "\n";
1037 echo '</th>' . "\n";
1038 /**/
1039 echo '</tr>' . "\n";
1040 echo '<tr>' . "\n";
1041 /**/
1042 echo '<td>' . "\n";
1043 echo '<select name="ws_plugin__s2member_custom_reg_password" id="ws-plugin--s2member-custom-reg-password"' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && is_main_site () && !c_ws_plugin__s2member_utils_conds::pro_is_installed ()) ? ' disabled="disabled"' : '') . '>' . "\n";
1044 echo '<option value="0"' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_password"]) ? ' selected="selected"' : '') . '>No ( send auto-generated passwords via email; after registration )</option>' . "\n";
1045 echo '<option value="1"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_password"]) ? ' selected="selected"' : '') . '>Yes ( allow members to create their own password during registration )</option>' . "\n";
1046 echo '</select><br />' . "\n";
1047 echo 'Auto-generated Passwords are recommended for best security; because, this also serves as a form of email confirmation.' . "\n";
1048 echo '</td>' . "\n";
1049 /**/
1050 echo '</tr>' . "\n";
1051 echo '<tr>' . "\n";
1052 /**/
1053 echo '<th>' . "\n";
1054 echo '<label for="ws-plugin--s2member-custom-reg-force-personal-emails">' . "\n";
1055 echo 'Force Personal Emails during Registration?' . "\n";
1056 echo '</label>' . "\n";
1057 echo '</th>' . "\n";
1058 /**/
1059 echo '</tr>' . "\n";
1060 echo '<tr>' . "\n";
1061 /**/
1062 echo '<td>' . "\n";
1063 echo '<input type="text" name="ws_plugin__s2member_custom_reg_force_personal_emails" id="ws-plugin--s2member-custom-reg-force-personal-emails" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_force_personal_emails"]) . '" /><br />' . "\n";
1064 echo 'To force personal email addresses, provide a comma-delimited list of email users to reject. <a href="#" onclick="alert(\'s2Member will reject [user]@ ( based on your configuration here ). A JavaScript alert message will be issued, asking the User to, `please use a personal email address`.\'); return false;" tabindex="-1">[?]</a><br />' . "\n";
1065 echo 'Ex: <code>info,help,admin,webmaster,hostmaster,sales,support,spam</code><br />' . "\n";
1066 echo 'See: <a href="http://kb.mailchimp.com/article/what-role-addresses-does-mailchimp-specifically-block-from-bulk-importing/" target="_blank" rel="external">this article</a> for a more complete list.' . "\n";
1067 echo '</td>' . "\n";
1068 /**/
1069 echo '</tr>' . "\n";
1070 echo '<tr>' . "\n";
1071 /**/
1072 echo '<th>' . "\n";
1073 echo '<label for="ws-plugin--s2member-custom-reg-fields-4bp">' . "\n";
1074 echo 'Integrate Custom Registration Fields with BuddyPress too?' . "\n";
1075 echo '</label>' . "\n";
1076 echo '</th>' . "\n";
1077 /**/
1078 echo '</tr>' . "\n";
1079 echo '<tr>' . "\n";
1080 /**/
1081 echo '<td>' . "\n";
1082 echo '<div class="ws-menu-page-scrollbox" style="height:65px;">' . "\n";
1083 echo '<input type="hidden" name="ws_plugin__s2member_custom_reg_fields_4bp[]" value="update-signal"' . ((!c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? ' disabled="disabled"' : '') . ' />' . "\n";
1084 foreach (array ("profile-view" => "Yes, integrate with BuddyPress Public Profiles.", "registration" => "Yes, integrate with BuddyPress Registration Form.", "profile" => "Yes, integrate with BuddyPress Profile Editing Panel.") as $ws_plugin__s2member_temp_s_value => $ws_plugin__s2member_temp_s_label)
1085 echo '<input type="checkbox" name="ws_plugin__s2member_custom_reg_fields_4bp[]" id="ws-plugin--s2member-custom-reg-fields-4bp-' . esc_attr (preg_replace ("/[^a-z0-9_\-]/", "-", $ws_plugin__s2member_temp_s_value)) . '" value="' . esc_attr ($ws_plugin__s2member_temp_s_value) . '"' . ((in_array ($ws_plugin__s2member_temp_s_value, $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_fields_4bp"])) ? ' checked="checked"' : '') . ((!c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? ' disabled="disabled"' : '') . ' /> <label for="ws-plugin--s2member-custom-reg-fields-4bp-' . esc_attr (preg_replace ("/[^a-z0-9_\-]/", "-", $ws_plugin__s2member_temp_s_value)) . '">' . $ws_plugin__s2member_temp_s_label . '</label><br />' . "\n";
1086 echo '</div>' . "\n";
1087 echo (!c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? 'BuddyPress is NOT installed; which is perfectly OK. BuddyPress is NOT a requirement.<br />' . "\n" : '';
1088 echo 'Also, see below: <code>Member Profile Modifications</code>.' . "\n";
1089 echo '</td>' . "\n";
1090 /**/
1091 echo '</tr>' . "\n";
1092 echo '</tbody>' . "\n";
1093 echo '</table>' . "\n";
1094 echo '</div>' . "\n";
1095 /**/
1096 echo '</div>' . "\n";
1097 /**/
1098 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_after_custom_reg_fields", get_defined_vars ());
1099 }
1100 /**/
1101 if (apply_filters ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_display_login_welcome_page", true, get_defined_vars ()))
1102 {
1103 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_before_login_welcome_page", get_defined_vars ());
1104 /**/
1105 echo '<div class="ws-menu-page-group" title="Login Welcome Page">' . "\n";
1106 /**/
1107 echo '<div class="ws-menu-page-section ws-plugin--s2member-login-welcome-page-section">' . "\n";
1108 echo '<h3>Login Welcome Page ( required, please customize this )</h3>' . "\n";
1109 echo '<p>Please create and/or choose an existing Page to use as the first page Members will see after logging in.</p>' . "\n";
1110 echo '<p><em><strong>*Tip*</strong> This special Page will be protected from public access ( automatically ) by s2Member.</em></p>' . "\n";
1111 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_login_welcome_page", get_defined_vars ());
1112 /**/
1113 echo '<table class="form-table">' . "\n";
1114 echo '<tbody>' . "\n";
1115 echo '<tr>' . "\n";
1116 /**/
1117 echo '<th>' . "\n";
1118 echo '<label for="ws-plugin--s2member-login-welcome-page">' . "\n";
1119 echo 'Login Welcome Page:' . "\n";
1120 echo '</label>' . "\n";
1121 echo '</th>' . "\n";
1122 /**/
1123 echo '</tr>' . "\n";
1124 echo '<tr>' . "\n";
1125 /**/
1126 echo '<td>' . "\n";
1127 echo '<select name="ws_plugin__s2member_login_welcome_page" id="ws-plugin--s2member-login-welcome-page">' . "\n";
1128 echo '<option value="">&mdash; Select &mdash;</option>' . "\n";
1129 foreach (($ws_plugin__s2member_temp_a = array_merge ((array)get_pages ())) as $ws_plugin__s2member_temp_o)
1130 echo '<option value="' . esc_attr ($ws_plugin__s2member_temp_o->ID) . '"' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_redirection_override"] && $ws_plugin__s2member_temp_o->ID == $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_welcome_page"]) ? ' selected="selected"' : '') . '>' . esc_html ($ws_plugin__s2member_temp_o->post_title) . '</option>' . "\n";
1131 echo '</select><br />' . "\n";
1132 echo 'Please choose a Page to be used as the first page Members will see after logging in. This Page can contain anything you like. We recommend the following title: <code>Welcome To Our Members Area</code>.<br /><br />' . "\n";
1133 echo '&darr; Or, you may configure a Special Redirection URL, if you prefer. You\'ll need to type in the full URL, starting with: <code>http://</code>. <em>A few <a href="#" onclick="alert(\'Replacement Codes:\\n\\n%%current_user_login%% = The current User\\\'s Username, lowercase.\\n%%current_user_id%% = The current User\\\'s ID.\\n%%current_user_level%% = The current User\\\'s s2Member Level.\\n%%current_user_role%% = The current User\\\'s WordPress® Role.' . ((!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? '\\n%%current_user_ccaps%% = The current User\\\'s Custom Capabilities.' : '') . '\\n%%current_user_logins%% = Number of times the current User has logged in.\\n\\nFor example, if you\\\'re using BuddyPress, and you want to redirect Members to their BuddyPress Profile page after logging in, you would setup a Special Redirection URL, like this: ' . site_url ("/members/%%current_user_login%%/profile/") . '\\n\\nOr ... using %%current_user_level%%, you could have a separate Login Welcome Page for each Membership Level that you plan to offer. BuddyPress not required.\'); return false;">Replacement Codes</a> are also supported here.</em>' . "\n";
1134 echo '<input type="text" name="ws_plugin__s2member_login_redirection_override" id="ws-plugin--s2member-login-redirection-override" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_redirection_override"]) . '" /><br />' . "\n";
1135 echo '</td>' . "\n";
1136 /**/
1137 echo '</tr>' . "\n";
1138 echo '</tbody>' . "\n";
1139 echo '</table>' . "\n";
1140 echo '</div>' . "\n";
1141 /**/
1142 echo '</div>' . "\n";
1143 /**/
1144 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_after_login_welcome_page", get_defined_vars ());
1145 }
1146 /**/
1147 if (apply_filters ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_display_membership_options_page", true, get_defined_vars ()))
1148 {
1149 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_before_membership_options_page", get_defined_vars ());
1150 /**/
1151 echo '<div class="ws-menu-page-group" title="Membership Options Page">' . "\n";
1152 /**/
1153 echo '<div class="ws-menu-page-section ws-plugin--s2member-membership-options-page-section">' . "\n";
1154 echo '<h3>Membership Options Page ( required, please customize this )</h3>' . "\n";
1155 echo '<p>Please create and/or choose an existing Page that showcases your Membership subscription options. This special Page is where you will insert the PayPal® Subscription Buttons generated for you by s2Member. This Page serves as your signup page. It should detail all of the features that come with Membership to your site, and provide a PayPal® Subscription Button for each Level of access you plan to offer. This is also the page that Users will be redirected to, should they attempt to access an area of your site that requires Membership.</p>' . "\n";
1156 echo '<p><em><strong>*Tip*</strong> s2Member will NEVER allow this Page to be protected from public access.</em></p>' . "\n";
1157 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_membership_options_page", get_defined_vars ());
1158 /**/
1159 echo '<table class="form-table">' . "\n";
1160 echo '<tbody>' . "\n";
1161 echo '<tr>' . "\n";
1162 /**/
1163 echo '<th>' . "\n";
1164 echo '<label for="ws-plugin--s2member-membership-options-page">' . "\n";
1165 echo 'Membership Options Page:' . "\n";
1166 echo '</label>' . "\n";
1167 echo '</th>' . "\n";
1168 /**/
1169 echo '</tr>' . "\n";
1170 echo '<tr>' . "\n";
1171 /**/
1172 echo '<td>' . "\n";
1173 echo '<select name="ws_plugin__s2member_membership_options_page" id="ws-plugin--s2member-membership-options-page">' . "\n";
1174 echo '<option value="">&mdash; Select &mdash;</option>' . "\n";
1175 foreach (($ws_plugin__s2member_temp_a = array_merge ((array)get_pages ())) as $ws_plugin__s2member_temp_o)
1176 echo '<option value="' . esc_attr ($ws_plugin__s2member_temp_o->ID) . '"' . (($ws_plugin__s2member_temp_o->ID == $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["membership_options_page"]) ? ' selected="selected"' : '') . '>' . esc_html ($ws_plugin__s2member_temp_o->post_title) . '</option>' . "\n";
1177 echo '</select><br />' . "\n";
1178 echo 'Please choose a Page that provides Users a way to signup for Membership. This Page should also contain your PayPal&reg Subscription button(s). We recommend the following title: <code>Membership Signup</code>.' . "\n";
1179 echo '</td>' . "\n";
1180 /**/
1181 echo '</tr>' . "\n";
1182 echo '</tbody>' . "\n";
1183 echo '</table>' . "\n";
1184 echo '</div>' . "\n";
1185 /**/
1186 echo '</div>' . "\n";
1187 /**/
1188 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_after_membership_options_page", get_defined_vars ());
1189 }
1190 /**/
1191 if (apply_filters ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_display_profile_modifications", true, get_defined_vars ()))
1192 {
1193 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_before_profile_modifications", get_defined_vars ());
1194 /**/
1195 echo '<div class="ws-menu-page-group" title="Member Profile Modifications">' . "\n";
1196 /**/
1197 echo '<div class="ws-menu-page-section ws-plugin--s2member-profile-modifications-section">' . "\n";
1198 echo '<h3>Giving Members The Ability To Modify Their Profile</h3>' . "\n";
1199 echo '<p>s2Member can be configured to redirect Members away from the <a href="' . esc_attr (admin_url ("/profile.php")) . '" target="_blank" rel="external">default Profile Editing Panel</a> that is built into WordPress®. When/if a Member attempts to access the default Profile Editing Panel, they\'ll instead, be redirected to the Login Welcome Page that you\'ve configured through s2Member. <strong>Why would I redirect?</strong> Unless you\'ve made some drastic modifications to your WordPress® installation, the default Profile Editing Panel that ships with WordPress®, is NOT really suited for public access, even by a Member.</p>' . "\n";
1200 echo '<p>So instead of using this default Profile Editing Panel; s2Member creates an added layer of functionality, on top of WordPress®. It does this by providing you ( as the site owner ), with a special Shortcode: <code>[s2Member-Profile /]</code> that you can place into your Login Welcome Page, or any Post/Page for that matter ( even into a Text Widget ). This Shortcode produces an Inline Profile Editing Form that supports all aspects of s2Member, including Password changes; and any Custom Registration/Profile Fields that you\'ve configured with s2Member.</p>' . "\n";
1201 echo '<p>Alternatively, s2Member also gives you the ability to send your Members to a <a href="' . esc_attr (site_url ("/?s2member_profile=1")) . '" target="_blank" rel="external">special Stand-Alone version</a>. This Stand-Alone version has been designed ( with a bare-bones format ), intentionally. This makes it possible for you to <a href="#" onclick="if(!window.open(\'' . site_url ("/?s2member_profile=1") . '\', \'_popup\', \'width=600,height=400,left=100,screenX=100,top=100,screenY=100,location=0,menubar=0,toolbar=0,status=0,scrollbars=1,resizable=1\')) alert(\'Please disable popup blockers and try again!\'); return false;" rel="external">open it up in a popup window</a>, or embed it into your Login Welcome Page using an IFRAME. Code samples are provided below.</p>' . "\n";
1202 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_profile_modifications", get_defined_vars ());
1203 /**/
1204 echo '<table class="form-table">' . "\n";
1205 echo '<tbody>' . "\n";
1206 echo '<tr>' . "\n";
1207 /**/
1208 echo '<th>' . "\n";
1209 echo '<label for="ws-plugin--s2member-force-admin-lockouts">' . "\n";
1210 echo 'Redirect Members away from the Default Profile Panel?' . "\n";
1211 echo '</label>' . "\n";
1212 echo '</th>' . "\n";
1213 /**/
1214 echo '</tr>' . "\n";
1215 echo '<tr>' . "\n";
1216 /**/
1217 echo '<td>' . "\n";
1218 echo '<select name="ws_plugin__s2member_force_admin_lockouts" id="ws-plugin--s2member-force-admin-lockouts">' . "\n";
1219 echo '<option value="0"' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["force_admin_lockouts"]) ? ' selected="selected"' : '') . '>No ( I want to use the WordPress® default methodologies )</option>' . "\n";
1220 echo '<option value="1"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["force_admin_lockouts"]) ? ' selected="selected"' : '') . '>Yes ( redirect to Login Welcome Page; locking all /wp-admin/ areas )</option>' . "\n";
1221 echo '</select><br />' . "\n";
1222 echo 'Recommended setting ( <code>Yes</code> ). <em><strong>*Note*</strong> When this is set to ( <code>Yes</code> ), s2Member will take an initiative to further safeguard ALL <code>/wp-admin/</code> areas of your installation; not just the Default Profile Panel.</em>' . "\n";
1223 echo '</td>' . "\n";
1224 /**/
1225 echo '</tr>' . "\n";
1226 echo '</tbody>' . "\n";
1227 echo '</table>' . "\n";
1228 /**/
1229 echo '<div class="ws-menu-page-hr"></div>' . "\n";
1230 /**/
1231 echo '<p><strong>Shortcode ( copy/paste )</strong>, for an Inline Profile Modification Form:<br />' . "\n";
1232 echo '<p><input type="text" value="' . format_to_edit ('[s2Member-Profile /]') . '" style="font-size:90%; font-family:Consolas, monospace; width:99%;" onclick="this.select ();" /></p>' . "\n";
1233 /**/
1234 echo '<p style="margin-top:20px;"><strong>Stand-Alone ( copy/paste )</strong>, for popup window:</p>' . "\n";
1235 echo '<p><input type="text" value="' . format_to_edit (preg_replace ("/\<\?php echo S2MEMBER_CURRENT_USER_PROFILE_MODIFICATION_PAGE_URL; \?\>/", c_ws_plugin__s2member_utils_strings::esc_ds (site_url ("/?s2member_profile=1")), file_get_contents (dirname (__FILE__) . "/code-samples/current-user-profile-modification-page-url-2-ops.php"))) . '" style="font-size:90%; font-family:Consolas, monospace; width:99%;" onclick="this.select ();" /></p>' . "\n";
1236 echo '</div>' . "\n";
1237 /**/
1238 echo '</div>' . "\n";
1239 /**/
1240 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_after_profile_modifications", get_defined_vars ());
1241 }
1242 /**/
1243 if (apply_filters ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_display_restrictions", true, get_defined_vars ()))
1244 {
1245 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_before_restrictions", get_defined_vars ());
1246 /**/
1247 echo '<div class="ws-menu-page-group" title="Restrictions ( Posts/Pages/Categories/Tags/URIs/etc. )">' . "\n";
1248 /**/
1249 echo '<div class="ws-menu-page-section ws-plugin--s2member-restrictions-section">' . "\n";
1250 echo '<h3>Restrictions ( Posts/Pages/Categories/Tags/URIs/etc. )</h3>' . "\n";
1251 echo '<p>All of these options have been moved into their own configuration panel.<br />Please go to: <code>s2Member -> Restriction Options</code></p>' . "\n";
1252 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_restrictions", get_defined_vars ());
1253 echo '</div>' . "\n";
1254 /**/
1255 echo '</div>' . "\n";
1256 /**/
1257 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_after_restrictions", get_defined_vars ());
1258 }
1259 /**/
1260 do_action ("ws_plugin__s2member_during_gen_ops_page_after_left_sections", get_defined_vars ());
1261 /**/
1262 echo '<div class="ws-menu-page-hr"></div>' . "\n";
1263 /**/
1264 echo '<p class="submit"><input type="submit" class="button-primary" value="Save All Changes" /></p>' . "\n";
1265 /**/
1266 echo '</form>' . "\n";
1267 /**/
1268 echo '</td>' . "\n";
1269 /**/
1270 echo '<td class="ws-menu-page-table-r">' . "\n";
1271 c_ws_plugin__s2member_menu_pages_rs::display ();
1272 echo '</td>' . "\n";
1273 /**/
1274 echo '</tr>' . "\n";
1275 echo '</tbody>' . "\n";
1276 echo '</table>' . "\n";
1277 /**/
1278 echo '</div>' . "\n";
1279 }
1280 }
1281 }
1282 /**/
1283 new c_ws_plugin__s2member_menu_page_gen_ops ();
1284 ?>