From 1d299e0c8206f4b42dc97c8a0976b1d0f6181df6 Mon Sep 17 00:00:00 2001 From: bengizmo Date: Wed, 6 Aug 2025 17:03:23 -0300 Subject: [PATCH] feat: Implement cache invalidation system for master dashboard - Added HVAC_Master_Dashboard_Data::clear_cache() static method - Clears all 5 cached metrics when events or user data changes - Added WordPress hooks for automatic cache invalidation: - save_post/delete_post for events and ticket types - user_register/deleted_user for trainer changes - Ensures data consistency while maintaining performance benefits - Cache keys organized under 'hvac_master_dashboard' group Co-Authored-By: Claude --- includes/class-hvac-community-events.php | 38 +++++++++++++++++++ includes/class-hvac-master-dashboard-data.php | 20 ++++++++++ 2 files changed, 58 insertions(+) diff --git a/includes/class-hvac-community-events.php b/includes/class-hvac-community-events.php index 0aa254b3..115fd85d 100644 --- a/includes/class-hvac-community-events.php +++ b/includes/class-hvac-community-events.php @@ -140,6 +140,12 @@ class HVAC_Community_Events { // Force correct content on master dashboard add_filter('the_content', array($this, 'force_master_dashboard_content'), 1); + // Cache invalidation hooks for master dashboard performance + add_action('save_post', array($this, 'clear_master_dashboard_cache'), 10, 1); + add_action('delete_post', array($this, 'clear_master_dashboard_cache'), 10, 1); + add_action('user_register', array($this, 'clear_master_dashboard_cache_on_user_change')); + add_action('deleted_user', array($this, 'clear_master_dashboard_cache_on_user_change')); + // Authentication checks - these should eventually move to HVAC_Access_Control add_action('template_redirect', array($this, 'check_event_summary_auth')); add_action('template_redirect', array($this, 'check_email_attendees_auth')); @@ -1119,4 +1125,36 @@ class HVAC_Community_Events { )); } + /** + * Clear master dashboard cache when posts are saved/deleted + * + * @param int $post_id Post ID + */ + public function clear_master_dashboard_cache($post_id) { + $post_type = get_post_type($post_id); + + // Clear cache for event-related post types or ticket types + $cache_trigger_types = [ + 'tribe_events', + 'tec_tc_attendee', + 'tribe_tpp_attendees', + 'tribe_rsvp_attendees' + ]; + + if (in_array($post_type, $cache_trigger_types)) { + if (class_exists('HVAC_Master_Dashboard_Data')) { + HVAC_Master_Dashboard_Data::clear_cache(); + } + } + } + + /** + * Clear master dashboard cache when user data changes + */ + public function clear_master_dashboard_cache_on_user_change() { + if (class_exists('HVAC_Master_Dashboard_Data')) { + HVAC_Master_Dashboard_Data::clear_cache(); + } + } + } // End class HVAC_Community_Events \ No newline at end of file diff --git a/includes/class-hvac-master-dashboard-data.php b/includes/class-hvac-master-dashboard-data.php index ea91a467..20fb672b 100644 --- a/includes/class-hvac-master-dashboard-data.php +++ b/includes/class-hvac-master-dashboard-data.php @@ -290,6 +290,26 @@ class HVAC_Master_Dashboard_Data { return $total_revenue; } + /** + * Clear all cached master dashboard data + * Should be called when events, tickets, or trainer data changes + * + * @return void + */ + public static function clear_cache() { + $cache_keys = [ + 'hvac_master_total_events_count', + 'hvac_master_upcoming_events_count', + 'hvac_master_past_events_count', + 'hvac_master_total_tickets_sold', + 'hvac_master_total_revenue' + ]; + + foreach ($cache_keys as $key) { + wp_cache_delete($key, 'hvac_master_dashboard'); + } + } + /** * Get trainer statistics - count and individual performance data *