183 lines
5.9 KiB
PHP
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);
|
|
|
|
}
|
|
|
|
|
|
|
|
?>
|