Files
2026-10-24 20:14:46 +00:00

66 lines
3.4 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* csat.php – Bewertungsseite für die Zufriedenheitsabfrage (Link aus der Mail).
* Ein Klick auf einen Stern in der Mail öffnet diese Seite mit vorgewählter Bewertung; gespeichert wird erst mit dem Knopf
* (so zählen automatische Link-Prüfungen von Mailprogrammen nicht als Bewertung).
*/
require_once __DIR__ . '/includes/bootstrap.php';
$pdo = get_db();
$token = (string) ($_GET['t'] ?? $_POST['t'] ?? '');
$row = csat_find_by_token($pdo, $token);
$rating = (int) ($_POST['rating'] ?? $_GET['r'] ?? 0);
$error = null;
$done = false;
if ($row && $_SERVER['REQUEST_METHOD'] === 'POST') {
if (!rate_limit_check('csat', client_ip(), 30, 15)) {
$error = 'Zu viele Anfragen. Bitte versuchen Sie es später erneut.';
} else {
$res = csat_record($pdo, $token, $rating, (string) ($_POST['comment'] ?? ''));
if ($res['ok']) $done = true; else $error = $res['error'];
$row = csat_find_by_token($pdo, $token);
}
}
$already = $row && $row['answered_at'] !== null && !$done;
$pageTitle = 'Ihre Bewertung';
require __DIR__ . '/includes/header_customer.php';
?>
<div style="max-width:560px;margin:24px auto">
<?php if (!$row): ?>
<h1>Link nicht gültig</h1>
<p class="muted">Dieser Bewertungslink ist ungültig oder abgelaufen.</p>
<?php elseif ($done): ?>
<h1>Vielen Dank!</h1>
<p style="font-size:2rem;color:#f5b301;margin:8px 0"><?= e(csat_stars((int) $row['rating'])) ?></p>
<p>Ihre Bewertung für Ticket <strong>#<?= e($row['ticket_number']) ?></strong> ist bei uns angekommen.</p>
<?php elseif ($already): ?>
<h1>Bereits bewertet</h1>
<p class="muted">Sie haben Ticket #<?= e($row['ticket_number']) ?> schon bewertet. Vielen Dank!</p>
<?php else: ?>
<h1>Wie zufrieden waren Sie?</h1>
<p class="muted">Ticket <strong>#<?= e($row['ticket_number']) ?></strong> – <?= e($row['subject']) ?></p>
<?php if ($error): ?><div class="flash error"><?= e($error) ?></div><?php endif; ?>
<form method="post" class="card" style="padding:20px;margin-top:14px">
<input type="hidden" name="t" value="<?= e($token) ?>">
<div id="csat-stars" style="display:flex;gap:6px;flex-direction:row-reverse;justify-content:center;font-size:2.6rem;line-height:1">
<?php for ($i = 5; $i >= 1; $i--): ?>
<input type="radio" name="rating" id="r<?= $i ?>" value="<?= $i ?>" style="position:absolute;opacity:0;width:0;height:0" <?= $rating === $i ? 'checked' : '' ?> required>
<label for="r<?= $i ?>" title="<?= $i ?> von 5" class="csat-star" style="cursor:pointer;margin:0">★</label>
<?php endfor; ?>
</div>
<style>
.csat-star { color:#cbd5e1; transition:color .1s }
#csat-stars input:checked ~ .csat-star, #csat-stars .csat-star:hover, #csat-stars .csat-star:hover ~ .csat-star { color:#f5b301 }
#csat-stars input:focus-visible + .csat-star { outline:2px solid var(--primary,#0f6f6a); border-radius:4px }
</style>
<p class="muted" style="text-align:center;font-size:.8rem;margin:4px 0 14px">1 Stern = unzufrieden · 5 Sterne = sehr zufrieden</p>
<label for="comment">Möchten Sie uns noch etwas mitteilen? (optional)</label>
<textarea id="comment" name="comment" rows="4" maxlength="2000" placeholder="Was hat gut geklappt, was können wir besser machen?"></textarea>
<div class="btn-row"><button type="submit" class="btn">Bewertung absenden</button></div>
</form>
<?php endif; ?>
</div>
<?php require __DIR__ . '/includes/footer_customer.php'; ?>