diff --git a/api.php b/api.php index f716b90..235673f 100644 --- a/api.php +++ b/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(['
', '
', '
', '

', ''], "\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 .= '
' + . '' . htmlspecialchars($sender) . ' — ' . $date . '
' + . '
' . $msgBody . '
' + . '
'; + } + + // 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)