diff --git a/app/assets/javascripts/app/controllers/_dashboard/activity_stream.js.coffee b/app/assets/javascripts/app/controllers/_dashboard/activity_stream.js.coffee
index 70a74d844..167e149b0 100644
--- a/app/assets/javascripts/app/controllers/_dashboard/activity_stream.js.coffee
+++ b/app/assets/javascripts/app/controllers/_dashboard/activity_stream.js.coffee
@@ -1,10 +1,6 @@
class App.DashboardActivityStream extends App.Controller
- events:
- 'click [data-type=edit]': 'zoom'
-
constructor: ->
super
- @items = []
@fetch()
@@ -36,34 +32,29 @@ class App.DashboardActivityStream extends App.Controller
load: (data) =>
items = data.activity_stream
- # load user collection
- App.Collection.load( type: 'User', data: data.users )
-
- # load ticket collection
- App.Collection.load( type: 'Ticket', data: data.tickets )
-
- # load article collection
- App.Collection.load( type: 'TicketArticle', data: data.articles )
+ # load collections
+ App.Event.trigger 'loadAssets', data.assets
@render(items)
render: (items) ->
- # load user data
for item in items
- item.created_by = App.User.find( item.created_by_id )
-
- # load ticket data
- for item in items
- item.data = {}
if item.history_object is 'Ticket'
- item.data.title = App.Ticket.find( item.o_id ).title
- if item.history_object is 'Ticket::Article'
+ ticket = App.Ticket.find( item.o_id )
+ item.link = '#ticket/zoom/' + ticket.id
+ item.title = ticket.title
+ item.type = 'Ticket'
+ item.updated_by_id = ticket.updated_by_id
+ item.updated_by = App.User.find( ticket.updated_by_id )
+ else if item.history_object is 'Ticket::Article'
article = App.TicketArticle.find( item.o_id )
- item.history_object = 'Article'
- item.sub_o_id = article.id
- item.o_id = article.ticket_id
- item.data.title = article.subject
+ ticket = App.Ticket.find( article.ticket_id )
+ item.link = '#ticket/zoom/' + ticket.id + '/' + article.id
+ item.title = article.subject || ticket.title
+ item.type = 'Article'
+ item.updated_by_id = article.updated_by_id
+ item.updated_by = App.User.find( article.updated_by_id )
html = App.view('dashboard/activity_stream')(
head: 'Activity Stream',
@@ -76,11 +67,3 @@ class App.DashboardActivityStream extends App.Controller
# start user popups
@userPopups('left')
- zoom: (e) =>
- e.preventDefault()
- id = $(e.target).parents('[data-id]').data('id')
- subid = $(e.target).parents('[data-subid]').data('subid')
- if subid
- @navigate 'ticket/zoom/' + id + '/' + subid
- else
- @navigate 'ticket/zoom/' + id
diff --git a/app/assets/javascripts/app/controllers/_dashboard/recent_viewed.js.coffee b/app/assets/javascripts/app/controllers/_dashboard/recent_viewed.js.coffee
index 56cbde3e5..23496b794 100644
--- a/app/assets/javascripts/app/controllers/_dashboard/recent_viewed.js.coffee
+++ b/app/assets/javascripts/app/controllers/_dashboard/recent_viewed.js.coffee
@@ -1,7 +1,4 @@
class App.DashboardRecentViewed extends App.Controller
- events:
- 'click [data-type=edit]': 'zoom'
-
constructor: ->
super
@@ -16,28 +13,21 @@ class App.DashboardRecentViewed extends App.Controller
limit: 5,
}
processData: true,
-# data: JSON.stringify( view: @view ),
success: (data, status, xhr) =>
@items = data.recent_viewed
- # load user collection
- App.Collection.load( type: 'User', data: data.users )
-
- # load ticket collection
- App.Collection.load( type: 'Ticket', data: data.tickets )
+ # load collections
+ App.Event.trigger 'loadAssets', data.assets
@render()
)
render: ->
- # load user data
for item in @items
- item.created_by = App.User.find( item.created_by_id )
-
- # load ticket data
- for item in @items
- item.ticket = App.User.find( item.o_id )
+ item.link = '#ticket_zoom/' + item.o_id
+ item.title = App.Ticket.find( item.o_id ).title
+ item.type = item.recent_view_object
html = App.view('dashboard/recent_viewed')(
head: 'Recent Viewed',
@@ -49,9 +39,3 @@ class App.DashboardRecentViewed extends App.Controller
# start user popups
@userPopups('left')
-
- zoom: (e) =>
- e.preventDefault()
- id = $(e.target).parents('[data-id]').data('id')
-
- @navigate 'ticket/zoom/' + id
diff --git a/app/assets/javascripts/app/controllers/_dashboard/ticket.js.coffee b/app/assets/javascripts/app/controllers/_dashboard/ticket.js.coffee
index 03678756a..9a37a27a4 100644
--- a/app/assets/javascripts/app/controllers/_dashboard/ticket.js.coffee
+++ b/app/assets/javascripts/app/controllers/_dashboard/ticket.js.coffee
@@ -48,11 +48,8 @@ class App.DashboardTicket extends App.Controller
data.ajax = false
App.Store.write( @key, data )
- # load user collection
- App.Collection.load( type: 'User', data: data.collections.users )
-
- # load ticket collection
- App.Collection.load( type: 'Ticket', data: data.collections.tickets )
+ # load collections
+ App.Event.trigger 'loadAssets', data.assets
# get meta data
App.Overview.refresh( data.overview, options: { clear: true } )
@@ -71,12 +68,12 @@ class App.DashboardTicket extends App.Controller
render: (data) ->
return if !data
- return if !data.ticket_list
+ return if !data.ticket_ids
return if !data.overview
@overview = data.overview
@tickets_count = data.tickets_count
- @ticket_list = data.ticket_list
+ @ticket_ids = data.ticket_ids
# FIXME 10
pages_total = parseInt( ( @tickets_count / 10 ) + 0.99999 ) || 1
html = App.view('dashboard/ticket')(
@@ -94,8 +91,8 @@ class App.DashboardTicket extends App.Controller
i = start
while i < end
i = i + 1
- if @ticket_list[ i - 1 ]
- @tickets_in_table.push App.Ticket.retrieve( @ticket_list[ i - 1 ] )
+ if @ticket_ids[ i - 1 ]
+ @tickets_in_table.push App.Ticket.retrieve( @ticket_ids[ i - 1 ] )
shown_all_attributes = @ticketTableAttributes( App.Overview.find(@overview.id).view.d )
new App.ControllerTable(
diff --git a/app/assets/javascripts/app/controllers/agent_ticket_create.js.coffee b/app/assets/javascripts/app/controllers/agent_ticket_create.js.coffee
index f7dbba21e..c32ea136c 100644
--- a/app/assets/javascripts/app/controllers/agent_ticket_create.js.coffee
+++ b/app/assets/javascripts/app/controllers/agent_ticket_create.js.coffee
@@ -35,12 +35,18 @@ class App.TicketCreate extends App.Controller
title: 'Email'
@article_attributes = article_sender_type_map[@type]
+ # remember split info if exists
+ split = ''
+ if @ticket_id && @article_id
+ split = "/#{@ticket_id}/#{@article_id}"
+
# if no map entry exists, route to default
if !@article_attributes
- @navigate '#ticket_create/' + default_type
+ @navigate '#ticket_create/' + default_type + split
+ return
# update navbar highlighting
- @navupdate '#ticket_create/' + @type + '/id/' + @id
+ @navupdate '#ticket_create/' + @type + '/id/' + @id + split
@fetch(params)
@@ -97,8 +103,8 @@ class App.TicketCreate extends App.Controller
# get edit form attributes
@edit_form = cache.edit_form
- # load user collection
- App.Collection.load( type: 'User', data: cache.users )
+ # load collections
+ App.Event.trigger 'loadAssets', cache.assets
@render()
else
@@ -118,17 +124,11 @@ class App.TicketCreate extends App.Controller
# get edit form attributes
@edit_form = data.edit_form
- # load user collection
- App.Collection.load( type: 'User', data: data.users )
+ # load collections
+ App.Event.trigger 'loadAssets', data.assets
- # load ticket collection
- if data.ticket && data.articles
- App.Collection.load( type: 'Ticket', data: [data.ticket] )
-
- # load article collections
- App.Collection.load( type: 'TicketArticle', data: data.articles || [] )
-
- # render page
+ # split ticket
+ if data.split && data.split.ticket_id && data.split.article_id
t = App.Ticket.find( params.ticket_id ).attributes()
a = App.TicketArticle.find( params.article_id )
@@ -137,6 +137,8 @@ class App.TicketCreate extends App.Controller
t.customer_id_autocompletion = a.from
t.subject = a.subject || t.title
t.body = a.body
+
+ # render page
@render( options: t )
)
@@ -209,9 +211,8 @@ class App.TicketCreate extends App.Controller
# update text module UI
callback = (user) =>
@textModule.reload(
- data:
- ticket:
- customer: user
+ ticket:
+ customer: user
)
@userInfo(
@@ -386,8 +387,13 @@ class TicketCreateRouter extends App.ControllerPermanent
# create new uniq form id
if !params['id']
+ # remember split info if exists
+ split = ''
+ if params['ticket_id'] && params['article_id']
+ split = "/#{params['ticket_id']}/#{params['article_id']}"
+
id = Math.floor( Math.random() * 99999 )
- @navigate "#ticket_create/#{params['type']}/id/#{id}"
+ @navigate "#ticket_create/#{params['type']}/id/#{id}#{split}"
return
# cleanup params
@@ -399,14 +405,16 @@ class TicketCreateRouter extends App.ControllerPermanent
App.TaskManager.add( 'TicketCreateScreen-' + params['type'] + '-' + params['id'], 'TicketCreate', clean_params )
-# split ticket
-App.Config.set( 'ticket_create/:ticket_id/:article_id', TicketCreateRouter, 'Routes' )
-
# create new ticket routs/controller
App.Config.set( 'ticket_create', TicketCreateRouter, 'Routes' )
App.Config.set( 'ticket_create/:type', TicketCreateRouter, 'Routes' )
App.Config.set( 'ticket_create/:type/id/:id', TicketCreateRouter, 'Routes' )
+
+# split ticket
+App.Config.set( 'ticket_create/:type/:ticket_id/:article_id', TicketCreateRouter, 'Routes' )
+App.Config.set( 'ticket_create/:type/id/:id/:ticket_id/:article_id', TicketCreateRouter, 'Routes' )
+
# set new task actions
App.Config.set( 'TicketNewCallOutbound', { prio: 8001, name: 'Call Outbound', target: '#ticket_create/call_outbound', role: ['Agent'] }, 'TaskActions' )
App.Config.set( 'TicketNewCallInbound', { prio: 8002, name: 'Call Inbound', target: '#ticket_create/call_inbound', role: ['Agent'] }, 'TaskActions' )
diff --git a/app/assets/javascripts/app/controllers/agent_ticket_history.js.coffee b/app/assets/javascripts/app/controllers/agent_ticket_history.js.coffee
index 2c89a6ad8..6309a5e92 100644
--- a/app/assets/javascripts/app/controllers/agent_ticket_history.js.coffee
+++ b/app/assets/javascripts/app/controllers/agent_ticket_history.js.coffee
@@ -15,23 +15,9 @@ class App.TicketHistory extends App.ControllerModal
type: 'GET',
url: @apiPath + '/ticket_history/' + ticket_id,
success: (data, status, xhr) =>
- # remember ticket
- @ticket = data.ticket
- # load user collection
- App.Collection.load( type: 'User', data: data.users )
-
- # load ticket collection
- App.Collection.load( type: 'Ticket', data: [data.ticket] )
-
- # load history_type collections
- App.Collection.load( type: 'HistoryType', data: data.history_types )
-
- # load history_object collections
- App.Collection.load( type: 'HistoryObject', data: data.history_objects )
-
- # load history_attributes collections
- App.Collection.load( type: 'HistoryAttribute', data: data.history_attributes )
+ # load collections
+ App.Event.trigger 'loadAssets', data.assets
# load history collections
App.History.deleteAll()
@@ -53,7 +39,7 @@ class App.TicketHistory extends App.ControllerModal
@userPopups()
# show frontend times
- @delay( @frontendTimeUpdate, 200, 'ui-time-update' )
+ @delay( @frontendTimeUpdate, 300, 'ui-time-update' )
sortorder: (e) ->
e.preventDefault()
@@ -72,7 +58,6 @@ class App.TicketHistory extends App.ControllerModal
state: @sortstate
)
-
@modalShow()
# enable user popups
diff --git a/app/assets/javascripts/app/controllers/agent_ticket_merge.js.coffee b/app/assets/javascripts/app/controllers/agent_ticket_merge.js.coffee
index 6daae0830..8c5c4fee7 100644
--- a/app/assets/javascripts/app/controllers/agent_ticket_merge.js.coffee
+++ b/app/assets/javascripts/app/controllers/agent_ticket_merge.js.coffee
@@ -16,25 +16,23 @@ class App.TicketMerge extends App.ControllerModal
processData: true,
success: (data, status, xhr) =>
- if data.customer
- App.Collection.load( type: 'Ticket', data: data.customer.tickets )
- App.Collection.load( type: 'User', data: data.customer.users )
+ # load collections
+ App.Event.trigger 'loadAssets', data.assets
- if data.recent
- App.Collection.load( type: 'Ticket', data: data.recent.tickets )
- App.Collection.load( type: 'User', data: data.recent.users )
+ @ticket_ids_by_customer = data.ticket_ids_by_customer
+ @ticket_ids_recent_viewed = data.ticket_ids_recent_viewed
- @render( data )
+ @render()
)
- render: (data) ->
+ render: ->
@html App.view('agent_ticket_merge')()
list = []
- for t in data.customer.tickets
- if t.id isnt @ticket_id
- ticketItem = App.Ticket.retrieve( t.id )
+ for ticket_id in @ticket_ids_by_customer
+ if ticket_id isnt @ticket_id
+ ticketItem = App.Ticket.retrieve( ticket_id )
list.push ticketItem
new App.ControllerTable(
el: @el.find('#ticket-merge-customer-tickets'),
@@ -59,9 +57,9 @@ class App.TicketMerge extends App.ControllerModal
)
list = []
- for t in data.recent.tickets
- if t.id isnt @ticket_id
- ticketItem = App.Ticket.retrieve( t.id )
+ for ticket_id in @ticket_ids_recent_viewed
+ if ticket_id isnt @ticket_id
+ ticketItem = App.Ticket.retrieve( ticket_id )
list.push ticketItem
new App.ControllerTable(
el: @el.find('#ticket-merge-recent-tickets'),
diff --git a/app/assets/javascripts/app/controllers/customer_ticket_create.js.coffee b/app/assets/javascripts/app/controllers/customer_ticket_create.js.coffee
index a3af61b45..01e4e40d8 100644
--- a/app/assets/javascripts/app/controllers/customer_ticket_create.js.coffee
+++ b/app/assets/javascripts/app/controllers/customer_ticket_create.js.coffee
@@ -24,13 +24,13 @@ class Index extends App.ControllerContent
# use cache
cache = App.Store.get( 'ticket_create_attributes' )
- if cache && !params.ticket_id && !params.article_id
+ if cache
# get edit form attributes
@edit_form = cache.edit_form
- # load user collection
- App.Collection.load( type: 'User', data: cache.users )
+ # load collections
+ App.Event.trigger 'loadAssets', cache.assets
@render()
else
@@ -38,10 +38,6 @@ class Index extends App.ControllerContent
id: 'ticket_create',
type: 'GET',
url: @apiPath + '/ticket_create',
- data: {
- ticket_id: params.ticket_id,
- article_id: params.article_id,
- },
processData: true,
success: (data, status, xhr) =>
@@ -51,27 +47,10 @@ class Index extends App.ControllerContent
# get edit form attributes
@edit_form = data.edit_form
- # load user collection
- App.Collection.load( type: 'User', data: data.users )
+ # load collections
+ App.Event.trigger 'loadAssets', data.assets
- # load ticket collection
- if data.ticket && data.articles
- App.Collection.load( type: 'Ticket', data: [data.ticket] )
-
- # load article collections
- App.Collection.load( type: 'TicketArticle', data: data.articles || [] )
-
- # render page
- t = App.Ticket.find( params.ticket_id ).attributes()
- a = App.TicketArticle.find( params.article_id )
-
- # reset owner
- t.owner_id = 0
- t.customer_id_autocompletion = a.from
- t.subject = a.subject || t.title
- t.body = a.body
- @log 'CustomerTicketCreate', 'notice', 'created', t
- @render( options: t )
+ @render()
)
render: (template = {}) ->
diff --git a/app/assets/javascripts/app/controllers/dashboard.js.coffee b/app/assets/javascripts/app/controllers/dashboard.js.coffee
index abd74d4b3..f797d232e 100644
--- a/app/assets/javascripts/app/controllers/dashboard.js.coffee
+++ b/app/assets/javascripts/app/controllers/dashboard.js.coffee
@@ -53,9 +53,9 @@ class Index extends App.ControllerContent
# },
# },
-# recent_viewed: {
-# controller: App.DashboardRecentViewed,
-# }
+ recent_viewed: {
+ controller: App.DashboardRecentViewed,
+ }
}
}
diff --git a/app/assets/javascripts/app/controllers/link_info_widget.js.coffee b/app/assets/javascripts/app/controllers/link_info_widget.js.coffee
index 9bf17db04..1a07420b6 100644
--- a/app/assets/javascripts/app/controllers/link_info_widget.js.coffee
+++ b/app/assets/javascripts/app/controllers/link_info_widget.js.coffee
@@ -23,11 +23,8 @@ class App.LinkInfo extends App.Controller
success: (data, status, xhr) =>
@links = data.links
- # load user collection
- App.Collection.load( type: 'User', data: data.users )
-
- # load ticket collection
- App.Collection.load( type: 'Ticket', data: data.tickets )
+ # load collections
+ App.Event.trigger 'loadAssets', data.assets
@render()
)
diff --git a/app/assets/javascripts/app/controllers/navigation.js.coffee b/app/assets/javascripts/app/controllers/navigation.js.coffee
index 713b74828..b2d76e51d 100644
--- a/app/assets/javascripts/app/controllers/navigation.js.coffee
+++ b/app/assets/javascripts/app/controllers/navigation.js.coffee
@@ -99,24 +99,8 @@ class App.Navigation extends App.Controller
processData: true,
success: (data, status, xhr) =>
- # load user collection
- if data.load.users
- App.Collection.load( type: 'User', data: data.load.users )
-
- # load user collection
- if data.load.organizations
- for organization_id, organization of data.load.organizations
- if organization.user_ids
- organization.users = []
- for user_id in organization.user_ids
- user = App.User.find( user_id )
- organization.users.push user
- App.Collection.load( type: 'Organization', data: data.load.organizations )
-
-
- # load ticket collection
- if data.load.tickets
- App.Collection.load( type: 'Ticket', data: data.load.tickets )
+ # load collections
+ App.Event.trigger 'loadAssets', data.assets
@result = data.result
for area in @result
diff --git a/app/assets/javascripts/app/controllers/text_module_widget.js.coffee b/app/assets/javascripts/app/controllers/text_module_widget.js.coffee
index 4af73778a..fdd23daf0 100644
--- a/app/assets/javascripts/app/controllers/text_module_widget.js.coffee
+++ b/app/assets/javascripts/app/controllers/text_module_widget.js.coffee
@@ -2,6 +2,7 @@ class App.TextModuleUI extends App.Controller
constructor: ->
super
+ @lastData = {}
customItemTemplate = "
"
elementFactory = (element, e) ->
template = $(customItemTemplate).find('span')
@@ -23,7 +24,7 @@ class App.TextModuleUI extends App.Controller
reload: (data = false) =>
if data
- @lastData = data
+ @lastData['data'] = data
@update()
update: =>
@@ -35,10 +36,12 @@ class App.TextModuleUI extends App.Controller
contentNew = item.content.replace( /<%=\s{0,2}(.+?)\s{0,2}%>/g, ( all, key ) ->
key = key.replace( /@/g, 'ui.data.' )
varString = "#{key}" + ''
+# console.log( "tag replacement env: ", ui.data)
try
+# console.log( "tag replacement: " + key, varString )
key = eval (varString)
catch error
- #console.log( "tag replacement: " + error )
+# console.log( "tag replacement error: " + error )
key = ''
return key
)
diff --git a/app/assets/javascripts/app/controllers/ticket_overview.js.coffee b/app/assets/javascripts/app/controllers/ticket_overview.js.coffee
index ff8f94b81..91fd5f949 100644
--- a/app/assets/javascripts/app/controllers/ticket_overview.js.coffee
+++ b/app/assets/javascripts/app/controllers/ticket_overview.js.coffee
@@ -80,22 +80,19 @@ class Table extends App.ControllerContent
load: (data) =>
return if !data
- return if !data.ticket_list
+ return if !data.ticket_ids
return if !data.overview
@overview = data.overview
@tickets_count = data.tickets_count
- @ticket_list = data.ticket_list
+ @ticket_ids = data.ticket_ids
if data.ajax
data.ajax = false
App.Store.write( @key, data )
- # load user collection
- App.Collection.load( type: 'User', data: data.collections.users )
-
- # load ticket collection
- App.Collection.load( type: 'Ticket', data: data.collections.tickets )
+ # load collections
+ App.Event.trigger 'loadAssets', data.assets
# get meta data
@overview = data.overview
@@ -112,7 +109,7 @@ class Table extends App.ControllerContent
@fetch()
@ticket_list_show = []
- for ticket_id in @ticket_list
+ for ticket_id in @ticket_ids
@ticket_list_show.push App.Ticket.retrieve( ticket_id )
# remeber bulk attributes
@@ -556,7 +553,7 @@ class Router extends App.Controller
cache = App.Store.get( @key )
if cache
@tickets_count = cache.tickets_count
- @ticket_list = cache.ticket_list
+ @ticket_ids = cache.ticket_ids
@redirect()
else
@ajax(
@@ -570,7 +567,7 @@ class Router extends App.Controller
)
load: (data) =>
- @ticket_list = data.ticket_list
+ @ticket_ids = data.ticket_ids
@tickets_count = data.tickets_count
# App.Store.write( data )
@redirect()
@@ -583,19 +580,19 @@ class Router extends App.Controller
# redirect
if @direction == 'next'
- if @ticket_list[ @position ] && @ticket_list[ @position ]
+ if @ticket_ids[ @position ] && @ticket_ids[ @position ]
position = @position + 1
@Config.set( 'LastOverviewPosition', position )
- @navigate 'ticket/zoom/' + @ticket_list[ @position ] + '/nav/true'
+ @navigate 'ticket/zoom/' + @ticket_ids[ @position ] + '/nav/true'
else
- @navigate 'ticket/zoom/' + @ticket_list[ @position - 1 ] + '/nav/true'
+ @navigate 'ticket/zoom/' + @ticket_ids[ @position - 1 ] + '/nav/true'
else
- if @ticket_list[ @position - 2 ] && @ticket_list[ @position - 2 ] + '/nav/true'
+ if @ticket_ids[ @position - 2 ] && @ticket_ids[ @position - 2 ] + '/nav/true'
position = @position - 1
@Config.set( 'LastOverviewPosition', position )
- @navigate 'ticket/zoom/' + @ticket_list[ @position - 2 ] + '/nav/true'
+ @navigate 'ticket/zoom/' + @ticket_ids[ @position - 2 ] + '/nav/true'
else
- @navigate 'ticket/zoom/' + @ticket_list[ @position - 1 ] + '/nav/true'
+ @navigate 'ticket/zoom/' + @ticket_ids[ @position - 1 ] + '/nav/true'
App.Config.set( 'ticket_view', Index, 'Routes' )
App.Config.set( 'ticket_view/:view', Index, 'Routes' )
diff --git a/app/assets/javascripts/app/controllers/ticket_zoom.js.coffee b/app/assets/javascripts/app/controllers/ticket_zoom.js.coffee
index 277392992..6c0ec7e56 100644
--- a/app/assets/javascripts/app/controllers/ticket_zoom.js.coffee
+++ b/app/assets/javascripts/app/controllers/ticket_zoom.js.coffee
@@ -27,7 +27,7 @@ class App.TicketZoom extends App.Controller
(data) =>
update = =>
if data.id.toString() is @ticket_id.toString()
- ticket = App.Ticket.retrieve( @ticket_id )
+ ticket = App.Ticket.find( @ticket_id )
@log 'notice', 'TRY', data.updated_at, ticket.updated_at
if data.updated_at isnt ticket.updated_at
@fetch( @ticket_id, false )
@@ -68,28 +68,25 @@ class App.TicketZoom extends App.Controller
id: 'ticket_zoom_' + ticket_id
type: 'GET'
url: @apiPath + '/ticket_full/' + ticket_id + '?do_not_log=' + @doNotLog
- data:
- view: @view
processData: true
success: (data, status, xhr) =>
- if @dataLastCall && !force
+
+ # check if ticket has changed
+ newTicketRaw = data.assets.tickets[ticket_id]
+ if @ticketUpdatedAtLastCall && !force
# return if ticket hasnt changed
- return if _.isEqual( @dataLastCall.ticket, data.ticket )
-
- # trigger task notify
- diff = difference( @dataLastCall.ticket, data.ticket )
- @log 'diff', diff
+ return if @ticketUpdatedAtLastCall is newTicketRaw.updated_at
# notify if ticket changed not by my self
- if !_.isEmpty(diff) && data.ticket.updated_by_id isnt @Session.all().id
+ if newTicketRaw.updated_by_id isnt @Session.all().id
App.TaskManager.notify( @task_key )
# rerender edit box
@editDone = false
# remember current data
- @dataLastCall = data
+ @ticketUpdatedAtLastCall = newTicketRaw.updated_at
@load(data, force)
App.Store.write( @key, data )
@@ -112,20 +109,17 @@ class App.TicketZoom extends App.Controller
# reset old indexes
@ticket = undefined
+ # remember article ids
+ @ticket_article_ids = data.ticket_article_ids
+
# get edit form attributes
@edit_form = data.edit_form
# get signature
@signature = data.signature
- # load user collection
- App.Collection.load( type: 'User', data: data.users )
-
- # load ticket collection
- App.Collection.load( type: 'Ticket', data: [data.ticket] )
-
- # load article collections
- App.Collection.load( type: 'TicketArticle', data: data.articles )
+ # load collections
+ App.Event.trigger 'loadAssets', data.assets
# render page
@render(force)
@@ -196,9 +190,10 @@ class App.TicketZoom extends App.Controller
ArticleView: =>
# show article
new ArticleView(
- ticket: @ticket
- el: @el.find('.article-view')
- ui: @
+ ticket: @ticket
+ ticket_article_ids: @ticket_article_ids
+ el: @el.find('.article-view')
+ ui: @
)
Edit: =>
@@ -571,7 +566,7 @@ class ArticleView extends App.Controller
# get all articles
@articles = []
- for article_id in @ticket.article_ids
+ for article_id in @ticket_article_ids
article = App.TicketArticle.retrieve( article_id )
@articles.push article
@@ -621,16 +616,16 @@ class ArticleView extends App.Controller
checkIfSignatureIsNeeded: (article_type) =>
- # add signature
- if @ui.signature && @ui.signature.body && article_type.name is 'email'
- body = @ui.el.find('[name="body"]').val() || ''
- regexp = new RegExp( escapeRegExp( @ui.signature.body ) , 'i')
- if !body.match(regexp)
- body = body + "\n" + @ui.signature.body
- @ui.el.find('[name="body"]').val( body )
+ # add signature
+ if @ui.signature && @ui.signature.body && article_type.name is 'email'
+ body = @ui.el.find('[name="body"]').val() || ''
+ regexp = new RegExp( escapeRegExp( @ui.signature.body ) , 'i')
+ if !body.match(regexp)
+ body = body + "\n" + @ui.signature.body
+ @ui.el.find('[name="body"]').val( body )
- # update textarea size
- @ui.el.find('[name="body"]').trigger('change')
+ # update textarea size
+ @ui.el.find('[name="body"]').trigger('change')
reply: (e) =>
e.preventDefault()
@@ -775,7 +770,7 @@ class Article extends App.Controller
actions.push {
name: 'split'
type: 'split'
- href: '#ticket_create/' + @article.ticket_id + '/' + @article.id
+ href: '#ticket_create/call_inbound/' + @article.ticket_id + '/' + @article.id
}
@article.actions = actions
diff --git a/app/assets/javascripts/app/lib/app_post/collection.js.coffee b/app/assets/javascripts/app/lib/app_post/collection.js.coffee
index 63476a2cc..df2c55413 100644
--- a/app/assets/javascripts/app/lib/app_post/collection.js.coffee
+++ b/app/assets/javascripts/app/lib/app_post/collection.js.coffee
@@ -19,6 +19,28 @@ class _collectionSingleton extends Spine.Module
constructor: (@args) ->
+ # add trigger - bind new events
+ App.Event.bind 'loadAssets', (data) =>
+ if data
+ for type, collections of data
+ if type is 'users'
+ type = 'User'
+ if type is 'tickets'
+ type = 'Ticket'
+ if type is 'ticket_article'
+ type = 'TicketArticle'
+ if type is 'organization'
+ type = 'Organization'
+ if type is 'history_object'
+ type = 'HistoryObject'
+ if type is 'history_type'
+ type = 'HistoryType'
+ if type is 'history_attribute'
+ type = 'HistoryAttribute'
+
+ @log 'debug', 'loadCollection:trigger', type, collections
+ @load( localStorage: data.localStorage, type: type, data: collections )
+
# add trigger - bind new events
App.Event.bind 'loadCollection', (data) =>
diff --git a/app/assets/javascripts/app/models/organization.js.coffee b/app/assets/javascripts/app/models/organization.js.coffee
index bb71cd4a9..64465300e 100644
--- a/app/assets/javascripts/app/models/organization.js.coffee
+++ b/app/assets/javascripts/app/models/organization.js.coffee
@@ -13,3 +13,14 @@ class App.Organization extends App.Model
'name',
'shared',
]
+
+ @_fillUp: (data) ->
+
+ # addd users of organization
+ if data['user_ids']
+ data['user_ids'] = []
+ for user_id in data['user_ids']
+ if App.User.exists( user_id )
+ user = App.User.find( user_id )
+ data['user_ids'].push user
+ data
diff --git a/app/assets/javascripts/app/views/dashboard/activity_stream.jst.eco b/app/assets/javascripts/app/views/dashboard/activity_stream.jst.eco
index 241f05db6..330279080 100644
--- a/app/assets/javascripts/app/views/dashboard/activity_stream.jst.eco
+++ b/app/assets/javascripts/app/views/dashboard/activity_stream.jst.eco
@@ -2,8 +2,8 @@
<%- @T( @head ) %>
<% for item in @items: %>
- - "<%= item.created_by.displayName() %>"
- - <%- @T( item.history_type ) %> <%= item.history_object %><% if item.data.title: %> (<%= item.data.title %>)<% end %>.
+ - "<%= item.updated_by.displayName() %>"
+ - <%- @T( item.history_type ) %> <%= item.type %><% if item.title: %> (<%= item.title %>)<% end %>.
<% end %>
diff --git a/app/assets/javascripts/app/views/dashboard/recent_viewed.jst.eco b/app/assets/javascripts/app/views/dashboard/recent_viewed.jst.eco
index ff161319f..bf342e815 100644
--- a/app/assets/javascripts/app/views/dashboard/recent_viewed.jst.eco
+++ b/app/assets/javascripts/app/views/dashboard/recent_viewed.jst.eco
@@ -3,7 +3,7 @@
<%- @T( @head ) %>
diff --git a/app/controllers/links_controller.rb b/app/controllers/links_controller.rb
index 001c0d7f2..b73a8fc61 100644
--- a/app/controllers/links_controller.rb
+++ b/app/controllers/links_controller.rb
@@ -10,32 +10,20 @@ class LinksController < ApplicationController
:link_object_value => params[:link_object_value],
)
- #
- tickets = []
- users = {}
+ assets = {}
link_list = []
links.each { |item|
link_list.push item
if item['link_object'] == 'Ticket'
- data = Ticket.lookup( :id => item['link_object_value'] )
- tickets.push data
- if !users[ data['owner_id'] ]
- users[ data['owner_id'] ] = User.user_data_full( data['owner_id'] )
- end
- if !users[ data['customer_id'] ]
- users[ data['customer_id'] ] = User.user_data_full( data['customer_id'] )
- end
- if !users[ data['created_by_id'] ]
- users[ data['created_by_id'] ] = User.user_data_full( data['created_by_id'] )
- end
+ ticket = Ticket.lookup( :id => item['link_object_value'] )
+ assets = ticket.assets(assets)
end
}
# return result
render :json => {
- :links => link_list,
- :tickets => tickets,
- :users => users,
+ :links => link_list,
+ :assets => assets,
}
end
diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb
index 31ca3133b..1b4413a5d 100644
--- a/app/controllers/search_controller.rb
+++ b/app/controllers/search_controller.rb
@@ -12,13 +12,11 @@ class SearchController < ApplicationController
:query => params[:term],
:current_user => current_user,
)
- users_data = {}
+ assets = {}
ticket_result = []
tickets.each do |ticket|
+ assets = ticket.assets(assets)
ticket_result.push ticket.id
- users_data[ ticket['owner_id'] ] = User.user_data_full( ticket['owner_id'] )
- users_data[ ticket['customer_id'] ] = User.user_data_full( ticket['customer_id'] )
- users_data[ ticket['created_by_id'] ] = User.user_data_full( ticket['created_by_id'] )
end
# do query
@@ -30,7 +28,7 @@ class SearchController < ApplicationController
user_result = []
users.each do |user|
user_result.push user.id
- users_data[ user.id ] = User.user_data_full( user.id )
+ assets = user.assets(assets)
end
organizations = Organization.search(
@@ -39,17 +37,10 @@ class SearchController < ApplicationController
:current_user => current_user,
)
- organizations_data = {}
organization_result = []
organizations.each do |organization|
organization_result.push organization.id
- organizations_data[ organization.id ] = Organization.find( organization.id ).attributes
- organizations_data[ organization.id ][:user_ids] = []
- users = User.where( :organization_id => organization.id ).limit(10)
- users.each {|user|
- users_data[ user.id ] = User.user_data_full( user.id )
- organizations_data[ organization.id ][:user_ids].push user.id
- }
+ assets = organization.assets(assets)
end
result = []
@@ -77,11 +68,7 @@ class SearchController < ApplicationController
# return result
render :json => {
- :load => {
- :tickets => tickets,
- :users => users_data,
- :organizations => organizations_data,
- },
+ :assets => assets,
:result => result,
}
end
diff --git a/app/controllers/ticket_overviews_controller.rb b/app/controllers/ticket_overviews_controller.rb
index 63b2e1c77..c0f38de75 100644
--- a/app/controllers/ticket_overviews_controller.rb
+++ b/app/controllers/ticket_overviews_controller.rb
@@ -3,12 +3,12 @@
class TicketOverviewsController < ApplicationController
before_filter :authentication_check
- # GET /api/v1/tickets
+ # GET /api/v1/ticket_overviews
def show
# get navbar overview data
if !params[:view]
- result = Ticket::Overview.list(
+ result = Ticket::Overviews.list(
:current_user => current_user,
)
render :json => result
@@ -17,7 +17,7 @@ class TicketOverviewsController < ApplicationController
# get real overview data
if params[:array]
- overview = Ticket::Overview.list(
+ overview = Ticket::Overviews.list(
:view => params[:view],
:current_user => current_user,
:array => true,
@@ -36,10 +36,9 @@ class TicketOverviewsController < ApplicationController
}
return
end
- overview = Ticket::Overview.list(
+ overview = Ticket::Overviews.list(
:view => params[:view],
- # :view_mode => params[:view_mode],
- :current_user => User.find( current_user.id ),
+ :current_user => current_user,
:array => true,
)
if !overview
@@ -48,20 +47,10 @@ class TicketOverviewsController < ApplicationController
end
# get related users
- users = {}
- tickets = []
- overview[:ticket_list].each {|ticket_id|
- data = Ticket.lookup( :id => ticket_id )
- tickets.push data
- if !users[ data['owner_id'] ]
- users[ data['owner_id'] ] = User.user_data_full( data['owner_id'] )
- end
- if !users[ data['customer_id'] ]
- users[ data['customer_id'] ] = User.user_data_full( data['customer_id'] )
- end
- if !users[ data['created_by_id'] ]
- users[ data['created_by_id'] ] = User.user_data_full( data['created_by_id'] )
- end
+ assets = { :users => {} }
+ overview[:ticket_ids].each {|ticket_id|
+ ticket = Ticket.lookup( :id => ticket_id )
+ assets = ticket.assets(assets)
}
# get groups
@@ -79,8 +68,8 @@ class TicketOverviewsController < ApplicationController
Group.find(group_id).users.each {|user|
next if !agents[ user.id ]
groups_users[ group_id ].push user.id
- if !users[user.id]
- users[user.id] = User.user_data_full(user.id)
+ if !assets[:users][user.id]
+ assets[:users][user.id] = User.user_data_full(user.id)
end
}
}
@@ -88,15 +77,12 @@ class TicketOverviewsController < ApplicationController
# return result
render :json => {
:overview => overview[:overview],
- :ticket_list => overview[:ticket_list],
+ :ticket_ids => overview[:ticket_ids],
:tickets_count => overview[:tickets_count],
:bulk => {
:group_id__owner_id => groups_users,
},
- :collections => {
- :users => users,
- :tickets => tickets,
- },
+ :assets => assets,
}
end
diff --git a/app/controllers/tickets_controller.rb b/app/controllers/tickets_controller.rb
index 860579b1a..ecd5a144f 100644
--- a/app/controllers/tickets_controller.rb
+++ b/app/controllers/tickets_controller.rb
@@ -132,14 +132,13 @@ class TicketsController < ApplicationController
# get history of ticket
history = History.list( 'Ticket', params[:id], 'Ticket::Article' )
- # get related users
- users = {}
- users[ ticket.owner_id ] = User.user_data_full( ticket.owner_id )
- users[ ticket.customer_id ] = User.user_data_full( ticket.customer_id )
+ # get related assets
+ assets = ticket.assets({})
history_list = []
history.each do |item|
- users[ item[:created_by_id] ] = User.user_data_full( item[:created_by_id] )
+ assets = item.assets(assets)
+
item_tmp = item.attributes
if item['history_object'] == 'Ticket::Article'
item_temp['type'] = 'Article ' + item['type'].to_s
@@ -171,29 +170,22 @@ class TicketsController < ApplicationController
item_tmp.delete( 'related_o_id' )
end
history_list.push item_tmp
-
end
- # fetch meta relations
- history_objects = History::Object.all()
- history_types = History::Type.all()
- history_attributes = History::Attribute.all()
-
# return result
render :json => {
- :ticket => ticket,
- :users => users,
- :history => history_list,
- :history_objects => history_objects,
- :history_types => history_types,
- :history_attributes => history_attributes
+ :assets => assets,
+ :history => history_list,
}
end
# GET /api/v1/ticket_merge_list/1
def ticket_merge_list
- ticket = Ticket.find( params[:ticket_id] )
+ ticket = Ticket.find( params[:ticket_id] )
+ assets = ticket.assets({})
+
+ # open tickets by customer
ticket_list = Ticket.where(
:customer_id => ticket.customer_id,
:ticket_state_id => Ticket::State.by_category( 'open' )
@@ -202,35 +194,29 @@ class TicketsController < ApplicationController
.order('created_at DESC')
.limit(6)
- # get related users
- users = {}
- tickets = []
+ # get related assets
+ ticket_ids_by_customer = []
ticket_list.each {|ticket|
- data = Ticket.lookup( :id => ticket.id )
- tickets.push data
- if !users[ data['owner_id'] ]
- users[ data['owner_id'] ] = User.user_data_full( data['owner_id'] )
- end
- if !users[ data['customer_id'] ]
- users[ data['customer_id'] ] = User.user_data_full( data['customer_id'] )
- end
- if !users[ data['created_by_id'] ]
- users[ data['created_by_id'] ] = User.user_data_full( data['created_by_id'] )
- end
- if !users[ data['updated_by_id'] ]
- users[ data['updated_by_id'] ] = User.user_data_full( data['updated_by_id'] )
+ ticket_ids_by_customer.push ticket.id
+ assets = ticket.assets(assets)
+ }
+
+
+ ticket_ids_recent_viewed = []
+ ticket_recent_view = RecentView.list( current_user, 8 )
+ ticket_recent_view.each {|item|
+ if item['recent_view_object'] == 'Ticket'
+ ticket_ids_recent_viewed.push item['o_id']
+ ticket = Ticket.find( item['o_id'] )
+ assets = ticket.assets(assets)
end
}
- recent_viewed = RecentView.list_fulldata( current_user, 8 )
-
# return result
render :json => {
- :customer => {
- :tickets => tickets,
- :users => users,
- },
- :recent => recent_viewed
+ :assets => assets,
+ :ticket_ids_by_customer => ticket_ids_by_customer,
+ :ticket_ids_recent_viewed => ticket_ids_recent_viewed,
}
end
@@ -295,18 +281,6 @@ class TicketsController < ApplicationController
ticket = Ticket.find( params[:id] )
return if !ticket_permission( ticket )
- # get related users
- users = {}
- if !users[ticket.owner_id]
- users[ticket.owner_id] = User.user_data_full( ticket.owner_id )
- end
- if !users[ticket.customer_id]
- users[ticket.customer_id] = User.user_data_full( ticket.customer_id )
- end
- if !users[ticket.created_by_id]
- users[ticket.created_by_id] = User.user_data_full( ticket.created_by_id )
- end
-
# log object as viewed
if !params[:do_not_log] || params[:do_not_log].to_i == 0
log_view( ticket )
@@ -328,58 +302,52 @@ class TicketsController < ApplicationController
)
end
+ # get related users
+ assets = {}
+ assets[:users] = {}
+ assets = ticket.assets(assets)
+
# get attributes to update
attributes_to_change = Ticket::ScreenOptions.attributes_to_change( :user => current_user, :ticket => ticket )
attributes_to_change[:owner_id].each { |user_id|
- if !users[user_id]
- users[user_id] = User.user_data_full( user_id )
+ if !assets[:users][user_id]
+ assets[:users][user_id] = User.user_data_full( user_id )
end
}
attributes_to_change[:group_id__owner_id].each {|group_id, user_ids|
user_ids.each {|user_id|
- if !users[user_id]
- users[user_id] = User.user_data_full( user_id )
+ if !assets[:users][user_id]
+ assets[:users][user_id] = User.user_data_full( user_id )
end
}
}
# get related articles
- ticket = ticket.attributes
- ticket[:article_ids] = []
articles = Ticket::Article.where( :ticket_id => params[:id] )
# get related users
- articles_used = []
+ article_ids = []
articles.each {|article|
# ignore internal article if customer is requesting
next if article.internal == true && is_role('Customer')
- article_tmp = article.attributes
# load article ids
- ticket[:article_ids].push article_tmp['id']
+ article_ids.push article.id
- # add attachment list to article
- article_tmp['attachments'] = Store.list( :object => 'Ticket::Article', :o_id => article.id )
-
- # remember article
- articles_used.push article_tmp
-
- # load users
- if !users[article.created_by_id]
- users[article.created_by_id] = User.user_data_full( article.created_by_id )
- end
+ # load assets
+ assets = article.assets(assets)
}
# return result
render :json => {
- :ticket => ticket,
- :articles => articles_used,
- :signature => signature,
- :users => users,
- :edit_form => attributes_to_change,
+ :ticket_id => ticket.id,
+ :ticket_article_ids => article_ids,
+ :signature => signature,
+ :assets => assets,
+ :edit_form => attributes_to_change,
}
end
@@ -393,65 +361,47 @@ class TicketsController < ApplicationController
# :article_id => params[:article_id]
)
- users = {}
+ assets = {}
+ assets[:users] = {}
attributes_to_change[:owner_id].each { |user_id|
- if !users[user_id]
- users[user_id] = User.user_data_full( user_id )
+ if !assets[:users][user_id]
+ assets[:users][user_id] = User.user_data_full( user_id )
end
}
attributes_to_change[:group_id__owner_id].each {|group_id, user_ids|
user_ids.each {|user_id|
- if !users[user_id]
- users[user_id] = User.user_data_full( user_id )
+ if !assets[:users][user_id]
+ assets[:users][user_id] = User.user_data_full( user_id )
end
}
}
# split data
- ticket = nil
- articles = nil
+ split = {}
if params[:ticket_id] && params[:article_id]
ticket = Ticket.find( params[:ticket_id] )
-
- # get related users
- if !users[ticket.owner_id]
- users[ticket.owner_id] = User.user_data_full( ticket.owner_id )
- end
- if !users[ticket.customer_id]
- users[ticket.customer_id] = User.user_data_full( ticket.customer_id )
- end
- if !users[ticket.created_by_id]
- users[ticket.created_by_id] = User.user_data_full( ticket.created_by_id )
- end
+ split[:ticket_id] = ticket.id
+ assets = ticket.assets(assets)
owner_ids = []
ticket.agent_of_group.each { |user|
owner_ids.push user.id
- if !users[user.id]
- users[user.id] = User.user_data_full( user.id )
+ if !assets[:users][user.id]
+ assets[:users][user.id] = User.user_data_full( user.id )
end
}
# get related articles
- ticket[:article_ids] = [ params[:article_id] ]
-
article = Ticket::Article.find( params[:article_id] )
-
- # add attachment list to article
- article['attachments'] = Store.list( :object => 'Ticket::Article', :o_id => article.id )
-
- # load users
- if !users[article.created_by_id]
- users[article.created_by_id] = User.user_data_full( article.created_by_id )
- end
+ split[:article_id] = article.id
+ assets = article.assets(assets)
end
# return result
render :json => {
- :ticket => ticket,
- :articles => [ article ],
- :users => users,
+ :split => split,
+ :assets => assets,
:edit_form => attributes_to_change,
}
end
@@ -465,19 +415,17 @@ class TicketsController < ApplicationController
:query => params[:term],
:current_user => current_user,
)
- users_data = {}
+ assets = {}
ticket_result = []
tickets.each do |ticket|
ticket_result.push ticket.id
- users_data[ ticket['owner_id'] ] = User.user_data_full( ticket['owner_id'] )
- users_data[ ticket['customer_id'] ] = User.user_data_full( ticket['customer_id'] )
- users_data[ ticket['created_by_id'] ] = User.user_data_full( ticket['created_by_id'] )
+ assets = ticket.assets(assets)
end
# return result
render :json => {
:tickets => ticket_result,
- :users => users_data,
+ :assets => assets,
}
end
diff --git a/app/models/history.rb b/app/models/history.rb
index 358c4a0e8..0ff89fe6d 100644
--- a/app/models/history.rb
+++ b/app/models/history.rb
@@ -1,6 +1,8 @@
# Copyright (C) 2012-2013 Zammad Foundation, http://zammad-foundation.org/
class History < ApplicationModel
+ include History::Assets
+
self.table_name = 'histories'
belongs_to :history_type, :class_name => 'History::Type'
belongs_to :history_object, :class_name => 'History::Object'
@@ -157,51 +159,27 @@ return all histoy entries of an object
activity_stream = History.activity_stream( user, limit )
# get related users
- users = {}
- tickets = []
- articles = []
+ assets = {}
activity_stream.each {|item|
# load article ids
if item['history_object'] == 'Ticket'
- ticket = Ticket.find( item['o_id'] ).attributes
- tickets.push ticket
-
- # load users
- if !users[ ticket['owner_id'] ]
- users[ ticket['owner_id'] ] = User.user_data_full( ticket['owner_id'] )
- end
- if !users[ ticket['customer_id'] ]
- users[ ticket['customer_id'] ] = User.user_data_full( ticket['customer_id'] )
- end
+ ticket = Ticket.find( item['o_id'] )
+ assets = ticket.assets(assets)
end
if item['history_object'] == 'Ticket::Article'
- article = Ticket::Article.find( item['o_id'] ).attributes
- if !article['subject'] || article['subject'] == ''
- article['subject'] = Ticket.find( article['ticket_id'] ).title
- end
- articles.push article
-
- # load users
- if !users[ article['created_by_id'] ]
- users[ article['created_by_id'] ] = User.user_data_full( article['created_by_id'] )
- end
+ article = Ticket::Article.find( item['o_id'] )
+ assets = article.assets(assets)
end
if item['history_object'] == 'User'
- users[ item['o_id'] ] = User.user_data_full( item['o_id'] )
- end
-
- # load users
- if !users[ item['created_by_id'] ]
- users[ item['created_by_id'] ] = User.user_data_full( item['created_by_id'] )
+ user = User.find( item['o_id'] )
+ assets = user.assets(assets)
end
}
return {
:activity_stream => activity_stream,
- :tickets => tickets,
- :articles => articles,
- :users => users,
+ :assets => assets,
}
end
diff --git a/app/models/history/assets.rb b/app/models/history/assets.rb
new file mode 100644
index 000000000..b81d94ef4
--- /dev/null
+++ b/app/models/history/assets.rb
@@ -0,0 +1,46 @@
+# Copyright (C) 2012-2013 Zammad Foundation, http://zammad-foundation.org/
+
+module History::Assets
+
+=begin
+
+get all assets / related models for this history entry
+
+ history = History.find(123)
+ result = history.assets( assets_if_exists )
+
+returns
+
+ result = {
+ :users => {
+ 123 => user_model_123,
+ 1234 => user_model_1234,
+ }
+ }
+
+=end
+
+ def assets (data)
+
+ if !data[:users]
+ data[:users] = {}
+ end
+ if !data[:users][ self['created_by_id'] ]
+ data[:users][ self['created_by_id'] ] = User.user_data_full( self['created_by_id'] )
+ end
+
+ # fetch meta relations
+ if !data[:history_object]
+ data[:history_object] = History::Object.all()
+ end
+ if !data[:history_type]
+ data[:history_type] = History::Type.all()
+ end
+ if !data[:history_attribute]
+ data[:history_attribute] = History::Attribute.all()
+ end
+
+ data
+ end
+
+end
\ No newline at end of file
diff --git a/app/models/organization.rb b/app/models/organization.rb
index 615e2ef4c..4fba65cc5 100644
--- a/app/models/organization.rb
+++ b/app/models/organization.rb
@@ -1,37 +1,10 @@
# Copyright (C) 2012-2013 Zammad Foundation, http://zammad-foundation.org/
class Organization < ApplicationModel
+ include Organization::Assets
+ extend Organization::Search
+
has_and_belongs_to_many :users
validates :name, :presence => true
- def self.search(params)
-
- # get params
- query = params[:query]
- limit = params[:limit] || 10
- current_user = params[:current_user]
-
- # enable search only for agents and admins
- return [] if !current_user.is_role('Agent') && !current_user.is_role('Admin')
-
- # do query
- organizations = Organization.find(
- :all,
- :limit => limit,
- :conditions => ['name LIKE ? OR note LIKE ?', "%#{query}%", "%#{query}%"],
- :order => 'name'
- )
-
- # if only a few organizations are found, search for names of users
- if organizations.length <= 3
- organizations = Organization.select('DISTINCT(organizations.id)').joins('LEFT OUTER JOIN users ON users.organization_id = organizations.id').find(
- :all,
- :limit => limit,
- :conditions => ['users.firstname LIKE ? or users.lastname LIKE ? or users.email LIKE ?', "%#{query}%", "%#{query}%", "%#{query}%"],
- :order => 'organizations.name'
- )
- end
- return organizations
- end
-
-end
+end
\ No newline at end of file
diff --git a/app/models/organization/assets.rb b/app/models/organization/assets.rb
new file mode 100644
index 000000000..c3818915c
--- /dev/null
+++ b/app/models/organization/assets.rb
@@ -0,0 +1,43 @@
+# Copyright (C) 2012-2013 Zammad Foundation, http://zammad-foundation.org/
+
+module Organization::Assets
+
+=begin
+
+get all assets / related models for this organization
+
+ organization = Organization.find(123)
+ result = organization.assets( assets_if_exists )
+
+returns
+
+ result = {
+ :organizations => {
+ 123 => organization_model_123,
+ 1234 => organization_model_1234,
+ }
+ }
+
+=end
+
+ def assets (data)
+
+ if !data[:organizations]
+ data[:organizations] = {}
+ end
+ if !data[:users]
+ data[:users] = {}
+ end
+ if !data[:organizations][ self.id ]
+ data[:organizations][ self.id ] = self.attributes
+ data[:organizations][ self.id ][:user_ids] = []
+ users = User.where( :organization_id => self.id ).limit(10)
+ users.each {|user|
+ data[:users][ user.id ] = User.user_data_full( user.id )
+ data[:organizations][ self.id ][:user_ids].push user.id
+ }
+ end
+ data
+ end
+
+end
\ No newline at end of file
diff --git a/app/models/organization/search.rb b/app/models/organization/search.rb
new file mode 100644
index 000000000..9d048bb0d
--- /dev/null
+++ b/app/models/organization/search.rb
@@ -0,0 +1,62 @@
+# Copyright (C) 2012-2013 Zammad Foundation, http://zammad-foundation.org/
+
+module Organization::Search
+
+=begin
+
+search organizations
+
+ result = Organization.search(
+ :current_user => User.find(123),
+ :query => 'search something',
+ :limit => 15,
+ )
+
+returns
+
+ result = [organization_model1, organization_model2]
+
+=end
+
+ def search(params)
+
+ # get params
+ query = params[:query]
+ limit = params[:limit] || 10
+ current_user = params[:current_user]
+
+ # enable search only for agents and admins
+ return [] if !current_user.is_role('Agent') && !current_user.is_role('Admin')
+
+ # do query
+ organizations = Organization.find(
+ :all,
+ :limit => limit,
+ :conditions => ['name LIKE ? OR note LIKE ?', "%#{query}%", "%#{query}%"],
+ :order => 'name'
+ )
+
+ # if only a few organizations are found, search for names of users
+ if organizations.length <= 3
+ organizations_by_user = Organization.select('DISTINCT(organizations.id)').joins('LEFT OUTER JOIN users ON users.organization_id = organizations.id').find(
+ :all,
+ :limit => limit,
+ :conditions => ['users.firstname LIKE ? or users.lastname LIKE ? or users.email LIKE ?', "%#{query}%", "%#{query}%", "%#{query}%"],
+ :order => 'organizations.name'
+ )
+ organizations_by_user.each {|organization_by_user|
+ puts 'OOO ' + organization_by_user.inspect
+ organization_exists = false
+ organizations.each {|organization|
+ if organization.id == organization_by_user.id
+ organization_exists = true
+ end
+ }
+ if !organization_exists
+ organizations.push organization
+ end
+ }
+ end
+ organizations
+ end
+end
\ No newline at end of file
diff --git a/app/models/recent_view.rb b/app/models/recent_view.rb
index 614f2ee4f..7ac9ed16e 100644
--- a/app/models/recent_view.rb
+++ b/app/models/recent_view.rb
@@ -44,14 +44,14 @@ class RecentView < ApplicationModel
recent_viewed = self.list( user, limit )
# get related users
- users = {}
- tickets = []
+ assets = {}
+ ticket_ids = []
recent_viewed.each {|item|
# load article ids
# if item.recent_view_object == 'Ticket'
- ticket = Ticket.find( item['o_id'] ).attributes
- tickets.push ticket
+ ticket = Ticket.find( item['o_id'] )
+ ticket_ids.push ticket.id
# end
# if item.recent_view_object 'Ticket::Article'
# tickets.push Ticket::Article.find(item.o_id)
@@ -60,21 +60,12 @@ class RecentView < ApplicationModel
# tickets.push User.find(item.o_id)
# end
- # load users
- if !users[ ticket['owner_id'] ]
- users[ ticket['owner_id'] ] = User.user_data_full( ticket['owner_id'] )
- end
- if !users[ ticket['created_by_id'] ]
- users[ ticket['created_by_id'] ] = User.user_data_full( ticket['created_by_id'] )
- end
- if !users[ item['created_by_id'] ]
- users[ item['created_by_id'] ] = User.user_data_full( item['created_by_id'] )
- end
+ assets = ticket.assets(assets)
}
return {
:recent_viewed => recent_viewed,
- :tickets => tickets,
- :users => users,
+ :ticket_ids => ticket_ids,
+ :assets => assets,
}
end
diff --git a/app/models/ticket.rb b/app/models/ticket.rb
index 84c01b645..3669c13ac 100644
--- a/app/models/ticket.rb
+++ b/app/models/ticket.rb
@@ -25,6 +25,7 @@ class Ticket < ApplicationModel
include Ticket::Escalation
include Ticket::Subject
include Ticket::Permission
+ include Ticket::Assets
extend Ticket::Search
attr_accessor :callback_loop
diff --git a/app/models/ticket/article.rb b/app/models/ticket/article.rb
index dd4c97855..c1bf19b4a 100644
--- a/app/models/ticket/article.rb
+++ b/app/models/ticket/article.rb
@@ -1,6 +1,8 @@
# Copyright (C) 2012-2013 Zammad Foundation, http://zammad-foundation.org/
class Ticket::Article < ApplicationModel
+ include Ticket::Article::Assets
+
after_create :attachment_check
belongs_to :ticket
belongs_to :ticket_article_type, :class_name => 'Ticket::Article::Type'
diff --git a/app/models/ticket/article/assets.rb b/app/models/ticket/article/assets.rb
new file mode 100644
index 000000000..6b8d0e117
--- /dev/null
+++ b/app/models/ticket/article/assets.rb
@@ -0,0 +1,48 @@
+# Copyright (C) 2012-2013 Zammad Foundation, http://zammad-foundation.org/
+
+module Ticket::Article::Assets
+
+=begin
+
+get all assets / related models for this article
+
+ article = Ticket::Article.find(123)
+ result = article.assets( assets_if_exists )
+
+returns
+
+ result = {
+ :users => {
+ 123 => user_model_123,
+ 1234 => user_model_1234,
+ }
+ :article => [ article_model1 ],
+ }
+
+=end
+
+ def assets (data)
+
+ if !data[:ticket_article]
+ data[:ticket_article] = {}
+ end
+ if !data[:ticket_article][ self.id ]
+ data[:ticket_article][ self.id ] = self.attributes
+
+ # add attachment list to article
+ data[:ticket_article][ self.id ]['attachments'] = Store.list( :object => 'Ticket::Article', :o_id => self.id )
+ end
+
+ if !data[:users]
+ data[:users] = {}
+ end
+ if !data[:users][ self['created_by_id'] ]
+ data[:users][ self['created_by_id'] ] = User.user_data_full( self['created_by_id'] )
+ end
+ if !data[:users][ self['updated_by_id'] ]
+ data[:users][ self['updated_by_id'] ] = User.user_data_full( self['updated_by_id'] )
+ end
+ data
+ end
+
+end
\ No newline at end of file
diff --git a/app/models/ticket/assets.rb b/app/models/ticket/assets.rb
new file mode 100644
index 000000000..7b96346ec
--- /dev/null
+++ b/app/models/ticket/assets.rb
@@ -0,0 +1,51 @@
+# Copyright (C) 2012-2013 Zammad Foundation, http://zammad-foundation.org/
+
+module Ticket::Assets
+
+=begin
+
+get all assets / related models for this ticket
+
+ ticket = Ticket.find(123)
+ result = ticket.assets( assets_if_exists )
+
+returns
+
+ result = {
+ :users => {
+ 123 => user_model_123,
+ 1234 => user_model_1234,
+ }
+ :tickets => [ ticket_model1 ]
+ }
+
+=end
+
+ def assets (data)
+
+ if !data[:tickets]
+ data[:tickets] = {}
+ end
+ if !data[:tickets][ self.id ]
+ data[:tickets][ self.id ] = self.attributes
+ end
+
+ if !data[:users]
+ data[:users] = {}
+ end
+ if !data[:users][ self['owner_id'] ]
+ data[:users][ self['owner_id'] ] = User.user_data_full( self['owner_id'] )
+ end
+ if !data[:users][ self['customer_id'] ]
+ data[:users][ self['customer_id'] ] = User.user_data_full( self['customer_id'] )
+ end
+ if !data[:users][ self['created_by_id'] ]
+ data[:users][ self['created_by_id'] ] = User.user_data_full( self['created_by_id'] )
+ end
+ if !data[:users][ self['updated_by_id'] ]
+ data[:users][ self['updated_by_id'] ] = User.user_data_full( self['updated_by_id'] )
+ end
+ data
+ end
+
+end
\ No newline at end of file
diff --git a/app/models/ticket/overview.rb b/app/models/ticket/overviews.rb
similarity index 96%
rename from app/models/ticket/overview.rb
rename to app/models/ticket/overviews.rb
index 6a900a464..d08bee701 100644
--- a/app/models/ticket/overview.rb
+++ b/app/models/ticket/overviews.rb
@@ -1,14 +1,12 @@
# Copyright (C) 2012-2013 Zammad Foundation, http://zammad-foundation.org/
-require 'overview'
-
-class Ticket::Overview
+module Ticket::Overviews
=begin
all overview by user
- result = Ticket::Overview.all(
+ result = Ticket::Overviews.all(
:current_user => User.find(123),
)
@@ -33,15 +31,14 @@ returns
# get agent overviews
role = data[:current_user].is_role( 'Agent' )
- overviews = Overview.where( :role_id => role.id, :active => true )
- return overviews
+ Overview.where( :role_id => role.id, :active => true )
end
=begin
selected overview by user
- result = Ticket::Overview.list(
+ result = Ticket::Overviews.list(
:current_user => User.find(123),
:view => 'some_view_url',
)
@@ -164,7 +161,7 @@ returns
count()
return {
- :ticket_list => ticket_ids,
+ :ticket_ids => ticket_ids,
:tickets_count => tickets_count,
:overview => overview_selected_raw,
}
@@ -187,7 +184,6 @@ returns
:tickets_count => tickets_count,
:overview => overview_selected_raw,
}
-
end
private
@@ -249,5 +245,4 @@ returns
bind[0] = sql
return bind
end
-
end
\ No newline at end of file
diff --git a/app/models/ticket/search.rb b/app/models/ticket/search.rb
index c51158d70..810a23ab7 100644
--- a/app/models/ticket/search.rb
+++ b/app/models/ticket/search.rb
@@ -50,13 +50,11 @@ returns
# build result list
tickets = []
- users = {}
tickets_all.each do |ticket|
- ticket_tmp = Ticket.lookup( :id => ticket.id )
- tickets.push ticket_tmp
+ tickets.push Ticket.lookup( :id => ticket.id )
end
- return tickets
+ tickets
end
end
\ No newline at end of file
diff --git a/app/models/user.rb b/app/models/user.rb
index 4f4fcf8a8..71418fc9f 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -4,6 +4,9 @@ require 'digest/sha2'
require 'organization'
class User < ApplicationModel
+ include User::Assets
+ extend User::Search
+
before_create :check_name, :check_email, :check_login, :check_image, :check_password
before_update :check_password, :check_image, :check_email, :check_login_update
after_create :notify_clients_after_create
@@ -126,7 +129,7 @@ returns
def self.sso(params)
# try to login against configure auth backends
- user_auth = Sso.check( params, user )
+ user_auth = Sso.check( params )
return if !user_auth
return user_auth
@@ -283,42 +286,6 @@ returns
return user
end
-=begin
-
-search user
-
- result = User.search(
- :query => 'some search term'
- :limit => 15,
- :current_user => user_model,
- )
-
-returns
-
- result = [user_model1, user_model2, ...]
-
-=end
-
- def self.search(params)
-
- # get params
- query = params[:query]
- limit = params[:limit] || 10
- current_user = params[:current_user]
-
- # enable search only for agents and admins
- return [] if !current_user.is_role('Agent') && !current_user.is_role('Admin')
-
- # do query
- users = User.find(
- :all,
- :limit => limit,
- :conditions => ['(firstname LIKE ? or lastname LIKE ? or email LIKE ?) AND id != 1', "%#{query}%", "%#{query}%", "%#{query}%"],
- :order => 'firstname'
- )
- return users
- end
-
def self.find_fulldata(user_id)
cache = self.cache_get(user_id, true)
diff --git a/app/models/user/assets.rb b/app/models/user/assets.rb
new file mode 100644
index 000000000..202303355
--- /dev/null
+++ b/app/models/user/assets.rb
@@ -0,0 +1,34 @@
+# Copyright (C) 2012-2013 Zammad Foundation, http://zammad-foundation.org/
+
+module User::Assets
+
+=begin
+
+get all assets / related models for this user
+
+ user = User.find(123)
+ result = user.assets( assets_if_exists )
+
+returns
+
+ result = {
+ :users => {
+ 123 => user_model_123,
+ 1234 => user_model_1234,
+ }
+ }
+
+=end
+
+ def assets (data)
+
+ if !data[:users]
+ data[:users] = {}
+ end
+ if !data[:users][ self.id ]
+ data[:users][ self.id ] = User.user_data_full( self.id )
+ end
+ data
+ end
+
+end
\ No newline at end of file
diff --git a/app/models/user/search.rb b/app/models/user/search.rb
new file mode 100644
index 000000000..705b0cee5
--- /dev/null
+++ b/app/models/user/search.rb
@@ -0,0 +1,57 @@
+# Copyright (C) 2012-2013 Zammad Foundation, http://zammad-foundation.org/
+
+module User::Search
+
+=begin
+
+search tickets
+
+ result = Ticket.search(
+ :current_user => User.find(123),
+ :query => 'search something',
+ :limit => 15,
+ )
+
+returns
+
+ result = [ticket_model1, ticket_model2]
+
+=end
+
+=begin
+
+search user
+
+ result = User.search(
+ :query => 'some search term'
+ :limit => 15,
+ :current_user => user_model,
+ )
+
+returns
+
+ result = [user_model1, user_model2, ...]
+
+=end
+
+ def search(params)
+
+ # get params
+ query = params[:query]
+ limit = params[:limit] || 10
+ current_user = params[:current_user]
+
+ # enable search only for agents and admins
+ return [] if !current_user.is_role('Agent') && !current_user.is_role('Admin')
+
+ # do query
+ users = User.find(
+ :all,
+ :limit => limit,
+ :conditions => ['(firstname LIKE ? or lastname LIKE ? or email LIKE ?) AND id != 1', "%#{query}%", "%#{query}%", "%#{query}%"],
+ :order => 'firstname'
+ )
+ return users
+ end
+
+end
\ No newline at end of file
diff --git a/db/migrate/20130817000001_update_auth.rb b/db/migrate/20130817000001_update_auth.rb
new file mode 100644
index 000000000..449334f11
--- /dev/null
+++ b/db/migrate/20130817000001_update_auth.rb
@@ -0,0 +1,52 @@
+class UpdateAuth < ActiveRecord::Migration
+ def up
+ Setting.create_or_update(
+ :title => 'Authentication via OTRS',
+ :name => 'auth_otrs',
+ :area => 'Security::Authentication',
+ :description => 'Enables user authentication via OTRS.',
+ :state => {
+ :adapter => 'Auth::Otrs',
+ :required_group_ro => 'stats',
+ :group_rw_role_map => {
+ 'admin' => 'Admin',
+ 'stats' => 'Report',
+ },
+ :group_ro_role_map => {
+ 'stats' => 'Report',
+ },
+ :always_role => {
+ 'Agent' => true,
+ },
+ },
+ :frontend => false
+ )
+ Setting.create_or_update(
+ :title => 'Authentication via LDAP',
+ :name => 'auth_ldap',
+ :area => 'Security::Authentication',
+ :description => 'Enables user authentication via LDAP.',
+ :state => {
+ :adapter => 'Auth::Ldap',
+ :host => 'localhost',
+ :port => 389,
+ :bind_dn => 'cn=Manager,dc=example,dc=org',
+ :bind_pw => 'example',
+ :uid => 'mail',
+ :base => 'dc=example,dc=org',
+ :always_filter => '',
+ :always_roles => ['Admin', 'Agent'],
+ :always_groups => ['Users'],
+ :sync_params => {
+ :firstname => 'sn',
+ :lastname => 'givenName',
+ :email => 'mail',
+ :login => 'mail',
+ },
+ },
+ :frontend => false
+ )
+ end
+ def down
+ end
+end
\ No newline at end of file
diff --git a/lib/session.rb b/lib/session.rb
index c3aaa19c6..96d55de3f 100644
--- a/lib/session.rb
+++ b/lib/session.rb
@@ -395,7 +395,7 @@ class UserState
# overview
cache_key = @cache_key + '_overview'
if CacheIn.expired(cache_key)
- overview = Ticket::Overview.list(
+ overview = Ticket::Overviews.list(
:current_user => user,
)
overview_cache = CacheIn.get( cache_key, { :re_expire => true } )
@@ -410,13 +410,13 @@ class UserState
end
# overview lists
- overviews = Ticket::Overview.all(
+ overviews = Ticket::Overviews.all(
:current_user => user,
)
overviews.each { |overview|
cache_key = @cache_key + '_overview_data_' + overview.link
if CacheIn.expired(cache_key)
- overview_data = Ticket::Overview.list(
+ overview_data = Ticket::Overviews.list(
:view => overview.link,
:current_user => user,
:array => true,
@@ -597,14 +597,14 @@ class ClientState
if !CacheIn.get( 'pushed_tickets' + @client_id.to_s )
CacheIn.set( 'pushed_tickets' + @client_id.to_s , true, { :expires_in => 20.seconds } )
if @pushed[:tickets]
- tickets = []
+ tickets = {}
users = {}
@pushed[:tickets].each {|ticket_id, ticket_data|
self.ticket( ticket_id, tickets, users )
}
if !tickets.empty?
- tickets.each {|ticket|
- self.log 'notify', "push update of already pushed ticket id #{ticket['id']}"
+ tickets.each {|id, ticket|
+ self.log 'notify', "push update of already pushed ticket id #{id}"
}
# send update to browser
self.send({
@@ -637,7 +637,7 @@ class ClientState
end
# overview_data
- overviews = Ticket::Overview.all(
+ overviews = Ticket::Overviews.all(
:current_user => user,
)
overviews.each { |overview|
@@ -649,8 +649,8 @@ class ClientState
overview_data = CacheIn.get( cache_key, { :ignore_expire => true } )
self.log 'notify', "push overview_data #{overview.link} for user #{user.id}"
users = {}
- tickets = []
- overview_data[:ticket_list].each {|ticket_id|
+ tickets = {}
+ overview_data[:ticket_ids].each {|ticket_id|
self.ticket( ticket_id, tickets, users )
}
@@ -677,21 +677,24 @@ class ClientState
}
# send update to browser
+ self.send({
+ :data => {
+ :users => users,
+ :tickets => tickets,
+ },
+ :event => [ 'loadAssets' ]
+ })
self.send({
:data => {
:overview => overview_data[:overview],
- :ticket_list => overview_data[:ticket_list],
+ :ticket_ids => overview_data[:ticket_ids],
:tickets_count => overview_data[:tickets_count],
- :collections => {
- :User => users,
- :Ticket => tickets,
- },
:bulk => {
:group_id__owner_id => groups_users,
:owner_id => [],
},
},
- :event => [ 'loadCollection', 'ticket_overview_rebuild' ],
+ :event => [ 'ticket_overview_rebuild' ],
:collection => 'ticket_overview_' + overview.link.to_s,
})
end
@@ -816,7 +819,7 @@ class ClientState
ticket = Ticket.lookup( :id => ticket_id )
if @pushed[:tickets][ticket_id] != ticket['updated_at']
@pushed[:tickets][ticket_id] = ticket['updated_at']
- tickets.push ticket
+ tickets[ticket_id] = ticket
end
# add users if needed
diff --git a/lib/sso.rb b/lib/sso.rb
index 4715723e9..9f04e1498 100644
--- a/lib/sso.rb
+++ b/lib/sso.rb
@@ -6,7 +6,7 @@ class Sso < ApplicationLib
authenticate user via username and password
- result = Sso.check( params, config_item )
+ result = Sso.check( params )
returns
diff --git a/test/browser/text_module_test.rb b/test/browser/text_module_test.rb
index 551155225..f24c5bca6 100644
--- a/test/browser/text_module_test.rb
+++ b/test/browser/text_module_test.rb
@@ -263,7 +263,7 @@ class TextModuleTest < TestCase
:action => [
{
:execute => 'wait',
- :value => 3,
+ :value => 4,
},
{
:where => :instance2,
@@ -361,6 +361,78 @@ class TextModuleTest < TestCase
},
],
},
+ {
+ :name => 'verify zoom',
+ :action => [
+
+ # create ticket
+ {
+ :where => :instance2,
+ :execute => 'create_ticket',
+ :group => 'Users',
+ :subject => 'some subject 123äöü',
+ :body => 'some body 123äöü',
+ },
+
+ # check ticket
+ {
+ :where => :instance2,
+ :execute => 'match',
+ :css => '.active div.article',
+ :value => 'some body 123äöü',
+ :match_result => true,
+ },
+
+ # check ticket zoom
+ {
+ :execute => 'wait',
+ :value => 4,
+ },
+ {
+ :where => :instance2,
+ :execute => 'set',
+ :css => '.active textarea[name=body]',
+ :value => 'test',
+ },
+ {
+ :execute => 'wait',
+ :value => 4,
+ },
+ {
+ :where => :instance2,
+ :execute => 'set',
+ :css => '.active textarea[name=body]',
+ :value => '::' + random,
+ },
+ {
+ :execute => 'wait',
+ :value => 1,
+ },
+ {
+ :where => :instance2,
+ :execute => 'match',
+ :css => 'body',
+ :value => random,
+ :match_result => true,
+ },
+ {
+ :where => :instance2,
+ :execute => 'click',
+ :css => '.-sew-list-item.selected',
+ },
+ {
+ :execute => 'wait',
+ :value => 1,
+ },
+ {
+ :where => :instance2,
+ :execute => 'match',
+ :css => '.active textarea[name=body]',
+ :value => 'some content Braun' + random,
+ :match_result => true,
+ },
+ ],
+ },
]
browser_double_test(tests)
end
diff --git a/test/browser_test_helper.rb b/test/browser_test_helper.rb
index 69ddec753..903ae87cb 100644
--- a/test/browser_test_helper.rb
+++ b/test/browser_test_helper.rb
@@ -247,7 +247,7 @@ puts "NOTICE #{Time.now.to_s}: " + action.inspect
sleep 4
element = instance.find_element( { :css => '.active .ticket_create input[name="customer_id_autocompletion"]' } )
element.clear
- element.send_keys( 'ma' )
+ element.send_keys( 'nico' )
sleep 4
element = instance.find_element( { :css => '.active .ticket_create input[name="customer_id_autocompletion"]' } )
element.send_keys( :arrow_down )