In destination group is invalid, use the oldest valid group. Also notice in admin interface in email account config about invalid groups.

This commit is contained in:
Martin Edenhofer 2016-05-23 19:23:06 +02:00
parent 075db8873a
commit 7cf884c7a4
4 changed files with 151 additions and 37 deletions

View file

@ -222,13 +222,13 @@ class App.ChannelEmailAccountOverview extends App.Controller
events:
'click .js-channelNew': 'wizard'
'click .js-channelDelete': 'delete'
'click .js-channelGroupChange': 'group_change'
'click .js-editInbound': 'edit_inbound'
'click .js-editOutbound': 'edit_outbound'
'click .js-emailAddressNew': 'email_address_new'
'click .js-emailAddressEdit': 'email_address_edit'
'click .js-emailAddressDelete': 'email_address_delete',
'click .js-editNotificationOutbound': 'edit_notification_outbound'
'click .js-channelGroupChange': 'groupChange'
'click .js-editInbound': 'editInbound'
'click .js-editOutbound': 'editOutbound'
'click .js-emailAddressNew': 'emailAddressNew'
'click .js-emailAddressEdit': 'emailAddressEdit'
'click .js-emailAddressDelete': 'emailAddressDelete',
'click .js-editNotificationOutbound': 'editNotificationOutbound'
constructor: ->
super
@ -259,13 +259,13 @@ class App.ChannelEmailAccountOverview extends App.Controller
for channel_id in data.account_channel_ids
account_channel = App.Channel.fullLocal(channel_id)
if account_channel.group_id
account_channel.group = App.Group.find(account_channel.group_id).displayName()
account_channel.group = App.Group.find(account_channel.group_id)
else
account_channel.group = '-'
account_channels.push account_channel
for channel in account_channels
email_addresses = App.EmailAddress.search( filter: { channel_id: channel.id } )
email_addresses = App.EmailAddress.search(filter: { channel_id: channel.id })
channel.email_addresses = email_addresses
# get all unlinked email addresses
@ -294,7 +294,7 @@ class App.ChannelEmailAccountOverview extends App.Controller
channelDriver: @channelDriver
)
edit_inbound: (e) =>
editInbound: (e) =>
e.preventDefault()
id = $(e.target).closest('.action').data('id')
channel = App.Channel.find(id)
@ -307,7 +307,7 @@ class App.ChannelEmailAccountOverview extends App.Controller
channelDriver: @channelDriver
)
edit_outbound: (e) =>
editOutbound: (e) =>
e.preventDefault()
id = $(e.target).closest('.action').data('id')
channel = App.Channel.find(id)
@ -330,7 +330,7 @@ class App.ChannelEmailAccountOverview extends App.Controller
callback: @load
)
group_change: (e) =>
groupChange: (e) =>
e.preventDefault()
id = $(e.target).closest('.action').data('id')
item = App.Channel.find(id)
@ -340,7 +340,7 @@ class App.ChannelEmailAccountOverview extends App.Controller
callback: @load
)
email_address_new: (e) =>
emailAddressNew: (e) =>
e.preventDefault()
channel_id = $(e.target).closest('.action').data('id')
new App.ControllerGenericNew(
@ -353,7 +353,7 @@ class App.ChannelEmailAccountOverview extends App.Controller
callback: @load
)
email_address_edit: (e) =>
emailAddressEdit: (e) =>
e.preventDefault()
id = $(e.target).closest('li').data('id')
new App.ControllerGenericEdit(
@ -365,7 +365,7 @@ class App.ChannelEmailAccountOverview extends App.Controller
callback: @load
)
email_address_delete: (e) =>
emailAddressDelete: (e) =>
e.preventDefault()
id = $(e.target).closest('li').data('id')
item = App.EmailAddress.find(id)
@ -375,7 +375,7 @@ class App.ChannelEmailAccountOverview extends App.Controller
callback: @load
)
edit_notification_outbound: (e) =>
editNotificationOutbound: (e) =>
e.preventDefault()
id = $(e.target).closest('.action').data('id')
channel = App.Channel.find(id)
@ -395,7 +395,7 @@ class App.ChannelEmailEdit extends App.ControllerModal
content: =>
configureAttributesBase = [
{ name: 'group_id', display: 'Destination Group', tag: 'select', null: false, relation: 'Group', nulloption: true },
{ name: 'group_id', display: 'Destination Group', tag: 'select', null: false, relation: 'Group', nulloption: true, filter: { active: true } },
]
@form = new App.ControllerForm(
model:

View file

@ -72,7 +72,19 @@
<hr>
<h3><%- @T('Destination Group') %></h3>
<a href="#" class="js-channelGroupChange"><%= channel.group %></a>
<a href="#" class="js-channelGroupChange <% if channel.group.active is false: %>alert alert--danger<% end %>">
<% groupName = '' %>
<% if channel.group.displayName: %>
<% groupName = channel.group.displayName() %>
<% else: %>
<% groupName = channel.group %>
<% end %>
<% if channel.group.active is false: %>
<%- @T('%s is inactive, please select a active one.', groupName) %>
<% else: %>
<%= groupName %>
<% end %>
</a>
</div>
<div class="action-block action-block--flex">
<div class="horizontal">

View file

@ -427,8 +427,19 @@ retrns
}
end
# get default group where ticket is created
group = nil
if channel[:group_id]
group = Group.lookup(id: channel[:group_id])
end
if !group || group && !group.active
group = Group.where(active: true).order('id ASC').first
end
if !group
group = Group.first
end
ticket = Ticket.new(
group_id: channel[:group_id] || 1,
group_id: group.id,
customer_id: user.id,
title: mail[:subject] || '',
state_id: Ticket::State.find_by(name: 'new').id,

View file

@ -11,7 +11,9 @@ To: customer@example.com
Subject: some subject
Some Text',
trusted: false,
channel: {
trusted: false,
},
success: true,
},
{
@ -20,7 +22,9 @@ To: customer@example.com
Subject: äöü some subject
Some Textäöü",
trusted: false,
channel: {
trusted: false,
},
success: true,
result: {
0 => {
@ -116,7 +120,9 @@ Subject: Subject: =?utf-8?B?44CQ5LiT5Lia5Li65oKo5rOo5YaM6aaZ5riv5Y+K5rW35aSW5YWs
=?utf-8?B?5YWs5Y+46Zmi5aOr5bel5L2c56uZ5pel5YmN5q2j5byP5bu6Li4uW+ivpue7hl0=?=
Some Text",
trusted: false,
channel: {
trusted: false,
},
success: true,
result: {
0 => {
@ -1834,7 +1840,9 @@ Cc: any@example.com
Subject: some subject
Some Text',
trusted: false,
channel: {
trusted: false,
},
success: true,
result: {
0 => {
@ -1989,7 +1997,9 @@ Subject: some subject
X-Zammad-Ignore: true
Some Text',
trusted: true,
channel: {
trusted: true,
},
success: false,
},
{
@ -2003,7 +2013,9 @@ x-Zammad-Article-type: phone
x-Zammad-Article-Internal: true
Some Text',
trusted: true,
channel: {
trusted: true,
},
success: true,
result: {
0 => {
@ -2035,7 +2047,9 @@ x-Zammad-Article-Type: phone
x-Zammad-Article-Internal: true
Some Text',
trusted: false,
channel: {
trusted: false,
},
success: true,
result: {
0 => {
@ -2054,9 +2068,86 @@ Some Text',
process(files)
end
test 'process inactive group - a' do
group3 = Group.create_if_not_exists(
name: 'Test Group Inactive',
active: false,
created_by_id: 1,
updated_by_id: 1,
)
files = [
{
data: 'From: me@example.com
To: customer@example.com
Subject: some subject
Some Text',
channel: {
group_id: group3.id,
},
success: true,
result: {
0 => {
state: 'new',
group: 'Users',
priority: '2 normal',
title: 'some subject',
},
1 => {
sender: 'Customer',
type: 'email',
internal: false,
},
},
},
]
process(files)
end
test 'process inactive group - b' do
group_active_map = {}
Group.all.each {|group|
group_active_map[group.id] = group.active
group.active = false
group.save
}
files = [
{
data: 'From: me@example.com
To: customer@example.com
Subject: some subject
Some Text',
channel: {},
success: true,
result: {
0 => {
state: 'new',
group: 'Users',
priority: '2 normal',
title: 'some subject',
},
1 => {
sender: 'Customer',
type: 'email',
internal: false,
},
},
},
]
process(files)
group_active_map = {}
Group.all.each {|group|
next if !group_active_map.key?(group.id)
group.active = group_active_map[group.id]
group.save
}
end
def process(files)
files.each { |file|
result = Channel::EmailParser.new.process( { trusted: file[:trusted] }, file[:data] )
result = Channel::EmailParser.new.process(file[:channel]||{}, file[:data])
if file[:success]
if result && result.class == Array && result[1]
assert( true )
@ -2065,9 +2156,9 @@ Some Text',
if file[:result][level]
file[:result][level].each { |key, value|
if result[level].send(key).respond_to?('name')
assert_equal( value.to_s, result[level].send(key).name )
assert_equal(value.to_s, result[level].send(key).name)
else
assert_equal( value, result[level].send(key), "result check #{level}, #{key}")
assert_equal(value, result[level].send(key), "result check #{level}, #{key}")
end
}
end
@ -2079,31 +2170,31 @@ Some Text',
file[:verify][:users].each { |user_result|
user = User.where(email: user_result[:email]).first
if !user
assert( false, "No user '#{user_result[:email]}' found!" )
assert(false, "No user '#{user_result[:email]}' found!")
return
end
user_result.each { |key, value|
if user.respond_to?( key )
assert_equal( value, user.send(key), "user check #{ key }" )
if user.respond_to?( key)
assert_equal(value, user.send(key), "user check #{ key }")
else
assert_equal( value, user[key], "user check #{ key }" )
assert_equal(value, user[key], "user check #{ key }" )
end
}
}
end
end
else
assert( false, 'ticket not created', file )
assert(false, 'ticket not created', file)
end
elsif !file[:success]
if result && result.class == Array && result[1]
puts result.inspect
assert( false, 'ticket should not be created but is created' )
assert(false, 'ticket should not be created but is created')
else
assert( true, 'ticket not created - nice' )
assert(true, 'ticket not created - nice')
end
else
assert( false, 'UNKNOWN!' )
assert(false, 'UNKNOWN!')
end
}
end