120 lines
4.4 KiB
PHP
120 lines
4.4 KiB
PHP
<?php
|
|
|
|
namespace Blog\Model;
|
|
|
|
use PDOException;
|
|
|
|
class TicketModel extends Database {
|
|
|
|
public function getTickets() {
|
|
$pdo = $this->linkDB();
|
|
$sql = "SELECT t.*, e.name as event_name, e.start_date, e.end_date, e.ticket_price,
|
|
l.city as location_city, l.street as location_street, l.house_number as location_house_number
|
|
FROM ticket t
|
|
JOIN event e ON t.event_id = e.event_id
|
|
JOIN location l ON e.location_id = l.location_id
|
|
ORDER BY t.purchase_date DESC;";
|
|
try {
|
|
$sth = $pdo->prepare($sql);
|
|
$sth->execute();
|
|
return $sth->fetchAll(\PDO::FETCH_ASSOC);
|
|
} catch (PDOException $e) {
|
|
new \Blog\Library\ErrorMsg("Fehler beim Lesen der Tickets.", $e);
|
|
die;
|
|
}
|
|
}
|
|
|
|
public function getUserTickets($user_id) {
|
|
$pdo = $this->linkDB();
|
|
$sql = "SELECT t.*, e.name as event_name, e.start_date, e.end_date, e.ticket_price,
|
|
l.city as location_city, l.street as location_street, l.house_number as location_house_number
|
|
FROM ticket t
|
|
JOIN event e ON t.event_id = e.event_id
|
|
JOIN location l ON e.location_id = l.location_id
|
|
WHERE t.user_id = :user_id
|
|
ORDER BY t.purchase_date DESC;";
|
|
$params = [":user_id" => $user_id];
|
|
try {
|
|
$sth = $pdo->prepare($sql);
|
|
$sth->execute($params);
|
|
return $sth->fetchAll(\PDO::FETCH_ASSOC);
|
|
} catch (PDOException $e) {
|
|
new \Blog\Library\ErrorMsg("Fehler beim Lesen der Benutzer-Tickets.", $e);
|
|
die;
|
|
}
|
|
}
|
|
|
|
public function buyTicket($data) {
|
|
$pdo = $this->linkDB();
|
|
|
|
// First check if the event still has available tickets
|
|
$checkSql = "SELECT e.max_tickets, COUNT(t.ticket_id) as sold_tickets
|
|
FROM event e
|
|
LEFT JOIN ticket t ON e.event_id = t.event_id
|
|
WHERE e.event_id = :event_id
|
|
GROUP BY e.event_id, e.max_tickets";
|
|
|
|
try {
|
|
$checkStmt = $pdo->prepare($checkSql);
|
|
$checkStmt->execute([':event_id' => $data['event_id']]);
|
|
$eventInfo = $checkStmt->fetch(\PDO::FETCH_ASSOC);
|
|
|
|
if (!$eventInfo) {
|
|
throw new \Exception("Event nicht gefunden.");
|
|
}
|
|
|
|
if ($eventInfo['sold_tickets'] >= $eventInfo['max_tickets']) {
|
|
throw new \Exception("Alle Tickets für dieses Event sind bereits verkauft.");
|
|
}
|
|
} catch (PDOException $e) {
|
|
throw new \Exception("Fehler bei der Ticketverfügbarkeitsprüfung.");
|
|
}
|
|
|
|
$sql = "INSERT INTO ticket (user_id, event_id, purchase_date, valid_until)
|
|
VALUES (:user_id, :event_id, :purchase_date, :valid_until);";
|
|
$params = [
|
|
":user_id" => $data['user_id'],
|
|
":event_id" => $data['event_id'],
|
|
":purchase_date" => $data['purchase_date'],
|
|
":valid_until" => $data['valid_until']
|
|
];
|
|
try {
|
|
$sth = $pdo->prepare($sql);
|
|
$sth->execute($params);
|
|
return $pdo->lastInsertId();
|
|
} catch (PDOException $e) {
|
|
throw new \Exception("Fehler beim Kauf des Tickets.");
|
|
}
|
|
}
|
|
|
|
public function hasTicket($user_id, $event_id) {
|
|
$pdo = $this->linkDB();
|
|
$sql = "SELECT COUNT(*) as count FROM ticket WHERE user_id = :user_id AND event_id = :event_id;";
|
|
$params = [
|
|
":user_id" => $user_id,
|
|
":event_id" => $event_id
|
|
];
|
|
try {
|
|
$sth = $pdo->prepare($sql);
|
|
$sth->execute($params);
|
|
return $sth->fetch(\PDO::FETCH_ASSOC);
|
|
} catch (PDOException $e) {
|
|
new \Blog\Library\ErrorMsg("Fehler bei der Ticketprüfung.", $e);
|
|
die;
|
|
}
|
|
}
|
|
|
|
public function deleteTicket($ticket_id) {
|
|
$pdo = $this->linkDB();
|
|
$sql = "DELETE FROM ticket WHERE ticket_id = :ticket_id;";
|
|
$params = [":ticket_id" => $ticket_id];
|
|
try {
|
|
$sth = $pdo->prepare($sql);
|
|
$sth->execute($params);
|
|
return $sth->rowCount();
|
|
} catch (PDOException $e) {
|
|
new \Blog\Library\ErrorMsg("Fehler beim Löschen des Tickets.", $e);
|
|
die;
|
|
}
|
|
}
|
|
} |