| @@ -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]; |