2016-10-19 03:11:36 +00:00
|
|
|
# Copyright (C) 2012-2016 Zammad Foundation, http://zammad-foundation.org/
|
2013-06-12 15:59:58 +00:00
|
|
|
|
2013-05-29 15:11:11 +00:00
|
|
|
class Taskbar < ApplicationModel
|
2013-05-31 23:10:40 +00:00
|
|
|
store :state
|
|
|
|
store :params
|
2017-01-04 14:40:19 +00:00
|
|
|
store :preferences
|
|
|
|
before_create :update_last_contact, :set_user, :update_preferences_infos
|
|
|
|
before_update :update_last_contact, :set_user, :update_preferences_infos
|
|
|
|
|
|
|
|
after_update :notify_clients
|
|
|
|
after_destroy :update_preferences_infos, :notify_clients
|
|
|
|
|
|
|
|
attr_accessor :local_update
|
|
|
|
|
|
|
|
def state_changed?
|
|
|
|
return false if !state
|
|
|
|
return false if state.empty?
|
|
|
|
state.each { |_key, value|
|
|
|
|
if value.class == Hash || value.class == ActiveSupport::HashWithIndifferentAccess
|
|
|
|
value.each { |_key1, value1|
|
|
|
|
next if value1 && value1.empty?
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
else
|
|
|
|
next if value && value.empty?
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
}
|
|
|
|
false
|
|
|
|
end
|
2013-05-29 15:11:11 +00:00
|
|
|
|
2013-05-31 23:10:40 +00:00
|
|
|
private
|
2015-05-01 12:31:46 +00:00
|
|
|
|
2013-06-12 15:59:58 +00:00
|
|
|
def update_last_contact
|
2017-01-04 14:40:19 +00:00
|
|
|
return true if local_update
|
2017-01-14 06:53:26 +00:00
|
|
|
return true if changes.empty?
|
|
|
|
if changes['notify']
|
|
|
|
count = 0
|
|
|
|
changes.each { |attribute, _value|
|
|
|
|
next if attribute == 'updated_at'
|
|
|
|
next if attribute == 'created_at'
|
|
|
|
count += 1
|
|
|
|
}
|
|
|
|
return true if count <= 1
|
|
|
|
end
|
2015-05-08 10:20:33 +00:00
|
|
|
self.last_contact = Time.zone.now
|
2013-06-12 15:59:58 +00:00
|
|
|
end
|
2015-05-07 10:27:12 +00:00
|
|
|
|
2013-08-22 20:56:54 +00:00
|
|
|
def set_user
|
2017-01-04 14:40:19 +00:00
|
|
|
return true if local_update
|
2013-08-22 20:56:54 +00:00
|
|
|
self.user_id = UserInfo.current_user_id
|
|
|
|
end
|
2017-01-04 14:40:19 +00:00
|
|
|
|
|
|
|
def update_preferences_infos
|
|
|
|
return true if local_update
|
|
|
|
|
|
|
|
# find other same open tasks
|
2017-01-18 08:45:20 +00:00
|
|
|
if !preferences
|
2017-01-18 09:11:56 +00:00
|
|
|
self.preferences = {}
|
2017-01-18 08:45:20 +00:00
|
|
|
end
|
2017-01-04 14:40:19 +00:00
|
|
|
preferences[:tasks] = []
|
2017-04-12 13:52:27 +00:00
|
|
|
Taskbar.where(key: key).order(:created_at, :id).each { |taskbar|
|
2017-01-09 12:22:07 +00:00
|
|
|
if taskbar.id == id
|
|
|
|
local_changed = state_changed?
|
|
|
|
local_last_contact = last_contact
|
|
|
|
else
|
|
|
|
local_changed = taskbar.state_changed?
|
|
|
|
local_last_contact = taskbar.last_contact
|
|
|
|
end
|
2017-01-04 14:40:19 +00:00
|
|
|
task = {
|
|
|
|
id: taskbar.id,
|
|
|
|
user_id: taskbar.user_id,
|
2017-01-09 12:22:07 +00:00
|
|
|
last_contact: local_last_contact,
|
|
|
|
changed: local_changed,
|
2017-01-04 14:40:19 +00:00
|
|
|
}
|
|
|
|
preferences[:tasks].push task
|
|
|
|
}
|
|
|
|
if !id
|
|
|
|
changed = state_changed?
|
|
|
|
task = {
|
|
|
|
user_id: user_id,
|
|
|
|
last_contact: last_contact,
|
|
|
|
changed: changed,
|
|
|
|
}
|
|
|
|
preferences[:tasks].push task
|
|
|
|
end
|
|
|
|
|
|
|
|
# update other taskbars
|
2017-04-12 13:52:27 +00:00
|
|
|
Taskbar.where(key: key).order(:created_at, :id).each { |taskbar|
|
2017-01-04 14:40:19 +00:00
|
|
|
next if taskbar.id == id
|
2017-08-22 17:36:48 +00:00
|
|
|
taskbar.with_lock do
|
|
|
|
taskbar.preferences = preferences
|
|
|
|
taskbar.local_update = true
|
|
|
|
taskbar.save!
|
|
|
|
end
|
2017-01-04 14:40:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return true if destroyed?
|
|
|
|
|
|
|
|
# remember preferences for current taskbar
|
|
|
|
self.preferences = preferences
|
|
|
|
|
|
|
|
true
|
|
|
|
end
|
|
|
|
|
|
|
|
def notify_clients
|
|
|
|
return true if !changes['preferences']
|
|
|
|
data = {
|
|
|
|
event: 'taskbar:preferences',
|
|
|
|
data: {
|
|
|
|
id: id,
|
|
|
|
key: key,
|
|
|
|
preferences: preferences,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
PushMessages.send_to(
|
|
|
|
user_id,
|
|
|
|
data,
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
2013-05-31 23:10:40 +00:00
|
|
|
end
|