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
s2member / src / includes / hooks.inc.php

hooks.inc.php in s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions 261011, at src/includes/hooks.inc.php

281 lines 22.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 // @codingStandardsIgnoreFile
3 /**
4 * Primary Hooks/Filters used by the s2Member plugin.
5 *
6 * Copyright: © 2009-2011
7 * {@link http://websharks-inc.com/ WebSharks, Inc.}
8 * (coded in the USA)
9 *
10 * Released under the terms of the GNU General Public License.
11 * You should have received a copy of the GNU General Public License,
12 * along with this software. In the main directory, see: /licensing/
13 * If not, see: {@link http://www.gnu.org/licenses/}.
14 *
15 * @package s2Member
16 * @since 3.0
17 */
18 if(!defined('WPINC')) // MUST have WordPress.
19 exit('Do not access this file directly.');
20 /*
21 Add the plugin Actions/Filters here.
22 */
23
24 //250506 Translations loaded at init to avoid PHP Notice since WP 6.7.
25 //260320 Run at priority 0 so translations are available as early as possible on `init`.
26 add_action('init', 'c_ws_plugin__s2member_translations::load', 0);
27
28 add_action('set_current_user', 'c_ws_plugin__s2member_user_securities::set_current_user', 2);
29
30 add_action('init', 'c_ws_plugin__s2member_ssl::check_force_ssl', 3);
31 add_action('init', 'c_ws_plugin__s2member_user_securities::initialize', 3);
32 add_action('init', 'c_ws_plugin__s2member_database::wait_timeout', 3);
33
34 //260307 No-cache headers behavior mode is selected at runtime (options load after this file is included).
35 add_action('init', 'c_ws_plugin__s2member_no_cache::setup_no_cache_headers_mode', 3);
36
37 add_action('init', 'c_ws_plugin__s2member_register::register', 4);
38 add_action('init', 'c_ws_plugin__s2member_paypal_notify::paypal_notify', 4);
39 add_action('init', 'c_ws_plugin__s2member_files::check_file_download_access', 4);
40 add_action('init', 'c_ws_plugin__s2member_profile_mods::handle_profile_modifications', 4);
41 add_action('init', 'c_ws_plugin__s2member_tracking_cookies::delete_sp_tracking_cookie', 4);
42 add_action('init', 'c_ws_plugin__s2member_tracking_cookies::delete_tracking_cookie', 4);
43 add_action('init', 'c_ws_plugin__s2member_cron_jobs::auto_eot_system_via_cron', 4);
44 add_action('init', 'c_ws_plugin__s2member_mo_page::membership_options_page', 4);
45 add_action('init', 'c_ws_plugin__s2member_s_badge_status::s_badge_status', 4);
46
47 add_action('init', 'c_ws_plugin__s2member_admin_css_js::menu_pages_css', 5);
48 add_action('init', 'c_ws_plugin__s2member_admin_css_js::menu_pages_js', 5);
49 add_action('init', 'c_ws_plugin__s2member_css_js::css', 5);
50
51 add_action('init', 'c_ws_plugin__s2member_constants::constants', 6);
52
53 add_action('init', 'c_ws_plugin__s2member_css_js::js_w_globals', 7);
54 add_action('init', 'c_ws_plugin__s2member_paypal_return::paypal_return', 7);
55 add_action('init', 'c_ws_plugin__s2member_paypal_checkout::paypal_checkout', 6); //260106
56 add_action('init', 'c_ws_plugin__s2member_paypal_webhook::paypal_webhook', 6); //260112
57 add_action('init', 'c_ws_plugin__s2member_profile::profile', 7);
58
59 add_action('init', 'c_ws_plugin__s2member_labels::config_label_translations', 10);
60
61 add_action('init', 'c_ws_plugin__s2member_login_redirects_r::remove_login_redirect_filters', 11);
62
63 add_action('init', 'c_ws_plugin__s2member_login_checks::monitor_simultaneous_logins', 10);
64
65 add_action('admin_init', 'c_ws_plugin__s2member_menu_pages::log_file_downloader');
66 add_action('admin_init', 'c_ws_plugin__s2member_menu_pages::logs_zip_downloader');
67
68 add_filter('bbp_has_replies_query', 'c_ws_plugin__s2member_querys::_bbp_flag_has_replies');
69 add_action('pre_get_posts', 'c_ws_plugin__s2member_security::security_gate_query', 100);
70 add_filter('wp_list_pages_excludes', 'c_ws_plugin__s2member_querys::_query_level_access_list_pages', 100);
71
72 add_action('wp', 'c_ws_plugin__s2member_ssl::check_force_ssl', 1);
73 add_action('wp', 'c_ws_plugin__s2member_security::security_gate', 1);
74 //261005.2320 Resolve actual REST controllers and IDs after WordPress matches and validates requests.
75 add_filter('rest_request_before_callbacks', 'c_ws_plugin__s2member_security_rest::security_gate', 10, 3);
76 add_action('rest_api_init', 'c_ws_plugin__s2member_security_rest::register_collection_filters', 100);
77
78 add_filter('wp_mail', 'c_ws_plugin__s2member_email_configs::email_filter');
79
80 add_filter('widget_text', 'do_shortcode'); // Shortcodes in widgets.
81
82 add_action('wp_print_styles', 'c_ws_plugin__s2member_css_js_themes::add_css');
83 add_action('wp_print_scripts', 'c_ws_plugin__s2member_css_js_themes::add_js_w_globals');
84 add_filter('script_loader_tag', 'c_ws_plugin__s2member_css_js_themes::script_loader_tag', 10, 2);
85
86 //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.
87 add_action('ws_plugin__s2member_loaded', function() {
88 add_action('updated_option', 'c_ws_plugin__s2member_utils_assets::maybe_invalidate_after_wp_option_update', 10, 3);
89 });
90 //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.
91 add_action('ws_plugin__s2member_after_update_all_options', 'c_ws_plugin__s2member_utils_assets::rebuild_static_assets_after_options_save', 10, 1);
92 add_action('activated_plugin', 'c_ws_plugin__s2member_utils_assets::invalidate_after_plugin_change');
93 add_action('deactivated_plugin', 'c_ws_plugin__s2member_utils_assets::invalidate_after_plugin_change');
94 add_action('upgrader_process_complete', 'c_ws_plugin__s2member_utils_assets::maybe_invalidate_after_upgrade', 10, 2);
95 add_action('ws_plugin__s2member_after_activation', 'c_ws_plugin__s2member_utils_assets::invalidate_static_assets', 10, 0);
96 add_action('wp_ajax_ws_plugin__s2member_refresh_static_assets', 'c_ws_plugin__s2member_utils_assets::ajax_refresh_static_assets');
97 add_action('wp_ajax_ws_plugin__s2member_asset_http_health', 'c_ws_plugin__s2member_utils_assets::ajax_asset_http_health_report');
98 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.
99 add_action('wp_ajax_ws_plugin__s2member_asset_runtime_suspect', 'c_ws_plugin__s2member_utils_assets::ajax_asset_runtime_suspicion');
100 add_action('wp_ajax_nopriv_ws_plugin__s2member_asset_runtime_suspect', 'c_ws_plugin__s2member_utils_assets::ajax_asset_runtime_suspicion');
101 //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.
102 add_action('ws_plugin__s2member_assets_health_logkeeper', 'c_ws_plugin__s2member_utils_assets::run_health_logkeeper');
103 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.
104 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.
105 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.
106 add_action('admin_notices', 'c_ws_plugin__s2member_utils_assets::static_assets_admin_notice');
107 add_action('admin_footer', 'c_ws_plugin__s2member_utils_assets::asset_http_health_probe', 900);
108 add_action('wp_footer', 'c_ws_plugin__s2member_utils_assets::asset_http_health_probe', 900);
109 add_action('wp_footer', 'c_ws_plugin__s2member_utils_assets::page_asset_runtime_monitor', 1000);
110
111 add_action('wp_login_failed', 'c_ws_plugin__s2member_brute_force::track_failed_logins');
112 add_filter('authenticate', 'c_ws_plugin__s2member_brute_force::stop_brute_force_logins', 100);
113
114 add_filter('wp_authenticate_user', 'c_ws_plugin__s2member_login_checks::ms_wp_authenticate_user', 100);
115 add_filter('wp_authenticate_user', 'c_ws_plugin__s2member_login_checks::stop_simultaneous_logins', 100);
116 add_action('wp_login', 'c_ws_plugin__s2member_login_checks::update_simultaneous_logins', 1);
117 add_action('clear_auth_cookie', 'c_ws_plugin__s2member_login_checks::simultaneous_logout', 1);
118
119 add_action('delete_user', 'c_ws_plugin__s2member_user_deletions::handle_user_deletions');
120 add_action('wpmu_delete_user', 'c_ws_plugin__s2member_user_deletions::handle_ms_user_deletions');
121 add_action('remove_user_from_blog', 'c_ws_plugin__s2member_user_deletions::handle_ms_user_deletions', 10, 2);
122
123 add_filter('enable_edit_any_user_configuration', 'c_ws_plugin__s2member_user_securities::ms_allow_edits');
124
125 add_filter('pre_option_default_role', 'c_ws_plugin__s2member_option_forces::force_default_role');
126 add_filter('pre_site_option_default_user_role', 'c_ws_plugin__s2member_option_forces::force_mms_default_role');
127 add_filter('pre_site_option_add_new_users', 'c_ws_plugin__s2member_option_forces::mms_allow_new_users');
128 add_filter('pre_site_option_dashboard_blog', 'c_ws_plugin__s2member_option_forces::mms_dashboard_blog');
129 add_filter('pre_option_users_can_register', 'c_ws_plugin__s2member_option_forces::check_register_access');
130 add_filter('pre_site_option_registration', 'c_ws_plugin__s2member_option_forces::check_mms_register_access');
131 add_filter('bp_core_get_root_options', 'c_ws_plugin__s2member_option_forces::check_bp_mms_register_access');
132 add_filter('bp_core_get_site_options', 'c_ws_plugin__s2member_option_forces::check_bp_mms_register_access');
133
134 add_filter('random_password', 'c_ws_plugin__s2member_registrations::generate_password');
135 add_action('user_register', 'c_ws_plugin__s2member_registrations::configure_user_registration');
136 add_action('register_form', 'c_ws_plugin__s2member_custom_reg_fields::custom_registration_fields');
137 add_filter('registration_errors', 'c_ws_plugin__s2member_registrations::custom_registration_field_errors', 10, 3);
138 add_filter('send_password_change_email', '__return_false'); // Turn this off in favor of s2Member.
139
140 add_filter('add_signup_meta', 'c_ws_plugin__s2member_registrations::ms_process_signup_meta');
141 add_filter('bp_signup_usermeta', 'c_ws_plugin__s2member_registrations::ms_process_signup_meta');
142 add_filter('bp_core_activated_user', 'c_ws_plugin__s2member_registrations::bp_user_activation');
143 add_filter('wpmu_validate_user_signup', 'c_ws_plugin__s2member_registrations::ms_validate_user_signup');
144 add_action('signup_hidden_fields', 'c_ws_plugin__s2member_registrations::ms_process_signup_hidden_fields');
145 add_filter('registration_errors', 'c_ws_plugin__s2member_registrations::ms_register_existing_user', 11, 3);
146 add_filter('wpmu_signup_user_notification_email', 'c_ws_plugin__s2member_email_configs::ms_nice_email_roles', 11);
147 add_filter('_wpmu_activate_existing_error_', 'c_ws_plugin__s2member_registrations::ms_activate_existing_user', 10, 2);
148 add_action('wpmu_activate_user', 'c_ws_plugin__s2member_registrations::configure_user_on_ms_user_activation', 10, 3);
149 add_action('wpmu_activate_blog', 'c_ws_plugin__s2member_registrations::configure_user_on_ms_blog_activation', 10, 5);
150 add_action('signup_extra_fields', 'c_ws_plugin__s2member_custom_reg_fields::ms_custom_registration_fields');
151
152 add_action('plugins_loaded', 'c_ws_plugin__s2member_custom_reg_fields::add_filters_get_user_option', 1);
153
154 add_action('bp_after_signup_profile_fields', 'c_ws_plugin__s2member_custom_reg_fields_4bp::custom_registration_fields_4bp');
155 add_action('bp_signup_validate', 'c_ws_plugin__s2member_registrations::custom_registration_field_errors_4bp');
156 add_action('bp_after_profile_field_content', 'c_ws_plugin__s2member_custom_reg_fields_4bp::custom_profile_fields_4bp');
157 add_action('bp_profile_field_item', 'c_ws_plugin__s2member_custom_reg_fields_4bp::custom_profile_field_items_4bp');
158 add_action('xprofile_updated_profile', 'c_ws_plugin__s2member_profile_mods_4bp::handle_profile_modifications_4bp', 1000);
159
160 add_action('wp_login', 'c_ws_plugin__s2member_login_redirects::login_redirect', 10, 2);
161 add_action('login_head', 'c_ws_plugin__s2member_login_customizations::login_header_styles');
162 add_filter('login_headerurl', 'c_ws_plugin__s2member_login_customizations::login_header_url');
163 add_filter('login_headertext', 'c_ws_plugin__s2member_login_customizations::login_header_title');
164 add_action('login_footer', 'c_ws_plugin__s2member_login_customizations::login_footer_design');
165 add_filter("lostpassword_url", "c_ws_plugin__s2member_login_customizations::lost_password_url", 10, 2);
166
167 add_action('login_footer', 'c_ws_plugin__s2member_tracking_codes::display_signup_tracking_codes');
168 add_action('wp_footer', 'c_ws_plugin__s2member_tracking_codes::display_signup_tracking_codes');
169
170 add_action('login_footer', 'c_ws_plugin__s2member_tracking_codes::display_modification_tracking_codes');
171 add_action('wp_footer', 'c_ws_plugin__s2member_tracking_codes::display_modification_tracking_codes');
172
173 add_action('login_footer', 'c_ws_plugin__s2member_tracking_codes::display_ccap_tracking_codes');
174 add_action('wp_footer', 'c_ws_plugin__s2member_tracking_codes::display_ccap_tracking_codes');
175
176 add_action('login_footer', 'c_ws_plugin__s2member_tracking_codes::display_sp_tracking_codes');
177 add_action('wp_footer', 'c_ws_plugin__s2member_tracking_codes::display_sp_tracking_codes');
178
179 add_action('wp_footer', 'c_ws_plugin__s2member_wp_footer::wp_footer_code');
180
181 add_action('admin_init', 'c_ws_plugin__s2member_admin_lockouts::admin_lockout', 1);
182 add_action('admin_init', 'c_ws_plugin__s2member_check_activation::check');
183
184 add_action('load-settings.php', 'c_ws_plugin__s2member_op_notices::multisite_ops_notice');
185 add_action('load-options-general.php', 'c_ws_plugin__s2member_op_notices::general_ops_notice');
186 add_action('load-options-reading.php', 'c_ws_plugin__s2member_op_notices::reading_ops_notice');
187 add_action('load-user-new.php', 'c_ws_plugin__s2member_user_new::admin_user_new_fields');
188
189 add_action('add_meta_boxes', 'c_ws_plugin__s2member_meta_boxes::add_meta_boxes');
190 add_action('save_post', 'c_ws_plugin__s2member_meta_box_saves::save_meta_boxes');
191 add_action('admin_menu', 'c_ws_plugin__s2member_menu_pages::add_admin_options');
192 add_action('network_admin_menu', 'c_ws_plugin__s2member_menu_pages::add_network_admin_options');
193 add_action('admin_bar_menu', 'c_ws_plugin__s2member_admin_lockouts::filter_admin_menu_bar', 100);
194 add_action('admin_print_scripts', 'c_ws_plugin__s2member_menu_pages::add_admin_scripts');
195 add_action('admin_print_styles', 'c_ws_plugin__s2member_menu_pages::add_admin_styles');
196 add_action('admin_menu', 'c_ws_plugin__s2member_menu_pages::get_help_panel', 12); //250824
197
198 //260813 Warn administrators when shortcodes request user fields that have not been explicitly approved.
199 add_action('admin_init', 'c_ws_plugin__s2member_admin_notices::dismiss_shortcode_user_fields_notice');
200 add_action('admin_notices', 'c_ws_plugin__s2member_admin_notices::shortcode_user_fields_notice', 11);
201
202 //260820.0149 Escalate materially unhealthy Auto-EOT processing beyond its settings panel.
203 add_action('admin_notices', 'c_ws_plugin__s2member_eot::auto_eot_system_admin_notice', 12);
204 add_action('user_admin_notices', 'c_ws_plugin__s2member_eot::auto_eot_system_admin_notice', 12);
205 add_action('network_admin_notices', 'c_ws_plugin__s2member_eot::auto_eot_system_admin_notice', 12);
206
207 //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.
208 add_action('admin_notices', 'c_ws_plugin__s2member_admin_notices::outdated_pro_notice', 10);
209 add_action('user_admin_notices', 'c_ws_plugin__s2member_admin_notices::outdated_pro_notice', 10);
210 add_action('network_admin_notices', 'c_ws_plugin__s2member_admin_notices::outdated_pro_notice', 10);
211
212 add_action('admin_notices', 'c_ws_plugin__s2member_admin_notices::admin_notices');
213 add_action('user_admin_notices', 'c_ws_plugin__s2member_admin_notices::admin_notices');
214 add_action('network_admin_notices', 'c_ws_plugin__s2member_admin_notices::admin_notices');
215
216 add_action('pre_user_query', 'c_ws_plugin__s2member_users_list::users_list_query');
217 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.
218 add_filter('manage_users_columns', 'c_ws_plugin__s2member_users_list::users_list_cols');
219 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.
220 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.
221 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.
222 add_filter('manage_users_custom_column', 'c_ws_plugin__s2member_users_list::users_list_display_cols', 10, 3);
223 add_filter('manage_users_sortable_columns', 'c_ws_plugin__s2member_users_list::users_list_add_sortable');
224 add_filter('pre_user_query', 'c_ws_plugin__s2member_users_list::users_list_make_sortable');
225 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.
226 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.
227 add_action('edit_user_profile', 'c_ws_plugin__s2member_users_list::users_list_edit_cols');
228 add_action('show_user_profile', 'c_ws_plugin__s2member_users_list::users_list_edit_cols');
229 add_action('edit_user_profile_update', 'c_ws_plugin__s2member_users_list::users_list_update_cols');
230 add_action('personal_options_update', 'c_ws_plugin__s2member_users_list::users_list_update_cols');
231 add_action('set_user_role', 'c_ws_plugin__s2member_registration_times::synchronize_paid_reg_times', 10, 2);
232 add_filter('show_password_fields', 'c_ws_plugin__s2member_user_securities::hide_password_fields', 10, 2);
233
234 add_action('add_user_meta', 'c_ws_plugin__s2member_access_cap_times::get_user_caps_before_update_on_add', 10, 3);
235 add_action('update_user_meta', 'c_ws_plugin__s2member_access_cap_times::get_user_caps_before_update', 10, 4);
236
237 add_action('added_user_meta', 'c_ws_plugin__s2member_access_cap_times::log_access_cap_times', 10, 4);
238 add_action('updated_user_meta', 'c_ws_plugin__s2member_access_cap_times::log_access_cap_times', 10, 4);
239 add_action('deleted_user_meta', 'c_ws_plugin__s2member_access_cap_times::log_access_cap_times_on_delete', 10, 3);
240
241 add_filter('cron_schedules', 'c_ws_plugin__s2member_cron_jobs::extend_cron_schedules');
242 add_action('ws_plugin__s2member_auto_eot_system__schedule', 'c_ws_plugin__s2member_eot::auto_eot_system');
243 //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.
244 add_action('ws_plugin__s2member_auto_eot_system__continuation', 'c_ws_plugin__s2member_eot::auto_eot_system_continuation');
245 add_action('ws_plugin__s2member_eot_processed_time_backfill', 'c_ws_plugin__s2member_eot::backfill_eot_processed_times'); //260822.2048 Recover historical EOT processing times from legacy Administrative Notes after upgrade.
246 //260819.0613 Repair a missing recurring Auto-EOT event during normal requests, and immediately after an EOT run if WordPress failed to reschedule it.
247 add_action('init', 'c_ws_plugin__s2member_eot::ensure_auto_eot_system', 3);
248 add_action('init', 'c_ws_plugin__s2member_eot::ensure_eot_processed_time_backfill', 4); //260822.2048 Self-heal only while the temporary upgrade backfill cursor exists.
249 add_action('ws_plugin__s2member_after_auto_eot_system', 'c_ws_plugin__s2member_eot::ensure_auto_eot_system', 999);
250
251 add_action('wp_ajax_ws_plugin__s2member_update_roles_via_ajax', 'c_ws_plugin__s2member_roles_caps::update_roles_via_ajax');
252
253 add_action('wp_ajax_ws_plugin__s2member_sp_access_link_via_ajax', 'c_ws_plugin__s2member_sp_access::sp_access_link_via_ajax');
254 add_action('wp_ajax_ws_plugin__s2member_reg_access_link_via_ajax', 'c_ws_plugin__s2member_register_access::reg_access_link_via_ajax');
255
256 add_action('wp_ajax_ws_plugin__s2member_delete_reset_all_ip_restrictions_via_ajax', 'c_ws_plugin__s2member_ip_restrictions::delete_reset_all_ip_restrictions_via_ajax');
257 add_action('wp_ajax_ws_plugin__s2member_delete_reset_specific_ip_restrictions_via_ajax', 'c_ws_plugin__s2member_ip_restrictions::delete_reset_specific_ip_restrictions_via_ajax');
258
259 add_action('ws_plugin__s2member_during_collective_mods', 'c_ws_plugin__s2member_list_servers::auto_process_list_server_removals', 10, 7);
260 add_action('ws_plugin__s2member_during_collective_eots', 'c_ws_plugin__s2member_list_servers::auto_process_list_server_removals', 10, 4);
261
262 add_action('init', 'c_ws_plugin__s2member_utils_urls::short_link_redirect', 1); //260612
263
264 add_filter('ws_plugin__s2member_content_redirect_status', 'c_ws_plugin__s2member_utils_urls::redirect_browsers_using_302_status');
265
266 add_filter('bbp_get_caps_for_role', 'c_ws_plugin__s2member_roles_caps::bbp_dynamic_role_caps', 10, 2);
267 add_action('bbp_activation', 'c_ws_plugin__s2member_roles_caps::config_roles', 11);
268
269 add_action('http_api_debug', 'c_ws_plugin__s2member_utils_logs::http_api_debug', 1000, 5);
270
271 add_action('plugins_loaded', 'c_ws_plugin__s2member_mo_page::back_compat_mop_vars', -(PHP_INT_MAX - 10));
272
273 remove_filter('the_content', 'wptexturize'); // Bug fix; see: <https://github.com/websharks/s2member/issues/349>
274 // See also, this WP core bug report for further details: <https://core.trac.wordpress.org/ticket/29608>
275 /*
276 Register the activation | de-activation routines.
277 */
278 register_activation_hook($GLOBALS['WS_PLUGIN__']['s2member']['c']['plugin_basename'], 'c_ws_plugin__s2member_installation::activate');
279 register_deactivation_hook($GLOBALS['WS_PLUGIN__']['s2member']['c']['plugin_basename'], 'c_ws_plugin__s2member_installation::deactivate');
280 register_uninstall_hook($GLOBALS['WS_PLUGIN__']['s2member']['c']['plugin_basename'], 'c_ws_plugin__s2member_installation::uninstall');
281