PluginProbe
s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions / 261011
s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions v261011
261011 261001 260927 260917 260913 260909 260829 260814 260805 110710 110731 110812 110815 110912 110913 110915 110926 110927 111002 111003 111011 111017 111029 111105 111206 All 192 releases
← All changes | src/includes/syscon.inc.php +44 -9 260814 → 261011 View file →
@@ -131,8 +131,17 @@
131 131 $default_options['gateway_debug_logs'] = '0';
132 132 $default_options['gateway_debug_logs_extensive'] = '0';
133 133
134 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['asset_health_wait_seconds'] = '3'; //260912.0522 Wait briefly after page load before treating an asset that cannot be confirmed active as Late.
142 + //260904.1923 Keep the repaired s2Member Dynamic Loader as the default; WordPress routing is an explicit compatibility option.
143 + $default_options['dynamic_asset_loader'] = 's2o'; //260910.0724 In current terminology, that established default is the s2Member-Only Dynamic Loader served by s2member-o.php.
135 144 $default_options['no_cache_headers_mode'] = 'always'; //260308 No-cache headers mode: `always`, `selective`, `evaluative`.
136 145 $default_options['no_cache_headers_debug'] = '0'; //260308 Adds Server-Timing no-cache debug header (support use only).
137 146 $default_options['sc_conds_allow_arbitrary_php'] = '0';
138 147 $default_options['sc_conds_whitelist'] = '';
@@ -175,10 +184,11 @@
175 184
176 185 $default_options['custom_reg_auto_opt_outs'] = array();
177 186 $default_options['custom_reg_auto_opt_out_transitions'] = '0';
178 187
179 - $default_options['custom_reg_fields_4bp'] = array();
180 - $default_options['custom_reg_force_personal_emails'] = '';
188 + $default_options['custom_reg_fields_4bp'] = array();
189 + $default_options['custom_reg_force_personal_emails'] = '';
190 + $default_options['custom_reg_require_valid_email_domain'] = '0'; //261005.0548 Opt-in DNS mail-domain validation during account creation and s2Member Profile email changes.
181 191
182 192 $default_options['allow_subscribers_in'] = '0';
183 193 $default_options['force_admin_lockouts'] = '0';
184 194 $default_options['filter_wp_query'] = array('all');
@@ -373,14 +383,18 @@
373 383 $default_options['level'.$n.'_pages'] = '';
374 384
375 385 $default_options['specific_ids'] = '';
376 386
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['eots_remove_ccaps'] = '1';
382 - $default_options['eot_grace_time'] = '86400';
387 + $default_options['triggers_immediate_eot'] = 'reversals';
388 + $default_options['membership_eot_behavior'] = 'demote';
389 + $default_options['eot_demotion_to_role'] = 'subscriber';
390 + $default_options['eot_demotion_from'] = 'all'; //260916.2137 Missing options must preserve legacy behavior until a fresh activation explicitly stores the new Level-only default.
391 + $default_options['eot_time_ext_behavior'] = 'extend';
392 + $default_options['auto_eot_system_enabled'] = '1';
393 + $default_options['auto_eot_system_runtime_mode'] = 'auto';
394 + $default_options['auto_eot_system_runtime_custom'] = '30';
395 + $default_options['eots_remove_ccaps'] = '1';
396 + $default_options['eot_grace_time'] = '86400';
383 397
384 398 $default_options['wp_footer_code'] = '';
385 399
386 400 $default_options = apply_filters('ws_plugin__s2member_default_options', $default_options);
@@ -431,8 +445,16 @@
431 445
432 446 else if($key === 'lazy_load_css_js' && (!is_string($value) || !is_numeric($value)))
433 447 $value = $default_options[$key];
434 448
449 + else if(preg_match('/^static_(?:css|js)(?:_minify)?$/', $key) && (!is_string($value) || !is_numeric($value))) //260903.0437
450 + $value = $default_options[$key];
451 +
452 + //260912.0522 Keep the operator-facing wait bounded so an accidental value cannot effectively disable health checking.
453 + //260911.0010 Here, bounded means the explicit 1–60-second range exposed by the setting.
454 + else if($key === 'asset_health_wait_seconds')
455 + $value = (!is_string($value) || !is_numeric($value) || (int)$value < 1 || (int)$value > 60) ? $default_options[$key] : (string)(int)$value;
456 +
435 457 else if($key === 'no_cache_headers_mode' && (!is_string($value) || !in_array($value, array('always', 'selective', 'evaluative'), TRUE)))
436 458 $value = $default_options[$key];
437 459
438 460 else if($key === 'no_cache_headers_debug' && (!is_string($value) || !is_numeric($value)))
@@ -488,9 +510,9 @@
488 510
489 511 else if($key === 'custom_reg_fields' && (!is_string($value) || !strlen($value)))
490 512 $value = $default_options[$key];
491 513
492 - else if(preg_match('/^custom_reg_(?:names|password|password_min_length|opt_in|auto_opt_out_transitions)$/', $key) && (!is_string($value) || !is_numeric($value)))
514 + else if(preg_match('/^custom_reg_(?:names|password|password_min_length|opt_in|auto_opt_out_transitions|require_valid_email_domain)$/', $key) && (!is_string($value) || !is_numeric($value)))
493 515 $value = $default_options[$key];
494 516
495 517 else if($key === 'custom_reg_password_min_strength' && (!is_string($value) || !strlen($value)))
496 518 $value = $default_options[$key];
@@ -674,9 +696,22 @@
674 696
675 697 else if($key === 'membership_eot_behavior' && (!is_string($value) || !preg_match('/^(?:demote|delete)$/', $value)))
676 698 $value = $default_options[$key];
677 699
700 + //260916.2306 Keep bootstrap validation side-effect free; role existence is checked later when the EOT demotion role is resolved, after s2Member is fully loaded.
701 + else if($key === 'eot_demotion_to_role' && (!is_string($value) || !$value || in_array($value, array('administrator', 'editor', 'author', 'contributor', 's2member_pending_deletion'), TRUE)))
702 + $value = $default_options[$key];
703 +
704 + else if($key === 'eot_demotion_from' && (!is_string($value) || !preg_match('/^(?:s2member_level|all)$/', $value)))
705 + $value = $default_options[$key];
706 +
678 707 else if($key === 'eot_time_ext_behavior' && (!is_string($value) || !preg_match('/^(?:extend|reset)$/', $value)))
708 + $value = $default_options[$key];
709 +
710 + else if($key === 'auto_eot_system_runtime_mode' && (!is_string($value) || !preg_match('/^(?:auto|custom)$/', $value)))
711 + $value = $default_options[$key];
712 +
713 + else if($key === 'auto_eot_system_runtime_custom' && (!is_string($value) || !is_numeric($value) || (float)$value < 1 || (float)$value > 3600))
679 714 $value = $default_options[$key];
680 715
681 716 else if(preg_match('/^(?:auto_eot_system_enabled|eot_grace_time|eots_remove_ccaps)$/', $key) && (!is_string($value) || !is_numeric($value)))
682 717 $value = $default_options[$key];