ticket_overview_list.rb 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. module Sessions::Backend::TicketOverviewList
  2. def self.worker( user, worker )
  3. overviews = Ticket::Overviews.all(
  4. :current_user => user,
  5. )
  6. overviews.each { |overview|
  7. cache_key = 'user_' + user.id.to_s + '_overview_data_' + overview.link
  8. if Sessions::CacheIn.expired(cache_key)
  9. overview_data = Ticket::Overviews.list(
  10. :view => overview.link,
  11. :current_user => user,
  12. :array => true,
  13. )
  14. overview_data_cache = Sessions::CacheIn.get( cache_key, { :re_expire => true } )
  15. worker.log 'notice', 'fetch overview_data - ' + cache_key
  16. if overview_data != overview_data_cache
  17. worker.log 'notify', 'fetch overview_data changed - ' + cache_key
  18. Sessions::CacheIn.set( cache_key, overview_data, { :expires_in => 5.seconds } )
  19. end
  20. end
  21. }
  22. end
  23. def self.push( user, client )
  24. overviews = Ticket::Overviews.all(
  25. :current_user => user,
  26. )
  27. overviews.each { |overview|
  28. cache_key = 'user_' + user.id.to_s + '_overview_data_' + overview.link
  29. if !client.last_change['overview_list']
  30. client.last_change['overview_list'] = {}
  31. end
  32. overview_data_time = Sessions::CacheIn.get_time( cache_key, { :ignore_expire => true } )
  33. if overview_data_time && client.last_change['overview_list'][overview.link] != overview_data_time
  34. client.last_change['overview_list'][overview.link] = overview_data_time
  35. overview_data = Sessions::CacheIn.get( cache_key, { :ignore_expire => true } )
  36. client.log 'notify', "push overview_data #{overview.link} for user #{user.id}"
  37. users = {}
  38. tickets = {}
  39. overview_data[:ticket_ids].each {|ticket_id|
  40. client.ticket( ticket_id, tickets, users )
  41. }
  42. # get groups
  43. group_ids = []
  44. Group.where( :active => true ).each { |group|
  45. group_ids.push group.id
  46. }
  47. agents = {}
  48. Ticket::ScreenOptions.agents.each { |user|
  49. agents[ user.id ] = 1
  50. }
  51. groups_users = {}
  52. groups_users[''] = []
  53. group_ids.each {|group_id|
  54. groups_users[ group_id ] = []
  55. Group.find(group_id).users.each {|user|
  56. next if !agents[ user.id ]
  57. groups_users[ group_id ].push user.id
  58. if !users[user.id]
  59. users[user.id] = User.user_data_full(user.id)
  60. end
  61. }
  62. }
  63. # send update to browser
  64. client.send({
  65. :data => {
  66. User.to_app_model => users,
  67. Ticket.to_app_model => tickets,
  68. },
  69. :event => [ 'loadAssets' ]
  70. })
  71. client.send({
  72. :data => {
  73. :overview => overview_data[:overview],
  74. :ticket_ids => overview_data[:ticket_ids],
  75. :tickets_count => overview_data[:tickets_count],
  76. :bulk => {
  77. :group_id__owner_id => groups_users,
  78. :owner_id => [],
  79. },
  80. },
  81. :event => [ 'ticket_overview_rebuild' ],
  82. :collection => 'ticket_overview_' + overview.link.to_s,
  83. })
  84. end
  85. }
  86. end
  87. end