Lisää viestiketju (quoted thread) tikettivastausten loppuun
Sekä Zammad- että SMTP-vastaukset sisältävät nyt koko viestiketjun vastauksessa. Zammad-vastauksissa HTML-blockquoteilla, SMTP:ssä plain-text > -quoting-muodossa. Vain uusi viesti tallennetaan tietokantaan, ketju näkyy vain lähetettävässä sähköpostissa. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
45
api.php
45
api.php
@@ -3400,6 +3400,24 @@ switch ($action) {
|
|||||||
}
|
}
|
||||||
$emailBody = $signature ? $body . "\n\n-- \n" . $signature : $body;
|
$emailBody = $signature ? $body . "\n\n-- \n" . $signature : $body;
|
||||||
|
|
||||||
|
// Rakenna viestiketju (quoted thread) vastaukseen
|
||||||
|
$threadMessages = _dbFetchAll(
|
||||||
|
"SELECT from_name, from_email, timestamp, body, type FROM ticket_messages WHERE ticket_id = ? ORDER BY timestamp DESC",
|
||||||
|
[$t['id']]
|
||||||
|
);
|
||||||
|
if (!empty($threadMessages)) {
|
||||||
|
$emailBody .= "\n";
|
||||||
|
foreach ($threadMessages as $tm) {
|
||||||
|
$tmSender = $tm['from_name'] ?: $tm['from_email'];
|
||||||
|
$tmDate = date('d.m.Y H:i', strtotime($tm['timestamp']));
|
||||||
|
$tmBody = strip_tags(str_replace(['<br>', '<br/>', '<br />', '</p>', '</div>'], "\n", $tm['body'] ?: ''));
|
||||||
|
$tmBody = html_entity_decode($tmBody, ENT_QUOTES, 'UTF-8');
|
||||||
|
$tmBody = trim(preg_replace('/\n{3,}/', "\n\n", $tmBody));
|
||||||
|
$quoted = implode("\n", array_map(fn($l) => "> " . $l, explode("\n", $tmBody)));
|
||||||
|
$emailBody .= "\n{$tmSender} — {$tmDate}:\n{$quoted}\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// CC: käytä frontendistä annettua CC:tä, tai tiketin alkuperäistä CC:tä
|
// CC: käytä frontendistä annettua CC:tä, tai tiketin alkuperäistä CC:tä
|
||||||
$ccToSend = $replyCc !== '' ? $replyCc : ($t['cc'] ?? '');
|
$ccToSend = $replyCc !== '' ? $replyCc : ($t['cc'] ?? '');
|
||||||
|
|
||||||
@@ -5322,16 +5340,39 @@ switch ($action) {
|
|||||||
$z = new ZammadClient($integ['config']['url'], $integ['config']['token']);
|
$z = new ZammadClient($integ['config']['url'], $integ['config']['token']);
|
||||||
$to = !empty($input['to']) ? trim($input['to']) : ($ticket['from_email'] ?? '');
|
$to = !empty($input['to']) ? trim($input['to']) : ($ticket['from_email'] ?? '');
|
||||||
$cc = !empty($input['cc']) ? trim($input['cc']) : '';
|
$cc = !empty($input['cc']) ? trim($input['cc']) : '';
|
||||||
|
|
||||||
|
// Muunna uusi viesti HTML:ksi
|
||||||
|
$newMsgHtml = nl2br(htmlspecialchars($body, ENT_QUOTES, 'UTF-8'));
|
||||||
|
|
||||||
|
// Rakenna viestiketju (quoted thread) vastaukseen
|
||||||
|
$messages = _dbFetchAll(
|
||||||
|
"SELECT from_name, from_email, timestamp, body, type FROM ticket_messages WHERE ticket_id = ? ORDER BY timestamp DESC",
|
||||||
|
[$ticketId]
|
||||||
|
);
|
||||||
|
$quotedThread = '';
|
||||||
|
foreach ($messages as $msg) {
|
||||||
|
$sender = $msg['from_name'] ?: $msg['from_email'];
|
||||||
|
$date = date('d.m.Y H:i', strtotime($msg['timestamp']));
|
||||||
|
$msgBody = $msg['body'] ?: '';
|
||||||
|
$quotedThread .= '<br><div style="padding-left:0.5em;border-left:2px solid #ccc;color:#555;">'
|
||||||
|
. '<small><strong>' . htmlspecialchars($sender) . '</strong> — ' . $date . '</small><br>'
|
||||||
|
. '<div>' . $msgBody . '</div>'
|
||||||
|
. '</div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Yhdistä: uusi viesti (HTML) + viestiketju
|
||||||
|
$fullBody = $newMsgHtml . $quotedThread;
|
||||||
|
|
||||||
$result = $z->createArticle(
|
$result = $z->createArticle(
|
||||||
(int)$ticket['zammad_ticket_id'],
|
(int)$ticket['zammad_ticket_id'],
|
||||||
$body,
|
$fullBody,
|
||||||
$to,
|
$to,
|
||||||
$ticket['subject'] ?? '',
|
$ticket['subject'] ?? '',
|
||||||
'email',
|
'email',
|
||||||
$cc
|
$cc
|
||||||
);
|
);
|
||||||
|
|
||||||
// Tallenna myös paikalliseen tietokantaan
|
// Tallenna myös paikalliseen tietokantaan (vain uusi viesti, ei ketjua)
|
||||||
$msgId = substr(uniqid(), -8) . bin2hex(random_bytes(2));
|
$msgId = substr(uniqid(), -8) . bin2hex(random_bytes(2));
|
||||||
_dbExecute(
|
_dbExecute(
|
||||||
"INSERT INTO ticket_messages (id, ticket_id, type, from_email, from_name, body, timestamp, zammad_article_id)
|
"INSERT INTO ticket_messages (id, ticket_id, type, from_email, from_name, body, timestamp, zammad_article_id)
|
||||||
|
|||||||
Reference in New Issue
Block a user