117 lines
5.5 KiB
PHP
117 lines
5.5 KiB
PHP
<?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'; ?>
|