Improved postmaster database filter.
This commit is contained in:
parent
9e03183e9e
commit
306cd6c3db
2 changed files with 100 additions and 5 deletions
|
@ -13,13 +13,13 @@ module Channel::Filter::Database
|
||||||
min_one_rule_exists = false
|
min_one_rule_exists = false
|
||||||
filter[:match].each { |key, meta|
|
filter[:match].each { |key, meta|
|
||||||
begin
|
begin
|
||||||
next if !meta || !meta['value'] || meta['value'].empty?
|
next if meta.blank? || meta['value'].blank?
|
||||||
min_one_rule_exists = true
|
min_one_rule_exists = true
|
||||||
scan = []
|
has_matched = false
|
||||||
if mail
|
if mail[ key.downcase.to_sym ].present? && mail[ key.downcase.to_sym ] =~ /#{meta['value']}/i
|
||||||
scan = mail[ key.downcase.to_sym ].scan(/#{meta['value']}/i)
|
has_matched = true
|
||||||
end
|
end
|
||||||
if scan[0]
|
if has_matched
|
||||||
if meta[:operator] == 'contains not'
|
if meta[:operator] == 'contains not'
|
||||||
all_matches_ok = false
|
all_matches_ok = false
|
||||||
end
|
end
|
||||||
|
|
|
@ -396,6 +396,101 @@ Some Text'
|
||||||
assert_equal('2 normal', ticket.priority.name)
|
assert_equal('2 normal', ticket.priority.name)
|
||||||
|
|
||||||
PostmasterFilter.destroy_all
|
PostmasterFilter.destroy_all
|
||||||
|
PostmasterFilter.create!(
|
||||||
|
name: 'Autoresponder',
|
||||||
|
match: {
|
||||||
|
'auto-submitted' => {
|
||||||
|
'operator' => 'contains not',
|
||||||
|
'value' => 'auto-generated',
|
||||||
|
},
|
||||||
|
'from' => {
|
||||||
|
'operator' => 'contains',
|
||||||
|
'value' => '@example.com',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
perform: {
|
||||||
|
'x-zammad-article-internal' => {
|
||||||
|
'value' => 'true',
|
||||||
|
},
|
||||||
|
'x-zammad-article-type_id' => {
|
||||||
|
'value' => Ticket::Article::Type.find_by(name: 'note').id.to_s,
|
||||||
|
},
|
||||||
|
'x-zammad-ignore' => {
|
||||||
|
'value' => 'false',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
channel: 'email',
|
||||||
|
active: true,
|
||||||
|
created_by_id: 1,
|
||||||
|
updated_by_id: 1,
|
||||||
|
)
|
||||||
|
|
||||||
|
data = 'From: ME Bob <me@example.com>
|
||||||
|
To: customer@example.com
|
||||||
|
Subject: some subject
|
||||||
|
|
||||||
|
Some Text'
|
||||||
|
|
||||||
|
parser = Channel::EmailParser.new
|
||||||
|
ticket, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
|
||||||
|
assert_equal('Users', ticket.group.name)
|
||||||
|
assert_equal('2 normal', ticket.priority.name)
|
||||||
|
assert_equal('some subject', ticket.title)
|
||||||
|
assert_equal('me@example.com', ticket.customer.email)
|
||||||
|
assert_equal('2 normal', ticket.priority.name)
|
||||||
|
|
||||||
|
assert_equal('Customer', article.sender.name)
|
||||||
|
assert_equal('note', article.type.name)
|
||||||
|
assert_equal(true, article.internal)
|
||||||
|
|
||||||
|
PostmasterFilter.destroy_all
|
||||||
|
PostmasterFilter.create!(
|
||||||
|
name: 'Autoresponder',
|
||||||
|
match: {
|
||||||
|
'auto-submitted' => {
|
||||||
|
'operator' => 'contains',
|
||||||
|
'value' => 'auto-generated',
|
||||||
|
},
|
||||||
|
'from' => {
|
||||||
|
'operator' => 'contains',
|
||||||
|
'value' => '@example.com',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
perform: {
|
||||||
|
'x-zammad-article-internal' => {
|
||||||
|
'value' => 'true',
|
||||||
|
},
|
||||||
|
'x-zammad-article-type_id' => {
|
||||||
|
'value' => Ticket::Article::Type.find_by(name: 'note').id.to_s,
|
||||||
|
},
|
||||||
|
'x-zammad-ignore' => {
|
||||||
|
'value' => 'false',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
channel: 'email',
|
||||||
|
active: true,
|
||||||
|
created_by_id: 1,
|
||||||
|
updated_by_id: 1,
|
||||||
|
)
|
||||||
|
|
||||||
|
data = 'From: ME Bob <me@example.com>
|
||||||
|
To: customer@example.com
|
||||||
|
Subject: some subject
|
||||||
|
|
||||||
|
Some Text'
|
||||||
|
|
||||||
|
parser = Channel::EmailParser.new
|
||||||
|
ticket, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
|
||||||
|
assert_equal('Users', ticket.group.name)
|
||||||
|
assert_equal('2 normal', ticket.priority.name)
|
||||||
|
assert_equal('some subject', ticket.title)
|
||||||
|
assert_equal('me@example.com', ticket.customer.email)
|
||||||
|
assert_equal('2 normal', ticket.priority.name)
|
||||||
|
|
||||||
|
assert_equal('Customer', article.sender.name)
|
||||||
|
assert_equal('email', article.type.name)
|
||||||
|
assert_equal(false, article.internal)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue