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 +17 -1 260909260917 View file →
@@ -137,9 +137,11 @@
137 137 $default_options['static_js'] = '0'; //260903.0437 Static frontend JavaScript delivery remains opt-in while generated assets are beta.
138 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 139 $default_options['static_js_minify'] = '0'; //260903.0437 Static JavaScript minification is independently opt-in and uses readable source files.
140 140 $default_options['static_assets_combine'] = '0'; //260903.1918 Keep Framework/Pro generated files separate by default; combining is an explicit request-reduction optimization.
141 - $default_options['dynamic_asset_loader'] = 's2o'; //260904.1923 Keep the repaired s2Member Dynamic Loader as the default; WordPress routing is an explicit compatibility option.
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.
142 144 $default_options['no_cache_headers_mode'] = 'always'; //260308 No-cache headers mode: `always`, `selective`, `evaluative`.
143 145 $default_options['no_cache_headers_debug'] = '0'; //260308 Adds Server-Timing no-cache debug header (support use only).
144 146 $default_options['sc_conds_allow_arbitrary_php'] = '0';
145 147 $default_options['sc_conds_whitelist'] = '';
@@ -382,8 +384,10 @@
382 384 $default_options['specific_ids'] = '';
383 385
384 386 $default_options['triggers_immediate_eot'] = 'reversals';
385 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.
386 390 $default_options['eot_time_ext_behavior'] = 'extend';
387 391 $default_options['auto_eot_system_enabled'] = '1';
388 392 $default_options['auto_eot_system_runtime_mode'] = 'auto';
389 393 $default_options['auto_eot_system_runtime_custom'] = '30';
@@ -443,8 +447,13 @@
443 447
444 448 else if(preg_match('/^static_(?:css|js)(?:_minify)?$/', $key) && (!is_string($value) || !is_numeric($value))) //260903.0437
445 449 $value = $default_options[$key];
446 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 +
447 456 else if($key === 'no_cache_headers_mode' && (!is_string($value) || !in_array($value, array('always', 'selective', 'evaluative'), TRUE)))
448 457 $value = $default_options[$key];
449 458
450 459 else if($key === 'no_cache_headers_debug' && (!is_string($value) || !is_numeric($value)))
@@ -684,8 +693,15 @@
684 693 else if($key === 'triggers_immediate_eot' && (!is_string($value) || !preg_match('/^(?:none|refunds|reversals|refunds,reversals|refunds,partial_refunds,reversals)$/', $value)))
685 694 $value = $default_options[$key];
686 695
687 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)))
688 704 $value = $default_options[$key];
689 705
690 706 else if($key === 'eot_time_ext_behavior' && (!is_string($value) || !preg_match('/^(?:extend|reset)$/', $value)))
691 707 $value = $default_options[$key];