85 lines
3.4 KiB
PHP
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.');
|