Tribe__Tickets_Plus__REST__V1__Endpoints__QR::check_in( WP_REST_Request $request )

Check in attendee


Parameters

$request

(WP_REST_Request) (Required)


Top ↑

Return

(WP_REST_Response)


Top ↑

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_check = $this->has_api( $qr_arr );

		// Check all the data we need is there
		if ( empty( $api_check ) || empty( $qr_arr['ticket_id'] ) ) {
			$response = new WP_REST_Response( $qr_arr );
			$response->set_status( 400 );

			return $response;
		}

		$ticket_id = (int) $qr_arr['ticket_id'];
		$security_code = (string) $qr_arr['security_code'];
		$service_provider = tribe( 'tickets.data_api' )->get_ticket_provider( $ticket_id );
		if ( empty( $service_provider->security_code ) || (  $security_code !== get_post_meta( $ticket_id, $service_provider->security_code, true )  )   ) {
			$response = new WP_REST_Response( array( 'msg' => __( 'Security code is not valid!', 'event-tickets-plus' ) ) );
			$response->set_status( 403 );

			return $response;
		}

		// add check attendee data
		$attendee = $service_provider->get_attendees_by_id( $ticket_id );
		$attendee = reset( $attendee );
		if ( ! is_array( $attendee ) ) {
			$response = new WP_REST_Response( array( 'msg' => __('An attendee is not found with this ID.', 'event-tickets-plus' ) ) );
			$response->set_status( 403 );

			return $response;
		}

		// add check for completed attendee status
		$complete_statuses = (array) tribe( 'tickets.status' )->get_completed_status_by_provider_name( $service_provider );
		if ( ! in_array( $attendee['order_status'], $complete_statuses ) ) {
			$response = new WP_REST_Response( array( 'msg' => __( 'This attendee\'s ticket is not authorized to be Checked in', 'event-tickets-plus' ) ) );
			$response->set_status( 403 );

			return $response;
		}

		// check if attendee is checked in
		$checked_status = get_post_meta( $ticket_id, '_tribe_qr_status', true );
		if ( $checked_status ) {
			$response = new WP_REST_Response( array( 'msg' => __( 'Already checked in!', 'event-tickets-plus' ) ) );
			$response->set_status( 403 );

			return $response;
		}

		$checked = $this->_check_in( $ticket_id, $service_provider );
		if ( ! $checked ) {
			$msg_arr = array(
				'msg'             => __( 'Ticket not checked in!', 'event-tickets-plus' ),
				'tribe_qr_status' => get_post_meta( $ticket_id, '_tribe_qr_status', 1 ),
			);
			$result  = array_merge( $msg_arr, $qr_arr );

			$response = new WP_REST_Response( $result );
			$response->set_status( 403 );

			return $response;
		}

		$response = new WP_REST_Response( array( 'msg' => __( 'Checked In!', 'event-tickets-plus' ) ) );
		$response->set_status( 201 );

		return $response;
	}

Top ↑

Changelog

Changelog
Version Description
4.7.5 Introduced.