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

syscon.inc.php in s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions 260909, at src/includes/syscon.inc.php

773 lines 46.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 // @codingStandardsIgnoreFile
3 /**
4 * System configuration for the s2Member plugin.
5 *
6 * **WARNING:** This is a system configuration file, please DO NOT EDIT this file directly.
7 * Instead, use the plugin options panel in WordPress to override these settings.
8 *
9 * Copyright: © 2009-2011
10 * {@link http://websharks-inc.com/ WebSharks, Inc.}
11 * (coded in the USA)
12 *
13 * Released under the terms of the GNU General Public License.
14 * You should have received a copy of the GNU General Public License,
15 * along with this software. In the main directory, see: /licensing/
16 * If not, see: {@link http://www.gnu.org/licenses/}.
17 *
18 * @package s2Member
19 * @since 3.0
20 */
21 if(!defined('WPINC')) // MUST have WordPress.
22 exit('Do not access this file directly.');
23 /*
24 Determine the directory.
25 */
26 $GLOBALS['WS_PLUGIN__']['s2member']['c']['dir'] = dirname(dirname(dirname(__FILE__)));
27 /*
28 Determine the base directory name.
29 */
30 $GLOBALS['WS_PLUGIN__']['s2member']['c']['dir_base'] = basename(dirname(dirname(dirname(__FILE__))));
31 /*
32 Determine the full URL to the directory this plugin resides in.
33 */
34 $GLOBALS['WS_PLUGIN__']['s2member']['c']['dir_url'] = (stripos(__FILE__, WP_CONTENT_DIR) !== 0) ? // Have to assume plugins dir?
35 plugins_url('/'.basename(dirname(dirname(dirname(__FILE__))))) : // Otherwise, this gives it a chance to live anywhere in the content dir.
36 content_url(preg_replace('/^(.*?)\/'.preg_quote(basename(WP_CONTENT_DIR), '/').'/', '', str_replace(DIRECTORY_SEPARATOR, '/', dirname(dirname(dirname(__FILE__))))));
37 /*
38 Determine full URL to the s2Member-only file that loads WordPress with only s2Member active.
39 */
40 $GLOBALS['WS_PLUGIN__']['s2member']['c']['s2o_url'] = $GLOBALS['WS_PLUGIN__']['s2member']['c']['dir_url'].'/'.preg_replace('/\.php$/', '-o.php', basename($GLOBALS['WS_PLUGIN__']['s2member']['l']));
41 /*
42 Determine correct ``plugin_basename()`` here. WordPress has a few issues with its ``plugin_basename()`` function across different platforms.
43 */
44 $GLOBALS['WS_PLUGIN__']['s2member']['c']['plugin_basename'] = basename(dirname($GLOBALS['WS_PLUGIN__']['s2member']['l'])).'/'.basename($GLOBALS['WS_PLUGIN__']['s2member']['l']);
45 /*
46 Configure the number of Membership Levels being used with s2Member. This is now possible. All areas of s2Member are now capable of adapting to this.
47 */
48 $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels'] = 4; // Hard coded in at 4 Levels. This can only be extended when/if s2Member Pro is installed.
49 $GLOBALS['WS_PLUGIN__']['s2member']['c']['min_levels'] = 1; // A lower limit to protect the integrity of the s2Member software application.
50 $GLOBALS['WS_PLUGIN__']['s2member']['c']['max_levels'] = apply_filters('ws_plugin__s2member_max_levels', 100); // Filterable.
51 /*
52 Configure regular expression matches for Membership Access Item Numbers (including those with only Custom Capabilities).
53 */
54 $GLOBALS['WS_PLUGIN__']['s2member']['c']['membership_item_number_w_level_regex'] = '/^([1-9][0-9]*)(?:(?:\:((?:-all\+|\+-all|-all|\+)?[a-z_0-9,\+]*)?)?(?:\:([0-9]+ [A-Z])?)?)?$/';
55 $GLOBALS['WS_PLUGIN__']['s2member']['c']['membership_item_number_wo_level_regex'] = '/^(\*)(?:(?:\:((?:-all\+|\+-all|-all|\+)?[a-z_0-9,\+]*)?)?(?:\:([0-9]+ [A-Z])?)?)?$/';
56 $GLOBALS['WS_PLUGIN__']['s2member']['c']['membership_item_number_w_or_wo_level_regex'] = '/^([1-9][0-9]*|\*)(?:(?:\:((?:-all\+|\+-all|-all|\+)?[a-z_0-9,\+]*)?)?(?:\:([0-9]+ [A-Z])?)?)?$/';
57 /*
58 Configure regular expression match for Specific Post/Page Access Item Numbers (all elements required here).
59 */
60 $GLOBALS['WS_PLUGIN__']['s2member']['c']['sp_access_item_number_regex'] = '/^(sp)(?:(?:\:([1-9][0-9,]*))(?:\:([1-9][0-9]*)))$/';
61 /*
62 Configure multibyte detection order when charset is unknown ( used by calls to `mb_convert_encoding()` ).
63 */
64 $GLOBALS['WS_PLUGIN__']['s2member']['c']['mb_detection_order'] = 'UTF-8, ISO-8859-1, WINDOWS-1252, ASCII, JIS, EUC-JP, SJIS';
65 /*
66 Configure an array of file extensions associated with streaming media file types. See: <http://www.spartanicus.utvinternet.ie/streaming.htm> Also see: <http://www.longtailvideo.com/support/jw-player/jw-player-for-flash-v5/12539/supported-video-and-audio-formats>
67 */
68 $GLOBALS['WS_PLUGIN__']['s2member']['c']['streaming_file_extns'] = array_unique(array('avi', 'wav', 'mpa', 'mpeg', 'mpv', 'mps', 'm1v', 'm2v', 'mp4', 'mp3', 'm3u', 'mp4', 'flv', 'f4v', '3gp', '3g2', 'aac', 'm4a', 'webm', 'ogg', 'ogv', 'pls', 'm3u', 'ogm', 'm4u', 'mov', 'qtl', 'mp4', 'asf', 'wmv', 'wvx', 'wma', 'wax', 'ra', 'rm', 'ram'));
69 /*
70 Configure directory and .htaccess for files protected by s2Member.
71 */
72 $GLOBALS['WS_PLUGIN__']['s2member']['c']['default_files_dir'] = dirname(dirname(dirname(__FILE__))).'-files'.((stripos(PHP_OS, 'win') === 0 && stripos($_SERVER['SERVER_SOFTWARE'], 'apache') === FALSE) ? '/app_data' : '');
73 $GLOBALS['WS_PLUGIN__']['s2member']['c']['files_dir'] = apply_filters('ws_plugin__s2member_files_dir', $GLOBALS['WS_PLUGIN__']['s2member']['c']['default_files_dir']);
74 $GLOBALS['WS_PLUGIN__']['s2member']['c']['files_no_gzip_htaccess'] = dirname(__FILE__).'/templates/cfg-files/s2member-files-no-gzip.php';
75 $GLOBALS['WS_PLUGIN__']['s2member']['c']['files_dir_htaccess'] = dirname(__FILE__).'/templates/cfg-files/s2member-files.php';
76 /*
77 Configure the directory for logs protected by s2Member.
78 */
79 $GLOBALS['WS_PLUGIN__']['s2member']['c']['default_logs_dir'] = dirname(dirname(dirname(__FILE__))).'-logs'.((stripos(PHP_OS, 'win') === 0 && stripos($_SERVER['SERVER_SOFTWARE'], 'apache') === FALSE) ? '/app_data' : '');
80 $GLOBALS['WS_PLUGIN__']['s2member']['c']['logs_dir'] = apply_filters('ws_plugin__s2member_logs_dir', $GLOBALS['WS_PLUGIN__']['s2member']['c']['default_logs_dir']);
81 $GLOBALS['WS_PLUGIN__']['s2member']['c']['logs_dir_htaccess'] = dirname(__FILE__).'/templates/cfg-files/s2member-logs.php';
82 /*
83 Configure the global reCaptcha (www.websharks-inc.net / or any domain). These public/private keys work on any installation.
84 */
85 $GLOBALS['WS_PLUGIN__']['s2member']['c']['recaptcha'] = array('public_key' => '6LeCANsSAAAAAIIrlB3FrXe42mr0OSSZpT0pkpFK', 'private_key' => '6LeCANsSAAAAAGBXMIKAirv6G4PmaGa-ORxdD-oZ', 'lang' => 'en');
86 /*
87 Configure the right menu options panel for s2Member.
88 */
89 $GLOBALS['WS_PLUGIN__']['s2member']['c']['menu_pages'] = array('updates' => TRUE, 'upsell-pro' => TRUE, 'installation' => FALSE, 'tools' => FALSE, 'kb' => TRUE, 'videos' => TRUE, 'support' => TRUE, 'donations' => TRUE, 'beta' => TRUE);
90 /*
91 Check if s2Member has been configured *should be set after the first config via options panel*.
92 */
93 $GLOBALS['WS_PLUGIN__']['s2member']['c']['configured'] = get_option('ws_plugin__s2member_configured');
94 /*
95 This is a special option cache that holds some additional information autoloaded into WordPress.
96 */
97 $GLOBALS['WS_PLUGIN__']['s2member']['c']['cache'] = get_option('ws_plugin__s2member_cache');
98 /*
99 Configure checksum time for the syscon.inc.php file.
100 */
101 $GLOBALS['WS_PLUGIN__']['s2member']['c']['checksum'] = filemtime(__FILE__);
102 /*
103 Configure an array of pluggable functions handled by s2Member.
104 */
105 $GLOBALS['WS_PLUGIN__']['s2member']['c']['pluggables'] = array();
106 /*
107 Configure & validate all of the s2Member options; and set their defaults.
108 */
109 if(!function_exists('ws_plugin__s2member_configure_options_and_their_defaults'))
110 {
111 /**
112 * Configures an options array for the s2Member plugin.
113 *
114 * **WARNING:** This is a system configuration function, please DO NOT EDIT this function directly.
115 * Instead, use the plugin options panel in WordPress to override these settings.
116 *
117 * @package s2Member
118 * @since 3.0
119 *
120 * @param boolean|array $options Optional. An array of new options, to be merged with the defaults.
121 *
122 * @return array This merged array of options: ``$GLOBALS['WS_PLUGIN__']['s2member']['o']``
123 */
124 function ws_plugin__s2member_configure_options_and_their_defaults($options = FALSE)
125 {
126 global $current_site, $current_blog;
127
128 $default_options['options_checksum'] = '';
129 $default_options['options_version'] = '1.0';
130
131 $default_options['gateway_debug_logs'] = '0';
132 $default_options['gateway_debug_logs_extensive'] = '0';
133
134 $default_options['lazy_load_css_js'] = '0';
135 $default_options['static_css'] = '0'; //260903.0612 Generated static CSS delivery remains opt-in while frontend asset generation is beta.
136 $default_options['static_css_minify'] = '0'; //260902.2107 Static CSS minification is independently opt-in while generated asset delivery is beta.
137 $default_options['static_js'] = '0'; //260903.0437 Static frontend JavaScript delivery remains opt-in while generated assets are beta.
138 $default_options['static_js_text'] = 'static'; //260906.2049 Keep JavaScript text in cacheable static files by default; multilingual sites can load it with each WordPress page instead.
139 $default_options['static_js_minify'] = '0'; //260903.0437 Static JavaScript minification is independently opt-in and uses readable source files.
140 $default_options['static_assets_combine'] = '0'; //260903.1918 Keep Framework/Pro generated files separate by default; combining is an explicit request-reduction optimization.
141 $default_options['dynamic_asset_loader'] = 's2o'; //260904.1923 Keep the repaired s2Member Dynamic Loader as the default; WordPress routing is an explicit compatibility option.
142 $default_options['no_cache_headers_mode'] = 'always'; //260308 No-cache headers mode: `always`, `selective`, `evaluative`.
143 $default_options['no_cache_headers_debug'] = '0'; //260308 Adds Server-Timing no-cache debug header (support use only).
144 $default_options['sc_conds_allow_arbitrary_php'] = '0';
145 $default_options['sc_conds_whitelist'] = '';
146
147 //260812 New shared whitelist; keep the old s2Get option synchronized temporarily for rollback compatibility.
148 $default_options['sc_user_fields_whitelist'] = '';
149 $default_options['sc_s2get_userid_whitelist'] = '';
150
151 $default_options['sec_encryption_key'] = '';
152 $default_options['sec_encryption_key_history'] = array();
153
154 $default_options['def_combo_encryption_key'] = '';
155 $default_options['def_combo_encryption_key_history'] = array();
156 $default_options['def_custom_combo_encryption_keys'] = array();
157
158 //260809 Store new Defuse key mappings by one-way hashes instead of raw secret keys.
159 $default_options['secret_key_to_defuse_key'] = array();
160 $default_options['secret_key_to_defuse_key_history'] = array();
161 $default_options['custom_secret_key_to_defuse_key'] = array();
162
163 $default_options['s_badge_status_enabled'] = '0';
164
165 $default_options['max_ip_restriction'] = '5';
166 $default_options['max_ip_restriction_time'] = '3600';
167 $default_options['max_failed_login_attempts'] = '5';
168 $default_options['max_simultaneous_logins'] = '0';
169 $default_options['max_simultaneous_logins_timeout'] = '30 minutes';
170
171 $default_options['run_uninstall_routines'] = '0';
172
173 $default_options['custom_reg_fields'] = '';
174 $default_options['custom_reg_names'] = '1';
175 $default_options['custom_reg_display_name'] = 'full';
176 $default_options['custom_reg_password'] = '0';
177 $default_options['custom_reg_password_min_length'] = '8'; // Minimum characters.
178 $default_options['custom_reg_password_min_strength'] = 'good'; // `weak`, `good` or `strong`.
179
180 $default_options['custom_reg_opt_in'] = '1';
181 $default_options['custom_reg_opt_in_label'] = 'Yes, I want to receive updates via email.';
182
183 $default_options['custom_reg_auto_opt_outs'] = array();
184 $default_options['custom_reg_auto_opt_out_transitions'] = '0';
185
186 $default_options['custom_reg_fields_4bp'] = array();
187 $default_options['custom_reg_force_personal_emails'] = '';
188
189 $default_options['allow_subscribers_in'] = '0';
190 $default_options['force_admin_lockouts'] = '0';
191 $default_options['filter_wp_query'] = array('all');
192
193 $default_options['default_url_shortener'] = 's2member'; //260612
194 $default_options['default_url_shortener_key'] = '';
195 $default_options['default_custom_str_url_shortener'] = '';
196
197 $default_options['mms_auto_patch'] = '1';
198 $default_options['mms_registration_file'] = 'wp-login';
199 $default_options['mms_registration_grants'] = 'none';
200 for($n = 0, $v = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++, $v = $v + 5)
201 $default_options['mms_registration_blogs_level'.$n] = (string)$v;
202
203 $default_options['login_welcome_page'] = '';
204 $default_options['login_redirection_override'] = '';
205 $default_options['membership_options_page'] = '';
206 $default_options['membership_options_page_vars_enable'] = '1';
207 $default_options['membership_options_page_ga_vars_enable'] = '1';
208
209 $default_options['login_reg_design_enabled'] = '1';
210
211 $default_options['login_reg_background_color'] = 'FFFFFF';
212 $default_options['login_reg_background_image'] = $GLOBALS['WS_PLUGIN__']['s2member']['c']['dir_url'].'/src/images/bg.png';
213 $default_options['login_reg_background_image_repeat'] = 'repeat';
214
215 $default_options['login_reg_background_text_color'] = '000000';
216 $default_options['login_reg_background_text_shadow_color'] = 'EEEEEE';
217 $default_options['login_reg_background_box_shadow_color'] = 'EEEEEE';
218
219 $default_options['login_reg_logo_src'] = $GLOBALS['WS_PLUGIN__']['s2member']['c']['dir_url'].'/src/images/logo.png';
220 $default_options['login_reg_logo_src_width'] = '550';
221 $default_options['login_reg_logo_src_height'] = '100';
222 $default_options['login_reg_logo_url'] = home_url('/');
223 $default_options['login_reg_logo_title'] = get_bloginfo('name');
224
225 $default_options['login_reg_font_size'] = '12px';
226 $default_options['login_reg_font_family'] = "'Verdana', 'Arial', sans-serif";
227 $default_options['login_reg_font_field_size'] = '18px';
228
229 $default_options['login_reg_footer_backtoblog'] = '0';
230 $default_options['login_reg_footer_design'] = '';
231
232 $default_options['html_emails_enabled'] = 0; //250615
233
234 $default_options['reg_email_from_name'] = get_bloginfo('name');
235 $default_options['reg_email_from_email'] = get_bloginfo('admin_email');
236 $default_options['reg_email_support_link'] = 'mailto:'.get_bloginfo('admin_email');
237
238 $default_options['new_user_emails_enabled'] = '0';
239
240 $default_options['new_user_email_subject'] = sprintf('[%s] Username/Password', get_bloginfo('name'));
241 $default_options['new_user_email_message'] = sprintf("Your Username/Password for: \n%s\n\nUsername: %%%%user_login%%%%\nTo set your password, visit: %%%%wp_set_pass_url%%%%\n\n%%%%wp_login_url%%%%", get_bloginfo('name'));
242
243 $default_options['new_user_admin_email_recipients'] = get_bloginfo('admin_email');
244 $default_options['new_user_admin_email_subject'] = sprintf('[%s] New User Registration', get_bloginfo('name'));
245 $default_options['new_user_admin_email_message'] = sprintf("New User Registration on your site: \n%s\n\nUser ID: %%%%user_id%%%%\nUsername: %%%%user_login%%%%\nEmail: %%%%user_email%%%%\nIP Address: %%%%user_ip%%%%", get_bloginfo('name'));
246
247 $default_options['paypal_sandbox'] = '0';
248 $default_options['paypal_business'] = '';
249 $default_options['paypal_merchant_id'] = '';
250 $default_options['paypal_api_username'] = '';
251 $default_options['paypal_api_password'] = '';
252 $default_options['paypal_api_signature'] = '';
253 $default_options['paypal_identity_token'] = '';
254 $default_options['paypal_btn_encryption'] = '0';
255
256 //260106
257 $default_options['paypal_checkout_enable'] = '0';
258 $default_options['paypal_checkout_sandbox'] = '0';
259 $default_options['paypal_checkout_client_id'] = '';
260 $default_options['paypal_checkout_client_secret'] = '';
261 $default_options['paypal_checkout_sandbox_client_id'] = '';
262 $default_options['paypal_checkout_sandbox_client_secret']= '';
263 $default_options['paypal_checkout_webhook_id'] = '';
264 $default_options['paypal_checkout_sandbox_webhook_id'] = '';
265
266 $default_options['paypal_checkout_cache'] = array();
267
268 $default_options['paypal_payflow_api_username'] = '';
269 $default_options['paypal_payflow_api_partner'] = 'PayPal';
270 $default_options['paypal_payflow_api_vendor'] = '';
271 $default_options['paypal_payflow_api_password'] = '';
272
273 $default_options['ipn_signup_vars_fallback'] = '0'; //250427
274 $default_options['skip_ipn_domain_validation'] = '0'; //250606
275
276 $default_options['signup_tracking_codes'] = '';
277 $default_options['modification_tracking_codes'] = '';
278 $default_options['ccap_tracking_codes'] = '';
279 $default_options['sp_tracking_codes'] = '';
280
281 $default_options['signup_email_recipients'] = '"%%full_name%%" <%%payer_email%%>';
282 $default_options['signup_email_subject'] = 'Congratulations! (your membership has been approved)';
283 $default_options['signup_email_message'] = sprintf("Thanks %%%%first_name%%%%! Your membership has been approved.\n\nIf you haven't already done so, the next step is to Register a Username.\n\nComplete your registration here: \n%%%%registration_url%%%%\n\nIf you have any trouble, please feel free to contact us.\n\nBest Regards,\n%s", get_bloginfo('name'));
284
285 $default_options['modification_email_recipients'] = '"%%full_name%%" <%%payer_email%%>';
286 $default_options['modification_email_subject'] = 'Thank you! Your account has been updated.';
287 $default_options['modification_email_message'] = sprintf("Thanks %%%%first_name%%%%! Your account now has access to: %%%%item_name%%%%.\n\nIf you have any trouble, please feel free to contact us.\n\nBest Regards,\n%s", get_bloginfo('name'));
288
289 $default_options['ccap_email_recipients'] = '"%%full_name%%" <%%payer_email%%>';
290 $default_options['ccap_email_subject'] = 'Thank you! Your account has been updated.';
291 $default_options['ccap_email_message'] = sprintf("Thanks %%%%first_name%%%%! Your account now has access to: %%%%item_name%%%%.\n\nIf you have any trouble, please feel free to contact us.\n\nBest Regards,\n%s", get_bloginfo('name'));
292
293 $default_options['sp_email_recipients'] = '"%%full_name%%" <%%payer_email%%>';
294 $default_options['sp_email_subject'] = 'Thank You! (instructions for access)';
295 $default_options['sp_email_message'] = sprintf("Thanks %%%%first_name%%%%! \n\n%%%%item_name%%%%\n\nYour order can be retrieved here: \n%%%%sp_access_url%%%%\n(link expires in %%%%sp_access_exp%%%%)\n\nIf you have any trouble, please feel free to contact us.\n\nBest Regards,\n%s", get_bloginfo('name'));
296
297 $default_options['mailchimp_api_key'] = '';
298 $default_options['getresponse_api_key'] = '';
299 $default_options['aweber_api_key'] = '';
300 $default_options['aweber_internal_api_key'] = '';
301 $default_options['aweber_api_type'] = 'api';
302 if($GLOBALS['WS_PLUGIN__']['s2member']['c']['configured'])
303 $default_options['aweber_api_type'] = 'email';
304
305 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
306 $default_options['level'.$n.'_mailchimp_list_ids'] = '';
307
308 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
309 $default_options['level'.$n.'_getresponse_list_ids'] = '';
310
311 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
312 $default_options['level'.$n.'_aweber_list_ids'] = '';
313
314 $default_options['signup_notification_urls'] = '';
315 $default_options['registration_notification_urls'] = '';
316 $default_options['payment_notification_urls'] = '';
317 $default_options['modification_notification_urls'] = '';
318 $default_options['cancellation_notification_urls'] = '';
319 $default_options['eot_del_notification_urls'] = '';
320 $default_options['ref_rev_notification_urls'] = '';
321 $default_options['sp_sale_notification_urls'] = '';
322 $default_options['sp_ref_rev_notification_urls'] = '';
323
324 $default_options['signup_notification_recipients'] = '';
325 $default_options['registration_notification_recipients'] = '';
326 $default_options['payment_notification_recipients'] = '';
327 $default_options['modification_notification_recipients'] = '';
328 $default_options['cancellation_notification_recipients'] = '';
329 $default_options['eot_del_notification_recipients'] = '';
330 $default_options['ref_rev_notification_recipients'] = '';
331 $default_options['sp_sale_notification_recipients'] = '';
332 $default_options['sp_ref_rev_notification_recipients'] = '';
333
334 for ($n = 0, $l = array('Free Subscriber', 'Bronze Member', 'Silver Member', 'Gold Member', 'Platinum Member'); $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++) {
335 $default_options['level'.$n.'_label'] = (!empty($l[$n])) ? $l[$n] : 'Level '.$n.' Member';
336 }
337
338 $default_options['apply_label_translations'] = '0';
339
340 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
341 $default_options['level'.$n.'_file_downloads_allowed'] = '';
342
343 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
344 $default_options['level'.$n.'_file_downloads_allowed_days'] = '';
345
346 $default_options['file_download_limit_exceeded_page'] = '';
347 $default_options['file_download_inline_extensions'] = '';
348 $default_options['file_download_stream_extensions'] = '';
349 $default_options['file_download_content_encodong_none'] = '0';
350
351 $default_options['amazon_s3_files_bucket'] = '';
352 $default_options['amazon_s3_files_bucket_region'] = '';
353 $default_options['amazon_s3_files_access_key'] = '';
354 $default_options['amazon_s3_files_secret_key'] = '';
355
356 $default_options['amazon_cf_files_private_key'] = '';
357 $default_options['amazon_cf_files_private_key_id'] = '';
358 $default_options['amazon_cf_files_distros_access_id'] = '';
359 $default_options['amazon_cf_files_distros_s3_access_id'] = '';
360 $default_options['amazon_cf_files_distro_downloads_id'] = '';
361 $default_options['amazon_cf_files_distro_downloads_cname'] = '';
362 $default_options['amazon_cf_files_distro_downloads_dname'] = '';
363 $default_options['amazon_cf_files_distro_streaming_id'] = '';
364 $default_options['amazon_cf_files_distro_streaming_cname'] = '';
365 $default_options['amazon_cf_files_distro_streaming_dname'] = '';
366 $default_options['amazon_cf_files_distros_auto_config_status'] = '';
367 $default_options['amazon_cf_files_rtmp_policy_include_ip'] = '1';
368
369 $default_options['ruris_case_sensitive'] = '0'; // No by default.
370
371 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
372 $default_options['level'.$n.'_ruris'] = '';
373 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
374 $default_options['level'.$n.'_catgs'] = '';
375 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
376 $default_options['level'.$n.'_ptags'] = '';
377 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
378 $default_options['level'.$n.'_posts'] = '';
379 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
380 $default_options['level'.$n.'_pages'] = '';
381
382 $default_options['specific_ids'] = '';
383
384 $default_options['triggers_immediate_eot'] = 'reversals';
385 $default_options['membership_eot_behavior'] = 'demote';
386 $default_options['eot_time_ext_behavior'] = 'extend';
387 $default_options['auto_eot_system_enabled'] = '1';
388 $default_options['auto_eot_system_runtime_mode'] = 'auto';
389 $default_options['auto_eot_system_runtime_custom'] = '30';
390 $default_options['eots_remove_ccaps'] = '1';
391 $default_options['eot_grace_time'] = '86400';
392
393 $default_options['wp_footer_code'] = '';
394
395 $default_options = apply_filters('ws_plugin__s2member_default_options', $default_options);
396
397 unset($n, $v, $l); // Unset/cleanup these working variables from the routines above.
398 /*
399 Here they are merged. User options will overwrite some or all default values.
400 */
401 $_stored_options = (($options !== FALSE) ? (array)$options : (array)get_option('ws_plugin__s2member_options'));
402 $GLOBALS['WS_PLUGIN__']['s2member']['o'] = array_merge($default_options, $_stored_options);
403
404 //260812 Keep both whitelist option names synchronized, with the legacy value taking precedence after a rollback.
405 if(isset($_stored_options['sc_s2get_userid_whitelist']) && is_string($_stored_options['sc_s2get_userid_whitelist']))
406 {
407 if(!array_key_exists('sc_user_fields_whitelist', $_stored_options) || $GLOBALS['WS_PLUGIN__']['s2member']['o']['sc_user_fields_whitelist'] !== $_stored_options['sc_s2get_userid_whitelist'])
408 $GLOBALS['WS_PLUGIN__']['s2member']['o']['sc_user_fields_whitelist'] = $_stored_options['sc_s2get_userid_whitelist'];
409 }
410 else if(isset($_stored_options['sc_user_fields_whitelist']) && is_string($_stored_options['sc_user_fields_whitelist']))
411 $GLOBALS['WS_PLUGIN__']['s2member']['o']['sc_s2get_userid_whitelist'] = $_stored_options['sc_user_fields_whitelist'];
412 unset($_stored_options);
413
414 /*
415 * Ditch this old option key; no longer in use.
416 */
417 if(isset($GLOBALS['WS_PLUGIN__']['s2member']['o']['run_deactivation_routines'])) unset($GLOBALS['WS_PLUGIN__']['s2member']['o']['run_deactivation_routines']);
418 /*
419 This builds an MD5 checksum for the full array of options. This also includes the config checksum and the current set of default options.
420 */
421 $checksum = md5(($checksum_prefix = $GLOBALS['WS_PLUGIN__']['s2member']['c']['checksum'].serialize($default_options)).serialize(array_merge($GLOBALS['WS_PLUGIN__']['s2member']['o'], array('options_checksum' => 0))));
422 /*
423 Validate each option, possibly reverting back to the default value in some cases. This is only processed when/if the checksum is not up-to-date.
424 */
425 if($options !== FALSE || ($GLOBALS['WS_PLUGIN__']['s2member']['o']['options_checksum'] !== $checksum && $GLOBALS['WS_PLUGIN__']['s2member']['o'] !== $default_options))
426 {
427 foreach($GLOBALS['WS_PLUGIN__']['s2member']['o'] as $key => &$value)
428 {
429 if(!isset($default_options[$key]) && !preg_match('/^pro_/', $key))
430 unset($GLOBALS['WS_PLUGIN__']['s2member']['o'][$key]);
431
432 else if($key === 'options_checksum' && (!is_string($value) || !strlen($value)))
433 $value = $default_options[$key];
434
435 else if($key === 'options_version' && (!is_string($value) || !is_numeric($value)))
436 $value = $default_options[$key];
437
438 else if(preg_match('/^gateway_debug_logs|gateway_debug_logs_extensive/', $key) && (!is_string($value) || !is_numeric($value)))
439 $value = $default_options[$key];
440
441 else if($key === 'lazy_load_css_js' && (!is_string($value) || !is_numeric($value)))
442 $value = $default_options[$key];
443
444 else if(preg_match('/^static_(?:css|js)(?:_minify)?$/', $key) && (!is_string($value) || !is_numeric($value))) //260903.0437
445 $value = $default_options[$key];
446
447 else if($key === 'no_cache_headers_mode' && (!is_string($value) || !in_array($value, array('always', 'selective', 'evaluative'), TRUE)))
448 $value = $default_options[$key];
449
450 else if($key === 'no_cache_headers_debug' && (!is_string($value) || !is_numeric($value)))
451 $value = $default_options[$key];
452
453 else if($key === 'sc_conds_allow_arbitrary_php' && (!is_string($value) || !is_numeric($value)))
454 $value = $default_options[$key];
455
456 else if($key === 'sc_s2get_userid_whitelist' && !is_string($value)) //260324
457 $value = $default_options[$key];
458 else if($key === 'sc_user_fields_whitelist' && !is_string($value)) //260812
459 $value = $default_options[$key];
460
461 else if($key === 'sec_encryption_key' && (!is_string($value) || !strlen($value)))
462 $value = $default_options[$key];
463
464 else if($key === 'sec_encryption_key_history' && (!is_array($value) || empty($value)))
465 $value = $default_options[$key];
466
467 else if($key === 'def_combo_encryption_key' && (!is_string($value) || !strlen($value)))
468 $value = $default_options[$key];
469
470 else if($key === 'def_combo_encryption_key_history' && (!is_array($value) || empty($value)))
471 $value = $default_options[$key];
472
473 else if($key === 'def_custom_combo_encryption_keys' && (!is_array($value) || empty($value)))
474 $value = $default_options[$key];
475
476 //260809 Validate the hashed Defuse key mappings independently of the legacy options.
477 else if(preg_match('/^(?:secret_key_to_defuse_key|secret_key_to_defuse_key_history|custom_secret_key_to_defuse_key)$/', $key) && (!is_array($value) || empty($value)))
478 $value = $default_options[$key];
479
480 else if($key === 's_badge_status_enabled' && (!is_string($value) || !is_numeric($value)))
481 $value = $default_options[$key];
482
483 else if($key === 'max_ip_restriction' && (!is_string($value) || !is_numeric($value) || $value < 0 || $value > 100))
484 $value = $default_options[$key];
485
486 else if($key === 'max_ip_restriction_time' && (!is_string($value) || !is_numeric($value) || $value < 300 || $value > 31556926))
487 $value = $default_options[$key];
488
489 else if($key === 'max_failed_login_attempts' && (!is_string($value) || !is_numeric($value) || $value < 0 || $value > 100))
490 $value = $default_options[$key];
491
492 else if($key === 'max_simultaneous_logins' && (!is_string($value) || !is_numeric($value) || $value < 0))
493 $value = $default_options[$key];
494
495 else if($key === 'max_simultaneous_logins_timeout' && (!is_string($value) || !strlen($value)))
496 $value = $default_options[$key];
497
498 else if($key === 'run_uninstall_routines' && (!is_string($value) || !is_numeric($value)))
499 $value = $default_options[$key];
500
501 else if($key === 'custom_reg_fields' && (!is_string($value) || !strlen($value)))
502 $value = $default_options[$key];
503
504 else if(preg_match('/^custom_reg_(?:names|password|password_min_length|opt_in|auto_opt_out_transitions)$/', $key) && (!is_string($value) || !is_numeric($value)))
505 $value = $default_options[$key];
506
507 else if($key === 'custom_reg_password_min_strength' && (!is_string($value) || !strlen($value)))
508 $value = $default_options[$key];
509
510 else if($key === 'custom_reg_display_name' && (!is_string($value) || !preg_match('/^(?:full|first|last|login|0)$/', $value)))
511 $value = $default_options[$key];
512
513 else if($key === 'custom_reg_opt_in_label' && (!is_string($value) || !strlen($value)))
514 $value = $default_options[$key];
515
516 else if($key === 'custom_reg_auto_opt_outs' && (!is_array($value) || empty($value)))
517 $value = $default_options[$key];
518
519 else if($key === 'custom_reg_fields_4bp' && (!is_array($value) || empty($value)))
520 $value = $default_options[$key];
521
522 else if($key === 'custom_reg_force_personal_emails' && (!is_string($value) || !strlen($value = preg_replace('/\s+/', '', $value))))
523 $value = $default_options[$key];
524
525 else if($key === 'allow_subscribers_in' && (!is_string($value) || !is_numeric($value)))
526 $value = $default_options[$key];
527
528 else if($key === 'mms_auto_patch' && (!is_string($value) || !is_numeric($value)))
529 $value = $default_options[$key];
530
531 else if($key === 'mms_registration_file' && (!is_string($value) || !preg_match('/^(?:wp-login|wp-signup)$/', $value)))
532 $value = $default_options[$key];
533
534 else if($key === 'mms_registration_grants' && (!is_string($value) || !preg_match('/^(?:none|user|all)$/', $value)))
535 $value = $default_options[$key];
536
537 else if(preg_match('/^mms_registration_blogs_level[0-9]+$/', $key) && (!is_string($value) || !is_numeric($value) || $value < 0))
538 $value = $default_options[$key];
539
540 else if($key === 'force_admin_lockouts' && (!is_string($value) || !is_numeric($value)))
541 $value = $default_options[$key];
542
543 else if($key === 'filter_wp_query' && !is_array($value) /* This array CAN be empty. */)
544 $value = $default_options[$key];
545
546 else if(preg_match('/^default_(?:custom_str_)?url_shortener$/', $key) && (!is_string($value) || !strlen($value)))
547 $value = $default_options[$key];
548
549 else if($key === 'login_welcome_page' && (!is_string($value) || !is_numeric($value)))
550 $value = $default_options[$key];
551
552 else if($key === 'login_redirection_override' && (!is_string($value) || !strlen($value)))
553 $value = $default_options[$key];
554
555 else if($key === 'membership_options_page' && (!is_string($value) || !is_numeric($value)))
556 $value = $default_options[$key];
557
558 else if($key === 'membership_options_page_vars_enable' && (!is_string($value) || !is_numeric($value)))
559 $value = $default_options[$key];
560
561 else if($key === 'membership_options_page_ga_vars_enable' && (!is_string($value) || !is_numeric($value)))
562 $value = $default_options[$key];
563
564 else if($key === 'login_reg_design_enabled' && (!is_string($value) || !is_numeric($value)))
565 $value = $default_options[$key];
566
567 else if($key === 'login_reg_background_image' && !is_string($value) /* This is optional. */)
568 $value = $default_options[$key];
569
570 else if($key === 'login_reg_background_image_repeat' && (!is_string($value) || !preg_match('/^(?:repeat|repeat-x|repeat-y|no-repeat)$/', $value)))
571 $value = $default_options[$key];
572
573 else if(preg_match('/^login_reg_(?:background|logo|font|footer)_/', $key) && !preg_match('/background_image/', $key) && (!is_string($value) || !strlen($value)))
574 $value = $default_options[$key];
575
576 else if($key === 'login_reg_footer_backtoblog' && (!is_string($value) || !is_numeric($value)))
577 $value = $default_options[$key];
578
579 else if(preg_match('/^reg_email_(?:from_name|from_email|support_link)$/', $key) && (!is_string($value) || !strlen($value)))
580 $value = $default_options[$key];
581
582 else if($key === 'new_user_emails_enabled' && (!is_string($value) || !is_numeric($value)))
583 $value = $default_options[$key];
584
585 else if(preg_match('/^new_user_email_(?:subject|message)$/', $key) && (!is_string($value) || !strlen($value)))
586 $value = $default_options[$key];
587
588 else if(preg_match('/^new_user_admin_email_(?:recipients|subject|message)$/', $key) && (!is_string($value) || !strlen($value)))
589 $value = $default_options[$key];
590
591 else if($key === 'paypal_sandbox' && (!is_string($value) || !is_numeric($value)))
592 $value = $default_options[$key];
593
594 else if(preg_match('/^paypal_(?:business|merchant_id|api_username|api_password|api_signature|identity_token)$/', $key) && (!is_string($value) || !strlen($value)))
595 $value = $default_options[$key];
596
597 else if(preg_match('/^paypal_payflow(?:api_username|api_partner|api_vendor|api_password)$/', $key) && (!is_string($value) || !strlen($value)))
598 $value = $default_options[$key];
599
600 else if($key === 'paypal_btn_encryption' && (!is_string($value) || !is_numeric($value)))
601 $value = $default_options[$key];
602
603 //260106
604 else if($key === 'paypal_checkout_enable' && (!is_string($value) || !is_numeric($value)))
605 $value = $default_options[$key];
606 else if($key === 'paypal_checkout_sandbox' && (!is_string($value) || !is_numeric($value)))
607 $value = $default_options[$key];
608 else if(preg_match('/^paypal_checkout_(?:client_id|client_secret|sandbox_client_id|sandbox_client_secret)$/', $key) && !is_string($value))
609 $value = $default_options[$key];
610
611 else if(preg_match('/^(?:signup|modification|ccap|sp)_tracking_codes$/', $key) && (!is_string($value) || !strlen($value)))
612 $value = $default_options[$key];
613
614 else if(preg_match('/^(?:signup|modification|ccap|sp)_email_recipients$/', $key) && !is_string($value) /* Can be empty. */)
615 $value = $default_options[$key];
616
617 else if(preg_match('/^(?:signup|modification|ccap|sp)_email_(?:subject|message)$/', $key) && (!is_string($value) || !strlen($value)))
618 $value = $default_options[$key];
619
620 else if($key === 'aweber_api_type' && (!is_string($value) || !preg_match('/^(?:api|email)$/', $value)))
621 $value = $default_options[$key];
622
623 else if(preg_match('/^(?:mailchimp|getresponse|aweber)(?:_internal)?_api_key$/', $key) && (!is_string($value) || !strlen($value)))
624 $value = $default_options[$key];
625
626 else if(preg_match('/^level[0-9]+_mailchimp_list_ids$/', $key) && (!is_string($value) || !strlen($value = preg_replace('/['."\r\n\t".']+/', '', $value))))
627 $value = $default_options[$key];
628
629 else if(preg_match('/^level[0-9]+_getresponse_list_ids$/', $key) && (!is_string($value) || !strlen($value = preg_replace('/\s+/', '', $value))))
630 $value = $default_options[$key];
631
632 else if(preg_match('/^level[0-9]+_aweber_list_ids$/', $key) && (!is_string($value) || !strlen($value = preg_replace('/\s+/', '', $value))))
633 $value = $default_options[$key];
634
635 else if(preg_match('/^(?:signup|registration|payment|modification|cancellation|eot_del|ref_rev|sp_sale|sp_ref_rev)_notification_urls$/', $key) && (!is_string($value) || !strlen($value)))
636 $value = $default_options[$key];
637
638 else if(preg_match('/^(?:signup|registration|payment|modification|cancellation|eot_del|ref_rev|sp_sale|sp_ref_rev)_notification_recipients$/', $key) && (!is_string($value) || !strlen($value)))
639 $value = $default_options[$key];
640
641 else if(preg_match('/^level[0-9]+_label$/', $key) && (!is_string($value) || !strlen($value)))
642 $value = $default_options[$key];
643
644 else if($key === 'apply_label_translations' && (!is_string($value) || !is_numeric($value)))
645 $value = $default_options[$key];
646
647 else if(preg_match('/^level[0-9]+_file_downloads_allowed$/', $key) && (!is_string($value) || !is_numeric($value) || $value < 0))
648 $value = $default_options[$key];
649
650 else if(preg_match('/^level[0-9]+_file_downloads_allowed_days$/', $key) && (!is_string($value) || !is_numeric($value) || $value < 0))
651 $value = $default_options[$key];
652
653 else if($key === 'file_download_limit_exceeded_page' && (!is_string($value) || !is_numeric($value)))
654 $value = $default_options[$key];
655
656 else if(preg_match('/^file_download_(?:inline|stream)_extensions$/', $key) && (!is_string($value) || !($value = strtolower(preg_replace('/\s+/', '', $value)))))
657 $value = $default_options[$key];
658
659 else if(preg_match('/^amazon_(?:s3|cf)_files_/', $key) && (!is_string($value) || !strlen($value)))
660 $value = $default_options[$key];
661
662 else if($key === 'ruris_case_sensitive' && (!is_string($value) || !is_numeric($value)))
663 $value = $default_options[$key];
664
665 else if(preg_match('/^level[0-9]+_ruris$/', $key) && (!is_string($value) || !strlen($value)))
666 $value = $default_options[$key];
667
668 else if(preg_match('/^level[0-9]+_catgs$/', $key) && (!is_string($value) || !($value = ((strcasecmp($value, 'all') === 0) ? strtolower($value) : trim(preg_replace('/[^0-9,]/', '', $value), ',')))))
669 $value = $default_options[$key];
670
671 else if(preg_match('/^level[0-9]+_ptags$/', $key) && (!is_string($value) || !($value = ((strcasecmp($value, 'all') === 0) ? strtolower($value) : trim(preg_replace('/ +/', ' ', trim(preg_replace('/ *, */', ',', $value))), ',')))))
672 $value = $default_options[$key];
673
674 else if(preg_match('/^level[0-9]+_posts$/', $key) && (!is_string($value) || !($value = trim( /* Supports `all` or `1,2,3,all-[type]s`. */
675 preg_replace('/[^a-z0-9_\-,]/', '', strtolower($value)), ',')))
676 ) $value = $default_options[$key];
677
678 else if(preg_match('/^level[0-9]+_pages$/', $key) && (!is_string($value) || !($value = ((strcasecmp($value, 'all') === 0) ? strtolower($value) : trim(preg_replace('/[^0-9,]/', '', $value), ',')))))
679 $value = $default_options[$key];
680
681 else if($key === 'specific_ids' && (!is_string($value) || !($value = trim(preg_replace('/[^0-9,]/', '', $value), ','))))
682 $value = $default_options[$key];
683
684 else if($key === 'triggers_immediate_eot' && (!is_string($value) || !preg_match('/^(?:none|refunds|reversals|refunds,reversals|refunds,partial_refunds,reversals)$/', $value)))
685 $value = $default_options[$key];
686
687 else if($key === 'membership_eot_behavior' && (!is_string($value) || !preg_match('/^(?:demote|delete)$/', $value)))
688 $value = $default_options[$key];
689
690 else if($key === 'eot_time_ext_behavior' && (!is_string($value) || !preg_match('/^(?:extend|reset)$/', $value)))
691 $value = $default_options[$key];
692
693 else if($key === 'auto_eot_system_runtime_mode' && (!is_string($value) || !preg_match('/^(?:auto|custom)$/', $value)))
694 $value = $default_options[$key];
695
696 else if($key === 'auto_eot_system_runtime_custom' && (!is_string($value) || !is_numeric($value) || (float)$value < 1 || (float)$value > 3600))
697 $value = $default_options[$key];
698
699 else if(preg_match('/^(?:auto_eot_system_enabled|eot_grace_time|eots_remove_ccaps)$/', $key) && (!is_string($value) || !is_numeric($value)))
700 $value = $default_options[$key];
701
702 else if($key === 'wp_footer_code' && (!is_string($value) || !strlen($value)))
703 $value = $default_options[$key];
704 }
705 if($options !== FALSE && is_string($options['sec_encryption_key']) && strlen($options['sec_encryption_key']) && !in_array($options['sec_encryption_key'], $GLOBALS['WS_PLUGIN__']['s2member']['o']['sec_encryption_key_history'])) {
706 array_unshift($GLOBALS['WS_PLUGIN__']['s2member']['o']['sec_encryption_key_history'], $options['sec_encryption_key']);
707 $GLOBALS['WS_PLUGIN__']['s2member']['o']['sec_encryption_key_history'] = array_slice($GLOBALS['WS_PLUGIN__']['s2member']['o']['sec_encryption_key_history'], 0, 10);
708 }
709 if($options !== FALSE && is_string($options['def_combo_encryption_key']) && strlen($options['def_combo_encryption_key']) && !in_array($options['def_combo_encryption_key'], $GLOBALS['WS_PLUGIN__']['s2member']['o']['def_combo_encryption_key_history'])) {
710 array_unshift($GLOBALS['WS_PLUGIN__']['s2member']['o']['def_combo_encryption_key_history'], $options['def_combo_encryption_key']);
711 $GLOBALS['WS_PLUGIN__']['s2member']['o']['def_combo_encryption_key_history'] = array_slice($GLOBALS['WS_PLUGIN__']['s2member']['o']['def_combo_encryption_key_history'], 0, 10);
712 }
713 //260809 Keep a recovery-only history of default hashed Defuse key mappings.
714 if($options !== FALSE && is_array($options['secret_key_to_defuse_key']) && !empty($options['secret_key_to_defuse_key']) && !in_array($options['secret_key_to_defuse_key'], $GLOBALS['WS_PLUGIN__']['s2member']['o']['secret_key_to_defuse_key_history'], TRUE)) {
715 array_unshift($GLOBALS['WS_PLUGIN__']['s2member']['o']['secret_key_to_defuse_key_history'], $options['secret_key_to_defuse_key']);
716 $GLOBALS['WS_PLUGIN__']['s2member']['o']['secret_key_to_defuse_key_history'] = array_slice($GLOBALS['WS_PLUGIN__']['s2member']['o']['secret_key_to_defuse_key_history'], 0, 10);
717 }
718 $GLOBALS['WS_PLUGIN__']['s2member']['o'] = apply_filters_ref_array('ws_plugin__s2member_options_before_checksum', array(&$GLOBALS['WS_PLUGIN__']['s2member']['o']));
719
720 $GLOBALS['WS_PLUGIN__']['s2member']['o']['options_checksum'] = md5($checksum_prefix.serialize(array_merge($GLOBALS['WS_PLUGIN__']['s2member']['o'], array('options_checksum' => 0))));
721 }
722
723 return apply_filters_ref_array('ws_plugin__s2member_options', array(&$GLOBALS['WS_PLUGIN__']['s2member']['o']));
724 }
725 }
726
727 //250506 Move _x's to init to avoid PHP Notice since WP 6.7
728 add_action('init', function () {
729 $o =& $GLOBALS['WS_PLUGIN__']['s2member']['o'];
730
731 // Apply the filter to retrieve default values (not global)
732 $default_values = apply_filters('ws_plugin__s2member_default_options', []);
733
734 // Translated defaults for $o[...] options, only applied if still at their original defaults
735 $translated_defaults = [
736 'custom_reg_opt_in_label' => _x('Yes, I want to receive updates via email.', 's2member-front', 's2member'),
737 'new_user_email_subject' => sprintf(_x('[%s] Username/Password', 's2member-front', 's2member'), get_bloginfo('name')),
738 'new_user_email_message' => sprintf(_x("Your Username/Password for: \n%s\n\nUsername: %%%%user_login%%%%\nTo set your password, visit: %%%%wp_set_pass_url%%%%\n\n%%%%wp_login_url%%%%", 's2member-front', 's2member'), get_bloginfo('name')),
739 'new_user_admin_email_subject' => sprintf(_x('[%s] New User Registration', 's2member-front', 's2member'), get_bloginfo('name')),
740 'new_user_admin_email_message' => sprintf(_x("New User Registration on your site: \n%s\n\nUser ID: %%%%user_id%%%%\nUsername: %%%%user_login%%%%\nEmail: %%%%user_email%%%%\nIP Address: %%%%user_ip%%%%", 's2member-front', 's2member'), get_bloginfo('name')),
741 'signup_email_subject' => _x('Congratulations! (your membership has been approved)', 's2member-front', 's2member'),
742 'signup_email_message' => sprintf(_x("Thanks %%%%first_name%%%%! Your membership has been approved.\n\nIf you haven't already done so, the next step is to Register a Username.\n\nComplete your registration here: \n%%%%registration_url%%%%\n\nIf you have any trouble, please feel free to contact us.\n\nBest Regards,\n%s", 's2member-front', 's2member'), get_bloginfo('name')),
743 'modification_email_subject' => _x('Thank you! Your account has been updated.', 's2member-front', 's2member'),
744 'modification_email_message' => sprintf(_x("Thanks %%%%first_name%%%%! Your account now has access to: %%%%item_name%%%%.\n\nIf you have any trouble, please feel free to contact us.\n\nBest Regards,\n%s", 's2member-front', 's2member'), get_bloginfo('name')),
745 'ccap_email_subject' => _x('Thank you! Your account has been updated.', 's2member-front', 's2member'),
746 'ccap_email_message' => sprintf(_x("Thanks %%%%first_name%%%%! Your account now has access to: %%%%item_name%%%%.\n\nIf you have any trouble, please feel free to contact us.\n\nBest Regards,\n%s", 's2member-front', 's2member'), get_bloginfo('name')),
747 'sp_email_subject' => _x('Thank You! (instructions for access)', 's2member-front', 's2member'),
748 'sp_email_message' => sprintf(_x("Thanks %%%%first_name%%%%! \n\n%%%%item_name%%%%\n\nYour order can be retrieved here: \n%%%%sp_access_url%%%%\n(link expires in %%%%sp_access_exp%%%%)\n\nIf you have any trouble, please feel free to contact us.\n\nBest Regards,\n%s", 's2member-front', 's2member'), get_bloginfo('name')),
749 'level0_label' => _x('Free Subscriber', 's2member-front', 's2member'),
750 'level1_label' => _x('Bronze Member', 's2member-front', 's2member'),
751 'level2_label' => _x('Silver Member', 's2member-front', 's2member'),
752 'level3_label' => _x('Gold Member', 's2member-front', 's2member'),
753 'level4_label' => _x('Platinum Member', 's2member-front', 's2member'),
754 ];
755
756 // Add extra levels if they exist.
757 for ($n = 5; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++) {
758 $translated_defaults['level'.$n.'_label'] = sprintf(_x('Level %s Member', 's2member-front', 's2member'), $n);
759 }
760
761 // Apply translations to options if they are at their default
762 foreach ($translated_defaults as $key => $translated) {
763 if (isset($default_values[$key]) && isset($o[$key]) && $default_values[$key] === $o[$key]) {
764 $o[$key] = $translated;
765 }
766 }
767
768 // Handle recaptcha_lang separately
769 if (isset($GLOBALS['WS_PLUGIN__']['s2member']['c']['recaptcha']['lang']) && $GLOBALS['WS_PLUGIN__']['s2member']['c']['recaptcha']['lang'] === 'en') {
770 $GLOBALS['WS_PLUGIN__']['s2member']['c']['recaptcha']['lang'] = _x('en', 's2member-front recaptcha-lang-code', 's2member');
771 }
772 });
773