From f8adf31ec67783698391fd2e70fd80f876645dfe Mon Sep 17 00:00:00 2001 From: Muhammad Nuzaihan Date: Sat, 7 Apr 2018 13:01:57 +0800 Subject: [PATCH] make sure any attachments should be attached with a content-id --- app/models/ticket.rb | 14 +++++++++++- test/unit/ticket_trigger_test.rb | 39 ++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/app/models/ticket.rb b/app/models/ticket.rb index 5844f271f..1dc8320ca 100644 --- a/app/models/ticket.rb +++ b/app/models/ticket.rb @@ -1004,7 +1004,9 @@ perform changes on ticket quote: true, ) - Ticket::Article.create( + (body, attachments_inline) = HtmlSanitizer.replace_inline_images(body, id) + + article = Ticket::Article.create( ticket_id: id, to: recipient_string, subject: subject, @@ -1019,6 +1021,16 @@ perform changes on ticket updated_by_id: 1, created_by_id: 1, ) + + attachments_inline.each do |attachment| + Store.add( + object: 'Ticket::Article', + o_id: article.id, + data: attachment[:data], + filename: attachment[:filename], + preferences: attachment[:preferences], + ) + end next end diff --git a/test/unit/ticket_trigger_test.rb b/test/unit/ticket_trigger_test.rb index 88c679f9a..2a18340f8 100644 --- a/test/unit/ticket_trigger_test.rb +++ b/test/unit/ticket_trigger_test.rb @@ -4245,4 +4245,43 @@ class TicketTriggerTest < ActiveSupport::TestCase end + test 'make sure attachments should be attached with content id' do + trigger1 = Trigger.create_or_update( + name: 'auto reply', + condition: { + 'ticket.action' => { + 'operator' => 'is', + 'value' => 'create', + }, + 'ticket.state_id' => { + 'operator' => 'is', + 'value' => Ticket::State.lookup(name: 'new').id.to_s, + }, + }, + perform: { + 'notification.email' => { + 'body' => 'some text
#{ticket.customer.lastname}
#{ticket.title}
#{article.body}
', + 'recipient' => 'article_last_sender', + 'subject' => 'Thanks for your inquiry (#{ticket.title})!', + }, + }, + disable_notification: true, + active: true, + created_by_id: 1, + updated_by_id: 1, + ) + + ticket1, article1, user, mail = Channel::EmailParser.new.process({}, IO.binread('test/fixtures/mail65.box')) + + assert_equal('aaäöüßad asd', ticket1.title, 'ticket1.title verify') + assert_equal('Users', ticket1.group.name, 'ticket1.group verify') + assert_equal('new', ticket1.state.name, 'ticket1.state verify') + assert_equal(2, ticket1.articles.count, 'ticket1.articles verify') + article1 = ticket1.articles.last + assert_match('Zammad ', article1.from) + assert_match('smith@example.com', article1.to) + assert_match('Thanks for your inquiry (aaäöüßad asd)!', article1.subject) + assert_match(/.+cid:.+?@zammad.example.com.+/, article1.body) + assert_equal('text/html', article1.content_type) + end end