function delete_order($force_delete = true, $id = false)
 {
     $id = $id ? $id : $this->id;
     if ($force_delete) {
         wp_delete_post($id);
     } else {
         wp_trash_post($id);
     }
     //Delete associated ticket instances
     $args = array('post_type' => 'tc_tickets_instances', 'post_status' => 'any', 'post_parent' => $id);
     $ticket_instances = get_posts($args);
     foreach ($ticket_instances as $ticket_instance) {
         $ticket_instance_instance = new TC_Ticket_Instance($ticket_instance->ID);
         $ticket_instance_instance->delete_ticket_instance($force_delete);
     }
 }
function tc_ticket_instance_field_value($value = false, $field_value = false, $post_field_type = false, $col_field_id = false, $field_id = false)
{
    //$value, $post_field_type, $var_name
    if ($field_id == 'order') {
        $parent_post = get_post_ancestors($value);
        $parent_post = isset($parent_post[0]) ? $parent_post[0] : 0;
        $order = new TC_Order($parent_post);
        $order_found = false;
        if (get_post_type($order->details->ID) == 'tc_orders') {
            $order_found = true;
        }
        $order_found = apply_filters('tc_order_found', $order_found, $order->details->ID);
        if ($order_found) {
            if (current_user_can('manage_orders_cap')) {
                $value = apply_filters('tc_ticket_instance_order_admin_url', '<a target="_blank" href="' . admin_url('edit.php?post_type=tc_events&page=tc_orders&action=details&ID=' . $order->details->ID) . '">' . $order->details->post_title . '</a>', $parent_post, $order->details->post_title);
            } else {
                $value = $order->details->post_title;
            }
        } else {
            $value = __('N/A', 'tc');
        }
    }
    if ($field_id == 'event') {
        $value = tc_get_ticket_instance_event(false, false, $value);
    }
    if ($field_id == 'ticket_code') {
        $value = $field_value;
    }
    if ($field_id == 'ticket_type_id') {
        $ticket_type = new TC_Ticket($field_value);
        $value = apply_filters('tc_checkout_owner_info_ticket_title', isset($ticket_type->details->post_title) ? $ticket_type->details->post_title : __('N/A', 'tc'), $field_value);
    }
    if ($field_id == 'ticket') {
        $value = '<a target="_blank" href="' . admin_url('edit.php?post_type=tc_events&page=' . $_GET['page'] . '&tc_preview&ticket_instance_id=' . $field_value) . '">' . __('View', 'tc') . '</a> | <a target="_top" href="' . admin_url('edit.php?post_type=tc_events&page=' . $_GET['page'] . '&tc_download&ticket_instance_id=' . $field_value) . '">' . __('Download', 'tc') . '</a>';
    }
    if ($field_id == 'checkins') {
        $ticket_instance = new TC_Ticket_Instance($field_value);
        $checkins_pass = $ticket_instance->get_number_of_checkins('pass');
        $checkins_fail = $ticket_instance->get_number_of_checkins('fail');
        $value = '<a href="' . admin_url('edit.php?post_type=tc_events&page=tc_attendees&action=details&ID=' . $field_value) . '">';
        $value .= '<span class="' . ($checkins_pass > 0 ? 'status_green' : '') . '">' . $checkins_pass . '</span>';
        if ($checkins_fail > 0) {
            $value .= ' | <span class="status_red">' . $checkins_fail . '</span>';
        }
        $value .= __(' Details', 'tc');
        $value .= '</a>';
    }
    if ($field_id == 'owner_name') {
        $owner_name = get_post_meta($value, 'first_name', true) . ' ' . get_post_meta($value, 'last_name', true);
        if (trim($owner_name) == '') {
            $parent_post = get_post_ancestors($value);
            $parent_post = isset($parent_post[0]) ? $parent_post[0] : 0;
            $order = new TC_Order($parent_post);
            $buyer_full_name = $order->details->tc_cart_info['buyer_data']['first_name_post_meta'] . ' ' . $order->details->tc_cart_info['buyer_data']['last_name_post_meta'];
            //$buyer_info		 = get_post_meta( $value, 'tc_cart_info', false );
            if (trim($buyer_full_name) !== '') {
                $value = apply_filters('tc_ticket_buyer_name_element', $buyer_full_name, $parent_post);
            } else {
                $value = apply_filters('tc_ticket_buyer_name_element', '-', $parent_post);
            }
        } else {
            $value = $owner_name;
        }
    }
    return $value;
}
</h2>

	<?php 
if (isset($message)) {
    ?>
		<div id="message" class="updated fade"><p><?php 
    echo esc_attr($message);
    ?>
</p></div>
		<?php 
}
?>

	<?php 
if (isset($_GET['action']) && $_GET['action'] == 'details' && isset($_GET['ID'])) {
    $ticket_instance = new TC_Ticket_Instance((int) $_GET['ID']);
    $ticket_type = new TC_Ticket($ticket_instance->details->ticket_type_id);
    $ticket_event_id = $ticket_type->get_ticket_event($ticket_instance->details->ticket_type_id);
    if (isset($_POST['api_key'])) {
        $api_key = new TC_API_Key($_POST['api_key']);
        $checkin = new TC_Checkin_API($api_key->details->api_key, apply_filters('tc_checkin_request_name', 'tickera_scan'), 'return', $ticket_instance->details->ticket_code, false);
        $checkin_result = $checkin->ticket_checkin(false);
        if ($checkin_result['status'] == 1) {
            $message_type = 'updated';
            $message = __('Ticket checked in successfully.', 'tc');
        } else {
            $message_type = 'error';
            $message = __('Ticket expired.', 'tc');
        }
    }
    $ticket_checkins = $ticket_instance->get_ticket_checkins();
 function ticket_checkin($echo = true)
 {
     if ($this->get_api_key_id()) {
         $api_key_id = $this->get_api_key_id();
         $ticket_id = ticket_code_to_id($this->ticket_code);
         if ($ticket_id) {
             $ticket_instance = new TC_Ticket_Instance($ticket_id);
             $ticket_type_id = apply_filters('tc_ticket_type_id', $ticket_instance->details->ticket_type_id);
             $ticket_type = new TC_Ticket($ticket_type_id);
             $order = new TC_Order($ticket_instance->details->post_parent);
             if ($order->details->post_status == 'order_paid') {
                 $order_is_paid = true;
             } else {
                 $order_is_paid = false;
             }
             $order_is_paid = apply_filters('tc_order_is_paid', $order_is_paid, $order->details->ID);
             if ($order_is_paid) {
                 //all good, continue with check-in process
             } else {
                 _e('Ticket does not exist', 'tc');
                 exit;
             }
             $ticket_event_id = $ticket_type->get_ticket_event($ticket_type_id);
         } else {
             _e('Ticket does not exist', 'tc');
             exit;
         }
         if ($this->get_api_event() != $ticket_event_id) {
             //Only API key for the parent event can check-in this ticket
             if ($this->get_api_event() !== 'all') {
                 if ($echo) {
                     _e('Insufficient permissions. This API key cannot check-in this ticket.', 'tc');
                 } else {
                     return 403;
                     //error code for incufficient persmissions
                 }
                 exit;
             }
         }
         $check_ins = $ticket_instance->get_ticket_checkins();
         $num_of_check_ins = apply_filters('tc_num_of_checkins', is_array($check_ins) ? count($check_ins) : 0);
         $available_checkins = get_post_meta($ticket_type_id, 'available_checkins_per_ticket', true);
         $alternate_available_checkins = get_post_meta($ticket_type_id, '_available_checkins_per_ticket', true);
         $available_checkins = !empty($available_checkins) ? $available_checkins : $alternate_available_checkins;
         $available_checkins = is_numeric($available_checkins) ? $available_checkins : 9999;
         //9999 means unlimited check-ins but it's set for easier comparation
         if ($available_checkins > $num_of_check_ins) {
             $check_in_status = apply_filters('tc_checkin_status_name', true);
             $check_in_status_bool = true;
             do_action('tc_check_in_notification', $ticket_id);
         } else {
             $check_in_status = apply_filters('tc_checkin_status_name', false);
             $check_in_status_bool = false;
         }
         $new_checkins = array();
         if (is_array($check_ins)) {
             foreach ($check_ins as $check_in) {
                 $new_checkins[] = $check_in;
             }
         }
         $new_checkin = array("date_checked" => time(), "status" => $check_in_status ? apply_filters('tc_checkin_status_name', 'Pass') : apply_filters('tc_checkin_status_name', 'Fail'), "api_key_id" => $api_key_id);
         $new_checkins[] = apply_filters('tc_new_checkin_array', $new_checkin);
         do_action('tc_before_checkin_array_update');
         update_post_meta($ticket_id, "tc_checkins", $new_checkins);
         do_action('tc_after_checkin_array_update');
         $payment_date = apply_filters('tc_checkin_payment_date', tc_format_date(apply_filters('tc_ticket_checkin_order_date', $order->details->tc_order_date, $order->details->ID)));
         //date_i18n( get_option( 'date_format' ) . ' ' . get_option( 'time_format' ), $order->details->tc_order_date, false )
         if ($payment_date == '') {
             $payment_date = 'N/A';
         }
         $name = apply_filters('tc_checkin_owner_name', $ticket_instance->details->first_name . ' ' . $ticket_instance->details->last_name);
         if (trim($name) == '') {
             $name = 'N/A';
         }
         $address = apply_filters('tc_checkin_owner_address', $ticket_instance->details->address);
         if ($address == '') {
             $address = 'N/A';
         }
         $city = apply_filters('tc_checkin_owner_city', $ticket_instance->details->city);
         if ($city == '') {
             $city = 'N/A';
         }
         $state = apply_filters('tc_checkin_owner_state', $ticket_instance->details->state);
         if ($state == '') {
             $state = 'N/A';
         }
         $country = apply_filters('tc_checkin_owner_country', $ticket_instance->details->country);
         if ($country == '') {
             $country = 'N/A';
         }
         $data = array('status' => $check_in_status_bool, 'previous_status' => '', 'pass' => true, 'name' => $name, 'payment_date' => $payment_date, 'address' => $address, 'city' => $city, 'state' => $state, 'country' => $country, 'checksum' => $this->ticket_code);
         $buyer_full_name = isset($order->details->tc_cart_info['buyer_data']['first_name_post_meta']) ? $order->details->tc_cart_info['buyer_data']['first_name_post_meta'] . ' ' . $order->details->tc_cart_info['buyer_data']['last_name_post_meta'] : '';
         $buyer_email = isset($order->details->tc_cart_info['buyer_data']['email_post_meta']) ? $order->details->tc_cart_info['buyer_data']['email_post_meta'] : '';
         $data['custom_fields'] = array(array(apply_filters('tc_ticket_checkin_custom_field_title', 'Ticket Type'), apply_filters('tc_checkout_owner_info_ticket_title', $ticket_type->details->post_title, $ticket_type->details->ID)), array(apply_filters('tc_ticket_checkin_custom_field_title', 'Buyer Name'), apply_filters('tc_ticket_checkin_buyer_full_name', $buyer_full_name, $order->details->ID)), array(apply_filters('tc_ticket_checkin_custom_field_title', 'Buyer E-mail'), apply_filters('tc_ticket_checkin_buyer_email', $buyer_email, $order->details->ID)));
         $data['custom_fields'] = apply_filters('tc_checkin_custom_fields', $data['custom_fields'], $ticket_instance->details->ID, $ticket_event_id, $order, $ticket_type);
         apply_filters('tc_checkin_output_data', $data);
         if ($echo === true || $echo == 'echo') {
             echo json_encode($data);
             exit;
         } else {
             return $data;
         }
     }
 }
function tc_ticket_instance_field_value($value = false, $field_value = false, $post_field_type = false, $col_field_id = false, $field_id = false)
{
    //$value, $post_field_type, $var_name
    if ($field_id == 'order') {
        $parent_post = get_post_ancestors($value);
        $order = new TC_Order($parent_post[0]);
        if (current_user_can('manage_orders_cap')) {
            $value = '<a target="_blank" href="' . admin_url('admin.php?page=tc_orders&action=details&ID=' . $order->details->ID) . '">' . $order->details->post_title . '</a>';
        } else {
            $value = $order->details->post_title;
        }
    }
    if ($field_id == 'event') {
        $value = tc_get_ticket_instance_event(false, false, $value);
    }
    if ($field_id == 'ticket_code') {
        $value = $field_value;
    }
    if ($field_id == 'ticket_type_id') {
        $ticket_type = new TC_Ticket($field_value);
        $value = $ticket_type->details->post_title;
    }
    if ($field_id == 'ticket') {
        $value = '<a target="_blank" href="' . admin_url('admin.php?page=' . $_GET['page'] . '&tc_preview&ticket_instance_id=' . $field_value) . '">' . __('View', 'tc') . '</a> | <a target="_top" href="' . admin_url('admin.php?page=' . $_GET['page'] . '&tc_download&ticket_instance_id=' . $field_value) . '">' . __('Download', 'tc') . '</a>';
    }
    if ($field_id == 'checkins') {
        $ticket_instance = new TC_Ticket_Instance($field_value);
        $checkins_pass = $ticket_instance->get_number_of_checkins('pass');
        $checkins_fail = $ticket_instance->get_number_of_checkins('fail');
        $value = '<a href="' . admin_url('admin.php?page=tc_attendees&&action=details&ID=' . $field_value) . '">';
        $value .= '<span class="' . ($checkins_pass > 0 ? 'status_green' : '') . '">' . $checkins_pass . '</span>';
        if ($checkins_fail > 0) {
            $value .= ' | <span class="status_red">' . $checkins_fail . '</span>';
        }
        $value .= __(' Details', 'tc');
        $value .= '</a>';
    }
    if ($field_id == 'owner_name') {
        $value = get_post_meta($value, 'first_name', true) . ' ' . get_post_meta($value, 'last_name', true);
        if (trim($value) == '') {
            $value = '-';
        }
    }
    return $value;
}