Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- date_default_timezone_set('GMT');
- $now = new DateTime();
- function findById($id, $ticket_classes)
- {
- foreach ($ticket_classes as &$ticket) {
- if ($ticket->id == $id) {
- return $ticket;
- }
- }
- return null;
- }
- function getTicketsLeft($ticket, $forceShow = false)
- {
- if ($forceShow) // Do we actually need this data regardless, for calculation?
- return $ticket->quantity_total - $ticket->quantity_sold;
- elseif ( // Ignore these ticket types (sales too), never show the remaining quantity
- stripos($ticket->name, 'General Admission') !== false ||
- stripos($ticket->name, 'Box Seats') !== false ||
- stripos($ticket->name, 'Foals 6-12') !== false ||
- stripos($ticket->name, 'Foals 5-and-Under') !== false ||
- stripos($ticket->name, 'Military Discount Admission') !== false ||
- stripos($ticket->name, 'Senior Discount Admission') !== false
- )
- return null;
- elseif ($ticket->quantity_total - $ticket->quantity_sold < 100) // Don't show unless we have less than 100 available
- return $ticket->quantity_total - $ticket->quantity_sold;
- else
- return null;
- }
- function checkTicketAvailability($ticket, $ticket_classes)
- {
- global $now;
- if ($ticket->hidden) // Hidden from the public?
- return false;
- elseif (isset($ticket->sales_start_after)) { // Is there another ticket that we want to show instead of this? And if so, is it still available?
- $ticketAfter = findById($ticket->sales_start_after, $ticket_classes);
- if (isset($ticketAfter)) {
- if (checkTicketAvailability($ticketAfter, $ticket_classes) && getTicketsLeft($ticketAfter, true) !== 0) {
- return false;
- }
- }
- }
- elseif (isset($ticket->sales_start) && new DateTime($ticket->sales_start) > $now) // Are we selling yet?
- return false;
- elseif (new DateTime($ticket->sales_end) < $now) // Are we still
- return false;
- else
- return true;
- }
- function refreshTicketData()
- {
- // See http://developer.eventbrite.com/docs/ for details!
- // Various request-related variables
- $token = '3BS25F7EIU2IIB4YWQWF'; // Example OAuth Token
- $eventID = '11109810743'; // Example Event ID
- // Build the request
- $url = 'https://www.eventbriteapi.com/v3/events/' . $eventID . '/ticket_classes/?token=' . $token;
- // Run the request
- $handle = curl_init($url);
- curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1);
- $output = curl_exec($handle);
- $respInfo = curl_getinfo($handle);
- curl_close($handle);
- // Parse the response
- $outData = json_decode($output); // Outputs as an associative array
- $respCode = $respInfo['http_code'];
- if ($respCode == 404)
- {
- return json_encode(array("status_code" => 404));
- }
- elseif ($respCode == 400 || $respCode == 403)
- {
- return json_encode(array(
- "status_code" => $outData->status_code,
- "error" => $outData->error,
- "error_description" => $outData->error_description
- ));
- }
- elseif ($respCode == 200)
- {
- $outArr = array();
- foreach ($outData->ticket_classes as &$ticket) {
- if (!checkTicketAvailability($ticket, $outData->ticket_classes))
- continue;
- $ticketData = array("name" => $ticket->name);
- if (isset($ticket->description))
- $ticketData['description'] = $ticket->description;
- else
- $ticketData['description'] = NULL;
- $ticketData['quantity_remaining'] = getTicketsLeft($ticket);
- if ($ticket->free) {
- $ticketData['cost'] = "Free";
- $ticketData['cost_numeric'] = 0;
- } else {
- $ticketData['cost'] = $ticket->cost->display;
- $ticketData['cost_numeric'] = $ticket->cost->value;
- }
- $outArr[] = $ticketData;
- }
- return json_encode($outArr);
- }
- else
- {
- return json_encode(array(
- "status_code" => $respCode,
- "error" => "ERR_UNKNOWN_RESP",
- "error_description" => "Unknown response code (see status_code)"
- ));
- }
- }
- function getTickets() {
- $user = 'test';
- $pass = 'test';
- $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
- $query = $dbh->query('SELECT *, NOW() AS CurrTime FROM test LIMIT 1');
- if ($query->rowCount() === 0) { // Does the cache even exist?
- $queryUpdate = $dbh->prepare('INSERT INTO `test`(`Value`, `CacheTime`, `IsUpdating`) VALUES ("[{}]",CURRENT_TIMESTAMP,1)');
- $queryUpdate->execute();
- $output = refreshTicketData();
- $queryUpdate = $dbh->prepare('UPDATE `test` SET `Value`=:text,`CacheTime`=CURRENT_TIMESTAMP,`IsUpdating`=0 WHERE 1');
- $queryUpdate->execute(array(':text'=>$output));
- //return "Cache data: " . $output . " (Re-Cached" . (isset($_GET['force']) && $_GET['force'] == 1 ? " - FORCED" : "") . ")";
- return $output;
- } else {
- $data = $query->fetch(PDO::FETCH_ASSOC);
- if ((isset($_GET['force']) && $_GET['force'] == 1) || (!$data['IsUpdating'] && date_sub(new DateTime($data['CurrTime']), new DateInterval('PT1M30S')) >= new DateTime($data['CacheTime']))) {
- $queryUpdate = $dbh->prepare('UPDATE `test` SET `IsUpdating`=1 WHERE 1'); // Do we either want to force an update, or is the cache invalid/outdated?
- $queryUpdate->execute();
- $output = refreshTicketData();
- $queryUpdate = $dbh->prepare('UPDATE `test` SET `Value`=:text,`CacheTime`=CURRENT_TIMESTAMP,`IsUpdating`=0 WHERE 1');
- $queryUpdate->execute(array(':text'=>$output));
- //return "Cache data: " . $output . " (Re-Cached" . (isset($_GET['force']) && $_GET['force'] == 1 ? " - FORCED" : "") . ")";
- return $output;
- } else {
- //return "Cache data: " . $data['Value'] . " (At " . $data['CacheTime'] . ")";
- return $data['Value'];
- }
- }
- $dbh = null; // Cus redundancy
- }
- echo getTickets();
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement