From 01d32308dd852abe2283b7e30617bffdde5680ee Mon Sep 17 00:00:00 2001 From: Anthony Correa Date: Wed, 15 May 2024 11:00:07 -0500 Subject: [PATCH] first attempt --- includes/sp-event-has-outcome-filter.php | 101 ++++++++++++++++++++++ includes/sp-event-has-outcome.php | 105 +++++++++++++++++++++++ includes/sp-event-status-filter.php | 58 +++++++++++++ includes/timeframe-filter.php | 70 +++++++++++++++ tonys-sportspress-enhancements.php | 4 + 5 files changed, 338 insertions(+) create mode 100644 includes/sp-event-has-outcome-filter.php create mode 100644 includes/sp-event-has-outcome.php create mode 100644 includes/sp-event-status-filter.php create mode 100644 includes/timeframe-filter.php diff --git a/includes/sp-event-has-outcome-filter.php b/includes/sp-event-has-outcome-filter.php new file mode 100644 index 0000000..0dd1559 --- /dev/null +++ b/includes/sp-event-has-outcome-filter.php @@ -0,0 +1,101 @@ + "AND", + [ + "key" => "sp_results", + "value" => '"outcome"', + "compare" => "LIKE", + ], + [ + "key" => "sp_results", + "value" => 's:7:"outcome";a:0:{}', // i.e. a blank outcome + "compare" => "NOT LIKE", + ], + ]; + } elseif (!$has_outcome) { + return [ + "relation" => "OR", + [ + "key" => "sp_results", + "value" => '"outcome"', + "compare" => "NOT LIKE", + ], + [ + "key" => "sp_results", + "value" => 's:7:"outcome";a:0:{}', // i.e. a blank outcome + "compare" => "LIKE", + ], + ]; + } +} + +// Add the custom filter dropdown +function outcome_filter_dropdown() +{ + $current_screen = get_current_screen(); + + if ($current_screen->id == "edit-sp_event") { + if (isset($_GET["has-outcome"])) { + switch ($_GET["has-outcome"]) { + case 'true': + $selected="has-outcome";break; + case 'false': + $selected="has-no-outcome";break; + case '': + $selected='';break; + } + }; ?> + + set("meta_query", $meta_query); + } + elseif ($_GET["has-outcome"] == "true") { + $meta_query = get_sp_event_has_outcome_meta_query_args(true); + $query->set("meta_query", $meta_query); + } + } +} + +add_action("pre_get_posts", "outcome_filter_query"); \ No newline at end of file diff --git a/includes/sp-event-has-outcome.php b/includes/sp-event-has-outcome.php new file mode 100644 index 0000000..06aefac --- /dev/null +++ b/includes/sp-event-has-outcome.php @@ -0,0 +1,105 @@ + "AND", + [ + "key" => "sp_results", + "value" => '"outcome"', + "compare" => "LIKE", + ], + [ + "key" => "sp_results", + "value" => 's:7:"outcome";a:0:{}', // i.e. a blank outcome + "compare" => "NOT LIKE", + ], + ]; + } elseif (!$has_outcome) { + return [ + "relation" => "OR", + [ + "key" => "sp_results", + "value" => '"outcome"', + "compare" => "NOT LIKE", + ], + [ + "key" => "sp_results", + "value" => 's:7:"outcome";a:0:{}', // i.e. a blank outcome + "compare" => "LIKE", + ], + ]; + } +} + +add_filter("views_edit-sp_event", "wp37_sp_event_does_not_have_outcome_filter"); +function wp37_sp_event_does_not_have_outcome_filter($views) + +{ + if (is_admin() && $_GET["post_type"] == "sp_event") { + global $wp_query; + $filter_name = "Missing Results"; + + $result = new WP_Query([ + "post_type" => "sp_event", + "meta_query" => [get_sp_event_has_outcome_meta_query_args(false)], + ]); + + // $link = add_query_arg("sp_event_has_outcome", "false"); + $link="#"; + // $link = admin_url( "edit.php?post_type=sp_event&sp_event_has_outcome=false" ); + + $sp_event_has_outcome = + get_query_var("sp_event_has_outcome") === "false"; + $class = $sp_event_has_outcome === true ? ' class="current"' : ""; + $views["sp_event_does_not_have_outcome"] = sprintf( + '" . $filter_name . " (%d)", + $link, + $result->found_posts + ); + + return $views; + } +} + +add_action("init", "wpse246143_register_sp_event_has_outcome"); +function wpse246143_register_sp_event_has_outcome() +{ + global $wp; + $wp->add_query_var("sp_event_has_outcome"); +} + +add_action("parse_query", "wpse246143_map_sp_event_has_outcome"); +function wpse246143_map_sp_event_has_outcome($wp_query) +{ + if ( + isset($wp_query->query["post_type"]) and + $wp_query->query["post_type"] == "sp_event" and + $wp_query->get("sp_event_has_outcome") + ) { + $sp_event_has_outcome = + get_query_var("sp_event_has_outcome") === "true"; + + if ($sp_event_has_outcome) { + $meta_query = get_sp_event_has_outcome_meta_query_args(true); + } elseif (!$sp_event_has_outcome) { + $meta_query = get_sp_event_has_outcome_meta_query_args(false); + } + + $wp_query->set("meta_query", $meta_query); + } +} + diff --git a/includes/sp-event-status-filter.php b/includes/sp-event-status-filter.php new file mode 100644 index 0000000..f4768bf --- /dev/null +++ b/includes/sp-event-status-filter.php @@ -0,0 +1,58 @@ +id == "edit-sp_event") { + $selected = isset($_GET["sp_status"]) ? $_GET["sp_status"] : ""; ?> + + set("meta_query", [[ + "key" => "sp_status", + "value" => $_GET["sp_status"], + "compare" => "=", + ]] + ); + } +} + +add_action("pre_get_posts", "sp_status_filter_query"); \ No newline at end of file diff --git a/includes/timeframe-filter.php b/includes/timeframe-filter.php new file mode 100644 index 0000000..e9fedd2 --- /dev/null +++ b/includes/timeframe-filter.php @@ -0,0 +1,70 @@ +id == "edit-sp_event") { + $selected = isset($_GET["timeframe"]) ? $_GET["timeframe"] : ""; ?> + + date("Y-m-d", strtotime("-3 days")), + ], + ]; + } elseif ($_GET["timeframe"] == "last7days") { + $date_query = [ + [ + "after" => date("Y-m-d", strtotime("-1 week")), + ], + ]; + } elseif ($_GET["timeframe"] == "plusminus3days") { + $date_query = [ + [ + "after" => date("Y-m-d", strtotime("-3 days")), + "before" => date("Y-m-d", strtotime("+3 days")), + ], + ]; + } + + if (!$_GET["timeframe"] == "") { + $query->set("date_query", $date_query); + } + } +} + +add_action("pre_get_posts", "timeframe_filter_query"); \ No newline at end of file diff --git a/tonys-sportspress-enhancements.php b/tonys-sportspress-enhancements.php index 4e9c954..878d560 100644 --- a/tonys-sportspress-enhancements.php +++ b/tonys-sportspress-enhancements.php @@ -14,3 +14,7 @@ // Include other files here +// require_once plugin_dir_path(__FILE__) . 'includes/sp-event-has-outcome.php'; +require_once plugin_dir_path(__FILE__) . 'includes/sp-event-has-outcome-filter.php'; +require_once plugin_dir_path(__FILE__) . 'includes/timeframe-filter.php'; +require_once plugin_dir_path(__FILE__) . 'includes/sp-event-status-filter.php'; \ No newline at end of file