PluginProbe
s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions / 260829
s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions v260829
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 260829, at src/includes/syscon.inc.php

763 lines 44.8 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['no_cache_headers_mode'] = 'always'; //260308 No-cache headers mode: `always`, `selective`, `evaluative`.
136 $default_options['no_cache_headers_debug'] = '0'; //260308 Adds Server-Timing no-cache debug header (support use only).
137 $default_options['sc_conds_allow_arbitrary_php'] = '0';
138 $default_options['sc_conds_whitelist'] = '';
139
140 //260812 New shared whitelist; keep the old s2Get option synchronized temporarily for rollback compatibility.
141 $default_options['sc_user_fields_whitelist'] = '';
142 $default_options['sc_s2get_userid_whitelist'] = '';
143
144 $default_options['sec_encryption_key'] = '';
145 $default_options['sec_encryption_key_history'] = array();
146
147 $default_options['def_combo_encryption_key'] = '';
148 $default_options['def_combo_encryption_key_history'] = array();
149 $default_options['def_custom_combo_encryption_keys'] = array();
150
151 //260809 Store new Defuse key mappings by one-way hashes instead of raw secret keys.
152 $default_options['secret_key_to_defuse_key'] = array();
153 $default_options['secret_key_to_defuse_key_history'] = array();
154 $default_options['custom_secret_key_to_defuse_key'] = array();
155
156 $default_options['s_badge_status_enabled'] = '0';
157
158 $default_options['max_ip_restriction'] = '5';
159 $default_options['max_ip_restriction_time'] = '3600';
160 $default_options['max_failed_login_attempts'] = '5';
161 $default_options['max_simultaneous_logins'] = '0';
162 $default_options['max_simultaneous_logins_timeout'] = '30 minutes';
163
164 $default_options['run_uninstall_routines'] = '0';
165
166 $default_options['custom_reg_fields'] = '';
167 $default_options['custom_reg_names'] = '1';
168 $default_options['custom_reg_display_name'] = 'full';
169 $default_options['custom_reg_password'] = '0';
170 $default_options['custom_reg_password_min_length'] = '8'; // Minimum characters.
171 $default_options['custom_reg_password_min_strength'] = 'good'; // `weak`, `good` or `strong`.
172
173 $default_options['custom_reg_opt_in'] = '1';
174 $default_options['custom_reg_opt_in_label'] = 'Yes, I want to receive updates via email.';
175
176 $default_options['custom_reg_auto_opt_outs'] = array();
177 $default_options['custom_reg_auto_opt_out_transitions'] = '0';
178
179 $default_options['custom_reg_fields_4bp'] = array();
180 $default_options['custom_reg_force_personal_emails'] = '';
181
182 $default_options['allow_subscribers_in'] = '0';
183 $default_options['force_admin_lockouts'] = '0';
184 $default_options['filter_wp_query'] = array('all');
185
186 $default_options['default_url_shortener'] = 's2member'; //260612
187 $default_options['default_url_shortener_key'] = '';
188 $default_options['default_custom_str_url_shortener'] = '';
189
190 $default_options['mms_auto_patch'] = '1';
191 $default_options['mms_registration_file'] = 'wp-login';
192 $default_options['mms_registration_grants'] = 'none';
193 for($n = 0, $v = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++, $v = $v + 5)
194 $default_options['mms_registration_blogs_level'.$n] = (string)$v;
195
196 $default_options['login_welcome_page'] = '';
197 $default_options['login_redirection_override'] = '';
198 $default_options['membership_options_page'] = '';
199 $default_options['membership_options_page_vars_enable'] = '1';
200 $default_options['membership_options_page_ga_vars_enable'] = '1';
201
202 $default_options['login_reg_design_enabled'] = '1';
203
204 $default_options['login_reg_background_color'] = 'FFFFFF';
205 $default_options['login_reg_background_image'] = $GLOBALS['WS_PLUGIN__']['s2member']['c']['dir_url'].'/src/images/bg.png';
206 $default_options['login_reg_background_image_repeat'] = 'repeat';
207
208 $default_options['login_reg_background_text_color'] = '000000';
209 $default_options['login_reg_background_text_shadow_color'] = 'EEEEEE';
210 $default_options['login_reg_background_box_shadow_color'] = 'EEEEEE';
211
212 $default_options['login_reg_logo_src'] = $GLOBALS['WS_PLUGIN__']['s2member']['c']['dir_url'].'/src/images/logo.png';
213 $default_options['login_reg_logo_src_width'] = '550';
214 $default_options['login_reg_logo_src_height'] = '100';
215 $default_options['login_reg_logo_url'] = home_url('/');
216 $default_options['login_reg_logo_title'] = get_bloginfo('name');
217
218 $default_options['login_reg_font_size'] = '12px';
219 $default_options['login_reg_font_family'] = "'Verdana', 'Arial', sans-serif";
220 $default_options['login_reg_font_field_size'] = '18px';
221
222 $default_options['login_reg_footer_backtoblog'] = '0';
223 $default_options['login_reg_footer_design'] = '';
224
225 $default_options['html_emails_enabled'] = 0; //250615
226
227 $default_options['reg_email_from_name'] = get_bloginfo('name');
228 $default_options['reg_email_from_email'] = get_bloginfo('admin_email');
229 $default_options['reg_email_support_link'] = 'mailto:'.get_bloginfo('admin_email');
230
231 $default_options['new_user_emails_enabled'] = '0';
232
233 $default_options['new_user_email_subject'] = sprintf('[%s] Username/Password', get_bloginfo('name'));
234 $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'));
235
236 $default_options['new_user_admin_email_recipients'] = get_bloginfo('admin_email');
237 $default_options['new_user_admin_email_subject'] = sprintf('[%s] New User Registration', get_bloginfo('name'));
238 $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'));
239
240 $default_options['paypal_sandbox'] = '0';
241 $default_options['paypal_business'] = '';
242 $default_options['paypal_merchant_id'] = '';
243 $default_options['paypal_api_username'] = '';
244 $default_options['paypal_api_password'] = '';
245 $default_options['paypal_api_signature'] = '';
246 $default_options['paypal_identity_token'] = '';
247 $default_options['paypal_btn_encryption'] = '0';
248
249 //260106
250 $default_options['paypal_checkout_enable'] = '0';
251 $default_options['paypal_checkout_sandbox'] = '0';
252 $default_options['paypal_checkout_client_id'] = '';
253 $default_options['paypal_checkout_client_secret'] = '';
254 $default_options['paypal_checkout_sandbox_client_id'] = '';
255 $default_options['paypal_checkout_sandbox_client_secret']= '';
256 $default_options['paypal_checkout_webhook_id'] = '';
257 $default_options['paypal_checkout_sandbox_webhook_id'] = '';
258
259 $default_options['paypal_checkout_cache'] = array();
260
261 $default_options['paypal_payflow_api_username'] = '';
262 $default_options['paypal_payflow_api_partner'] = 'PayPal';
263 $default_options['paypal_payflow_api_vendor'] = '';
264 $default_options['paypal_payflow_api_password'] = '';
265
266 $default_options['ipn_signup_vars_fallback'] = '0'; //250427
267 $default_options['skip_ipn_domain_validation'] = '0'; //250606
268
269 $default_options['signup_tracking_codes'] = '';
270 $default_options['modification_tracking_codes'] = '';
271 $default_options['ccap_tracking_codes'] = '';
272 $default_options['sp_tracking_codes'] = '';
273
274 $default_options['signup_email_recipients'] = '"%%full_name%%" <%%payer_email%%>';
275 $default_options['signup_email_subject'] = 'Congratulations! (your membership has been approved)';
276 $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'));
277
278 $default_options['modification_email_recipients'] = '"%%full_name%%" <%%payer_email%%>';
279 $default_options['modification_email_subject'] = 'Thank you! Your account has been updated.';
280 $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'));
281
282 $default_options['ccap_email_recipients'] = '"%%full_name%%" <%%payer_email%%>';
283 $default_options['ccap_email_subject'] = 'Thank you! Your account has been updated.';
284 $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'));
285
286 $default_options['sp_email_recipients'] = '"%%full_name%%" <%%payer_email%%>';
287 $default_options['sp_email_subject'] = 'Thank You! (instructions for access)';
288 $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'));
289
290 $default_options['mailchimp_api_key'] = '';
291 $default_options['getresponse_api_key'] = '';
292 $default_options['aweber_api_key'] = '';
293 $default_options['aweber_internal_api_key'] = '';
294 $default_options['aweber_api_type'] = 'api';
295 if($GLOBALS['WS_PLUGIN__']['s2member']['c']['configured'])
296 $default_options['aweber_api_type'] = 'email';
297
298 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
299 $default_options['level'.$n.'_mailchimp_list_ids'] = '';
300
301 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
302 $default_options['level'.$n.'_getresponse_list_ids'] = '';
303
304 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
305 $default_options['level'.$n.'_aweber_list_ids'] = '';
306
307 $default_options['signup_notification_urls'] = '';
308 $default_options['registration_notification_urls'] = '';
309 $default_options['payment_notification_urls'] = '';
310 $default_options['modification_notification_urls'] = '';
311 $default_options['cancellation_notification_urls'] = '';
312 $default_options['eot_del_notification_urls'] = '';
313 $default_options['ref_rev_notification_urls'] = '';
314 $default_options['sp_sale_notification_urls'] = '';
315 $default_options['sp_ref_rev_notification_urls'] = '';
316
317 $default_options['signup_notification_recipients'] = '';
318 $default_options['registration_notification_recipients'] = '';
319 $default_options['payment_notification_recipients'] = '';
320 $default_options['modification_notification_recipients'] = '';
321 $default_options['cancellation_notification_recipients'] = '';
322 $default_options['eot_del_notification_recipients'] = '';
323 $default_options['ref_rev_notification_recipients'] = '';
324 $default_options['sp_sale_notification_recipients'] = '';
325 $default_options['sp_ref_rev_notification_recipients'] = '';
326
327 for ($n = 0, $l = array('Free Subscriber', 'Bronze Member', 'Silver Member', 'Gold Member', 'Platinum Member'); $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++) {
328 $default_options['level'.$n.'_label'] = (!empty($l[$n])) ? $l[$n] : 'Level '.$n.' Member';
329 }
330
331 $default_options['apply_label_translations'] = '0';
332
333 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
334 $default_options['level'.$n.'_file_downloads_allowed'] = '';
335
336 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
337 $default_options['level'.$n.'_file_downloads_allowed_days'] = '';
338
339 $default_options['file_download_limit_exceeded_page'] = '';
340 $default_options['file_download_inline_extensions'] = '';
341 $default_options['file_download_stream_extensions'] = '';
342 $default_options['file_download_content_encodong_none'] = '0';
343
344 $default_options['amazon_s3_files_bucket'] = '';
345 $default_options['amazon_s3_files_bucket_region'] = '';
346 $default_options['amazon_s3_files_access_key'] = '';
347 $default_options['amazon_s3_files_secret_key'] = '';
348
349 $default_options['amazon_cf_files_private_key'] = '';
350 $default_options['amazon_cf_files_private_key_id'] = '';
351 $default_options['amazon_cf_files_distros_access_id'] = '';
352 $default_options['amazon_cf_files_distros_s3_access_id'] = '';
353 $default_options['amazon_cf_files_distro_downloads_id'] = '';
354 $default_options['amazon_cf_files_distro_downloads_cname'] = '';
355 $default_options['amazon_cf_files_distro_downloads_dname'] = '';
356 $default_options['amazon_cf_files_distro_streaming_id'] = '';
357 $default_options['amazon_cf_files_distro_streaming_cname'] = '';
358 $default_options['amazon_cf_files_distro_streaming_dname'] = '';
359 $default_options['amazon_cf_files_distros_auto_config_status'] = '';
360 $default_options['amazon_cf_files_rtmp_policy_include_ip'] = '1';
361
362 $default_options['ruris_case_sensitive'] = '0'; // No by default.
363
364 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
365 $default_options['level'.$n.'_ruris'] = '';
366 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
367 $default_options['level'.$n.'_catgs'] = '';
368 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
369 $default_options['level'.$n.'_ptags'] = '';
370 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
371 $default_options['level'.$n.'_posts'] = '';
372 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
373 $default_options['level'.$n.'_pages'] = '';
374
375 $default_options['specific_ids'] = '';
376
377 $default_options['triggers_immediate_eot'] = 'reversals';
378 $default_options['membership_eot_behavior'] = 'demote';
379 $default_options['eot_time_ext_behavior'] = 'extend';
380 $default_options['auto_eot_system_enabled'] = '1';
381 $default_options['auto_eot_system_runtime_mode'] = 'auto';
382 $default_options['auto_eot_system_runtime_custom'] = '30';
383 $default_options['eots_remove_ccaps'] = '1';
384 $default_options['eot_grace_time'] = '86400';
385
386 $default_options['wp_footer_code'] = '';
387
388 $default_options = apply_filters('ws_plugin__s2member_default_options', $default_options);
389
390 unset($n, $v, $l); // Unset/cleanup these working variables from the routines above.
391 /*
392 Here they are merged. User options will overwrite some or all default values.
393 */
394 $_stored_options = (($options !== FALSE) ? (array)$options : (array)get_option('ws_plugin__s2member_options'));
395 $GLOBALS['WS_PLUGIN__']['s2member']['o'] = array_merge($default_options, $_stored_options);
396
397 //260812 Keep both whitelist option names synchronized, with the legacy value taking precedence after a rollback.
398 if(isset($_stored_options['sc_s2get_userid_whitelist']) && is_string($_stored_options['sc_s2get_userid_whitelist']))
399 {
400 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'])
401 $GLOBALS['WS_PLUGIN__']['s2member']['o']['sc_user_fields_whitelist'] = $_stored_options['sc_s2get_userid_whitelist'];
402 }
403 else if(isset($_stored_options['sc_user_fields_whitelist']) && is_string($_stored_options['sc_user_fields_whitelist']))
404 $GLOBALS['WS_PLUGIN__']['s2member']['o']['sc_s2get_userid_whitelist'] = $_stored_options['sc_user_fields_whitelist'];
405 unset($_stored_options);
406
407 /*
408 * Ditch this old option key; no longer in use.
409 */
410 if(isset($GLOBALS['WS_PLUGIN__']['s2member']['o']['run_deactivation_routines'])) unset($GLOBALS['WS_PLUGIN__']['s2member']['o']['run_deactivation_routines']);
411 /*
412 This builds an MD5 checksum for the full array of options. This also includes the config checksum and the current set of default options.
413 */
414 $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))));
415 /*
416 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.
417 */
418 if($options !== FALSE || ($GLOBALS['WS_PLUGIN__']['s2member']['o']['options_checksum'] !== $checksum && $GLOBALS['WS_PLUGIN__']['s2member']['o'] !== $default_options))
419 {
420 foreach($GLOBALS['WS_PLUGIN__']['s2member']['o'] as $key => &$value)
421 {
422 if(!isset($default_options[$key]) && !preg_match('/^pro_/', $key))
423 unset($GLOBALS['WS_PLUGIN__']['s2member']['o'][$key]);
424
425 else if($key === 'options_checksum' && (!is_string($value) || !strlen($value)))
426 $value = $default_options[$key];
427
428 else if($key === 'options_version' && (!is_string($value) || !is_numeric($value)))
429 $value = $default_options[$key];
430
431 else if(preg_match('/^gateway_debug_logs|gateway_debug_logs_extensive/', $key) && (!is_string($value) || !is_numeric($value)))
432 $value = $default_options[$key];
433
434 else if($key === 'lazy_load_css_js' && (!is_string($value) || !is_numeric($value)))
435 $value = $default_options[$key];
436
437 else if($key === 'no_cache_headers_mode' && (!is_string($value) || !in_array($value, array('always', 'selective', 'evaluative'), TRUE)))
438 $value = $default_options[$key];
439
440 else if($key === 'no_cache_headers_debug' && (!is_string($value) || !is_numeric($value)))
441 $value = $default_options[$key];
442
443 else if($key === 'sc_conds_allow_arbitrary_php' && (!is_string($value) || !is_numeric($value)))
444 $value = $default_options[$key];
445
446 else if($key === 'sc_s2get_userid_whitelist' && !is_string($value)) //260324
447 $value = $default_options[$key];
448 else if($key === 'sc_user_fields_whitelist' && !is_string($value)) //260812
449 $value = $default_options[$key];
450
451 else if($key === 'sec_encryption_key' && (!is_string($value) || !strlen($value)))
452 $value = $default_options[$key];
453
454 else if($key === 'sec_encryption_key_history' && (!is_array($value) || empty($value)))
455 $value = $default_options[$key];
456
457 else if($key === 'def_combo_encryption_key' && (!is_string($value) || !strlen($value)))
458 $value = $default_options[$key];
459
460 else if($key === 'def_combo_encryption_key_history' && (!is_array($value) || empty($value)))
461 $value = $default_options[$key];
462
463 else if($key === 'def_custom_combo_encryption_keys' && (!is_array($value) || empty($value)))
464 $value = $default_options[$key];
465
466 //260809 Validate the hashed Defuse key mappings independently of the legacy options.
467 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)))
468 $value = $default_options[$key];
469
470 else if($key === 's_badge_status_enabled' && (!is_string($value) || !is_numeric($value)))
471 $value = $default_options[$key];
472
473 else if($key === 'max_ip_restriction' && (!is_string($value) || !is_numeric($value) || $value < 0 || $value > 100))
474 $value = $default_options[$key];
475
476 else if($key === 'max_ip_restriction_time' && (!is_string($value) || !is_numeric($value) || $value < 300 || $value > 31556926))
477 $value = $default_options[$key];
478
479 else if($key === 'max_failed_login_attempts' && (!is_string($value) || !is_numeric($value) || $value < 0 || $value > 100))
480 $value = $default_options[$key];
481
482 else if($key === 'max_simultaneous_logins' && (!is_string($value) || !is_numeric($value) || $value < 0))
483 $value = $default_options[$key];
484
485 else if($key === 'max_simultaneous_logins_timeout' && (!is_string($value) || !strlen($value)))
486 $value = $default_options[$key];
487
488 else if($key === 'run_uninstall_routines' && (!is_string($value) || !is_numeric($value)))
489 $value = $default_options[$key];
490
491 else if($key === 'custom_reg_fields' && (!is_string($value) || !strlen($value)))
492 $value = $default_options[$key];
493
494 else if(preg_match('/^custom_reg_(?:names|password|password_min_length|opt_in|auto_opt_out_transitions)$/', $key) && (!is_string($value) || !is_numeric($value)))
495 $value = $default_options[$key];
496
497 else if($key === 'custom_reg_password_min_strength' && (!is_string($value) || !strlen($value)))
498 $value = $default_options[$key];
499
500 else if($key === 'custom_reg_display_name' && (!is_string($value) || !preg_match('/^(?:full|first|last|login|0)$/', $value)))
501 $value = $default_options[$key];
502
503 else if($key === 'custom_reg_opt_in_label' && (!is_string($value) || !strlen($value)))
504 $value = $default_options[$key];
505
506 else if($key === 'custom_reg_auto_opt_outs' && (!is_array($value) || empty($value)))
507 $value = $default_options[$key];
508
509 else if($key === 'custom_reg_fields_4bp' && (!is_array($value) || empty($value)))
510 $value = $default_options[$key];
511
512 else if($key === 'custom_reg_force_personal_emails' && (!is_string($value) || !strlen($value = preg_replace('/\s+/', '', $value))))
513 $value = $default_options[$key];
514
515 else if($key === 'allow_subscribers_in' && (!is_string($value) || !is_numeric($value)))
516 $value = $default_options[$key];
517
518 else if($key === 'mms_auto_patch' && (!is_string($value) || !is_numeric($value)))
519 $value = $default_options[$key];
520
521 else if($key === 'mms_registration_file' && (!is_string($value) || !preg_match('/^(?:wp-login|wp-signup)$/', $value)))
522 $value = $default_options[$key];
523
524 else if($key === 'mms_registration_grants' && (!is_string($value) || !preg_match('/^(?:none|user|all)$/', $value)))
525 $value = $default_options[$key];
526
527 else if(preg_match('/^mms_registration_blogs_level[0-9]+$/', $key) && (!is_string($value) || !is_numeric($value) || $value < 0))
528 $value = $default_options[$key];
529
530 else if($key === 'force_admin_lockouts' && (!is_string($value) || !is_numeric($value)))
531 $value = $default_options[$key];
532
533 else if($key === 'filter_wp_query' && !is_array($value) /* This array CAN be empty. */)
534 $value = $default_options[$key];
535
536 else if(preg_match('/^default_(?:custom_str_)?url_shortener$/', $key) && (!is_string($value) || !strlen($value)))
537 $value = $default_options[$key];
538
539 else if($key === 'login_welcome_page' && (!is_string($value) || !is_numeric($value)))
540 $value = $default_options[$key];
541
542 else if($key === 'login_redirection_override' && (!is_string($value) || !strlen($value)))
543 $value = $default_options[$key];
544
545 else if($key === 'membership_options_page' && (!is_string($value) || !is_numeric($value)))
546 $value = $default_options[$key];
547
548 else if($key === 'membership_options_page_vars_enable' && (!is_string($value) || !is_numeric($value)))
549 $value = $default_options[$key];
550
551 else if($key === 'membership_options_page_ga_vars_enable' && (!is_string($value) || !is_numeric($value)))
552 $value = $default_options[$key];
553
554 else if($key === 'login_reg_design_enabled' && (!is_string($value) || !is_numeric($value)))
555 $value = $default_options[$key];
556
557 else if($key === 'login_reg_background_image' && !is_string($value) /* This is optional. */)
558 $value = $default_options[$key];
559
560 else if($key === 'login_reg_background_image_repeat' && (!is_string($value) || !preg_match('/^(?:repeat|repeat-x|repeat-y|no-repeat)$/', $value)))
561 $value = $default_options[$key];
562
563 else if(preg_match('/^login_reg_(?:background|logo|font|footer)_/', $key) && !preg_match('/background_image/', $key) && (!is_string($value) || !strlen($value)))
564 $value = $default_options[$key];
565
566 else if($key === 'login_reg_footer_backtoblog' && (!is_string($value) || !is_numeric($value)))
567 $value = $default_options[$key];
568
569 else if(preg_match('/^reg_email_(?:from_name|from_email|support_link)$/', $key) && (!is_string($value) || !strlen($value)))
570 $value = $default_options[$key];
571
572 else if($key === 'new_user_emails_enabled' && (!is_string($value) || !is_numeric($value)))
573 $value = $default_options[$key];
574
575 else if(preg_match('/^new_user_email_(?:subject|message)$/', $key) && (!is_string($value) || !strlen($value)))
576 $value = $default_options[$key];
577
578 else if(preg_match('/^new_user_admin_email_(?:recipients|subject|message)$/', $key) && (!is_string($value) || !strlen($value)))
579 $value = $default_options[$key];
580
581 else if($key === 'paypal_sandbox' && (!is_string($value) || !is_numeric($value)))
582 $value = $default_options[$key];
583
584 else if(preg_match('/^paypal_(?:business|merchant_id|api_username|api_password|api_signature|identity_token)$/', $key) && (!is_string($value) || !strlen($value)))
585 $value = $default_options[$key];
586
587 else if(preg_match('/^paypal_payflow(?:api_username|api_partner|api_vendor|api_password)$/', $key) && (!is_string($value) || !strlen($value)))
588 $value = $default_options[$key];
589
590 else if($key === 'paypal_btn_encryption' && (!is_string($value) || !is_numeric($value)))
591 $value = $default_options[$key];
592
593 //260106
594 else if($key === 'paypal_checkout_enable' && (!is_string($value) || !is_numeric($value)))
595 $value = $default_options[$key];
596 else if($key === 'paypal_checkout_sandbox' && (!is_string($value) || !is_numeric($value)))
597 $value = $default_options[$key];
598 else if(preg_match('/^paypal_checkout_(?:client_id|client_secret|sandbox_client_id|sandbox_client_secret)$/', $key) && !is_string($value))
599 $value = $default_options[$key];
600
601 else if(preg_match('/^(?:signup|modification|ccap|sp)_tracking_codes$/', $key) && (!is_string($value) || !strlen($value)))
602 $value = $default_options[$key];
603
604 else if(preg_match('/^(?:signup|modification|ccap|sp)_email_recipients$/', $key) && !is_string($value) /* Can be empty. */)
605 $value = $default_options[$key];
606
607 else if(preg_match('/^(?:signup|modification|ccap|sp)_email_(?:subject|message)$/', $key) && (!is_string($value) || !strlen($value)))
608 $value = $default_options[$key];
609
610 else if($key === 'aweber_api_type' && (!is_string($value) || !preg_match('/^(?:api|email)$/', $value)))
611 $value = $default_options[$key];
612
613 else if(preg_match('/^(?:mailchimp|getresponse|aweber)(?:_internal)?_api_key$/', $key) && (!is_string($value) || !strlen($value)))
614 $value = $default_options[$key];
615
616 else if(preg_match('/^level[0-9]+_mailchimp_list_ids$/', $key) && (!is_string($value) || !strlen($value = preg_replace('/['."\r\n\t".']+/', '', $value))))
617 $value = $default_options[$key];
618
619 else if(preg_match('/^level[0-9]+_getresponse_list_ids$/', $key) && (!is_string($value) || !strlen($value = preg_replace('/\s+/', '', $value))))
620 $value = $default_options[$key];
621
622 else if(preg_match('/^level[0-9]+_aweber_list_ids$/', $key) && (!is_string($value) || !strlen($value = preg_replace('/\s+/', '', $value))))
623 $value = $default_options[$key];
624
625 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)))
626 $value = $default_options[$key];
627
628 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)))
629 $value = $default_options[$key];
630
631 else if(preg_match('/^level[0-9]+_label$/', $key) && (!is_string($value) || !strlen($value)))
632 $value = $default_options[$key];
633
634 else if($key === 'apply_label_translations' && (!is_string($value) || !is_numeric($value)))
635 $value = $default_options[$key];
636
637 else if(preg_match('/^level[0-9]+_file_downloads_allowed$/', $key) && (!is_string($value) || !is_numeric($value) || $value < 0))
638 $value = $default_options[$key];
639
640 else if(preg_match('/^level[0-9]+_file_downloads_allowed_days$/', $key) && (!is_string($value) || !is_numeric($value) || $value < 0))
641 $value = $default_options[$key];
642
643 else if($key === 'file_download_limit_exceeded_page' && (!is_string($value) || !is_numeric($value)))
644 $value = $default_options[$key];
645
646 else if(preg_match('/^file_download_(?:inline|stream)_extensions$/', $key) && (!is_string($value) || !($value = strtolower(preg_replace('/\s+/', '', $value)))))
647 $value = $default_options[$key];
648
649 else if(preg_match('/^amazon_(?:s3|cf)_files_/', $key) && (!is_string($value) || !strlen($value)))
650 $value = $default_options[$key];
651
652 else if($key === 'ruris_case_sensitive' && (!is_string($value) || !is_numeric($value)))
653 $value = $default_options[$key];
654
655 else if(preg_match('/^level[0-9]+_ruris$/', $key) && (!is_string($value) || !strlen($value)))
656 $value = $default_options[$key];
657
658 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), ',')))))
659 $value = $default_options[$key];
660
661 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))), ',')))))
662 $value = $default_options[$key];
663
664 else if(preg_match('/^level[0-9]+_posts$/', $key) && (!is_string($value) || !($value = trim( /* Supports `all` or `1,2,3,all-[type]s`. */
665 preg_replace('/[^a-z0-9_\-,]/', '', strtolower($value)), ',')))
666 ) $value = $default_options[$key];
667
668 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), ',')))))
669 $value = $default_options[$key];
670
671 else if($key === 'specific_ids' && (!is_string($value) || !($value = trim(preg_replace('/[^0-9,]/', '', $value), ','))))
672 $value = $default_options[$key];
673
674 else if($key === 'triggers_immediate_eot' && (!is_string($value) || !preg_match('/^(?:none|refunds|reversals|refunds,reversals|refunds,partial_refunds,reversals)$/', $value)))
675 $value = $default_options[$key];
676
677 else if($key === 'membership_eot_behavior' && (!is_string($value) || !preg_match('/^(?:demote|delete)$/', $value)))
678 $value = $default_options[$key];
679
680 else if($key === 'eot_time_ext_behavior' && (!is_string($value) || !preg_match('/^(?:extend|reset)$/', $value)))
681 $value = $default_options[$key];
682
683 else if($key === 'auto_eot_system_runtime_mode' && (!is_string($value) || !preg_match('/^(?:auto|custom)$/', $value)))
684 $value = $default_options[$key];
685
686 else if($key === 'auto_eot_system_runtime_custom' && (!is_string($value) || !is_numeric($value) || (float)$value < 1 || (float)$value > 3600))
687 $value = $default_options[$key];
688
689 else if(preg_match('/^(?:auto_eot_system_enabled|eot_grace_time|eots_remove_ccaps)$/', $key) && (!is_string($value) || !is_numeric($value)))
690 $value = $default_options[$key];
691
692 else if($key === 'wp_footer_code' && (!is_string($value) || !strlen($value)))
693 $value = $default_options[$key];
694 }
695 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'])) {
696 array_unshift($GLOBALS['WS_PLUGIN__']['s2member']['o']['sec_encryption_key_history'], $options['sec_encryption_key']);
697 $GLOBALS['WS_PLUGIN__']['s2member']['o']['sec_encryption_key_history'] = array_slice($GLOBALS['WS_PLUGIN__']['s2member']['o']['sec_encryption_key_history'], 0, 10);
698 }
699 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'])) {
700 array_unshift($GLOBALS['WS_PLUGIN__']['s2member']['o']['def_combo_encryption_key_history'], $options['def_combo_encryption_key']);
701 $GLOBALS['WS_PLUGIN__']['s2member']['o']['def_combo_encryption_key_history'] = array_slice($GLOBALS['WS_PLUGIN__']['s2member']['o']['def_combo_encryption_key_history'], 0, 10);
702 }
703 //260809 Keep a recovery-only history of default hashed Defuse key mappings.
704 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)) {
705 array_unshift($GLOBALS['WS_PLUGIN__']['s2member']['o']['secret_key_to_defuse_key_history'], $options['secret_key_to_defuse_key']);
706 $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);
707 }
708 $GLOBALS['WS_PLUGIN__']['s2member']['o'] = apply_filters_ref_array('ws_plugin__s2member_options_before_checksum', array(&$GLOBALS['WS_PLUGIN__']['s2member']['o']));
709
710 $GLOBALS['WS_PLUGIN__']['s2member']['o']['options_checksum'] = md5($checksum_prefix.serialize(array_merge($GLOBALS['WS_PLUGIN__']['s2member']['o'], array('options_checksum' => 0))));
711 }
712
713 return apply_filters_ref_array('ws_plugin__s2member_options', array(&$GLOBALS['WS_PLUGIN__']['s2member']['o']));
714 }
715 }
716
717 //250506 Move _x's to init to avoid PHP Notice since WP 6.7
718 add_action('init', function () {
719 $o =& $GLOBALS['WS_PLUGIN__']['s2member']['o'];
720
721 // Apply the filter to retrieve default values (not global)
722 $default_values = apply_filters('ws_plugin__s2member_default_options', []);
723
724 // Translated defaults for $o[...] options, only applied if still at their original defaults
725 $translated_defaults = [
726 'custom_reg_opt_in_label' => _x('Yes, I want to receive updates via email.', 's2member-front', 's2member'),
727 'new_user_email_subject' => sprintf(_x('[%s] Username/Password', 's2member-front', 's2member'), get_bloginfo('name')),
728 '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')),
729 'new_user_admin_email_subject' => sprintf(_x('[%s] New User Registration', 's2member-front', 's2member'), get_bloginfo('name')),
730 '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')),
731 'signup_email_subject' => _x('Congratulations! (your membership has been approved)', 's2member-front', 's2member'),
732 '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')),
733 'modification_email_subject' => _x('Thank you! Your account has been updated.', 's2member-front', 's2member'),
734 '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')),
735 'ccap_email_subject' => _x('Thank you! Your account has been updated.', 's2member-front', 's2member'),
736 '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')),
737 'sp_email_subject' => _x('Thank You! (instructions for access)', 's2member-front', 's2member'),
738 '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')),
739 'level0_label' => _x('Free Subscriber', 's2member-front', 's2member'),
740 'level1_label' => _x('Bronze Member', 's2member-front', 's2member'),
741 'level2_label' => _x('Silver Member', 's2member-front', 's2member'),
742 'level3_label' => _x('Gold Member', 's2member-front', 's2member'),
743 'level4_label' => _x('Platinum Member', 's2member-front', 's2member'),
744 ];
745
746 // Add extra levels if they exist.
747 for ($n = 5; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++) {
748 $translated_defaults['level'.$n.'_label'] = sprintf(_x('Level %s Member', 's2member-front', 's2member'), $n);
749 }
750
751 // Apply translations to options if they are at their default
752 foreach ($translated_defaults as $key => $translated) {
753 if (isset($default_values[$key]) && isset($o[$key]) && $default_values[$key] === $o[$key]) {
754 $o[$key] = $translated;
755 }
756 }
757
758 // Handle recaptcha_lang separately
759 if (isset($GLOBALS['WS_PLUGIN__']['s2member']['c']['recaptcha']['lang']) && $GLOBALS['WS_PLUGIN__']['s2member']['c']['recaptcha']['lang'] === 'en') {
760 $GLOBALS['WS_PLUGIN__']['s2member']['c']['recaptcha']['lang'] = _x('en', 's2member-front recaptcha-lang-code', 's2member');
761 }
762 });
763