user_id = $user_id; } /** * Get the total number of events created by the trainer. * * @return int */ public function get_total_events_count() : int { $args = array( 'post_type' => Tribe__Events__Main::POSTTYPE, 'author' => $this->user_id, 'post_status' => array( 'publish', 'future', 'draft', 'pending', 'private' ), 'posts_per_page' => -1, 'fields' => 'ids', ); $query = new WP_Query( $args ); return (int) $query->found_posts; } /** * Get the number of upcoming events for the trainer. * * @return int */ public function get_upcoming_events_count() : int { $today = current_time( 'mysql' ); $args = array( 'post_type' => Tribe__Events__Main::POSTTYPE, 'author' => $this->user_id, // Use author consistently 'post_status' => array( 'publish', 'future' ), 'posts_per_page' => -1, 'fields' => 'ids', 'meta_query' => array( array( 'key' => '_EventStartDate', 'value' => $today, 'compare' => '>=', 'type' => 'DATETIME', ), ), 'orderby' => 'meta_value', 'meta_key' => '_EventStartDate', 'order' => 'ASC', ); $query = new WP_Query( $args ); return (int) $query->found_posts; } /** * Get the number of past events for the trainer. * * @return int */ public function get_past_events_count() : int { $today = current_time( 'mysql' ); $args = array( 'post_type' => Tribe__Events__Main::POSTTYPE, 'author' => $this->user_id, // Use author consistently 'post_status' => array( 'publish', 'private' ), 'posts_per_page' => -1, 'fields' => 'ids', 'meta_query' => array( array( 'key' => '_EventEndDate', 'value' => $today, 'compare' => '<', 'type' => 'DATETIME', ), ), ); $query = new WP_Query( $args ); return (int) $query->found_posts; } /** * Get the total number of tickets sold across all the trainer's events. * * @return int */ public function get_total_tickets_sold() : int { $total_tickets = 0; $args = array( 'post_type' => Tribe__Events__Main::POSTTYPE, 'author' => $this->user_id, // Use author consistently 'post_status' => array( 'publish', 'future', 'draft', 'pending', 'private' ), 'posts_per_page' => -1, 'fields' => 'ids', ); $event_ids = get_posts( $args ); if ( ! empty( $event_ids ) ) { foreach ( $event_ids as $event_id ) { $sold = get_post_meta( $event_id, '_tribe_tickets_sold', true ); if ( is_numeric( $sold ) ) { $total_tickets += (int) $sold; } } } return $total_tickets; } /** * Get the total revenue generated across all the trainer's events. * * @return float */ public function get_total_revenue() : float { $total_revenue = 0.0; $args = array( 'post_type' => Tribe__Events__Main::POSTTYPE, 'author' => $this->user_id, // Use author consistently 'post_status' => array( 'publish', 'future', 'draft', 'pending', 'private' ), 'posts_per_page' => -1, 'fields' => 'ids', ); $event_ids = get_posts( $args ); if ( ! empty( $event_ids ) ) { foreach ( $event_ids as $event_id ) { $revenue = get_post_meta( $event_id, '_tribe_revenue_total', true ); if ( is_numeric( $revenue ) ) { $total_revenue += (float) $revenue; } } } return $total_revenue; } /** * Get the annual revenue target set by the trainer. * * @return float|null Returns the target as a float, or null if not set. */ public function get_annual_revenue_target() : ?float { $target = get_user_meta( $this->user_id, 'annual_revenue_target', true ); return ! empty( $target ) && is_numeric( $target ) ? (float) $target : null; } /** * Get the data needed for the events table on the dashboard. * * @param string $filter_status The status to filter events by. * @return array An array of event data arrays. */ public function get_events_table_data( string $filter_status = 'all' ) : array { $events_data = []; $valid_statuses = array( 'publish', 'future', 'draft', 'pending', 'private' ); $post_status = ( 'all' === $filter_status || ! in_array( $filter_status, $valid_statuses, true ) ) ? $valid_statuses : array( $filter_status ); $args = array( 'post_type' => Tribe__Events__Main::POSTTYPE, 'author' => $this->user_id, // Use author consistently 'post_status' => $post_status, 'posts_per_page' => -1, 'orderby' => 'meta_value', 'meta_key' => '_EventStartDate', 'order' => 'DESC', ); $query = new WP_Query( $args ); if ( $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); $event_id = get_the_ID(); // Get Capacity $total_capacity = 0; if ( function_exists( 'tribe_get_tickets' ) ) { $tickets = tribe_get_tickets( $event_id ); if ( $tickets ) { foreach ( $tickets as $ticket ) { $capacity = $ticket->capacity(); if ( $capacity === -1 ) { $total_capacity = -1; break; } if ( is_numeric( $capacity ) ) { $total_capacity += $capacity; } } } } $sold = get_post_meta( $event_id, '_tribe_tickets_sold', true ); $revenue = get_post_meta( $event_id, '_tribe_revenue_total', true ); $events_data[] = array( 'id' => $event_id, 'status' => get_post_status( $event_id ), 'name' => get_the_title(), 'link' => get_permalink( $event_id ), 'start_date_ts' => strtotime( get_post_meta( $event_id, '_EventStartDate', true ) ), 'organizer_id' => (int) get_post_meta( $event_id, '_EventOrganizerID', true ), 'capacity' => ( $total_capacity === -1 ) ? 'Unlimited' : (int) $total_capacity, 'sold' => is_numeric( $sold ) ? (int) $sold : 0, 'revenue' => is_numeric( $revenue ) ? (float) $revenue : 0.0, ); } wp_reset_postdata(); } return $events_data; } }