195 lines
No EOL
6.3 KiB
PHP
Executable file
195 lines
No EOL
6.3 KiB
PHP
Executable file
<?php
|
|
/** no direct access **/
|
|
defined('MECEXEC') or die();
|
|
|
|
/**
|
|
* Webnus MEC Booking Record class.
|
|
* @author Webnus <info@webnus.net>
|
|
*/
|
|
class MEC_bookingRecord extends MEC_base
|
|
{
|
|
/**
|
|
* @var MEC_main
|
|
*/
|
|
public $main;
|
|
|
|
/**
|
|
* @var MEC_db
|
|
*/
|
|
public $db;
|
|
|
|
/**
|
|
* Constructor method
|
|
* @author Webnus <info@webnus.net>
|
|
*/
|
|
public function __construct()
|
|
{
|
|
// Import MEC Main
|
|
$this->main = $this->getMain();
|
|
|
|
// Import MEC DB
|
|
$this->db = $this->getDB();
|
|
}
|
|
|
|
/**
|
|
* @param WP_Post|integer $booking
|
|
* @return array
|
|
*/
|
|
public function insert($booking)
|
|
{
|
|
// Get Booking by ID
|
|
if(is_numeric($booking)) $booking = get_post($booking);
|
|
|
|
if(!$booking || !is_a($booking, '\WP_Post')) return [];
|
|
|
|
// User Library
|
|
$u = $this->getUser();
|
|
|
|
// Get Main User
|
|
$user = $u->booking($booking->ID);
|
|
|
|
$user_id = $user ? $user->ID : 0;
|
|
$verified = get_post_meta($booking->ID, 'mec_verified', true);
|
|
$confirmed = get_post_meta($booking->ID, 'mec_confirmed', true);
|
|
$event_id = get_post_meta($booking->ID, 'mec_event_id', true);
|
|
$ticket_ids = get_post_meta($booking->ID, 'mec_ticket_id', true);
|
|
$transaction_id = get_post_meta($booking->ID, 'mec_transaction_id', true);
|
|
|
|
$event_tickets = get_post_meta($event_id, 'mec_tickets', true);
|
|
if(!is_array($event_tickets)) $event_tickets = [];
|
|
|
|
$seats = 0;
|
|
$booked_ticket_ids = explode(',', trim($ticket_ids, ', '));
|
|
foreach($booked_ticket_ids as $booked_ticket_id)
|
|
{
|
|
$booked_ticket_id = (int) trim($booked_ticket_id);
|
|
$data = (isset($event_tickets[$booked_ticket_id]) and is_array($event_tickets[$booked_ticket_id])) ? $event_tickets[$booked_ticket_id] : [];
|
|
|
|
$ticket_seats = (isset($data['seats']) and is_numeric($data['seats'])) ? (int) $data['seats'] : 1;
|
|
$seats += $ticket_seats;
|
|
}
|
|
|
|
$booking_options = get_post_meta($event_id, 'mec_booking', true);
|
|
$all_occurrences = $booking_options['bookings_all_occurrences'] ?? 0;
|
|
|
|
$attendees = get_post_meta($booking->ID, 'mec_attendees', true);
|
|
|
|
$all_dates = get_post_meta($booking->ID, 'mec_all_dates', true);
|
|
$timestamps = [];
|
|
|
|
// Multiple Dates
|
|
if($all_dates and is_array($all_dates) and count($all_dates)) $timestamps = $all_dates;
|
|
// Single Date
|
|
else $timestamps[] = get_post_meta($booking->ID, 'mec_date', true);
|
|
|
|
$ids = [];
|
|
foreach($timestamps as $timestamp)
|
|
{
|
|
$timestamp = is_array($timestamp) ? '' : explode(':', $timestamp)[0];
|
|
if($timestamp && !is_numeric($timestamp)) $timestamp = strtotime($timestamp);
|
|
|
|
if(!trim($timestamp)) continue;
|
|
|
|
// Exists?
|
|
$exists = $this->db->select("SELECT `id` FROM `#__mec_bookings` WHERE `transaction_id`='".esc_sql($transaction_id)."' AND `timestamp`='".esc_sql($timestamp)."'", 'loadResult');
|
|
if($exists) continue;
|
|
|
|
// Insert
|
|
$query = "INSERT INTO `#__mec_bookings` (`booking_id`,`user_id`,`transaction_id`,`event_id`,`ticket_ids`,`seats`,`status`,`confirmed`,`verified`,`all_occurrences`,`date`,`timestamp`) VALUES ('".esc_sql($booking->ID)."','".esc_sql($user_id)."','".esc_sql($transaction_id)."','".esc_sql($event_id)."','".esc_sql($ticket_ids)."','".esc_sql($seats)."','".$booking->post_status."','".esc_sql($confirmed)."','".esc_sql($verified)."','".esc_sql($all_occurrences)."','".date('Y-n-d H:i:s', $timestamp)."','".esc_sql($timestamp)."');";
|
|
$id = $this->db->q($query, 'INSERT');
|
|
|
|
foreach($attendees as $k => $attendee)
|
|
{
|
|
// No Attendee
|
|
if(!is_numeric($k)) continue;
|
|
if(!isset($attendee['id'])) continue;
|
|
|
|
// Ticket ID
|
|
$ticket_id = $attendee['id'];
|
|
|
|
// Register attendee in MEC
|
|
$attendee_id = $u->register($attendee, [
|
|
'register_in_mec' => true,
|
|
]);
|
|
|
|
// Insert Booking Attendees
|
|
$query = "INSERT INTO `#__mec_booking_attendees` (`mec_booking_id`,`user_id`,`ticket_id`) VALUES ('".esc_sql($id)."','".esc_sql($attendee_id)."','".esc_sql($ticket_id)."');";
|
|
$this->db->q($query, 'INSERT');
|
|
}
|
|
|
|
$ids[] = $id;
|
|
}
|
|
|
|
return $ids;
|
|
}
|
|
|
|
/**
|
|
* @param WP_Post|integer $booking
|
|
* @return array
|
|
*/
|
|
public function update($booking)
|
|
{
|
|
// Delete
|
|
$this->delete($booking);
|
|
|
|
return $this->insert($booking);
|
|
}
|
|
|
|
/**
|
|
* @param WP_Post|integer $booking
|
|
*/
|
|
public function delete($booking)
|
|
{
|
|
// Get Booking by ID
|
|
if(is_numeric($booking)) $booking = get_post($booking);
|
|
|
|
$this->db->q("DELETE FROM `#__mec_bookings` WHERE `booking_id`='".$booking->ID."'");
|
|
}
|
|
|
|
public function confirm($booking)
|
|
{
|
|
return $this->set($booking, array('confirmed' => 1));
|
|
}
|
|
|
|
public function reject($booking)
|
|
{
|
|
return $this->set($booking, array('confirmed' => -1));
|
|
}
|
|
|
|
public function pending($booking)
|
|
{
|
|
return $this->set($booking, array('confirmed' => 0));
|
|
}
|
|
|
|
public function verify($booking)
|
|
{
|
|
return $this->set($booking, array('verified' => 1));
|
|
}
|
|
|
|
public function cancel($booking)
|
|
{
|
|
return $this->set($booking, array('verified' => -1));
|
|
}
|
|
|
|
public function waiting($booking)
|
|
{
|
|
return $this->set($booking, array('verified' => 0));
|
|
}
|
|
|
|
public function set($booking, $values)
|
|
{
|
|
// Get Booking by ID
|
|
if(is_numeric($booking)) $booking = get_post($booking);
|
|
|
|
// Invalid Booking
|
|
if(!$booking || !is_a($booking, '\WP_Post')) return [];
|
|
|
|
$q = "";
|
|
foreach($values as $key => $value) $q .= "`".esc_attr($key)."`='".esc_sql($value)."',";
|
|
|
|
// Nothing to Update!
|
|
if(trim($q) == '') return false;
|
|
|
|
return $this->db->q("UPDATE `#__mec_bookings` SET ".trim($q, ', ')." WHERE `booking_id`='".esc_sql($booking->ID)."'");
|
|
}
|
|
} |