PluginProbe
s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions / 260917
s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions v260917
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
← All changes | src/includes/syscon.inc.php +26 -0 260829260917 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'] = '';
@@ -375,8 +384,10 @@
375 384 $default_options['specific_ids'] = '';
376 385
377 386 $default_options['triggers_immediate_eot'] = 'reversals';
378 387 $default_options['membership_eot_behavior'] = 'demote';
388 + $default_options['eot_demotion_to_role'] = 'subscriber';
389 + $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.
379 390 $default_options['eot_time_ext_behavior'] = 'extend';
380 391 $default_options['auto_eot_system_enabled'] = '1';
381 392 $default_options['auto_eot_system_runtime_mode'] = 'auto';
382 393 $default_options['auto_eot_system_runtime_custom'] = '30';
@@ -433,8 +444,16 @@
433 444
434 445 else if($key === 'lazy_load_css_js' && (!is_string($value) || !is_numeric($value)))
435 446 $value = $default_options[$key];
436 447
448 + else if(preg_match('/^static_(?:css|js)(?:_minify)?$/', $key) && (!is_string($value) || !is_numeric($value))) //260903.0437
449 + $value = $default_options[$key];
450 +
451 + //260912.0522 Keep the operator-facing wait bounded so an accidental value cannot effectively disable health checking.
452 + //260911.0010 Here, bounded means the explicit 1–60-second range exposed by the setting.
453 + else if($key === 'asset_health_wait_seconds')
454 + $value = (!is_string($value) || !is_numeric($value) || (int)$value < 1 || (int)$value > 60) ? $default_options[$key] : (string)(int)$value;
455 +
437 456 else if($key === 'no_cache_headers_mode' && (!is_string($value) || !in_array($value, array('always', 'selective', 'evaluative'), TRUE)))
438 457 $value = $default_options[$key];
439 458
440 459 else if($key === 'no_cache_headers_debug' && (!is_string($value) || !is_numeric($value)))
@@ -674,8 +693,15 @@
674 693 else if($key === 'triggers_immediate_eot' && (!is_string($value) || !preg_match('/^(?:none|refunds|reversals|refunds,reversals|refunds,partial_refunds,reversals)$/', $value)))
675 694 $value = $default_options[$key];
676 695
677 696 else if($key === 'membership_eot_behavior' && (!is_string($value) || !preg_match('/^(?:demote|delete)$/', $value)))
697 + $value = $default_options[$key];
698 +
699 + //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.
700 + else if($key === 'eot_demotion_to_role' && (!is_string($value) || !$value || in_array($value, array('administrator', 'editor', 'author', 'contributor', 's2member_pending_deletion'), TRUE)))
701 + $value = $default_options[$key];
702 +
703 + else if($key === 'eot_demotion_from' && (!is_string($value) || !preg_match('/^(?:s2member_level|all)$/', $value)))
678 704 $value = $default_options[$key];
679 705
680 706 else if($key === 'eot_time_ext_behavior' && (!is_string($value) || !preg_match('/^(?:extend|reset)$/', $value)))
681 707 $value = $default_options[$key];