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

1,342 lines 104.4 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.</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" maxlength="256" autocomplete="off" 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"]) . '"' . (($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>.</p>' . "\n";
161 echo '<p>Once you\'ve <a href="http://www.primothemes.com/forums/viewtopic.php?f=4&t=15600&p=48551#p48550" target="_blank" rel="external">properly configured all security aspects of s2Member</a>, your s2Member® Security Badge will be verified. 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>( each at least 60 chars in length )</em>. In addition, it\'s NOT possible for s2Member to verify your Security Badge, if your site is in a <code>localhost</code> environment; i.e. not connected to the web.</p>' . "\n";
162 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 your status.</p>' . "\n";
163 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_s_badge_wp_footer_code", get_defined_vars ());
164 /**/
165 echo '<table class="form-table">' . "\n";
166 echo '<tbody>' . "\n";
167 echo '<tr>' . "\n";
168 /**/
169 echo '<th>' . "\n";
170 echo '<label for="ws-plugin--s2member-s-badge-status-enabled">' . "\n";
171 echo 'Enable Security Badge Status API?' . "\n";
172 echo '</label>' . "\n";
173 echo '</th>' . "\n";
174 /**/
175 echo '</tr>' . "\n";
176 echo '<tr>' . "\n";
177 /**/
178 echo '<td>' . "\n";
179 echo '<select name="ws_plugin__s2member_s_badge_status_enabled" id="ws-plugin--s2member-s-badge-status-enabled">' . "\n";
180 echo '<option value="0"' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["s_badge_status_enabled"]) ? ' selected="selected"' : '') . '>No ( default, Badge Status API is disabled )</option>' . "\n";
181 echo '<option value="1"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["s_badge_status_enabled"]) ? ' selected="selected"' : '') . '>Yes ( enable Badge Status API for verification )</option>' . "\n";
182 echo '</select><br />' . "\n";
183 echo 'This must be enabled if you want s2Member to verify your Security Badge.' . "\n";
184 echo '</td>' . "\n";
185 /**/
186 echo '</tr>' . "\n";
187 echo '<tr>' . "\n";
188 /**/
189 echo '<th>' . "\n";
190 echo '<label for="ws-plugin--s2member-wp-footer-code">' . "\n";
191 echo 'Customize WordPress® Footer:<br />' . "\n";
192 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.<br />The <code>v="1"</code> attribute is a Security Badge style/variation. Try variations <code>1|2|3</code>.</small>' . "\n";
193 echo '</label>' . "\n";
194 echo '</th>' . "\n";
195 /**/
196 echo '</tr>' . "\n";
197 echo '<tr>' . "\n";
198 /**/
199 echo '<td>' . "\n";
200 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";
201 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";
202 echo '</td>' . "\n";
203 /**/
204 echo '</tr>' . "\n";
205 echo '</tbody>' . "\n";
206 echo '</table>' . "\n";
207 echo '</div>' . "\n";
208 /**/
209 echo '</div>' . "\n";
210 /**/
211 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_after_s_badge_wp_footer_code", get_defined_vars ());
212 }
213 /**/
214 if (apply_filters ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_display_email_config", true, get_defined_vars ()))
215 {
216 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_before_email_config", get_defined_vars ());
217 /**/
218 echo '<div class="ws-menu-page-group" title="Email Configuration">' . "\n";
219 /**/
220 echo '<div class="ws-menu-page-section ws-plugin--s2member-email-section">' . "\n";
221 echo '<h3 style="margin:0;">Email From: ' . esc_html ('"Name" <address>') . '</h3>' . "\n";
222 echo '<p style="margin:0;">This is the name/address that will appear in outgoing email notifications sent by the s2Member plugin.</p>' . "\n";
223 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_email_from_name_config", get_defined_vars ());
224 /**/
225 echo '<table class="form-table">' . "\n";
226 echo '<tbody>' . "\n";
227 echo '<tr>' . "\n";
228 /**/
229 echo '<th>' . "\n";
230 echo '<label for="ws-plugin--s2member-reg-email-from-name">' . "\n";
231 echo 'Email From Name:' . "\n";
232 echo '</label>' . "\n";
233 echo '</th>' . "\n";
234 /**/
235 echo '</tr>' . "\n";
236 echo '<tr>' . "\n";
237 /**/
238 echo '<td>' . "\n";
239 echo '<input type="text" autocomplete="off" 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";
240 echo 'We recommend that you use the name of your site here.' . "\n";
241 echo '</td>' . "\n";
242 /**/
243 echo '</tr>' . "\n";
244 echo '<tr>' . "\n";
245 /**/
246 echo '<th>' . "\n";
247 echo '<label for="ws-plugin--s2member-reg-email-from-email">' . "\n";
248 echo 'Email From Address:' . "\n";
249 echo '</label>' . "\n";
250 echo '</th>' . "\n";
251 /**/
252 echo '</tr>' . "\n";
253 echo '<tr>' . "\n";
254 /**/
255 echo '<td>' . "\n";
256 echo '<input type="text" autocomplete="off" 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";
257 echo 'Example: support@your-domain.com. <em class="ws-menu-page-hilite">Please read <a href="#" onclick="alert(\'Running WordPress® with an SMTP mail plugin?\\n\\nPlease be advised. If you run an SMTP mail plugin with WordPress®, be sure to configure s2Member with a valid `From:` address ( i.e. one matching your SMTP configuration perhaps ). Most free SMTP servers, such as Gmail® and Yahoo®, require that your `From:` header match the email address associated with your account. Please check with your SMTP service provider before attempting to configure plugins like s2Member to use a different `From:` address when sending email messages.\'); return false;">this IMPORTANT note</a></em>.' . "\n";
258 echo '</td>' . "\n";
259 /**/
260 echo '</tr>' . "\n";
261 echo '<tr>' . "\n";
262 /**/
263 echo '<th>' . "\n";
264 echo '<label for="ws-plugin--s2member-reg-email-support-link">' . "\n";
265 echo 'Email Support/Contact Link:' . "\n";
266 echo '</label>' . "\n";
267 echo '</th>' . "\n";
268 /**/
269 echo '</tr>' . "\n";
270 echo '<tr>' . "\n";
271 /**/
272 echo '<td>' . "\n";
273 echo '<input type="text" autocomplete="off" 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";
274 echo 'Ex: <code>mailto:support@your-domain.com</code> ( <em>mailto link</em> ).<br />' . "\n";
275 echo 'Or: <code>' . esc_html (site_url ("/contact-us/")) . '</code>.' . "\n";
276 echo '</td>' . "\n";
277 /**/
278 echo '</tr>' . "\n";
279 echo '</tbody>' . "\n";
280 echo '</table>' . "\n";
281 /**/
282 echo '<div class="ws-menu-page-hr"></div>' . "\n";
283 /**/
284 echo '<h3 style="margin:0;">New User Email Configuration</h3>' . "\n";
285 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";
286 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" : '';
287 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_new_user_emails", get_defined_vars ());
288 /**/
289 echo '<table class="form-table">' . "\n";
290 echo '<tbody>' . "\n";
291 echo '<tr>' . "\n";
292 /**/
293 echo '<td>' . "\n";
294 echo '<select name="ws_plugin__s2member_new_user_emails_enabled" id="ws-plugin--s2member-new-user-emails-enabled">' . "\n";
295 echo '<option value="0"' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["new_user_emails_enabled"]) ? ' selected="selected"' : '') . '>No ( default, use WordPress® defaults )</option>' . "\n";
296 echo '<option value="1"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["new_user_emails_enabled"]) ? ' selected="selected"' : '') . '>Yes ( customize New User Emails with s2Member )</option>' . "\n";
297 echo '</select>' . "\n";
298 echo '</td>' . "\n";
299 /**/
300 echo '</tr>' . "\n";
301 echo '</tbody>' . "\n";
302 echo '</table>' . "\n";
303 /**/
304 echo '<div id="ws-plugin--s2member-new-user-emails">' . "\n";
305 /**/
306 echo '<div class="ws-menu-page-hr"></div>' . "\n";
307 /**/
308 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";
309 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";
310 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_new_user_email", get_defined_vars ());
311 /**/
312 echo '<div id="ws-plugin--s2member-new-user-email-details" style="display:none;">' . "\n";
313 echo (c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '<p><em><strong>BuddyPress:</strong> please note that BuddyPress does NOT send this email to Users that register through the BuddyPress registration system. This is because BuddyPress sends each User an activation link; eliminating the need for this email all together. However, you CAN still customize s2Member\'s separate email to paying Members. See: <code>s2Member -> PayPal® Options -> Signup Confirmation Email</code>.</em></p>' . "\n" : '';
314 echo '<table class="form-table">' . "\n";
315 echo '<tbody>' . "\n";
316 echo '<tr>' . "\n";
317 /**/
318 echo '<th>' . "\n";
319 echo '<label for="ws-plugin--s2member-new-user-email-subject">' . "\n";
320 echo 'New User Email Subject:' . "\n";
321 echo '</label>' . "\n";
322 echo '</th>' . "\n";
323 /**/
324 echo '</tr>' . "\n";
325 echo '<tr>' . "\n";
326 /**/
327 echo '<td>' . "\n";
328 echo '<input type="text" autocomplete="off" 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";
329 echo 'Subject Line used in the email sent to new Users/Members.' . "\n";
330 echo '</td>' . "\n";
331 /**/
332 echo '</tr>' . "\n";
333 echo '<tr>' . "\n";
334 /**/
335 echo '<th>' . "\n";
336 echo '<label for="ws-plugin--s2member-new-user-email-message">' . "\n";
337 echo 'New User Email Message:' . "\n";
338 echo '</label>' . "\n";
339 echo '</th>' . "\n";
340 /**/
341 echo '</tr>' . "\n";
342 echo '<tr>' . "\n";
343 /**/
344 echo '<td>' . "\n";
345 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";
346 echo 'Message Body used in the email sent to new Users/Members.<br /><br />' . "\n";
347 echo '<strong>You can also use these special Replacement Codes if you need them:</strong>' . "\n";
348 echo '<ul>' . "\n";
349 echo '<li><code>%%user_first_name%%</code> = The First Name of the Member who registered their Username.</li>' . "\n";
350 echo '<li><code>%%user_last_name%%</code> = The Last Name of the Member who registered their Username.</li>' . "\n";
351 echo '<li><code>%%user_full_name%%</code> = The Full Name ( First &amp; Last ) of the Member who registered their Username.</li>' . "\n";
352 echo '<li><code>%%user_email%%</code> = The Email Address of the Member who registered their Username.</li>' . "\n";
353 echo '<li><code>%%user_login%%</code> = The Username the Member selected during registration.</li>' . "\n";
354 echo '<li><code>%%user_pass%%</code> = The Password selected or generated during registration.</li>' . "\n";
355 echo '<li><code>%%user_ip%%</code> = The User\'s IP Address, detected via <code>$_SERVER["REMOTE_ADDR"]</code>.</li>' . "\n";
356 echo '<li><code>%%user_id%%</code> = A unique WordPress® User ID generated during registration.</li>' . "\n";
357 echo '<li><code>%%wp_login_url%%</code> = The full URL where Users can get logged into your site.</li>' . "\n";
358 echo '</ul>' . "\n";
359 /**/
360 echo '<strong>Custom Registration/Profile Fields are also supported in this email:</strong>' . "\n";
361 echo '<ul>' . "\n";
362 echo '<li><code>%%date_of_birth%%</code> would be valid; if you have a Custom Registration/Profile Field with the ID <code>date_of_birth</code>.</li>' . "\n";
363 echo '<li><code>%%street_address%%</code> would be valid; if you have a Custom Registration/Profile Field with the ID <code>street_address</code>.</li>' . "\n";
364 echo '<li><code>%%country%%</code> would be valid; if you have a Custom Registration/Profile Field with the ID <code>country</code>.</li>' . "\n";
365 echo '<li><em><code>%%etc, etc...%%</code> <strong>see:</strong> s2Member -> General Options -> Registration/Profile Fields</em>.</li>' . "\n";
366 echo '</ul>' . "\n";
367 /**/
368 echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>' . "\n";
369 echo '<ul>' . "\n";
370 echo '<li><code>%%cv0%%</code> = The domain of your site, which is passed through the `custom` attribute in your Shortcode.</li>' . "\n";
371 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";
372 echo '</ul>' . "\n";
373 echo '<strong>This example uses cv1 to record a special marketing campaign:</strong><br />' . "\n";
374 echo '<em>( The campaign ( i.e. christmas-promo ) could be referenced using <code>%%cv1%%</code> )</em><br />' . "\n";
375 echo '<code>custom="' . esc_html ($_SERVER["HTTP_HOST"]) . '|christmas-promo"</code>' . "\n";
376 /**/
377 echo '</td>' . "\n";
378 /**/
379 echo '</tr>' . "\n";
380 echo '</tbody>' . "\n";
381 echo '</table>' . "\n";
382 echo '</div>' . "\n";
383 /**/
384 echo '<div class="ws-menu-page-hr"></div>' . "\n";
385 /**/
386 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";
387 echo '<p style="margin:0;">This email notification is sent to you, each time a new User/Member registers.</p>' . "\n";
388 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_new_user_admin_email", get_defined_vars ());
389 /**/
390 echo '<div id="ws-plugin--s2member-new-user-admin-email-details" style="display:none;">' . "\n";
391 echo '<table class="form-table">' . "\n";
392 echo '<tbody>' . "\n";
393 echo '<tr>' . "\n";
394 /**/
395 echo '<th>' . "\n";
396 echo '<label for="ws-plugin--s2member-new-user-admin-email-recipients">' . "\n";
397 echo 'New User Notification Recipients:' . "\n";
398 echo '</label>' . "\n";
399 echo '</th>' . "\n";
400 /**/
401 echo '</tr>' . "\n";
402 echo '<tr>' . "\n";
403 /**/
404 echo '<td>' . "\n";
405 echo '<input type="text" autocomplete="off" 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";
406 echo 'This is a semicolon ( ; ) delimited list of Recipients. Here is an example:<br />' . "\n";
407 echo '<code>"Name" &lt;user@example.com&gt;; admin@example.com; "Webmaster" &lt;webmaster@example.com&gt;</code>' . "\n";
408 echo '</td>' . "\n";
409 /**/
410 echo '</tr>' . "\n";
411 echo '<tr>' . "\n";
412 /**/
413 echo '<th>' . "\n";
414 echo '<label for="ws-plugin--s2member-new-user-admin-email-subject">' . "\n";
415 echo 'New User Notification Subject:' . "\n";
416 echo '</label>' . "\n";
417 echo '</th>' . "\n";
418 /**/
419 echo '</tr>' . "\n";
420 echo '<tr>' . "\n";
421 /**/
422 echo '<td>' . "\n";
423 echo '<input type="text" autocomplete="off" 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";
424 echo 'Subject Line used in the email notification sent to Administrator.' . "\n";
425 echo '</td>' . "\n";
426 /**/
427 echo '</tr>' . "\n";
428 echo '<tr>' . "\n";
429 /**/
430 echo '<th>' . "\n";
431 echo '<label for="ws-plugin--s2member-new-user-admin-email-message">' . "\n";
432 echo 'New User Notification Message:' . "\n";
433 echo '</label>' . "\n";
434 echo '</th>' . "\n";
435 /**/
436 echo '</tr>' . "\n";
437 echo '<tr>' . "\n";
438 /**/
439 echo '<td>' . "\n";
440 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";
441 echo 'Message Body used in the email notification sent to Administrator.<br /><br />' . "\n";
442 echo '<strong>You can also use these special Replacement Codes if you need them:</strong>' . "\n";
443 echo '<ul>' . "\n";
444 echo '<li><code>%%user_first_name%%</code> = The First Name of the Member who registered their Username.</li>' . "\n";
445 echo '<li><code>%%user_last_name%%</code> = The Last Name of the Member who registered their Username.</li>' . "\n";
446 echo '<li><code>%%user_full_name%%</code> = The Full Name ( First &amp; Last ) of the Member who registered their Username.</li>' . "\n";
447 echo '<li><code>%%user_email%%</code> = The Email Address of the Member who registered their Username.</li>' . "\n";
448 echo '<li><code>%%user_login%%</code> = The Username the Member selected during registration.</li>' . "\n";
449 echo '<li><code>%%user_pass%%</code> = The Password selected or generated during registration.</li>' . "\n";
450 echo '<li><code>%%user_ip%%</code> = The User\'s IP Address, detected via <code>$_SERVER["REMOTE_ADDR"]</code>.</li>' . "\n";
451 echo '<li><code>%%user_id%%</code> = A unique WordPress® User ID generated during registration.</li>' . "\n";
452 echo '<li><code>%%wp_login_url%%</code> = The full URL where Users can get logged into your site.</li>' . "\n";
453 echo '</ul>' . "\n";
454 /**/
455 echo '<strong>Custom Registration/Profile Fields are also supported in this email:</strong>' . "\n";
456 echo '<ul>' . "\n";
457 echo '<li><code>%%date_of_birth%%</code> would be valid; if you have a Custom Registration/Profile Field with the ID <code>date_of_birth</code>.</li>' . "\n";
458 echo '<li><code>%%street_address%%</code> would be valid; if you have a Custom Registration/Profile Field with the ID <code>street_address</code>.</li>' . "\n";
459 echo '<li><code>%%country%%</code> would be valid; if you have a Custom Registration/Profile Field with the ID <code>country</code>.</li>' . "\n";
460 echo '<li><em><code>%%etc, etc...%%</code> <strong>see:</strong> s2Member -> General Options -> Registration/Profile Fields</em>.</li>' . "\n";
461 echo '</ul>' . "\n";
462 /**/
463 echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>' . "\n";
464 echo '<ul>' . "\n";
465 echo '<li><code>%%cv0%%</code> = The domain of your site, which is passed through the `custom` attribute in your Shortcode.</li>' . "\n";
466 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";
467 echo '</ul>' . "\n";
468 echo '<strong>This example uses cv1 to record a special marketing campaign:</strong><br />' . "\n";
469 echo '<em>( The campaign ( i.e. christmas-promo ) could be referenced using <code>%%cv1%%</code> )</em><br />' . "\n";
470 echo '<code>custom="' . esc_html ($_SERVER["HTTP_HOST"]) . '|christmas-promo"</code>' . "\n";
471 /**/
472 echo '</td>' . "\n";
473 /**/
474 echo '</tr>' . "\n";
475 echo '</tbody>' . "\n";
476 echo '</table>' . "\n";
477 echo '</div>' . "\n";
478 echo '</div>' . "\n";
479 /**/
480 echo '</div>' . "\n";
481 /**/
482 echo '</div>' . "\n";
483 /**/
484 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_after_email_config", get_defined_vars ());
485 }
486 /**/
487 if (apply_filters ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_display_open_registration", true, get_defined_vars ()))
488 {
489 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_before_open_registration", get_defined_vars ());
490 /**/
491 if (is_multisite () && is_main_site ()) /* A Multisite Network, and we're on the Main Site? */
492 {
493 echo '<div class="ws-menu-page-group" title="Open Registration">' . "\n";
494 /**/
495 echo '<div class="ws-menu-page-section ws-plugin--s2member-open-registration-section">' . "\n";
496 echo '<h3>Open Registration / Free Subscribers ( optional )</h3>' . "\n";
497 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";
498 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_open_registration", get_defined_vars ());
499 echo '</div>' . "\n";
500 /**/
501 echo '</div>' . "\n";
502 }
503 else /* Else we display this section normally. No special considerations are required in this case. */
504 {
505 echo '<div class="ws-menu-page-group" title="Open Registration">' . "\n";
506 /**/
507 echo '<div class="ws-menu-page-section ws-plugin--s2member-open-registration-section">' . "\n";
508 echo '<h3>Open Registration / Free Subscribers ( optional )</h3>' . "\n";
509 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";
510 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_open_registration", get_defined_vars ());
511 /**/
512 echo '<table class="form-table">' . "\n";
513 echo '<tbody>' . "\n";
514 echo '<tr>' . "\n";
515 /**/
516 echo '<th>' . "\n";
517 echo '<label for="ws-plugin--s2member-allow-subscribers-in">' . "\n";
518 echo 'Allow Open Registration? ( Free Subscribers )' . "\n";
519 echo '</label>' . "\n";
520 echo '</th>' . "\n";
521 /**/
522 echo '</tr>' . "\n";
523 echo '<tr>' . "\n";
524 /**/
525 echo '<td>' . "\n";
526 echo '<select name="ws_plugin__s2member_allow_subscribers_in" id="ws-plugin--s2member-allow-subscribers-in">' . "\n";
527 echo '<option value="0"' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["allow_subscribers_in"]) ? ' selected="selected"' : '') . '>No ( do NOT allow Open Registration )</option>' . "\n";
528 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";
529 echo '</select><br />' . "\n";
530 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" onclick="alert(\'s2Member will now open your Standard Registration Form.\\n* s2Member makes this form available to logged-in Administrators, at all times ( for testing purposes ), regardless of configuration.' . ((c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '\\n\\nBuddyPress: * BuddyPress will use its own Registration Form. Please note, you will probably be redirected away from the BuddyPress Registration Form ( ' . c_ws_plugin__s2member_utils_strings::esc_js_sq (c_ws_plugin__s2member_utils_urls::bp_register_url ()) . ' ), because you\\\'re ALREADY logged-in. Please log out before testing BuddyPress registration.' : '') . '\');">/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";
531 echo (c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '<br /><br /><em><strong>BuddyPress:</strong> BuddyPress will use its own Registration Form <a href="' . esc_attr (c_ws_plugin__s2member_utils_urls::bp_register_url ()) . '" target="_blank" rel="external" onclick="alert(\'s2Member will now open your BuddyPress Registration Form.\\n* However, you will probably be redirected away from this BuddyPress Registration Form ( ' . c_ws_plugin__s2member_utils_strings::esc_js_sq (c_ws_plugin__s2member_utils_urls::bp_register_url ()) . ' ), because you\\\'re ALREADY logged-in. Please log out before testing BuddyPress registration.\');">here</a>.<br />s2Member integrates with BuddyPress, and the above setting will control Open Regisration for BuddyPress too.</em>' . "\n" : '';
532 echo '</td>' . "\n";
533 /**/
534 echo '</tr>' . "\n";
535 echo '</tbody>' . "\n";
536 echo '</table>' . "\n";
537 echo '</div>' . "\n";
538 /**/
539 echo '</div>' . "\n";
540 }
541 /**/
542 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_after_open_registration", get_defined_vars ());
543 }
544 /**/
545 if (apply_filters ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_display_membership_levels", true, get_defined_vars ()))
546 {
547 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_before_membership_levels", get_defined_vars ());
548 /**/
549 echo '<div class="ws-menu-page-group" title="Membership Levels/Labels">' . "\n";
550 /**/
551 echo '<div class="ws-menu-page-section ws-plugin--s2member-membership-levels-section">' . "\n";
552 echo '<h3>Membership Levels ( required, please customize these )</h3>' . "\n";
553 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 design your Membership Options Page, so it only includes Payment Buttons for the Levels being used.</p>' . "\n";
554 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" : '';
555 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_membership_levels", get_defined_vars ());
556 /**/
557 echo '<table class="form-table">' . "\n";
558 echo '<tbody>' . "\n";
559 /**/
560 for ($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)
561 {
562 echo '<tr>' . "\n";
563 /**/
564 echo '<th>' . "\n";
565 echo '<label for="ws-plugin--s2member-level' . $n . '-label">' . "\n";
566 echo ($n === 0) ? 'Level #' . $n . ' <em>( Free Subscribers )</em>:' . "\n" : 'Level #' . $n . ' Members:' . "\n";
567 echo '</label>' . "\n";
568 echo '</th>' . "\n";
569 /**/
570 echo '</tr>' . "\n";
571 echo '<tr>' . "\n";
572 /**/
573 echo '<td>' . "\n";
574 echo '<input type="text" autocomplete="off" 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";
575 echo 'This is the Label for Level #' . $n . (($n === 0) ? ' ( Free Subscribers )' : ' Members') . '.<br />' . "\n";
576 echo '</td>' . "\n";
577 /**/
578 echo '</tr>' . "\n";
579 }
580 /**/
581 echo '</tbody>' . "\n";
582 echo '</table>' . "\n";
583 /**/
584 echo '<div class="ws-menu-page-hr"></div>' . "\n";
585 /**/
586 echo '<table class="form-table" style="margin-top:0;">' . "\n";
587 echo '<tbody>' . "\n";
588 echo '<tr>' . "\n";
589 /**/
590 echo '<th style="padding-top:0;">' . "\n";
591 echo '<label for="ws-plugin--s2member-apply-label-translations">' . "\n";
592 echo 'Force WordPress® to use your Labels?' . "\n";
593 echo '</label>' . "\n";
594 echo '</th>' . "\n";
595 /**/
596 echo '</tr>' . "\n";
597 echo '<tr>' . "\n";
598 /**/
599 echo '<td>' . "\n";
600 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";
601 echo 'This affects your administrative Dashboard only <em>( i.e. your list of Users )</em>.<br />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";
602 echo '</td>' . "\n";
603 /**/
604 echo '</tr>' . "\n";
605 echo '</tbody>' . "\n";
606 echo '</table>' . "\n";
607 /**/
608 echo '<div class="ws-menu-page-hr"></div>' . "\n";
609 /**/
610 echo '<input type="button" value="Reset Roles/Capabilities" class="ws-menu-page-right ws-plugin--s2member-reset-roles-button" style="min-width:175px;" />' . "\n";
611 echo '<p>The button to the right, is a nifty tool, which allows you to reset s2Member\'s internal Roles and Capabilities that integrate with WordPress®. If you, or a developer working with you, has made attempts to alter the default <em>internal</em> Role/Capability sets that come with s2Member, and you need to reset them back to the way s2Member expects them to be, please use this tool. <em>Attn Developers: it is also possible lock-in your modified Roles/Capabilities with an s2Member Filter. Please see <a href="http://www.primothemes.com/forums/viewtopic.php?f=36&t=15420&p=45162#p45162" target="_blank" rel="external">this thread for details</a>.</em></p>' . "\n";
612 /**/
613 echo '</div>' . "\n";
614 /**/
615 echo '</div>' . "\n";
616 /**/
617 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_after_membership_levels", get_defined_vars ());
618 }
619 /**/
620 if (apply_filters ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_display_login_registration", true, get_defined_vars ()))
621 {
622 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_before_login_registration", get_defined_vars ());
623 /**/
624 echo '<div class="ws-menu-page-group" title="Login/Registration Design">' . "\n";
625 /**/
626 echo '<div class="ws-menu-page-section ws-plugin--s2member-login-registration-section">' . "\n";
627 echo '<h3>Login/Registration Page Customization ( required )</h3>' . "\n";
628 echo '<p>These settings customize your Standard Login/Registration Pages:<br />( <a href="' . esc_attr (c_ws_plugin__s2member_utils_urls::wp_register_url ()) . '" target="_blank" rel="external" onclick="alert(\'s2Member will now open your Standard Registration Form.\\n* s2Member makes this form available to logged-in Administrators, at all times ( for testing purposes ), regardless of configuration.' . ((c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '\\n\\nBuddyPress: * BuddyPress will use its own Registration Form. Please note, you will probably be redirected away from the BuddyPress Registration Form ( ' . c_ws_plugin__s2member_utils_strings::esc_js_sq (c_ws_plugin__s2member_utils_urls::bp_register_url ()) . ' ), because you\\\'re ALREADY logged-in. Please log out before testing BuddyPress registration.' : '') . '\');">' . esc_html (c_ws_plugin__s2member_utils_urls::wp_register_url ()) . '</a> )</p>' . "\n";
629 echo (is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && is_main_site ()) ? '<p><em>The Main Site of 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" onclick="alert(\'s2Member will now open your Multisite Registration Form.\\n* s2Member makes this form available to logged-in Super Administrators, at all times ( for testing purposes ), regardless of configuration.' . ((c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '\\n\\nBuddyPress: * BuddyPress will use its own Registration Form. Please note, you will probably be redirected away from the BuddyPress Registration Form ( ' . c_ws_plugin__s2member_utils_strings::esc_js_sq (c_ws_plugin__s2member_utils_urls::bp_register_url ()) . ' ), because you\\\'re ALREADY logged-in. Please log out before testing BuddyPress registration.' : '') . '\');">' . esc_html (c_ws_plugin__s2member_utils_urls::wp_signup_url ()) . '</a> )</em></p>' . "\n" : '';
630 echo (c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '<p><em><strong>BuddyPress:</strong> BuddyPress will use its own Registration Form, powered by your theme.<br />( <a href="' . esc_attr (c_ws_plugin__s2member_utils_urls::bp_register_url ()) . '" target="_blank" rel="external" onclick="alert(\'s2Member will now open your BuddyPress Registration Form.\\n* However, you will probably be redirected away from this BuddyPress Registration Form ( ' . c_ws_plugin__s2member_utils_strings::esc_js_sq (c_ws_plugin__s2member_utils_urls::bp_register_url ()) . ' ), because you\\\'re ALREADY logged-in. Please log out before testing BuddyPress registration.\');">' . esc_html (c_ws_plugin__s2member_utils_urls::bp_register_url ()) . '</a> )</em></p>' . "\n" : '';
631 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_login_registration", get_defined_vars ());
632 /**/
633 echo '<table class="form-table">' . "\n";
634 echo '<tbody>' . "\n";
635 echo '<tr>' . "\n";
636 /**/
637 echo '<td>' . "\n";
638 echo '<h3 style="margin:0;">Overall Font/Size Configuration</h3>' . "\n";
639 echo '<p style="margin:0;">These settings are all focused on your Login/Registration Fonts.</p>' . "\n";
640 echo '</td>' . "\n";
641 /**/
642 echo '</tr>' . "\n";
643 echo '<tr>' . "\n";
644 /**/
645 echo '<th>' . "\n";
646 echo '<label for="ws-plugin--s2member-login-reg-font-size">' . "\n";
647 echo 'Overall Font Size:' . "\n";
648 echo '</label>' . "\n";
649 echo '</th>' . "\n";
650 /**/
651 echo '</tr>' . "\n";
652 echo '<tr>' . "\n";
653 /**/
654 echo '<td>' . "\n";
655 echo '<input type="text" autocomplete="off" 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";
656 echo 'Set this to a numeric value, calculated in pixels.' . "\n";
657 echo '</td>' . "\n";
658 /**/
659 echo '</tr>' . "\n";
660 echo '<tr>' . "\n";
661 /**/
662 echo '<th>' . "\n";
663 echo '<label for="ws-plugin--s2member-login-reg-font-family">' . "\n";
664 echo 'Overall Font Family:' . "\n";
665 echo '</label>' . "\n";
666 echo '</th>' . "\n";
667 /**/
668 echo '</tr>' . "\n";
669 echo '<tr>' . "\n";
670 /**/
671 echo '<td>' . "\n";
672 echo '<input type="text" autocomplete="off" 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";
673 echo 'Set this to a web-safe font family.' . "\n";
674 echo '</td>' . "\n";
675 /**/
676 echo '</tr>' . "\n";
677 echo '<tr>' . "\n";
678 /**/
679 echo '<th>' . "\n";
680 echo '<label for="ws-plugin--s2member-login-reg-font-field-size">' . "\n";
681 echo 'Form Field Font Size:' . "\n";
682 echo '</label>' . "\n";
683 echo '</th>' . "\n";
684 /**/
685 echo '</tr>' . "\n";
686 echo '<tr>' . "\n";
687 /**/
688 echo '<td>' . "\n";
689 echo '<input type="text" autocomplete="off" 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";
690 echo 'Set this to a numeric value, calculated in pixels.' . "\n";
691 echo '</td>' . "\n";
692 /**/
693 echo '</tr>' . "\n";
694 echo '</tbody>' . "\n";
695 echo '</table>' . "\n";
696 /**/
697 echo '<div class="ws-menu-page-hr"></div>' . "\n";
698 /**/
699 echo '<table class="form-table" style="margin-top:0;">' . "\n";
700 echo '<tbody>' . "\n";
701 echo '<tr>' . "\n";
702 /**/
703 echo '<td>' . "\n";
704 echo '<h3 style="margin:0;">Background Configuration</h3>' . "\n";
705 echo '<p style="margin:0;">These settings are all focused on your Login/Registration Background.</p>' . "\n";
706 echo '</td>' . "\n";
707 /**/
708 echo '</tr>' . "\n";
709 echo '<tr>' . "\n";
710 /**/
711 echo '<th>' . "\n";
712 echo '<label for="ws-plugin--s2member-login-reg-background-color">' . "\n";
713 echo 'Background Color:' . "\n";
714 echo '</label>' . "\n";
715 echo '</th>' . "\n";
716 /**/
717 echo '</tr>' . "\n";
718 echo '<tr>' . "\n";
719 /**/
720 echo '<td>' . "\n";
721 echo '<input type="text" autocomplete="off" 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";
722 echo 'Set this to a 6-digit hex color code.' . "\n";
723 echo '</td>' . "\n";
724 /**/
725 echo '</tr>' . "\n";
726 echo '<tr>' . "\n";
727 /**/
728 echo '<th>' . "\n";
729 echo '<label for="ws-plugin--s2member-login-reg-background-image">' . "\n";
730 echo 'Background Image:' . "\n";
731 echo '</label>' . "\n";
732 echo '</th>' . "\n";
733 /**/
734 echo '</tr>' . "\n";
735 echo '<tr>' . "\n";
736 /**/
737 echo '<td>' . "\n";
738 echo '<input type="text" autocomplete="off" 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";
739 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";
740 echo 'Set this to the URL of your Background Image. ( this is optional )<br />';
741 echo 'If supplied, your Background Image will be tiled.' . "\n";
742 echo '</td>' . "\n";
743 /**/
744 echo '</tr>' . "\n";
745 echo '<tr>' . "\n";
746 /**/
747 echo '<th>' . "\n";
748 echo '<label for="ws-plugin--s2member-login-reg-background-image-repeat">' . "\n";
749 echo 'Background Image Tile:' . "\n";
750 echo '</label>' . "\n";
751 echo '</th>' . "\n";
752 /**/
753 echo '</tr>' . "\n";
754 echo '<tr>' . "\n";
755 /**/
756 echo '<td>' . "\n";
757 echo '<select name="ws_plugin__s2member_login_reg_background_image_repeat" id="ws-plugin--s2member-login-reg-background-image-repeat">' . "\n";
758 echo '<option value="repeat"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_reg_background_image_repeat"] === "repeat") ? ' selected="selected"' : '') . '>Seamless Tile ( background-repeat: repeat; )</option>' . "\n";
759 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";
760 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";
761 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";
762 echo '</select><br />' . "\n";
763 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";
764 echo '</td>' . "\n";
765 /**/
766 echo '</tr>' . "\n";
767 echo '<tr>' . "\n";
768 /**/
769 echo '<th>' . "\n";
770 echo '<label for="ws-plugin--s2member-login-reg-background-text-color">' . "\n";
771 echo 'Color of Text on top of your Background:' . "\n";
772 echo '</label>' . "\n";
773 echo '</th>' . "\n";
774 /**/
775 echo '</tr>' . "\n";
776 echo '<tr>' . "\n";
777 /**/
778 echo '<td>' . "\n";
779 echo '<input type="text" autocomplete="off" 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";
780 echo 'Set this to a 6-digit hex color code.' . "\n";
781 echo '</td>' . "\n";
782 /**/
783 echo '</tr>' . "\n";
784 echo '<tr>' . "\n";
785 /**/
786 echo '<th>' . "\n";
787 echo '<label for="ws-plugin--s2member-login-reg-background-text-shadow-color">' . "\n";
788 echo 'Shadow Color for Text on top of your Background:' . "\n";
789 echo '</label>' . "\n";
790 echo '</th>' . "\n";
791 /**/
792 echo '</tr>' . "\n";
793 echo '<tr>' . "\n";
794 /**/
795 echo '<td>' . "\n";
796 echo '<input type="text" autocomplete="off" 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";
797 echo 'Set this to a 6-digit hex color code.' . "\n";
798 echo '</td>' . "\n";
799 /**/
800 echo '</tr>' . "\n";
801 echo '<tr>' . "\n";
802 /**/
803 echo '<th>' . "\n";
804 echo '<label for="ws-plugin--s2member-login-reg-background-box-shadow-color">' . "\n";
805 echo 'Shadow Color for Boxes on top of your Background:' . "\n";
806 echo '</label>' . "\n";
807 echo '</th>' . "\n";
808 /**/
809 echo '</tr>' . "\n";
810 echo '<tr>' . "\n";
811 /**/
812 echo '<td>' . "\n";
813 echo '<input type="text" autocomplete="off" 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";
814 echo 'Set this to a 6-digit hex color code.' . "\n";
815 echo '</td>' . "\n";
816 /**/
817 echo '</tr>' . "\n";
818 echo '</tbody>' . "\n";
819 echo '</table>' . "\n";
820 /**/
821 echo '<div class="ws-menu-page-hr"></div>' . "\n";
822 /**/
823 echo '<table class="form-table" style="margin-top:0;">' . "\n";
824 echo '<tbody>' . "\n";
825 echo '<tr>' . "\n";
826 /**/
827 echo '<td>' . "\n";
828 echo '<h3 style="margin:0;">Logo Image Configuration</h3>' . "\n";
829 echo '<p style="margin:0;">These settings are all focused on your Login/Registration Logo.</p>' . "\n";
830 echo '</td>' . "\n";
831 /**/
832 echo '</tr>' . "\n";
833 echo '<tr>' . "\n";
834 /**/
835 echo '<th>' . "\n";
836 echo '<label for="ws-plugin--s2member-login-reg-logo-src">' . "\n";
837 echo 'Logo Image Location:' . "\n";
838 echo '</label>' . "\n";
839 echo '</th>' . "\n";
840 /**/
841 echo '</tr>' . "\n";
842 echo '<tr>' . "\n";
843 /**/
844 echo '<td>' . "\n";
845 echo '<input type="text" autocomplete="off" 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";
846 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";
847 echo 'Set this to the URL of your Logo Image.<br />' . "\n";
848 echo 'Suggested size is around 500 x 100.' . "\n";
849 echo '</td>' . "\n";
850 /**/
851 echo '</tr>' . "\n";
852 echo '<tr>' . "\n";
853 /**/
854 echo '<th>' . "\n";
855 echo '<label for="ws-plugin--s2member-login-reg-logo-src-width">' . "\n";
856 echo 'Logo Image Width:' . "\n";
857 echo '</label>' . "\n";
858 echo '</th>' . "\n";
859 /**/
860 echo '</tr>' . "\n";
861 echo '<tr>' . "\n";
862 /**/
863 echo '<td>' . "\n";
864 echo '<input type="text" autocomplete="off" 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";
865 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";
866 echo '</td>' . "\n";
867 /**/
868 echo '</tr>' . "\n";
869 echo '<tr>' . "\n";
870 /**/
871 echo '<th>' . "\n";
872 echo '<label for="ws-plugin--s2member-login-reg-logo-src-height">' . "\n";
873 echo 'Logo Image Height:' . "\n";
874 echo '</label>' . "\n";
875 echo '</th>' . "\n";
876 /**/
877 echo '</tr>' . "\n";
878 echo '<tr>' . "\n";
879 /**/
880 echo '<td>' . "\n";
881 echo '<input type="text" autocomplete="off" 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";
882 echo 'The pixel Height of your Logo Image.' . "\n";
883 echo '</td>' . "\n";
884 /**/
885 echo '</tr>' . "\n";
886 echo '<tr>' . "\n";
887 /**/
888 echo '<th>' . "\n";
889 echo '<label for="ws-plugin--s2member-login-reg-logo-url">' . "\n";
890 echo 'Logo Image Click URL:' . "\n";
891 echo '</label>' . "\n";
892 echo '</th>' . "\n";
893 /**/
894 echo '</tr>' . "\n";
895 echo '<tr>' . "\n";
896 /**/
897 echo '<td>' . "\n";
898 echo '<input type="text" autocomplete="off" 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";
899 echo 'Set this to the Click URL for your Logo Image.' . "\n";
900 echo '</td>' . "\n";
901 /**/
902 echo '</tr>' . "\n";
903 echo '<tr>' . "\n";
904 /**/
905 echo '<th>' . "\n";
906 echo '<label for="ws-plugin--s2member-login-reg-logo-title">' . "\n";
907 echo 'Logo Image Title Attribute:' . "\n";
908 echo '</label>' . "\n";
909 echo '</th>' . "\n";
910 /**/
911 echo '</tr>' . "\n";
912 echo '<tr>' . "\n";
913 /**/
914 echo '<td>' . "\n";
915 echo '<input type="text" autocomplete="off" 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";
916 echo 'Used as the <code>title=""</code> attribute for your Logo Image.' . "\n";
917 echo '</td>' . "\n";
918 /**/
919 echo '</tr>' . "\n";
920 echo '</tbody>' . "\n";
921 echo '</table>' . "\n";
922 /**/
923 echo '<div class="ws-menu-page-hr"></div>' . "\n";
924 /**/
925 echo '<table class="form-table" style="margin-top:0;">' . "\n";
926 echo '<tbody>' . "\n";
927 echo '<tr>' . "\n";
928 /**/
929 echo '<td>' . "\n";
930 echo '<h3 style="margin:0;">Footer Design ( i.e. Bottom )</h3>' . "\n";
931 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";
932 echo '</td>' . "\n";
933 /**/
934 echo '</tr>' . "\n";
935 echo '<tr>' . "\n";
936 /**/
937 echo '<th>' . "\n";
938 echo '<label for="ws-plugin--s2member-login-reg-footer-design">' . "\n";
939 echo 'Login/Registration Footer Design ( optional ):' . "\n";
940 echo '</label>' . "\n";
941 echo '</th>' . "\n";
942 /**/
943 echo '</tr>' . "\n";
944 echo '<tr>' . "\n";
945 /**/
946 echo '<td>' . "\n";
947 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";
948 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";
949 echo '</td>' . "\n";
950 /**/
951 echo '</tr>' . "\n";
952 echo '</tbody>' . "\n";
953 echo '</table>' . "\n";
954 echo '</div>' . "\n";
955 /**/
956 echo '</div>' . "\n";
957 /**/
958 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_after_login_registration", get_defined_vars ());
959 }
960 /**/
961 if (apply_filters ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_display_custom_reg_fields", true, get_defined_vars ()))
962 {
963 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_before_custom_reg_fields", get_defined_vars ());
964 /**/
965 echo '<div class="ws-menu-page-group" title="Registration/Profile Fields &amp; Options">' . "\n";
966 /**/
967 echo '<div class="ws-menu-page-section ws-plugin--s2member-custom-reg-fields-section">' . "\n";
968 echo '<h3>Custom Registration/Profile Fields ( optional, for further customization )</h3>' . "\n";
969 echo '<p>Some fields are already built-in by default. The defaults are: <code>*Username*, *Email*, *First Name*, *Last Name*</code>.</p>' . "\n";
970 /**/
971 echo '<p>Custom Fields will appear in your Standard Registration Form, and in User/Member Profiles:<br />( <a href="' . esc_attr (c_ws_plugin__s2member_utils_urls::wp_register_url ()) . '" target="_blank" rel="external" onclick="alert(\'s2Member will now open your Standard Registration Form.\\n* s2Member makes this form available to logged-in Administrators, at all times ( for testing purposes ), regardless of configuration.' . ((c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '\\n\\nBuddyPress: * BuddyPress will use its own Registration Form. Please note, you will probably be redirected away from the BuddyPress Registration Form ( ' . c_ws_plugin__s2member_utils_strings::esc_js_sq (c_ws_plugin__s2member_utils_urls::bp_register_url ()) . ' ), because you\\\'re ALREADY logged-in. Please log out before testing BuddyPress registration.' : '') . '\');">' . esc_html (c_ws_plugin__s2member_utils_urls::wp_register_url ()) . '</a> )</p>' . "\n";
972 echo (is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && is_main_site ()) ? '<p><em>The Main Site of a Multisite Blog Farm uses this Form. s2Member supports Custom Fields here too.<br />( <a href="' . esc_attr (c_ws_plugin__s2member_utils_urls::wp_signup_url ()) . '" target="_blank" rel="external" onclick="alert(\'s2Member will now open your Multisite Registration Form.\\n* s2Member makes this form available to logged-in Super Administrators, at all times ( for testing purposes ), regardless of configuration.' . ((c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '\\n\\nBuddyPress: * BuddyPress will use its own Registration Form. Please note, you will probably be redirected away from the BuddyPress Registration Form ( ' . c_ws_plugin__s2member_utils_strings::esc_js_sq (c_ws_plugin__s2member_utils_urls::bp_register_url ()) . ' ), because you\\\'re ALREADY logged-in. Please log out before testing BuddyPress registration.' : '') . '\');">' . esc_html (c_ws_plugin__s2member_utils_urls::wp_signup_url ()) . '</a> )</em></p>' . "\n" : '';
973 echo (c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '<p><em><strong>BuddyPress:</strong> BuddyPress will use its own Registration Form <a href="' . esc_attr (c_ws_plugin__s2member_utils_urls::bp_register_url ()) . '" target="_blank" rel="external" onclick="alert(\'s2Member will now open your BuddyPress Registration Form.\\n* However, you will probably be redirected away from this BuddyPress Registration Form ( ' . c_ws_plugin__s2member_utils_strings::esc_js_sq (c_ws_plugin__s2member_utils_urls::bp_register_url ()) . ' ), because you\\\'re ALREADY logged-in. Please log out before testing BuddyPress registration.\');">here</a>.<br />s2Member can integrate your Custom Fields with BuddyPress too, please see options below.</em></p>' . "\n" : '';
974 /**/
975 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_custom_reg_fields", get_defined_vars ());
976 /**/
977 echo '<table class="form-table">' . "\n";
978 echo '<tbody>' . "\n";
979 echo '<tr>' . "\n";
980 /**/
981 echo '<th>' . "\n";
982 echo '<label>' . "\n";
983 echo 'Custom Registration/Profile Fields:' . "\n";
984 echo '</label>' . "\n";
985 echo '</th>' . "\n";
986 /**/
987 echo '</tr>' . "\n";
988 echo '<tr>' . "\n";
989 /**/
990 echo '<td>' . "\n";
991 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";
992 echo '<div id="ws-plugin--s2member-custom-reg-field-configuration"></div>' . "\n"; /* This is filled by JavaScript routines. */
993 echo '</td>' . "\n";
994 /**/
995 echo '</tr>' . "\n";
996 echo '<tr>' . "\n";
997 /**/
998 echo '<th>' . "\n";
999 echo '<label for="ws-plugin--s2member-custom-reg-names">' . "\n";
1000 echo 'Collect First/Last Names during Registration?' . "\n";
1001 echo '</label>' . "\n";
1002 echo '</th>' . "\n";
1003 /**/
1004 echo '</tr>' . "\n";
1005 echo '<tr>' . "\n";
1006 /**/
1007 echo '<td>' . "\n";
1008 echo '<select name="ws_plugin__s2member_custom_reg_names" id="ws-plugin--s2member-custom-reg-names">' . "\n";
1009 echo '<option value="1"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_password"]) ? ' selected="selected"' : '') . '>Yes ( always collect First/Last Names during registration )</option>' . "\n";
1010 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";
1011 echo '</select><br />' . "\n";
1012 echo 'Recommended setting ( <code>Yes</code> ). It\'s usually a good idea to leave this on.' . "\n";
1013 echo (c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '<br /><em>* Has NO affect on BuddyPress registration form (BuddyPress always collects a full <code>Name</code> field).</em>' . "\n" : '';
1014 echo (c_ws_plugin__s2member_utils_conds::pro_is_installed ()) ? '<br /><em>* s2Member Pro (Checkout) Forms always require a First/Last Name for billing.</em>' . "\n" : '';
1015 echo '</td>' . "\n";
1016 /**/
1017 echo '</tr>' . "\n";
1018 echo '<tr>' . "\n";
1019 /**/
1020 echo '<th>' . "\n";
1021 echo '<label for="ws-plugin--s2member-custom-reg-display-name">' . "\n";
1022 echo 'Set "Display Name" during Registration?' . "\n";
1023 echo '</label>' . "\n";
1024 echo '</th>' . "\n";
1025 /**/
1026 echo '</tr>' . "\n";
1027 echo '<tr>' . "\n";
1028 /**/
1029 echo '<td>' . "\n";
1030 echo '<select name="ws_plugin__s2member_custom_reg_display_name" id="ws-plugin--s2member-custom-reg-display-name">' . "\n";
1031 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";
1032 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";
1033 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";
1034 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";
1035 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";
1036 echo '</select>' . "\n";
1037 echo (c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '<br /><em>* Has NO affect on BuddyPress registration form (BuddyPress always uses its full <code>Name</code> field).</em>' . "\n" : '';
1038 echo '</td>' . "\n";
1039 /**/
1040 echo '</tr>' . "\n";
1041 echo '<tr>' . "\n";
1042 /**/
1043 echo '<th>' . "\n";
1044 echo '<label for="ws-plugin--s2member-custom-reg-password">' . "\n";
1045 echo 'Allow Custom Passwords during Registration?' . "\n";
1046 echo '</label>' . "\n";
1047 echo '</th>' . "\n";
1048 /**/
1049 echo '</tr>' . "\n";
1050 echo '<tr>' . "\n";
1051 /**/
1052 echo '<td>' . "\n";
1053 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";
1054 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";
1055 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";
1056 echo '</select><br />' . "\n";
1057 echo 'Auto-generated Passwords are recommended for best security; because, this also serves as a form of email confirmation.' . "\n";
1058 echo (is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && is_main_site ()) ? '<br /><em>* For security purposes, Custom Passwords are NOT possible on the Main Site of a Blog Farm. <a href="#" onclick="alert(\'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 `/wp-signup.php`. 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.\\n\\n* NOTE: s2Member (Pro) removes this limitation.\\nIf you install the s2Member Pro Module, you WILL be able to allow Custom Passwords through s2Member Pro Forms; even on a Multisite Blog Farm.\'); return false;" tabindex="-1">[?]</a></em>' . "\n" : '';
1059 echo (c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '<br /><em>* Does NOT affect BuddyPress registration form (always <code>yes</code> with BuddyPress registration).</em>' . "\n" : '';
1060 echo '</td>' . "\n";
1061 /**/
1062 echo '</tr>' . "\n";
1063 echo '<tr>' . "\n";
1064 /**/
1065 echo '<th>' . "\n";
1066 echo '<label for="ws-plugin--s2member-custom-reg-force-personal-emails">' . "\n";
1067 echo 'Force Personal Emails during Registration?' . "\n";
1068 echo '</label>' . "\n";
1069 echo '</th>' . "\n";
1070 /**/
1071 echo '</tr>' . "\n";
1072 echo '<tr>' . "\n";
1073 /**/
1074 echo '<td>' . "\n";
1075 echo '<input type="text" autocomplete="off" 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";
1076 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";
1077 echo 'Ex: <code>info,help,admin,webmaster,hostmaster,sales,support,spam</code><br />' . "\n";
1078 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";
1079 echo (c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '<br /><em>* Affects BuddyPress registration form too.</em>' . "\n" : '';
1080 echo '</td>' . "\n";
1081 /**/
1082 echo '</tr>' . "\n";
1083 echo '<tr>' . "\n";
1084 /**/
1085 echo '<th>' . "\n";
1086 echo '<label for="ws-plugin--s2member-custom-reg-fields-4bp">' . "\n";
1087 echo 'Integrate Custom Registration/Profile Fields with BuddyPress?' . "\n";
1088 echo '</label>' . "\n";
1089 echo '</th>' . "\n";
1090 /**/
1091 echo '</tr>' . "\n";
1092 echo '<tr>' . "\n";
1093 /**/
1094 echo '<td>' . "\n";
1095 echo '<div class="ws-menu-page-scrollbox" style="height:65px;">' . "\n";
1096 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";
1097 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)
1098 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";
1099 echo '</div>' . "\n";
1100 echo (!c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '<em>* BuddyPress is NOT installed; which is perfectly OK. BuddyPress is NOT a requirement.</em>' . "\n" : '<em>* The options above, make it possible to integrate Custom Registration/Profile Fields ( i.e. those configured with s2Member ) into BuddyPress as well. However, if you configure Profile Fields with BuddyPress, those will NOT be integrated with s2Member. Therefore, if you need Custom Registration/Profile Fields to work with both s2Member and with BuddyPress, please configure them with s2Member.</em>';
1101 echo '</td>' . "\n";
1102 /**/
1103 echo '</tr>' . "\n";
1104 echo '</tbody>' . "\n";
1105 echo '</table>' . "\n";
1106 echo '</div>' . "\n";
1107 /**/
1108 echo '</div>' . "\n";
1109 /**/
1110 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_after_custom_reg_fields", get_defined_vars ());
1111 }
1112 /**/
1113 if (apply_filters ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_display_login_welcome_page", true, get_defined_vars ()))
1114 {
1115 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_before_login_welcome_page", get_defined_vars ());
1116 /**/
1117 echo '<div class="ws-menu-page-group" title="Login Welcome Page">' . "\n";
1118 /**/
1119 echo '<div class="ws-menu-page-section ws-plugin--s2member-login-welcome-page-section">' . "\n";
1120 echo '<h3>Login Welcome Page ( required, please customize this )</h3>' . "\n";
1121 echo '<p>Please create and/or choose an existing Page to use as the first page Members will see after logging in.</p>' . "\n";
1122 echo (c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '<p><em><strong>BuddyPress:</strong> s2Member integrates with BuddyPress. Your Login Welcome Page affects BuddyPress too.</em></p>' . "\n" : '';
1123 echo '<p><em><strong>*Tip*</strong> This special Page will be protected from public access ( automatically ) by s2Member.</em></p>' . "\n";
1124 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_login_welcome_page", get_defined_vars ());
1125 /**/
1126 echo '<table class="form-table">' . "\n";
1127 echo '<tbody>' . "\n";
1128 echo '<tr>' . "\n";
1129 /**/
1130 echo '<th>' . "\n";
1131 echo '<label for="ws-plugin--s2member-login-welcome-page">' . "\n";
1132 echo 'Login Welcome Page:' . "\n";
1133 echo '</label>' . "\n";
1134 echo '</th>' . "\n";
1135 /**/
1136 echo '</tr>' . "\n";
1137 echo '<tr>' . "\n";
1138 /**/
1139 echo '<td>' . "\n";
1140 echo '<select name="ws_plugin__s2member_login_welcome_page" id="ws-plugin--s2member-login-welcome-page">' . "\n";
1141 echo '<option value="">&mdash; Select &mdash;</option>' . "\n";
1142 foreach (($ws_plugin__s2member_temp_a = array_merge ((array)get_pages ())) as $ws_plugin__s2member_temp_o)
1143 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";
1144 echo '</select><br />' . "\n";
1145 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";
1146 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";
1147 echo '<input type="text" autocomplete="off" 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";
1148 echo '</td>' . "\n";
1149 /**/
1150 echo '</tr>' . "\n";
1151 echo '</tbody>' . "\n";
1152 echo '</table>' . "\n";
1153 echo '</div>' . "\n";
1154 /**/
1155 echo '</div>' . "\n";
1156 /**/
1157 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_after_login_welcome_page", get_defined_vars ());
1158 }
1159 /**/
1160 if (apply_filters ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_display_membership_options_page", true, get_defined_vars ()))
1161 {
1162 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_before_membership_options_page", get_defined_vars ());
1163 /**/
1164 echo '<div class="ws-menu-page-group" title="Membership Options Page">' . "\n";
1165 /**/
1166 echo '<div class="ws-menu-page-section ws-plugin--s2member-membership-options-page-section">' . "\n";
1167 echo '<h3>Membership Options Page ( required, please customize this )</h3>' . "\n";
1168 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 Payment Button(s) generated for you by s2Member. This Page serves as your lead-in signup page <em>( i.e. you\'ll give visitors one or more registration options here, and they\'ll be redirected to your Payment Gateway, to pay for the option they choose )</em>.</p>' . "\n";
1169 echo '<p>Your Membership Options Page should detail all of the features that come with Membership to your site, and provide a Payment Button for each Level of access you plan to offer. This is also the Page that anyone could be redirected to <em>( by s2Member )</em>, should they attempt to access an area of your site, which may require access to something they\'re NOT currenty allowed to view.' . ((!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? ' For more on this advanced topic, please check your Dashboard here: <code>s2Member -> API Scripting -> Membership Options Page / Variables</code>.' : '') . '</p>' . "\n";
1170 echo '<p><em><strong>*Tip*</strong> If you allow Open Registration ( i.e. Free Subscribers ), you might want to place a link on your Membership Options Page, which points directly to your Registration Form, instead of routing a Customer through your Payment Gateway first. For further details, please check the section above: <code>s2Member -> General Options -> Open Registration</code>.</em></p>' . "\n";
1171 echo (c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '<p><em><strong>BuddyPress:</strong> Even with BuddyPress, s2Member still needs a Membership Options Page. This is where your Payment Button(s) will go, giving people the ability to pay you. And again, this is also the Page that anyone could be redirected to <em>( by s2Member )</em>, should they attempt to access an area of your site, which may require access to something they are currenty NOT allowed to view.' . ((!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? ' For more on this advanced topic, please check your Dashboard here: <code>s2Member -> API Scripting -> Membership Options Page / Variables</code>.' : '') . '</em></p>' . "\n" : '';
1172 echo '<p><em><strong>*Tip*</strong> s2Member will NEVER allow this Page to be protected from public access.</em></p>' . "\n";
1173 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_membership_options_page", get_defined_vars ());
1174 /**/
1175 echo '<table class="form-table">' . "\n";
1176 echo '<tbody>' . "\n";
1177 echo '<tr>' . "\n";
1178 /**/
1179 echo '<th>' . "\n";
1180 echo '<label for="ws-plugin--s2member-membership-options-page">' . "\n";
1181 echo 'Membership Options Page:' . "\n";
1182 echo '</label>' . "\n";
1183 echo '</th>' . "\n";
1184 /**/
1185 echo '</tr>' . "\n";
1186 echo '<tr>' . "\n";
1187 /**/
1188 echo '<td>' . "\n";
1189 echo '<select name="ws_plugin__s2member_membership_options_page" id="ws-plugin--s2member-membership-options-page">' . "\n";
1190 echo '<option value="">&mdash; Select &mdash;</option>' . "\n";
1191 foreach (($ws_plugin__s2member_temp_a = array_merge ((array)get_pages ())) as $ws_plugin__s2member_temp_o)
1192 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";
1193 echo '</select><br />' . "\n";
1194 echo 'Please choose a Page that provides Users a way to signup for Membership. This Page should also contain your Payment Button(s). We recommend the following title: <code>Membership Signup</code>.' . "\n";
1195 echo '</td>' . "\n";
1196 /**/
1197 echo '</tr>' . "\n";
1198 echo '</tbody>' . "\n";
1199 echo '</table>' . "\n";
1200 echo '</div>' . "\n";
1201 /**/
1202 echo '</div>' . "\n";
1203 /**/
1204 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_after_membership_options_page", get_defined_vars ());
1205 }
1206 /**/
1207 if (apply_filters ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_display_profile_modifications", true, get_defined_vars ()))
1208 {
1209 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_before_profile_modifications", get_defined_vars ());
1210 /**/
1211 echo '<div class="ws-menu-page-group" title="Member Profile Modifications">' . "\n";
1212 /**/
1213 echo '<div class="ws-menu-page-section ws-plugin--s2member-profile-modifications-section">' . "\n";
1214 echo '<h3>Giving Members The Ability To Modify Their Profile</h3>' . "\n";
1215 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";
1216 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 <em>( as the site owner )</em>, with a special Shortcode: <code>[s2Member-Profile /]</code> that you can place into your Login Welcome Page, or any Post/Page for that matter <em>( even into a Text Widget )</em>. 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";
1217 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 <em>( with a bare-bones format )</em>, 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";
1218 echo (c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '<p><em><strong>BuddyPress:</strong> BuddyPress already provides Users/Members with a Profile Editing Panel, powered by your theme. If you\'ve configured Custom Registration/Profile Fields with s2Member, you can also enable s2Member\'s Profile Field integration with BuddyPress ( recommended ). For further details, see: <code>s2Member -> General Options -> Registration/Profile Fields</code>.</em></p>' . "\n" : '';
1219 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_profile_modifications", get_defined_vars ());
1220 /**/
1221 echo '<table class="form-table">' . "\n";
1222 echo '<tbody>' . "\n";
1223 echo '<tr>' . "\n";
1224 /**/
1225 echo '<th>' . "\n";
1226 echo '<label for="ws-plugin--s2member-force-admin-lockouts">' . "\n";
1227 echo 'Redirect Members away from the Default Profile Panel?' . "\n";
1228 echo '</label>' . "\n";
1229 echo '</th>' . "\n";
1230 /**/
1231 echo '</tr>' . "\n";
1232 echo '<tr>' . "\n";
1233 /**/
1234 echo '<td>' . "\n";
1235 echo '<select name="ws_plugin__s2member_force_admin_lockouts" id="ws-plugin--s2member-force-admin-lockouts">' . "\n";
1236 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";
1237 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";
1238 echo '</select><br />' . "\n";
1239 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";
1240 echo '</td>' . "\n";
1241 /**/
1242 echo '</tr>' . "\n";
1243 echo '</tbody>' . "\n";
1244 echo '</table>' . "\n";
1245 /**/
1246 echo '<div class="ws-menu-page-hr"></div>' . "\n";
1247 /**/
1248 echo '<p><strong>Shortcode ( copy/paste )</strong>, for an Inline Profile Modification Form:<br />' . "\n";
1249 echo '<p><input type="text" autocomplete="off" value="' . format_to_edit ('[s2Member-Profile /]') . '" style="font-size:90%; font-family:Consolas, monospace; width:99%;" onclick="this.select ();" /></p>' . "\n";
1250 /**/
1251 echo '<p style="margin-top:20px;"><strong>Stand-Alone ( copy/paste )</strong>, for popup window:</p>' . "\n";
1252 echo '<p><input type="text" autocomplete="off" 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.x-php"))) . '" style="font-size:90%; font-family:Consolas, monospace; width:99%;" onclick="this.select ();" /></p>' . "\n";
1253 echo '</div>' . "\n";
1254 /**/
1255 echo '</div>' . "\n";
1256 /**/
1257 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_after_profile_modifications", get_defined_vars ());
1258 }
1259 /**/
1260 if (apply_filters ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_display_url_shortening", true, get_defined_vars ()))
1261 {
1262 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_before_url_shortening", get_defined_vars ());
1263 /**/
1264 echo '<div class="ws-menu-page-group" title="URL Shortening Service Preference">' . "\n";
1265 /**/
1266 echo '<div class="ws-menu-page-section ws-plugin--s2member-url-shortening-section">' . "\n";
1267 echo '<h3>URL Shortening Service API ( Preference )</h3>' . "\n";
1268 echo '<p>In a few special cases, long URLs generated by s2Member, containing encrypted authentication details, will be shortened; using one of the URL Shortening APIs <em>( listed below )</em>. A shortened URL prevents issues with VERY long links becoming corrupted by a Customer\'s email application. For instance, the Signup Confirmation Email that s2Member sends out to a new paying Customer, may contain a link which is shortened to prevent corruption by email applications. By default, s2Member uses the tinyURL API, which has proven itself to be the most reliable. However, in cases where an API service call fails, s2Member will automatically use one or more of its other APIs as a backup. The option below, allows you to configure which URL Shortening API s2Member should try first <em>( i.e. the one you prefer )</em>.</p>' . "\n";
1269 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_url_shortening", get_defined_vars ());
1270 /**/
1271 echo '<table class="form-table">' . "\n";
1272 echo '<tbody>' . "\n";
1273 echo '<tr>' . "\n";
1274 /**/
1275 echo '<th>' . "\n";
1276 echo '<label for="ws-plugin--s2member-default-url-shortener">' . "\n";
1277 echo 'URL Shortening Service API ( Preference ):' . "\n";
1278 echo '</label>' . "\n";
1279 echo '</th>' . "\n";
1280 /**/
1281 echo '</tr>' . "\n";
1282 echo '<tr>' . "\n";
1283 /**/
1284 echo '<td>' . "\n";
1285 echo '<select name="ws_plugin__s2member_default_url_shortener" id="ws-plugin--s2member-default-url-shortener">' . "\n";
1286 echo '<option value="tiny_url"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["default_url_shortener"] === "tiny_url") ? ' selected="selected"' : '') . '>tinyurl.com ( free tinyURL™ API service )</option>' . "\n";
1287 echo '<option value="goo_gl"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["default_url_shortener"] === "goo_gl") ? ' selected="selected"' : '') . '>goo.gl ( free Google® URL Shortening API service )</option>' . "\n";
1288 echo '</select>' . "\n";
1289 echo '</td>' . "\n";
1290 /**/
1291 echo '</tr>' . "\n";
1292 echo '<tr>' . "\n";
1293 /**/
1294 echo '<th>' . "\n";
1295 echo '<label for="ws-plugin--s2member-default-custom-str-url-shortener">' . "\n";
1296 echo 'Custom URL Shortening Service API ( Optional/Advanced ):' . "\n";
1297 echo '</label>' . "\n";
1298 echo '</th>' . "\n";
1299 /**/
1300 echo '</tr>' . "\n";
1301 echo '<tr>' . "\n";
1302 /**/
1303 echo '<td>' . "\n";
1304 echo '<input type="text" autocomplete="off" name="ws_plugin__s2member_default_custom_str_url_shortener" id="ws-plugin--s2member-default-custom-str-url-shortener" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["default_custom_str_url_shortener"]) . '" /><br />' . "\n";
1305 echo 'Your own custom URL <code>( i.e. GET request )</code>, with <code>%%s2_long_url%%</code> Replacement Code. [ <a href="#" onclick="alert(\'s2Member makes it possible for advanced site owners to use a custom URL shortening service they prefer, over the ones currently pre-integrated with s2Member. In order for this to work, your URL shortening service MUST support basic GET requests through its API ( sometimes referred to as a REST or NVP API ). In addition, your URL shortening service MUST be capable of returning a simple URL in the response that s2Member receives, as a result of s2Member processing the GET request you formulate. See example below.\\n\\nBitly example GET request with format=txt:\nhttp://api.bitly.com/v3/shorten?login=demo&apiKey=2d71bf07&format=txt&longUrl=%%s2_long_url%%\\n( s2Member expects a shortened URL in the response from Bitly )\\n\\n* If you configure s2Member to use your own custom URL shortening service, s2Member will try your configuration first, and if anything fails, it will fall back on its own pre-integrated backups. When configuring your URL for the GET request, s2Member makes two Replacement Codes available:\\n\\n%%s2_long_url%% = The full URL that needs to be shortened ( raw URL-encoded ).\\n%%s2_long_url_md5%% = An MD5 hash of the full URL ( might be useful in some APIs ).\\n\\n* If you have any trouble getting your URL shortening service integrated with s2Member in this way, you might take a look at this WordPress® Filter ( `ws_plugin__s2member_url_shorten` ), which s2Member makes available for advanced circumstances. Search s2Member\\\'s source code for `ws_plugin__s2member_url_shorten`.\'); return false;" tabindex="-1">click for details</a> ]<br />' . "\n";
1306 echo '</td>' . "\n";
1307 /**/
1308 echo '</tr>' . "\n";
1309 echo '</tbody>' . "\n";
1310 echo '</table>' . "\n";
1311 echo '</div>' . "\n";
1312 /**/
1313 echo '</div>' . "\n";
1314 /**/
1315 do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_after_url_shortening", get_defined_vars ());
1316 }
1317 /**/
1318 do_action ("ws_plugin__s2member_during_gen_ops_page_after_left_sections", get_defined_vars ());
1319 /**/
1320 echo '<div class="ws-menu-page-hr"></div>' . "\n";
1321 /**/
1322 echo '<p class="submit"><input type="submit" class="button-primary" value="Save All Changes" /></p>' . "\n";
1323 /**/
1324 echo '</form>' . "\n";
1325 /**/
1326 echo '</td>' . "\n";
1327 /**/
1328 echo '<td class="ws-menu-page-table-r">' . "\n";
1329 c_ws_plugin__s2member_menu_pages_rs::display ();
1330 echo '</td>' . "\n";
1331 /**/
1332 echo '</tr>' . "\n";
1333 echo '</tbody>' . "\n";
1334 echo '</table>' . "\n";
1335 /**/
1336 echo '</div>' . "\n";
1337 }
1338 }
1339 }
1340 /**/
1341 new c_ws_plugin__s2member_menu_page_gen_ops ();
1342 ?>