Files
deskhub/DeskHub-Webseite/api/staff/v1/email_templates.php
T
2026-10-16 19:12:13 +00:00

85 lines
3.4 KiB
PHP

<?php
declare(strict_types=1);
require_once __DIR__ . '/common.php';
api_require_method('GET', 'POST');
$staff = api_require_staff();
api_require_admin_or_permission($staff, 'manage_email_templates');
$pdo = get_db();
function api_email_templates_definitions(): array
{
return [
'ticket_created' => [
'label' => 'Ticket erstellt (an Kunde)',
'placeholders' => ['ticket_number', 'subject', 'customer_name', 'department_name', 'ticket_url', 'lookup_url', 'site_name'],
'defaultSubject' => 'Ihr Ticket #{ticket_number} wurde erstellt',
'defaultBody' => email_ticket_created_default_body(),
],
'new_reply' => [
'label' => 'Neue Antwort (an Kunde)',
'placeholders' => ['ticket_number', 'subject', 'customer_name', 'message', 'ticket_url'],
'defaultSubject' => '[#{ticket_number}] {subject}',
'defaultBody' => 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'],
'defaultSubject' => 'Neues Ticket [#{ticket_number}] {subject}',
'defaultBody' => email_new_ticket_department_default_body(),
],
'ticket_overdue' => [
'label' => 'Ticket überfällig (an Admins)',
'placeholders' => ['ticket_number', 'subject', 'department_name', 'ticket_url'],
'defaultSubject' => 'SLA überschritten: Ticket #{ticket_number}',
'defaultBody' => email_ticket_overdue_default_body(),
],
];
}
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
$items = [];
foreach (api_email_templates_definitions() as $key => $tpl) {
$customSubject = get_setting("email_template_{$key}_subject");
$customBody = get_setting("email_template_{$key}_body");
$items[] = [
'key' => $key,
'label' => $tpl['label'],
'placeholders' => $tpl['placeholders'],
'subject' => $customSubject ?: $tpl['defaultSubject'],
'body' => $customBody ?: $tpl['defaultBody'],
'isCustomized' => $customSubject !== null,
];
}
api_json(['items' => $items]);
}
$body = api_request_body();
$action = $body['action'] ?? '';
$definitions = api_email_templates_definitions();
$key = (string) ($body['key'] ?? '');
if (!isset($definitions[$key])) {
api_error(422, 'INVALID_TEMPLATE', 'Unbekannte Vorlage.');
}
if ($action === 'save') {
$subject = trim((string) ($body['subject'] ?? ''));
$bodyText = sanitize_staff_html(trim((string) ($body['body'] ?? '')));
if ($subject === '') api_error(422, 'SUBJECT_REQUIRED', 'Bitte einen Betreff angeben.');
if (trim(strip_tags($bodyText)) === '') api_error(422, 'BODY_REQUIRED', 'Bitte einen Text angeben.');
set_setting("email_template_{$key}_subject", $subject);
set_setting("email_template_{$key}_body", $bodyText);
audit_log($staff['id'], "E-Mail-Vorlage geändert: {$definitions[$key]['label']} (Mobile App)");
api_json(['ok' => true]);
}
if ($action === 'reset') {
set_setting("email_template_{$key}_subject", null);
set_setting("email_template_{$key}_body", null);
audit_log($staff['id'], "E-Mail-Vorlage zurückgesetzt: {$definitions[$key]['label']} (Mobile App)");
api_json(['ok' => true]);
}
api_error(422, 'INVALID_ACTION', 'Unbekannte Aktion.');