Wire up auroraalt mailer
This commit is contained in:
+143
@@ -0,0 +1,143 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
require_once __DIR__ . '/includes/auth.php';
|
||||
|
||||
$bandId = isset($_GET['id']) ? (int) $_GET['id'] : 0;
|
||||
$band = $bandId ? findBand($bandId) : null;
|
||||
|
||||
if (!$band) {
|
||||
http_response_code(404);
|
||||
echo 'Band nicht gefunden';
|
||||
exit;
|
||||
}
|
||||
|
||||
$media = bandMedia($bandId);
|
||||
$availability = bandAvailability($bandId);
|
||||
$reviews = bandReviews($bandId);
|
||||
$user = currentUser();
|
||||
$message = '';
|
||||
$error = '';
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST' && $user) {
|
||||
if (isset($_POST['review'])) {
|
||||
if (!eligibleForReview($bandId, (int) $user['id'])) {
|
||||
$error = 'Für Bewertungen ist eine bestätigte Buchung nötig.';
|
||||
} else {
|
||||
$comment = trim((string) ($_POST['comment'] ?? ''));
|
||||
if (mb_strlen($comment) > 200) {
|
||||
$error = 'Maximal 200 Zeichen erlaubt.';
|
||||
} else {
|
||||
storeReview([
|
||||
'band_id' => $bandId,
|
||||
'user_id' => (int) $user['id'],
|
||||
'rating' => (int) $_POST['rating'],
|
||||
'comment' => $comment,
|
||||
]);
|
||||
$message = 'Danke! Deine Bewertung wartet auf Freigabe.';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title><?= htmlspecialchars($band['name']) ?> – <?= SITE_NAME ?></title>
|
||||
<link rel="stylesheet" href="assets/css/style.css">
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<a class="badge" href="index.php">← Zurück</a>
|
||||
<div class="hero" style="margin-top: 20px;">
|
||||
<div>
|
||||
<p class="badge"><?= htmlspecialchars($band['genre']) ?></p>
|
||||
<h1><?= htmlspecialchars($band['name']) ?></h1>
|
||||
<p><?= nl2br(htmlspecialchars($band['description'])) ?></p>
|
||||
<div class="badge-list">
|
||||
<span class="badge">Ort: <?= htmlspecialchars($band['city'] ?? '–') ?></span>
|
||||
<span class="badge">ab <?= formatPrice((int) $band['price']) ?></span>
|
||||
</div>
|
||||
<div class="badge-list">
|
||||
<?php foreach (array_filter(array_map('trim', explode(',', (string) $band['style_tags']))) as $tag): ?>
|
||||
<span class="badge">#<?= htmlspecialchars($tag) ?></span>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<p>
|
||||
<a class="btn-primary" href="anfrage.php?band_id=<?= $bandId ?>">Verfügbarkeit anfragen</a>
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<?php if (!empty($band['video_url'])): ?>
|
||||
<iframe width="100%" height="280" src="<?= htmlspecialchars($band['video_url']) ?>" title="Bandvideo" allowfullscreen></iframe>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<main>
|
||||
<section class="band-detail-grid">
|
||||
<div class="gallery">
|
||||
<h3>Galerie</h3>
|
||||
<?php foreach ($media as $item): ?>
|
||||
<?php if ($item['type'] === 'image'): ?>
|
||||
<img src="<?= htmlspecialchars($item['url']) ?>" alt="Bandbild">
|
||||
<?php endif; ?>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Verfügbarkeit</h3>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr><th>Datum</th><th>Status</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($availability as $slot): ?>
|
||||
<tr>
|
||||
<td><?= htmlspecialchars((new DateTimeImmutable($slot['event_date']))->format('d.m.Y')) ?></td>
|
||||
<td><?= htmlspecialchars(ucfirst($slot['status'])) ?></td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section style="margin-top: 40px;">
|
||||
<h3>Bewertungen</h3>
|
||||
<?php if ($message): ?><div class="alert alert-success"><?= htmlspecialchars($message) ?></div><?php endif; ?>
|
||||
<?php if ($error): ?><div class="alert alert-error"><?= htmlspecialchars($error) ?></div><?php endif; ?>
|
||||
<?php foreach ($reviews as $review): ?>
|
||||
<article class="band-card">
|
||||
<p><strong><?= htmlspecialchars($review['author']) ?></strong> – <?= (int) $review['rating'] ?> ★</p>
|
||||
<p><?= htmlspecialchars($review['comment']) ?></p>
|
||||
<p class="card-meta"><?= (new DateTimeImmutable($review['created_at']))->format('d.m.Y') ?></p>
|
||||
</article>
|
||||
<?php endforeach; ?>
|
||||
<?php if (!$reviews): ?>
|
||||
<p>Noch keine freigegebenen Bewertungen.</p>
|
||||
<?php endif; ?>
|
||||
</section>
|
||||
|
||||
<?php if ($user && $user['role'] === 'kunde'): ?>
|
||||
<section style="margin-top: 40px;">
|
||||
<h3>Eigene Bewertung</h3>
|
||||
<form method="post">
|
||||
<input type="hidden" name="review" value="1">
|
||||
<label>Sterne
|
||||
<select class="form-control" name="rating">
|
||||
<?php for ($i = 5; $i >= 1; $i--): ?>
|
||||
<option value="<?= $i ?>"><?= $i ?></option>
|
||||
<?php endfor; ?>
|
||||
</select>
|
||||
</label>
|
||||
<label>Kommentar (max. 200 Zeichen)
|
||||
<textarea class="form-control" name="comment" maxlength="200"></textarea>
|
||||
</label>
|
||||
<button class="btn-primary">Bewertung senden</button>
|
||||
</form>
|
||||
</section>
|
||||
<?php endif; ?>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user