Tribe__Tickets__REST__V1__Endpoints__QR::check_in( WP_REST_Request $request )
Check in attendee.
Contents
Parameters
- $request
-
(WP_REST_Request) (Required) The request.
Return
(WP_REST_Response)
Source
File: src/Tribe/REST/V1/Endpoints/QR.php
public function check_in( WP_REST_Request $request ) {
$this->serving = $request;
$qr_arr = $this->prepare_qr_arr( $request );
if ( is_wp_error( $qr_arr ) ) {
$response = new WP_REST_Response( $qr_arr );
$response->set_status( 400 );
return $response;
}
$api_key_is_valid = $this->has_api( $qr_arr );
/**
* Allow filtering the API key validation status.
*
* @since 5.2.5
*
* @param bool $is_valid Whether the provided API key is valid or not.
* @param array $qr_arr The request data for Check in.
*/
$api_key_is_valid = apply_filters_deprecated( 'event_tickets_plus_requested_api_is_valid', [ $api_key_is_valid, $qr_arr ], '5.7.0', 'tec_tickets_requested_api_is_valid' );
/**
* Allow filtering the API key validation status.
*
* @since 5.7.0
*
* @param bool $is_valid Whether the provided API key is valid or not.
* @param array $qr_arr The request data for Check in.
*/
$api_key_is_valid = apply_filters( 'tec_tickets_requested_api_is_valid', $api_key_is_valid, $qr_arr );
// Check all the data we need is there.
if ( empty( $api_key_is_valid ) || empty( $qr_arr['ticket_id'] ) ) {
$response = new WP_REST_Response( $qr_arr );
$response->set_status( 400 );
return $response;
}
$event_id = (int) $qr_arr['event_id'];
$ticket_id = (int) $qr_arr['ticket_id'];
$security_code = (string) $qr_arr['security_code'];
/** @var Tribe__Tickets__Data_API $data_api */
$data_api = tribe( 'tickets.data_api' );
$service_provider = $data_api->get_ticket_provider( $ticket_id );
if (
empty( $service_provider->security_code )
|| get_post_meta( $ticket_id, $service_provider->security_code, true ) !== $security_code
) {
$response = new WP_REST_Response(
[
'msg' => __( 'Security code is not valid!', 'event-tickets' ),
'error' => 'security_code_not_valid',
]
);
$response->set_status( 403 );
return $response;
}
// Add check for attendee data.
$attendee = $service_provider->get_attendees_by_id( $ticket_id );
$attendee = reset( $attendee );
if ( ! is_array( $attendee ) ) {
$response = new WP_REST_Response(
[
'msg' => __( 'An attendee is not found with this ID.', 'event-tickets' ),
'error' => 'attendee_not_found',
]
);
$response->set_status( 403 );
return $response;
}
// Get the attendee data to populate the response.
$attendee_id = (int) $attendee['attendee_id'];
$attendee_data = tribe( 'tickets.rest-v1.attendee-repository' )->format_item( $attendee_id );
/** @var Tribe__Tickets__Status__Manager $status */
$status = tribe( 'tickets.status' );
$complete_statuses = (array) $status->get_completed_status_by_provider_name( $service_provider );
if ( ! in_array( $attendee['order_status'], $complete_statuses, true ) ) {
$response = new WP_REST_Response(
[
'msg' => esc_html(
sprintf(
// Translators: %s: 'ticket' label (singular, lowercase).
__( "This attendee's %s is not authorized to be Checked in. Please check the order status.", 'event-tickets' ),
tribe_get_ticket_label_singular_lowercase( 'rest_qr' )
)
),
'error' => 'attendee_not_authorized',
'attendee' => $attendee_data,
]
);
$response->set_status( 403 );
return $response;
}
// Check if the attendee is checked in.
$checked_status = get_post_meta( $ticket_id, '_tribe_qr_status', true );
if ( $checked_status ) {
$response = new WP_REST_Response(
[
'msg' => __( 'Already checked in!', 'event-tickets' ),
'error' => 'attendee_already_checked_in',
'attendee' => $attendee_data,
]
);
$response->set_status( 403 );
return $response;
}
// Check if TEC is enabled, and if we want to only check in when the event is happening.
if ( $this->should_checkin_qr_events_happening_now( $event_id, $attendee_id ) ) {
// Check if the current event is on date and time.
if ( ! $this->is_tec_event_happening_now( $event_id ) ) {
$response = new WP_REST_Response(
[
'msg' => __( 'Event has not started or it has finished.', 'event-tickets' ),
'error' => 'event_not_happening_now',
'attendee' => $attendee_data,
]
);
$response->set_status( 403 );
return $response;
}
}
$checked = $this->_check_in( $ticket_id, $service_provider );
if ( ! $checked ) {
$msg_arr = [
'msg' => esc_html(
sprintf(
// Translators: %s: 'ticket' label (singular, lowercase).
__( '%s not checked in!', 'event-tickets' ),
tribe_get_ticket_label_singular( 'rest_qr' )
)
),
'error' => 'attendee_failed_check_in',
'tribe_qr_status' => get_post_meta( $ticket_id, '_tribe_qr_status', 1 ),
'attendee' => $attendee_data,
];
$result = array_merge( $msg_arr, $qr_arr );
$response = new WP_REST_Response( $result );
$response->set_status( 403 );
return $response;
}
$response = new WP_REST_Response(
[
'msg' => __( 'Checked In!', 'event-tickets' ),
'attendee' => $attendee_data,
]
);
$response->set_status( 201 );
return $response;
}
Changelog
| Version | Description |
|---|---|
| 5.7.0 | Introduced. |