144 lines
5.8 KiB
PHP
144 lines
5.8 KiB
PHP
<?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>
|