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/hooks.inc.php +48 -0 260814260917 View file →
@@ -81,8 +81,33 @@
81 81 add_action('wp_print_styles', 'c_ws_plugin__s2member_css_js_themes::add_css');
82 82 add_action('wp_print_scripts', 'c_ws_plugin__s2member_css_js_themes::add_js_w_globals');
83 83 add_filter('script_loader_tag', 'c_ws_plugin__s2member_css_js_themes::script_loader_tag', 10, 2);
84 84
85 +//260904.0300 Fresh activation can update options before funcs.inc.php installs s2Member's class autoloader, so defer this callback until s2Member is fully loaded.
86 +add_action('ws_plugin__s2member_loaded', function() {
87 + add_action('updated_option', 'c_ws_plugin__s2member_utils_assets::maybe_invalidate_after_wp_option_update', 10, 3);
88 +});
89 +//260911.1834 Relevant General Options saves rebuild enabled static assets after the complete new option set is available, instead of making the admin wait for a frontend page-load.
90 +add_action('ws_plugin__s2member_after_update_all_options', 'c_ws_plugin__s2member_utils_assets::rebuild_static_assets_after_options_save', 10, 1);
91 +add_action('activated_plugin', 'c_ws_plugin__s2member_utils_assets::invalidate_after_plugin_change');
92 +add_action('deactivated_plugin', 'c_ws_plugin__s2member_utils_assets::invalidate_after_plugin_change');
93 +add_action('upgrader_process_complete', 'c_ws_plugin__s2member_utils_assets::maybe_invalidate_after_upgrade', 10, 2);
94 +add_action('ws_plugin__s2member_after_activation', 'c_ws_plugin__s2member_utils_assets::invalidate_static_assets', 10, 0);
95 +add_action('wp_ajax_ws_plugin__s2member_refresh_static_assets', 'c_ws_plugin__s2member_utils_assets::ajax_refresh_static_assets');
96 +add_action('wp_ajax_ws_plugin__s2member_asset_http_health', 'c_ws_plugin__s2member_utils_assets::ajax_asset_http_health_report');
97 +add_action('wp_ajax_ws_plugin__s2member_clear_asset_health_details', 'c_ws_plugin__s2member_utils_assets::ajax_clear_asset_health_details'); //260913.0056 Clear only the requested persistent troubleshooting summary; scoring and current Health remain unchanged.
98 +add_action('wp_ajax_ws_plugin__s2member_asset_runtime_suspect', 'c_ws_plugin__s2member_utils_assets::ajax_asset_runtime_suspicion');
99 +add_action('wp_ajax_nopriv_ws_plugin__s2member_asset_runtime_suspect', 'c_ws_plugin__s2member_utils_assets::ajax_asset_runtime_suspicion');
100 +//260912.0258 Frontend requests queue separate health events; the Health Logkeeper merges them later so page delivery never waits on the shared health-log writer.
101 +add_action('ws_plugin__s2member_assets_health_logkeeper', 'c_ws_plugin__s2member_utils_assets::run_health_logkeeper');
102 +add_action('init', 'c_ws_plugin__s2member_utils_assets::maybe_upgrade_asset_health_format', 1); //260912.0522 Run before normal asset decisions so stale first-v260909 activation tags/builds cannot leak into the physical-response scoring format.
103 +add_action('admin_init', 'c_ws_plugin__s2member_utils_assets::maybe_rebuild_static_assets_on_admin_request', 20); //260911.1924 Privileged admin page-loads are a cheap recovery opportunity for pending, ungenerated, or locally missing enabled static assets; frontend traffic remains a fallback.
104 +add_action('admin_init', 'c_ws_plugin__s2member_utils_assets::dismiss_static_assets_admin_notice'); //260910.0709 Process the nonce-protected incident dismissal before the same request reaches admin_notices.
105 +add_action('admin_notices', 'c_ws_plugin__s2member_utils_assets::static_assets_admin_notice');
106 +add_action('admin_footer', 'c_ws_plugin__s2member_utils_assets::asset_http_health_probe', 900);
107 +add_action('wp_footer', 'c_ws_plugin__s2member_utils_assets::asset_http_health_probe', 900);
108 +add_action('wp_footer', 'c_ws_plugin__s2member_utils_assets::page_asset_runtime_monitor', 1000);
109 +
85 110 add_action('wp_login_failed', 'c_ws_plugin__s2member_brute_force::track_failed_logins');
86 111 add_filter('authenticate', 'c_ws_plugin__s2member_brute_force::stop_brute_force_logins', 100);
87 112
88 113 add_filter('wp_authenticate_user', 'c_ws_plugin__s2member_login_checks::ms_wp_authenticate_user', 100);
@@ -172,17 +197,33 @@
172 197 //260813 Warn administrators when shortcodes request user fields that have not been explicitly approved.
173 198 add_action('admin_init', 'c_ws_plugin__s2member_admin_notices::dismiss_shortcode_user_fields_notice');
174 199 add_action('admin_notices', 'c_ws_plugin__s2member_admin_notices::shortcode_user_fields_notice', 11);
175 200
201 +//260820.0149 Escalate materially unhealthy Auto-EOT processing beyond its settings panel.
202 +add_action('admin_notices', 'c_ws_plugin__s2member_auto_eots::auto_eot_system_admin_notice', 12);
203 +add_action('user_admin_notices', 'c_ws_plugin__s2member_auto_eots::auto_eot_system_admin_notice', 12);
204 +add_action('network_admin_notices', 'c_ws_plugin__s2member_auto_eots::auto_eot_system_admin_notice', 12);
205 +
206 +//260917.0425 Warn administrators from the current Framework when the installed Pro add-on predates the current Pro updater, without disabling otherwise-compatible Pro features.
207 +add_action('admin_notices', 'c_ws_plugin__s2member_admin_notices::outdated_pro_notice', 10);
208 +add_action('user_admin_notices', 'c_ws_plugin__s2member_admin_notices::outdated_pro_notice', 10);
209 +add_action('network_admin_notices', 'c_ws_plugin__s2member_admin_notices::outdated_pro_notice', 10);
210 +
176 211 add_action('admin_notices', 'c_ws_plugin__s2member_admin_notices::admin_notices');
177 212 add_action('user_admin_notices', 'c_ws_plugin__s2member_admin_notices::admin_notices');
178 213 add_action('network_admin_notices', 'c_ws_plugin__s2member_admin_notices::admin_notices');
179 214
180 215 add_action('pre_user_query', 'c_ws_plugin__s2member_users_list::users_list_query');
216 +add_filter('views_users', 'c_ws_plugin__s2member_users_list::users_list_views'); //260828.0231 Reuse WordPress' native Users views for separate Current and Previous End-of-Term reports.
181 217 add_filter('manage_users_columns', 'c_ws_plugin__s2member_users_list::users_list_cols');
218 +add_filter('manage_users_columns', 'c_ws_plugin__s2member_users_list::users_list_required_eot_cols', PHP_INT_MAX); //260828.0231 Preserve each EOT review view's required columns after Users-table customization plugins apply saved layouts.
219 +add_filter('default_hidden_columns', 'c_ws_plugin__s2member_users_list::users_list_default_hidden_cols', 10, 2); //260822.1509 Keep optional EOT history columns available without widening the normal Users table by default.
220 +add_filter('hidden_columns', 'c_ws_plugin__s2member_users_list::users_list_hidden_cols', PHP_INT_MAX, 2); //260828.0231 Enforce each EOT review view's primary timestamps after other plugins filter Screen Options; normal Users views remain untouched.
182 221 add_filter('manage_users_custom_column', 'c_ws_plugin__s2member_users_list::users_list_display_cols', 10, 3);
183 222 add_filter('manage_users_sortable_columns', 'c_ws_plugin__s2member_users_list::users_list_add_sortable');
184 223 add_filter('pre_user_query', 'c_ws_plugin__s2member_users_list::users_list_make_sortable');
224 +add_action('admin_notices', 'c_ws_plugin__s2member_users_list::users_list_eot_notice', 13); //260828.0231 Explain the Current and Previous End-of-Term reports directly on their Users views.
225 +add_action('admin_notices', 'c_ws_plugin__s2member_users_list::users_list_pending_deletion_notice', 13); //260822.1519 Explain the native Pending Deletion review queue directly on that role-filtered Users page.
185 226 add_action('edit_user_profile', 'c_ws_plugin__s2member_users_list::users_list_edit_cols');
186 227 add_action('show_user_profile', 'c_ws_plugin__s2member_users_list::users_list_edit_cols');
187 228 add_action('edit_user_profile_update', 'c_ws_plugin__s2member_users_list::users_list_update_cols');
188 229 add_action('personal_options_update', 'c_ws_plugin__s2member_users_list::users_list_update_cols');
@@ -197,8 +238,15 @@
197 238 add_action('deleted_user_meta', 'c_ws_plugin__s2member_access_cap_times::log_access_cap_times_on_delete', 10, 3);
198 239
199 240 add_filter('cron_schedules', 'c_ws_plugin__s2member_cron_jobs::extend_cron_schedules');
200 241 add_action('ws_plugin__s2member_auto_eot_system__schedule', 'c_ws_plugin__s2member_auto_eots::auto_eot_system');
242 +//260820.0056 Keep catch-up work on a separate one-off hook so it can process only overdue EOTs without repeatedly invoking collective Pro cron consumers.
243 +add_action('ws_plugin__s2member_auto_eot_system__continuation', 'c_ws_plugin__s2member_auto_eots::auto_eot_system_continuation');
244 +add_action('ws_plugin__s2member_eot_processed_time_backfill', 'c_ws_plugin__s2member_auto_eots::backfill_eot_processed_times'); //260822.2048 Recover historical EOT processing times from legacy Administrative Notes after upgrade.
245 +//260819.0613 Repair a missing recurring Auto-EOT event during normal requests, and immediately after an EOT run if WordPress failed to reschedule it.
246 +add_action('init', 'c_ws_plugin__s2member_auto_eots::ensure_auto_eot_system', 3);
247 +add_action('init', 'c_ws_plugin__s2member_auto_eots::ensure_eot_processed_time_backfill', 4); //260822.2048 Self-heal only while the temporary upgrade backfill cursor exists.
248 +add_action('ws_plugin__s2member_after_auto_eot_system', 'c_ws_plugin__s2member_auto_eots::ensure_auto_eot_system', 999);
201 249
202 250 add_action('wp_ajax_ws_plugin__s2member_update_roles_via_ajax', 'c_ws_plugin__s2member_roles_caps::update_roles_via_ajax');
203 251
204 252 add_action('wp_ajax_ws_plugin__s2member_sp_access_link_via_ajax', 'c_ws_plugin__s2member_sp_access::sp_access_link_via_ajax');