Files
2026-10-23 17:22:21 +00:00

117 lines
5.5 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
require_once __DIR__ . '/../includes/bootstrap.php';
$admin = require_admin_or_permission('manage_email_templates');
$pdo = get_db();
$templates = [
'ticket_created' => [
'label' => 'Ticket erstellt (an Kunde)',
'placeholders' => ['ticket_number', 'subject', 'customer_name', 'department_name', 'ticket_url', 'lookup_url', 'site_name'],
'default_subject' => 'Ihr Ticket #{ticket_number} wurde erstellt',
'default_body' => email_ticket_created_default_body(),
],
'new_reply' => [
'label' => 'Neue Antwort (an Kunde)',
'placeholders' => ['ticket_number', 'subject', 'customer_name', 'message', 'ticket_url'],
'default_subject' => '[#{ticket_number}] {subject}',
'default_body' => email_new_reply_default_body(),
],
'new_ticket_department' => [
'label' => 'Neues Ticket (an Abteilung)',
'placeholders' => ['ticket_number', 'subject', 'customer_name', 'customer_email', 'department_name', 'ticket_url'],
'default_subject' => 'Neues Ticket [#{ticket_number}] {subject}',
'default_body' => email_new_ticket_department_default_body(),
],
'ticket_overdue' => [
'label' => 'Ticket überfällig (an Admins)',
'placeholders' => ['ticket_number', 'subject', 'department_name', 'ticket_url'],
'default_subject' => 'SLA überschritten: Ticket #{ticket_number}',
'default_body' => email_ticket_overdue_default_body(),
],
'customer_reminder' => [
'label' => 'Erinnerung (an Kunde, wenn er nicht reagiert)',
'placeholders' => ['ticket_number', 'subject', 'customer_name', 'ticket_url', 'close_note'],
'default_subject' => 'Erinnerung zu Ihrem Ticket [#{ticket_number}]',
'default_body' => email_customer_reminder_default_body(),
],
'live_chat_transcript' => [
'label' => 'Chatverlauf (an Kunde, nach Chatende)',
'placeholders' => ['ticket_number', 'customer_name', 'transcript', 'ticket_url'],
'default_subject' => 'Ihr Chatverlauf – Ticket #{ticket_number}',
'default_body' => email_live_chat_transcript_default_body(),
],
];
$errors = [];
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
verify_csrf();
$key = $_POST['template_key'] ?? '';
if (!isset($templates[$key])) {
$errors[] = 'Unbekannte Vorlage.';
} else {
$subject = trim($_POST['subject'] ?? '');
$body = sanitize_staff_html(trim($_POST['body'] ?? ''));
if ($subject === '') $errors[] = 'Bitte einen Betreff angeben.';
if (trim(strip_tags($body)) === '') $errors[] = 'Bitte einen Text angeben.';
if (!$errors) {
set_setting("email_template_{$key}_subject", $subject);
set_setting("email_template_{$key}_body", $body);
audit_log($admin['id'], "E-Mail-Vorlage geändert: {$templates[$key]['label']}");
flash('success', 'Vorlage gespeichert.');
redirect('/staff/email_templates.php');
}
}
if (($_POST['action'] ?? '') === 'reset') {
$key = $_POST['template_key'] ?? '';
if (isset($templates[$key])) {
set_setting("email_template_{$key}_subject", null);
set_setting("email_template_{$key}_body", null);
audit_log($admin['id'], "E-Mail-Vorlage zurückgesetzt: {$templates[$key]['label']}");
flash('success', 'Vorlage auf Standard zurückgesetzt.');
redirect('/staff/email_templates.php');
}
}
}
$pageTitle = 'E-Mail-Vorlagen';
$activePage = 'email_templates';
require __DIR__ . '/_header.php';
?>
<h1>E-Mail-Vorlagen</h1>
<p class="muted">Texte der automatischen E-Mails anpassen. Platzhalter in geschweiften Klammern werden beim Versand durch die echten Werte ersetzt. Der Branding-Rahmen (Kopfzeile mit Firmenname, Fußzeile) wird beim Versand automatisch um diesen Text herum ergänzt – hier nur den Inhalt der Karte anpassen.</p>
<?php foreach ($errors as $err): ?>
<div class="flash error"><?= e($err) ?></div>
<?php endforeach; ?>
<?php foreach ($templates as $key => $tpl):
$subject = get_setting("email_template_{$key}_subject") ?: $tpl['default_subject'];
$body = get_setting("email_template_{$key}_body") ?: $tpl['default_body'];
$isCustomized = get_setting("email_template_{$key}_subject") !== null;
?>
<div class="card">
<h3><?= e($tpl['label']) ?> <?php if ($isCustomized): ?><span class="badge" style="background:#0f6f6a">angepasst</span><?php endif; ?></h3>
<p class="muted" style="font-size:.82rem">Verfügbare Platzhalter: <?php foreach ($tpl['placeholders'] as $ph): ?><code>{<?= $ph ?>}</code> <?php endforeach; ?></p>
<form method="post">
<?= csrf_field() ?>
<input type="hidden" name="template_key" value="<?= e($key) ?>">
<label for="subject_<?= $key ?>">Betreff</label>
<input type="text" id="subject_<?= $key ?>" name="subject" value="<?= e($subject) ?>" required>
<label for="body_<?= $key ?>">Text</label>
<textarea id="body_<?= $key ?>" name="body" data-richtext style="min-height:140px" required><?= e($body) ?></textarea>
<div class="btn-row">
<button type="submit" class="btn">Speichern</button>
<?php if ($isCustomized): ?>
<button type="submit" name="action" value="reset" class="btn secondary" formnovalidate onclick="return confirm('Diese Vorlage wirklich auf den Standardtext zurücksetzen?');">Auf Standard zurücksetzen</button>
<?php endif; ?>
</div>
</form>
</div>
<?php endforeach; ?>
<?php require __DIR__ . '/_footer.php'; ?>