diff --git a/includes/sp-event-admin-week-filter.php b/includes/sp-event-admin-week-filter.php index 69a8443..77cc433 100644 --- a/includes/sp-event-admin-week-filter.php +++ b/includes/sp-event-admin-week-filter.php @@ -10,6 +10,121 @@ if ( ! defined( 'ABSPATH' ) ) { exit; } +/** + * Screen-option defaults for event list filters. + * + * @return array + */ +function tony_sportspress_event_filter_defaults() { + return array( + 'month' => true, + 'week' => true, + 'team' => true, + 'venue' => true, + 'league' => true, + 'season' => true, + 'match_day' => true, + ); +} + +/** + * Build user meta key for an event filter screen option. + * + * @param string $key Filter key. + * @return string + */ +function tony_sportspress_event_filter_meta_key( $key ) { + return 'tony_sp_event_filter_' . $key; +} + +/** + * Check whether a filter is enabled for the current user. + * + * @param string $key Filter key. + * @return bool + */ +function tony_sportspress_event_filter_enabled( $key ) { + $defaults = tony_sportspress_event_filter_defaults(); + if ( ! array_key_exists( $key, $defaults ) ) { + return true; + } + + $user_id = get_current_user_id(); + if ( ! $user_id ) { + return (bool) $defaults[ $key ]; + } + + $stored = get_user_meta( $user_id, tony_sportspress_event_filter_meta_key( $key ), true ); + if ( '' === $stored ) { + return (bool) $defaults[ $key ]; + } + + return '1' === (string) $stored; +} + +/** + * Persist event filter Screen Options via AJAX. + */ +function tony_sportspress_save_event_filter_screen_options_ajax() { + if ( ! current_user_can( 'edit_posts' ) ) { + wp_send_json_error(); + } + + check_ajax_referer( 'tony_sp_event_filters', 'nonce' ); + + $defaults = tony_sportspress_event_filter_defaults(); + $filters = isset( $_POST['filters'] ) && is_array( $_POST['filters'] ) ? $_POST['filters'] : array(); + $user_id = get_current_user_id(); + + foreach ( $defaults as $key => $_enabled ) { + $value = isset( $filters[ $key ] ) ? sanitize_text_field( wp_unslash( $filters[ $key ] ) ) : '0'; + update_user_meta( $user_id, tony_sportspress_event_filter_meta_key( $key ), '1' === $value ? '1' : '0' ); + } + + wp_send_json_success(); +} +add_action( 'wp_ajax_tony_sp_event_filter_prefs_save', 'tony_sportspress_save_event_filter_screen_options_ajax' ); + +/** + * Add filter visibility toggles to Screen Options on event list admin page. + * + * @param string $settings Existing settings HTML. + * @param WP_Screen $screen Current screen. + * @return string + */ +function tony_sportspress_event_filter_screen_options_markup( $settings, $screen ) { + if ( ! $screen || 'edit-sp_event' !== $screen->id ) { + return $settings; + } + + $labels = array( + 'month' => __( 'Month/Year', 'tonys-sportspress-enhancements' ), + 'week' => __( 'Week', 'tonys-sportspress-enhancements' ), + 'team' => __( 'Team', 'tonys-sportspress-enhancements' ), + 'venue' => __( 'Venue', 'tonys-sportspress-enhancements' ), + 'league' => __( 'League', 'tonys-sportspress-enhancements' ), + 'season' => __( 'Season', 'tonys-sportspress-enhancements' ), + 'match_day' => __( 'Match Day', 'tonys-sportspress-enhancements' ), + ); + + $settings .= '
'; + $settings .= '' . esc_html__( 'Event Filters', 'tonys-sportspress-enhancements' ) . ''; + + foreach ( $labels as $key => $label ) { + $meta_key = tony_sportspress_event_filter_meta_key( $key ); + $checked = tony_sportspress_event_filter_enabled( $key ) ? ' checked="checked"' : ''; + $settings .= ''; + } + + $settings .= '
'; + + return $settings; +} +add_filter( 'screen_settings', 'tony_sportspress_event_filter_screen_options_markup', 10, 2 ); + /** * Parse an ISO week input (e.g. 2026-W07) from the request. * @@ -43,6 +158,9 @@ function tony_sportspress_render_admin_week_filter( $post_type ) { if ( 'sp_event' !== $post_type ) { return; } + if ( ! tony_sportspress_event_filter_enabled( 'week' ) ) { + return; + } $value = ''; if ( ! empty( $_GET['sp_week_filter'] ) ) { @@ -85,8 +203,47 @@ function tony_sportspress_admin_week_filter_styles() { if ( ! $screen || 'edit-sp_event' !== $screen->id ) { return; } + $hide = array( + 'month' => ! tony_sportspress_event_filter_enabled( 'month' ), + 'team' => ! tony_sportspress_event_filter_enabled( 'team' ), + 'venue' => ! tony_sportspress_event_filter_enabled( 'venue' ), + 'league' => ! tony_sportspress_event_filter_enabled( 'league' ), + 'season' => ! tony_sportspress_event_filter_enabled( 'season' ), + 'match_day' => ! tony_sportspress_event_filter_enabled( 'match_day' ), + 'week' => ! tony_sportspress_event_filter_enabled( 'week' ), + ); ?>