/** * Adds the tickets data to the event Object * * @param array $data * @param array $args * @param WP_Post $post * * @return array */ public function add_ticket_data($data, $args, $post) { if (!tribe_events_has_tickets($post->ID)) { return $data; } $tickets = Tribe__Tickets__Tickets::get_all_event_tickets($post->ID); // Reset it $data->offers = array(); foreach ($tickets as $ticket) { $data->offers[] = $this->get_offer($ticket, $post); } return $data; }
/** * Gets the sum of all the stock for all the tickets associated to an event. * * @param int|string|WP_Post $event Either an event post `ID` or a `WP_Post` instance for an event. */ public function get_total_for($event) { $event = get_post($event); $supported_post_types = Tribe__Tickets__Main::instance()->post_types(); if (empty($event) || !in_array($event->post_type, $supported_post_types)) { return new WP_Error('not-an-event', sprintf('The post with ID "%s" is not an event.', $event->ID)); } $sum = 0; $all_tickets = Tribe__Tickets__Tickets::get_all_event_tickets($event->ID); /** @var Tribe__Tickets__Ticket_Object $ticket */ foreach ($all_tickets as $ticket) { $sum += $ticket->stock(); } // return the sum return $sum; }
/** * Injects a buy/RSVP button into oembeds for events when necessary */ public function inject_buy_button_into_oembed() { $event_id = get_the_ID(); if (!tribe_events_has_tickets($event_id)) { return; } $tickets = Tribe__Tickets__Tickets::get_all_event_tickets($event_id); $has_non_rsvp = false; $available = false; $now = current_time('timestamp'); foreach ($tickets as $ticket) { if ('Tribe__Tickets__RSVP' !== $ticket->provider_class) { $has_non_rsvp = true; } if ($ticket->date_in_range($now) && $ticket->is_in_stock()) { $available = true; } } // if there aren't any tickets available, bail if (!$available) { return; } $button_text = $has_non_rsvp ? __('Buy', 'event-tickets') : __('RSVP', 'event-tickets'); /** * Filters the text that appears in the buy/rsvp button on event oembeds * * @var string The button text * @var int Event ID */ $button_text = apply_filters('event_tickets_embed_buy_button_text', $button_text, $event_id); ob_start(); ?> <a class="tribe-event-buy" href="<?php echo esc_url(tribe_get_event_link()); ?> " title="<?php the_title_attribute(); ?> " rel="bookmark"><?php echo esc_html($button_text); ?> </a> <?php $buy_button = ob_get_clean(); /** * Filters the buy button that appears on event oembeds * * @var string The button markup * @var int Event ID */ echo apply_filters('event_tickets_embed_buy_button', $buy_button, $event_id); }
/** * Returns true if the event contains one or more tickets which are not * subject to any inventory limitations. * * @param null $event * * @return bool */ function tribe_events_has_unlimited_stock_tickets($event = null) { if (null === ($event = tribe_events_get_event($event))) { return 0; } foreach (Tribe__Tickets__Tickets::get_all_event_tickets($event->ID) as $ticket) { if (Tribe__Tickets__Ticket_Object::UNLIMITED_STOCK === $ticket->stock()) { return true; } } return false; }
/** * Adds ticket data to the offers property of the event object. */ protected function add_ticket_offers() { foreach (Tribe__Tickets__Tickets::get_all_event_tickets($this->event_id) as $this->ticket) { $this->add_individual_offer(); } }
/** * Returns a count of the number of global ticket sales for this event. * * @return int */ public function tickets_sold() { $sales = 0; foreach (Tribe__Tickets__Tickets::get_all_event_tickets($this->post_id) as $ticket) { /** * @var Tribe__Tickets__Ticket_Object $ticket */ $sales += (int) $ticket->qty_sold(); } return $sales; }
/** * Returns a count of the number of global ticket sales for this event. * * @return int */ public function tickets_sold() { $sales = 0; foreach (Tribe__Tickets__Tickets::get_all_event_tickets($this->post_id) as $ticket) { /** * @var Tribe__Tickets__Ticket_Object $ticket */ switch ($ticket->global_stock_mode()) { case self::CAPPED_STOCK_MODE: case self::GLOBAL_STOCK_MODE: $sales += (int) $ticket->qty_sold(); break; } } return $sales; }