2014-02-05 16:14:57 +00:00
|
|
|
class Observer::Ticket::Article::CommunicateEmail::BackgroundJob
|
|
|
|
def initialize(id)
|
|
|
|
@article_id = id
|
|
|
|
end
|
2015-05-07 10:27:12 +00:00
|
|
|
|
2014-02-05 16:14:57 +00:00
|
|
|
def perform
|
2015-12-11 14:11:34 +00:00
|
|
|
record = Ticket::Article.find(@article_id)
|
2014-02-05 16:14:57 +00:00
|
|
|
|
|
|
|
# build subject
|
2016-05-23 17:56:39 +00:00
|
|
|
ticket = Ticket.lookup(id: record.ticket_id)
|
|
|
|
article_count = Ticket::Article.where(ticket_id: ticket.id).count
|
|
|
|
subject = if article_count > 1
|
|
|
|
ticket.subject_build(record.subject, true)
|
|
|
|
else
|
|
|
|
ticket.subject_build(record.subject)
|
|
|
|
end
|
2014-02-05 16:14:57 +00:00
|
|
|
|
|
|
|
# send email
|
2015-08-28 00:53:14 +00:00
|
|
|
if !ticket.group.email_address_id
|
2016-03-01 14:26:46 +00:00
|
|
|
raise "Can't send email, no email address definde for group id '#{ticket.group.id}'"
|
2015-08-28 00:53:14 +00:00
|
|
|
elsif !ticket.group.email_address.channel_id
|
2016-03-01 14:26:46 +00:00
|
|
|
raise "Can't send email, no channel definde for email_address id '#{ticket.group.email_address_id}'"
|
2015-08-28 00:53:14 +00:00
|
|
|
end
|
2015-12-11 14:11:34 +00:00
|
|
|
|
2015-08-28 00:53:14 +00:00
|
|
|
channel = ticket.group.email_address.channel
|
|
|
|
|
2016-05-03 00:36:44 +00:00
|
|
|
notification = false
|
|
|
|
sender = Ticket::Article::Sender.lookup(id: record.sender_id)
|
|
|
|
if sender['name'] == 'System'
|
|
|
|
notification = true
|
|
|
|
end
|
|
|
|
|
2015-08-28 00:53:14 +00:00
|
|
|
# get linked channel and send
|
|
|
|
message = channel.deliver(
|
2014-02-05 16:14:57 +00:00
|
|
|
{
|
2015-04-27 13:42:53 +00:00
|
|
|
message_id: record.message_id,
|
|
|
|
in_reply_to: record.in_reply_to,
|
2016-02-20 07:14:51 +00:00
|
|
|
references: ticket.get_references([record.message_id]),
|
2015-04-27 13:42:53 +00:00
|
|
|
from: record.from,
|
|
|
|
to: record.to,
|
|
|
|
cc: record.cc,
|
|
|
|
subject: subject,
|
|
|
|
content_type: record.content_type,
|
|
|
|
body: record.body,
|
|
|
|
attachments: record.attachments
|
2016-05-03 00:36:44 +00:00
|
|
|
},
|
|
|
|
notification
|
2014-02-05 16:14:57 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
# store mail plain
|
|
|
|
Store.add(
|
2015-04-27 13:42:53 +00:00
|
|
|
object: 'Ticket::Article::Mail',
|
|
|
|
o_id: record.id,
|
|
|
|
data: message.to_s,
|
|
|
|
filename: "ticket-#{ticket.number}-#{record.id}.eml",
|
|
|
|
preferences: {},
|
|
|
|
created_by_id: record.created_by_id,
|
2014-02-05 16:14:57 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
# add history record
|
|
|
|
recipient_list = ''
|
|
|
|
[:to, :cc].each { |key|
|
2015-05-07 09:04:40 +00:00
|
|
|
|
|
|
|
next if !record[key]
|
|
|
|
next if record[key] == ''
|
|
|
|
|
|
|
|
if recipient_list != ''
|
|
|
|
recipient_list += ','
|
2014-02-05 16:14:57 +00:00
|
|
|
end
|
2015-05-07 09:04:40 +00:00
|
|
|
recipient_list += record[key]
|
2014-02-05 16:14:57 +00:00
|
|
|
}
|
2015-04-30 15:25:04 +00:00
|
|
|
|
|
|
|
return if recipient_list == ''
|
|
|
|
|
|
|
|
History.add(
|
|
|
|
o_id: record.id,
|
|
|
|
history_type: 'email',
|
|
|
|
history_object: 'Ticket::Article',
|
|
|
|
related_o_id: ticket.id,
|
|
|
|
related_history_object: 'Ticket',
|
|
|
|
value_from: record.subject,
|
|
|
|
value_to: recipient_list,
|
|
|
|
created_by_id: record.created_by_id,
|
|
|
|
)
|
2014-02-05 16:14:57 +00:00
|
|
|
end
|
2015-04-27 14:15:29 +00:00
|
|
|
end
|