<?php
/**
* Block: Tickets
* Single Ticket Item
*
* Override this template in your own theme by creating a file at:
* [your-theme]/tribe/tickets/v2/tickets/item.php
*
* See more documentation about our views templating system.
*
* @link https://evnt.is/1amp Help article for RSVP & Ticket template files.
*
* @since 5.0.3
* @since 5.1.1 Display data attributes via `tribe_attributes` and make them filterable via `tribe_tickets_block_ticket_html_attributes`.
* @since 5.1.6 Add the `data-available-count` attribute for each ticket to calculate the shared capacity availability correctly.
* @since 5.1.9 Add the `data-ticket-price` attribute for each ticket to calculate the price precisely.
* @since 5.1.10 Cast the `data-ticket-price` attribute value as string to avoid unwanted PHP errors.
* @since 5.5.6 Add the `tribe-tickets__tickets-item--shared-capacity` wrapper class for tickets having shared capacity.
* @since 5.16.0 Introduced 3rd parameter to `tribe_tickets_block_ticket_html_attributes` filter.
* @since 5.18.1 Removed the `$event_id` parameter from the `tribe_tickets_block_ticket_html_attributes` filter.
* @since 5.27.0 Added $quantity_controls parameter.
*
* @version 5.27.0
*
* If RSVP:
* @var Tribe__Tickets__Editor__Template $this [Global] Template object.
* @var null|bool $is_modal [Global] Whether the modal is enabled.
* @var int $post_id [Global] The current Post ID to which tickets are attached.
* @var Tribe__Tickets__Tickets $provider [Global] The tickets provider class.
* @var string $provider_id [Global] The tickets provider class name.
* @var string $cart_url [Global] Link to Cart (could be empty).
* @var Tribe__Tickets__Ticket_Object[] $tickets [Global] List of tickets.
* @var Tribe__Tickets__Ticket_Object[] $tickets_on_sale [Global] List of tickets on sale.
* @var bool $has_tickets_on_sale [Global] True if the event has any tickets on sale.
* @var bool $is_sale_past [Global] True if tickets' sale dates are all in the past.
* @var bool $is_sale_future [Global] True if no ticket sale dates have started yet.
* @var Tribe__Tickets__Commerce__Currency $currency [Global] Tribe Currency object.
* @var Tribe__Tickets__Ticket_Object $ticket The ticket object.
*
* If Ticket:
* @var Tribe__Tickets__Editor__Template $this [Global] Template object.
* @var int $post_id [Global] The current Post ID to which tickets are attached.
* @var Tribe__Tickets__Tickets $provider [Global] The tickets provider class.
* @var string $provider_id [Global] The tickets provider class name.
* @var Tribe__Tickets__Ticket_Object[] $tickets [Global] List of tickets.
* @var array $cart_classes [Global] CSS classes.
* @var Tribe__Tickets__Ticket_Object[] $tickets_on_sale [Global] List of tickets on sale.
* @var bool $has_tickets_on_sale [Global] True if the event has any tickets on sale.
* @var bool $is_sale_past [Global] True if tickets' sale dates are all in the past.
* @var bool $is_sale_future [Global] True if no ticket sale dates have started yet.
* @var Tribe__Tickets__Commerce__Currency $currency [Global] Tribe Currency object.
* @var Tribe__Tickets__Tickets_Handler $handler [Global] Tribe Tickets Handler object.
* @var Tribe__Tickets__Privacy $privacy [Global] Tribe Tickets Privacy object.
* @var int $threshold [Global] The count at which "number of tickets left" message appears.
* @var bool $show_original_price_on_sale [Global] Show original price on sale.
* @var null|bool $is_mini [Global] If in "mini cart" context.
* @var null|bool $is_modal [Global] Whether the modal is enabled.
* @var string $submit_button_name [Global] The button name for the tickets block.
* @var string $cart_url [Global] Link to Cart (could be empty).
* @var string $checkout_url [Global] Link to Checkout (could be empty).
* @var Tribe__Tickets__Ticket_Object $ticket The ticket object.
* @var int $key Ticket Item index.
* @var string $data_available Boolean string.
* @var bool $has_shared_cap True if ticket has shared capacity.
* @var string $data_has_shared_cap True text if ticket has shared capacity.
* @var string $currency_symbol The ticket's currency symbol, e.g. '$'.
* @var bool $show_unlimited Whether to allow showing of "unlimited".
* @var int $available_count The quantity of Available tickets based on the Attendees number.
* @var bool $is_unlimited Whether the ticket has unlimited quantity.
* @var int $max_at_a_time The maximum quantity able to be purchased in a single Add to Cart action.
* @var bool $quantity_controls Whether to show the quantity controls.
*/
if (
empty( $provider )
|| $ticket->provider_class !== $provider->class_name
) {
return false;
}
/* @var Tribe__Tickets__Privacy $privacy */
$privacy = tribe( 'tickets.privacy' );
/** @var Tribe__Tickets__Tickets_Handler $tickets_handler */
$handler = tribe( 'tickets.handler' );
$context = [
'ticket' => $ticket,
'key' => $this->get( 'key' ),
'privacy' => $privacy,
'max_at_a_time' => $handler->get_ticket_max_purchase( $ticket->ID ),
'quantity_controls' => isset( $quantity_controls ) && is_bool( $quantity_controls ) ? $quantity_controls : true,
];
$has_suffix = ! empty( $ticket->price_suffix );
$classes = [
'tribe-tickets__tickets-item',
'tribe-tickets__tickets-item--disabled' => ! empty( $must_login ),
'tribe-tickets__tickets-item--price-suffix' => $has_suffix,
'tribe-tickets__tickets-item--shared-capacity' => $this->get( 'data_has_shared_cap' ),
'tribe-tickets__tickets-item--on-sale' => $ticket->on_sale,
get_post_class( '', $ticket->ID ),
];
$ticket_item_id = 'tribe-';
$ticket_item_id .= ! empty( $is_modal ) ? 'modal' : 'block';
$ticket_item_id .= '-tickets-item-' . $ticket->ID;
// ET has this set from global context but ETP does not.
$has_shared_cap = isset( $has_shared_cap ) ? $has_shared_cap : $this->get( 'has_shared_cap' );
$attributes = [
'data-ticket-id' => (string) $ticket->ID,
'data-available' => (string)$this->get( 'data_available' ),
'data-has-shared-cap' => (string)$this->get( 'data_has_shared_cap' ),
'data-ticket-price' => (string) $ticket->price,
];
if ( $has_shared_cap ) {
$attributes['data-shared-cap'] = get_post_meta( $post_id, $handler->key_capacity, true );
$attributes['data-available-count'] = (string) $available_count;
}
/**
* Filter the ticket data attributes.
*
* @since 5.1.1
* @since 5.16.0 Added $event_id parameter.
* @since 5.18.1 Removed $event_id parameter.
*
* @param array $attributes A list of data attributes with their values.
* @param Tribe__Tickets__Ticket_Object $ticket The ticket object.
*/
$attributes = apply_filters( 'tribe_tickets_block_ticket_html_attributes', $attributes, $ticket );
?>
<div
id="<?php echo esc_attr( $ticket_item_id ); ?>"
<?php tribe_classes( $classes ); ?>
<?php tribe_attributes( $attributes ); ?>
>
<?php $this->template( 'v2/tickets/item/content', $context ); ?>
<?php $this->template( 'v2/tickets/item/quantity', $context ); ?>
<?php $this->template( 'v2/tickets/item/quantity-mini', $context ); ?>
<?php $this->template( 'v2/tickets/item/opt-out', $context ); ?>
</div>
|