ticket_overview_list.rb 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. class Sessions::Backend::TicketOverviewList
  2. def initialize( user, client = nil, client_id = nil )
  3. @user = user
  4. @client = client
  5. @client_id = client_id
  6. @last_change = nil
  7. end
  8. def load
  9. # get whole collection
  10. overviews = Ticket::Overviews.all(
  11. :current_user => @user,
  12. )
  13. result = []
  14. overviews.each { |overview|
  15. overview_data = Ticket::Overviews.list(
  16. :view => overview.link,
  17. :current_user => @user,
  18. :array => true,
  19. )
  20. data = { :list => overview_data, :index => overview }
  21. result.push data
  22. }
  23. # no data exists
  24. return if !result || result.empty?
  25. # no change exists
  26. return if @last_change == result
  27. # remember last state
  28. @last_change = result
  29. result
  30. end
  31. def client_key
  32. "as::load::#{ self.class.to_s }::#{ @user.id }::#{ @client_id }"
  33. end
  34. def push
  35. # check timeout
  36. timeout = Sessions::CacheIn.get( self.client_key )
  37. return if timeout
  38. # set new timeout
  39. Sessions::CacheIn.set( self.client_key, true, { :expires_in => 6.seconds } )
  40. items = self.load
  41. return if !items
  42. # push overviews
  43. results = []
  44. items.each { |item|
  45. overview_data = item[:list]
  46. assets = {}
  47. overview_data[:ticket_ids].each {|ticket_id|
  48. ticket = Ticket.find( ticket_id )
  49. assets = ticket.assets(assets)
  50. }
  51. # get groups
  52. group_ids = []
  53. Group.where( :active => true ).each { |group|
  54. group_ids.push group.id
  55. }
  56. agents = {}
  57. Ticket::ScreenOptions.agents.each { |user|
  58. agents[ user.id ] = 1
  59. }
  60. users = {}
  61. groups_users = {}
  62. groups_users[''] = []
  63. group_ids.each {|group_id|
  64. groups_users[ group_id ] = []
  65. Group.find(group_id).users.each {|user|
  66. next if !agents[ user.id ]
  67. groups_users[ group_id ].push user.id
  68. if !users[user.id]
  69. users[user.id] = User.find(user.id)
  70. assets = users[user.id].assets(assets)
  71. end
  72. }
  73. }
  74. if !@client
  75. result = {
  76. :event => 'navupdate_ticket_overview',
  77. :data => item[:index],
  78. }
  79. results.push result
  80. else
  81. @client.log 'notify', "push overview_list for user #{ @user.id }"
  82. # send update to browser
  83. @client.send({
  84. :data => assets,
  85. :event => [ 'loadAssets' ]
  86. })
  87. @client.send({
  88. :data => {
  89. :overview => overview_data[:overview],
  90. :ticket_ids => overview_data[:ticket_ids],
  91. :tickets_count => overview_data[:tickets_count],
  92. :bulk => {
  93. :group_id__owner_id => groups_users,
  94. :owner_id => [],
  95. },
  96. },
  97. :event => [ 'ticket_overview_rebuild' ],
  98. :collection => 'ticket_overview_' + item[:index].link.to_s,
  99. })
  100. end
  101. }
  102. return results if !@client
  103. nil
  104. end
  105. end