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

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