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;
|
||||
|
||||
// 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ä
|
||||
$ccToSend = $replyCc !== '' ? $replyCc : ($t['cc'] ?? '');
|
||||
|
||||
@@ -5322,16 +5340,39 @@ switch ($action) {
|
||||
$z = new ZammadClient($integ['config']['url'], $integ['config']['token']);
|
||||
$to = !empty($input['to']) ? trim($input['to']) : ($ticket['from_email'] ?? '');
|
||||
$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(
|
||||
(int)$ticket['zammad_ticket_id'],
|
||||
$body,
|
||||
$fullBody,
|
||||
$to,
|
||||
$ticket['subject'] ?? '',
|
||||
'email',
|
||||
$cc
|
||||
);
|
||||
|
||||
// Tallenna myös paikalliseen tietokantaan
|
||||
// Tallenna myös paikalliseen tietokantaan (vain uusi viesti, ei ketjua)
|
||||
$msgId = substr(uniqid(), -8) . bin2hex(random_bytes(2));
|
||||
_dbExecute(
|
||||
"INSERT INTO ticket_messages (id, ticket_id, type, from_email, from_name, body, timestamp, zammad_article_id)
|
||||
|
||||
Reference in New Issue
Block a user