Files
bm/public_html/public/tickets/offline.php
2025-09-24 13:26:28 +02:00

183 lines
5.9 KiB
PHP

<?php
/** loads data for offline use
*
* @version 2.0.0
* @since 2008-07-25
* @author Martin Lenzelbauer
*/
define("ROOT", "../");
require_once(ROOT."include/config.inc.php");
require_once(ROOT."include/db.inc.php");
require_once(ROOT."include/xml.inc.php");
define(DEFAULT_CUSTOMER_ID, 1);
switch($_GET['action']){
case "load": loadData();
break;
case "save": saveData();
break;
}
/** loads data for tonight's event
*/
############################################
function loadData() {
############################################
$xml = '<?xml version="1.0" encoding="utf-8"?>';
// load tonight's date
$query = sprintf("SELECT * FROM bruckm_ticketdate WHERE DATE(date) = CURDATE()");
$result = dbQuery($query);
if($date = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
// load event data
$query = sprintf("SELECT name, reservationType FROM bruckm_ticketevent WHERE id = %d", $date['eventId']);
$result = dbQuery($query);
$event = mysqli_fetch_array($result, MYSQLI_ASSOC);
$xml .= '<event id="' . $date['eventId'] . '" title="' . xmlstring($event['name']) . '" reservationtype="' . $event['reservationType'] . '">';
$xml .= '<date id="' . $date['id'] . '" timestamp="' . strtotime($date['date']) . '" room="' . $date['room'] . '" seats="' . $date['seats'] . '" ';
$entries = explode("\t", $date['entries']);
$xml .= 'a="' . $entries[0] . '" ';
if(sizeof($entries) > 1) $xml .= 'b="' . $entries[1] . '" ';
if(sizeof($entries) > 2) $xml .= 'c="' . $entries[2] . '" ';
$xml .= 'workingdays="0">';
// load all reductions
$query = sprintf("SELECT id, classId, name FROM bruckm_index WHERE class = 'TicketReduction' ORDER BY name ASC");
$result = dbQuery($query);
while($line = mysqli_fetch_array($result, MYSQLI_ASSOC)){
$query = sprintf("SELECT * FROM bruckm_ticketreduction WHERE id = %d", $line['classId']);
$red = mysqli_fetch_array(dbQuery($query), MYSQLI_ASSOC);
$xml .= '<reduction id="' . $red['id'] . '" name="' . $line['name'] . '" type="' . $red['type'] . '" value="' . $red['value'] . '" enabled="true" />';
}
$xml .= '</date>';
// load room
if ($event['reservationType'] == "seat") {
$query = sprintf("SELECT xml FROM bruckm_ticketroom WHERE id = %d", $date['room']);
$result = dbQuery($query);
$room = mysqli_fetch_array($result, MYSQLI_ASSOC);
$xml .= substr($room['xml'], strpos($room['xml'], "<room"));
}
// load tickets
$xml .= '<tickets>';
$query = sprintf("SELECT seatIndex, rowIndex, floorIndex FROM bruckm_ticket WHERE dateId = %d", $date['id']);
$result = dbQuery($query);
while($ticket = mysqli_fetch_array($result, MYSQLI_ASSOC)){
$xml .= '<ticket seatindex="' . $ticket['seatIndex'] . '" rowindex="' . $ticket['rowIndex'] . '" floorindex="' . $ticket['floorIndex'] . '" />';
}
$xml .= '</tickets>';
$xml .= '</event>';
}
header('Content-Type: text/xml');
echo $xml;
}
/** transfers the local data to the web database
*/
############################################
function saveData() {
############################################
if(empty($_POST['tickets'])) {
echo "&result=ok&";
return;
}
// deserialize ticket data
$tickets = explode("\n", $_POST['tickets']);
foreach($tickets as $i=>$ticket){
$tickets[$i] = explode("\t", $ticket);
}
// decrease seat number (simple reservation)
if($_POST['reservationType'] == "simple"){
$query = sprintf("UPDATE bruckm_ticketdate SET seats = seats - %d WHERE id = %d",
sqlnum(sizeof($tickets)),
sqlnum($_POST['dateId']));
dbQuery($query);
}
// save order
$ticketIds = array();
$query = sprintf("INSERT INTO bruckm_ticketorder (customerId, dateId, paid, payMethod, orderDate, voucherValue, voucherInfo) VALUES (%d, %d, %s, %s, NOW(), %d, %s)",
sqlnum(DEFAULT_CUSTOMER_ID),
sqlnum($_POST['dateId']),
sqlstring("true"),
sqlstring("instant"),
sqlnum(0),
sqlstring(""));
dbQuery($query);
$orderId = mysql_insert_id();
foreach($tickets as $i=>$ticket){
$query = sprintf("INSERT INTO bruckm_ticket (category, reductionId, cultureCardId, seat, row, floor, room, seatIndex, rowIndex, floorIndex, orderId, dateId)
VALUES (%s, %d, %d, %d, %d, %s, %s, %d, %d, %d, %d, %d)",
sqlstring($ticket[1]),
sqlnum($ticket[2]),
sqlnum($ticket[3]),
sqlnum($ticket[4]),
sqlnum($ticket[5]),
sqlstring($ticket[6]),
sqlstring($ticket[7]),
sqlnum($ticket[8]),
sqlnum($ticket[9]),
sqlnum($ticket[10]),
sqlnum($orderId),
sqlnum($_POST['dateId']));
dbQuery($query);
$ticketIds[] = mysql_insert_id();
// culture card
if($ticket[3] != 0){
$query = sprintf("UPDATE bruckm_ticketculturecard SET tickets = tickets - 1 WHERE id = %d", sqlnum($ticket[3]));
dbQuery($query);
// auto-insert non existent culture card
if(mysql_affected_rows() == 0){
$query = sprintf("INSERT INTO bruckm_ticketculturecard (id, owner, tickets) VALUES (%d, %s, 5)",
sqlnum($ticket[3]),
sqlstring("id:" . $_POST['customerId']));
dbQuery($query);
}
// check if all free tickets are used
else{
$query = sprintf("SELECT tickets FROM bruckm_ticketculturecard WHERE id = %d", sqlnum($ticket[3]));
$result = dbQuery($query);
$line = mysqli_fetch_array($result, MYSQLI_ASSOC);
if($line['tickets'] == 0){
sendCultureCardMemo($ticket[3]);
}
}
}
}
echo "&result=ok&";
}
/** sends a memo that a culture card has expired
* @param serial culture card serial number
*/
############################################
function sendCultureCardMemo($serial){
############################################
$to = OFFICE;
$subject = "Kulturcard Erinnerung";
$message = "Die Kulturcard $serial wurde aufgebraucht.";
$from = "FROM: tickets@bruckmuehle.at";
@mail($to, $subject, $message, $from);
}
?>