123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- class Sessions::Backend::TicketOverviewList
- def initialize( user, client = nil, client_id = nil )
- @user = user
- @client = client
- @client_id = client_id
- @last_change = nil
- end
- def load
- # get whole collection
- overviews = Ticket::Overviews.all(
- :current_user => @user,
- )
- result = []
- overviews.each { |overview|
- overview_data = Ticket::Overviews.list(
- :view => overview.link,
- :current_user => @user,
- :array => true,
- )
- data = { :list => overview_data, :index => overview }
- result.push data
- }
- # no data exists
- return if !result || result.empty?
- # no change exists
- return if @last_change == result
- # remember last state
- @last_change = result
- result
- end
- def client_key
- "as::load::#{ self.class.to_s }::#{ @user.id }::#{ @client_id }"
- end
- def push
- # check timeout
- timeout = Sessions::CacheIn.get( self.client_key )
- return if timeout
- # set new timeout
- Sessions::CacheIn.set( self.client_key, true, { :expires_in => 6.seconds } )
- items = self.load
- return if !items
- # push overviews
- results = []
- items.each { |item|
- overview_data = item[:list]
- assets = {}
- overview_data[:ticket_ids].each {|ticket_id|
- ticket = Ticket.find( ticket_id )
- assets = ticket.assets(assets)
- }
- # get groups
- group_ids = []
- Group.where( :active => true ).each { |group|
- group_ids.push group.id
- }
- agents = {}
- Ticket::ScreenOptions.agents.each { |user|
- agents[ user.id ] = 1
- }
- users = {}
- groups_users = {}
- groups_users[''] = []
- group_ids.each {|group_id|
- groups_users[ group_id ] = []
- 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.find(user.id)
- assets = users[user.id].assets(assets)
- end
- }
- }
- if !@client
- result = {
- :event => 'navupdate_ticket_overview',
- :data => item[:index],
- }
- results.push result
- else
- @client.log 'notify', "push overview_list for user #{ @user.id }"
- # send update to browser
- @client.send({
- :data => assets,
- :event => [ 'loadAssets' ]
- })
- @client.send({
- :data => {
- :overview => overview_data[:overview],
- :ticket_ids => overview_data[:ticket_ids],
- :tickets_count => overview_data[:tickets_count],
- :bulk => {
- :group_id__owner_id => groups_users,
- :owner_id => [],
- },
- },
- :event => [ 'ticket_overview_rebuild' ],
- :collection => 'ticket_overview_' + item[:index].link.to_s,
- })
- end
- }
- return results if !@client
- nil
- end
- end
|