Fixed issue #1933 - Can't find organization anymore after index rebuild.
This commit is contained in:
parent
fbeccbc85c
commit
9791c6b72c
4 changed files with 183 additions and 38 deletions
|
@ -46,8 +46,8 @@ class User < ApplicationModel
|
||||||
belongs_to :organization, inverse_of: :members
|
belongs_to :organization, inverse_of: :members
|
||||||
|
|
||||||
before_validation :check_name, :check_email, :check_login, :check_mail_delivery_failed, :ensure_uniq_email, :ensure_password, :ensure_roles, :ensure_identifier
|
before_validation :check_name, :check_email, :check_login, :check_mail_delivery_failed, :ensure_uniq_email, :ensure_password, :ensure_roles, :ensure_identifier
|
||||||
before_create :check_preferences_default, :validate_ooo, :domain_based_assignment, :set_locale
|
before_create :check_preferences_default, :validate_preferences, :validate_ooo, :domain_based_assignment, :set_locale
|
||||||
before_update :check_preferences_default, :validate_ooo, :reset_login_failed, :validate_agent_limit_by_attributes, :last_admin_check_by_attribute
|
before_update :check_preferences_default, :validate_preferences, :validate_ooo, :reset_login_failed, :validate_agent_limit_by_attributes, :last_admin_check_by_attribute
|
||||||
after_create :avatar_for_email_check
|
after_create :avatar_for_email_check
|
||||||
after_update :avatar_for_email_check
|
after_update :avatar_for_email_check
|
||||||
before_destroy :avatar_destroy, :user_device_destroy, :cit_caller_id_destroy, :task_destroy
|
before_destroy :avatar_destroy, :user_device_destroy, :cit_caller_id_destroy, :task_destroy
|
||||||
|
@ -1001,6 +1001,22 @@ returns
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def validate_preferences
|
||||||
|
return true if !changes
|
||||||
|
return true if !changes['preferences']
|
||||||
|
return true if preferences.blank?
|
||||||
|
return true if !preferences[:notification_sound]
|
||||||
|
return true if !preferences[:notification_sound][:enabled]
|
||||||
|
if preferences[:notification_sound][:enabled] == 'true'
|
||||||
|
preferences[:notification_sound][:enabled] = true
|
||||||
|
elsif preferences[:notification_sound][:enabled] == 'false'
|
||||||
|
preferences[:notification_sound][:enabled] = false
|
||||||
|
end
|
||||||
|
class_name = preferences[:notification_sound][:enabled].class.to_s
|
||||||
|
raise Exceptions::UnprocessableEntity, "preferences.notification_sound.enabled need to be an boolean, but it was a #{class_name}" if class_name != 'TrueClass' && class_name != 'FalseClass'
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
=begin
|
=begin
|
||||||
|
|
||||||
checks if the current user is the last one with admin permissions.
|
checks if the current user is the last one with admin permissions.
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
class CleanupUserPreferencesNotificationSound < ActiveRecord::Migration[5.1]
|
|
||||||
def up
|
|
||||||
User.with_permissions('ticket.agent').each do |user|
|
|
||||||
local_to_h!(user.preferences)
|
|
||||||
user.save!
|
|
||||||
end
|
|
||||||
|
|
||||||
User.with_permissions('ticket.agent').each do |user|
|
|
||||||
next if !user.preferences
|
|
||||||
next if !user.preferences[:notification_sound]
|
|
||||||
next if !user.preferences[:notification_sound][:enabled]
|
|
||||||
if user.preferences[:notification_sound][:enabled] == 'true'
|
|
||||||
user.preferences[:notification_sound][:enabled] = true
|
|
||||||
user.save!
|
|
||||||
next
|
|
||||||
end
|
|
||||||
next if user.preferences[:notification_sound][:enabled] != 'false'
|
|
||||||
user.preferences[:notification_sound][:enabled] = false
|
|
||||||
user.save!
|
|
||||||
next
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def local_to_h!(value)
|
|
||||||
if value.class == ActionController::Parameters
|
|
||||||
value = value.permit!.to_h
|
|
||||||
end
|
|
||||||
if value.class == Hash || value.class == ActiveSupport::HashWithIndifferentAccess
|
|
||||||
value.each_key do |local_key|
|
|
||||||
value[local_key] = local_to_h!(value[local_key])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
value
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
class CleanupUserPreferencesNotificationSound2 < ActiveRecord::Migration[5.1]
|
||||||
|
|
||||||
|
def local_to_h!(value)
|
||||||
|
if value.class == ActionController::Parameters
|
||||||
|
value = value.permit!.to_h
|
||||||
|
end
|
||||||
|
if value.class == Hash || value.class == ActiveSupport::HashWithIndifferentAccess
|
||||||
|
value.each_key do |local_key|
|
||||||
|
value[local_key] = local_to_h!(value[local_key])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
value
|
||||||
|
end
|
||||||
|
|
||||||
|
def local_clear_preferences(user)
|
||||||
|
return false if !user
|
||||||
|
return false if !user.preferences
|
||||||
|
return false if !user.preferences[:notification_sound]
|
||||||
|
return false if !user.preferences[:notification_sound][:enabled]
|
||||||
|
if user.preferences[:notification_sound][:enabled] == 'true'
|
||||||
|
user.preferences[:notification_sound][:enabled] = true
|
||||||
|
user.save!
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return false if user.preferences[:notification_sound][:enabled] != 'false'
|
||||||
|
user.preferences[:notification_sound][:enabled] = false
|
||||||
|
user.save!
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
def up
|
||||||
|
User.with_permissions('ticket.agent').each do |user|
|
||||||
|
local_to_h!(user.preferences)
|
||||||
|
user.save!
|
||||||
|
end
|
||||||
|
|
||||||
|
items = SearchIndexBackend.search('preferences.notification_sound.enabled:*', 3000, 'User') || []
|
||||||
|
items.each do |item|
|
||||||
|
next if !item[:id]
|
||||||
|
user = User.find_by(id: item[:id])
|
||||||
|
local_to_h!(user.preferences)
|
||||||
|
local_clear_preferences(user)
|
||||||
|
end
|
||||||
|
|
||||||
|
Organization.all.each do |organization|
|
||||||
|
organization.members.each do |user|
|
||||||
|
local_to_h!(user.preferences)
|
||||||
|
local_clear_preferences(user)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Delayed::Job.all.each do |job|
|
||||||
|
Delayed::Worker.new.run(job)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -1063,4 +1063,112 @@ class UserTest < ActiveSupport::TestCase
|
||||||
assert_equal(1, User.group_access(group.id, 'full').count)
|
assert_equal(1, User.group_access(group.id, 'full').count)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test 'preferences[:notification_sound][:enabled] value check' do
|
||||||
|
roles = Role.where(name: 'Agent')
|
||||||
|
agent1 = User.create!(
|
||||||
|
login: "agent-default-preferences-1#{name}@example.com",
|
||||||
|
firstname: 'vaild_agent_group_permission-1',
|
||||||
|
lastname: "Agent#{name}",
|
||||||
|
email: "agent-default-preferences-1#{name}@example.com",
|
||||||
|
password: 'agentpw',
|
||||||
|
active: true,
|
||||||
|
roles: roles,
|
||||||
|
preferences: {
|
||||||
|
notification_sound: {
|
||||||
|
enabled: true,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
updated_by_id: 1,
|
||||||
|
created_by_id: 1,
|
||||||
|
)
|
||||||
|
assert_equal(true, agent1.preferences[:notification_sound][:enabled])
|
||||||
|
|
||||||
|
agent2 = User.create!(
|
||||||
|
login: "agent-default-preferences-2#{name}@example.com",
|
||||||
|
firstname: 'vaild_agent_group_permission-2',
|
||||||
|
lastname: "Agent#{name}",
|
||||||
|
email: "agent-default-preferences-2#{name}@example.com",
|
||||||
|
password: 'agentpw',
|
||||||
|
active: true,
|
||||||
|
roles: roles,
|
||||||
|
preferences: {
|
||||||
|
notification_sound: {
|
||||||
|
enabled: false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
updated_by_id: 1,
|
||||||
|
created_by_id: 1,
|
||||||
|
)
|
||||||
|
assert_equal(false, agent2.preferences[:notification_sound][:enabled])
|
||||||
|
|
||||||
|
agent3 = User.create!(
|
||||||
|
login: "agent-default-preferences-3#{name}@example.com",
|
||||||
|
firstname: 'vaild_agent_group_permission-3',
|
||||||
|
lastname: "Agent#{name}",
|
||||||
|
email: "agent-default-preferences-3#{name}@example.com",
|
||||||
|
password: 'agentpw',
|
||||||
|
active: true,
|
||||||
|
roles: roles,
|
||||||
|
preferences: {
|
||||||
|
notification_sound: {
|
||||||
|
enabled: true,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
updated_by_id: 1,
|
||||||
|
created_by_id: 1,
|
||||||
|
)
|
||||||
|
assert_equal(true, agent3.preferences[:notification_sound][:enabled])
|
||||||
|
agent3.preferences[:notification_sound][:enabled] = 'false'
|
||||||
|
agent3.save!
|
||||||
|
agent3.reload
|
||||||
|
assert_equal(false, agent3.preferences[:notification_sound][:enabled])
|
||||||
|
|
||||||
|
agent4 = User.create!(
|
||||||
|
login: "agent-default-preferences-4#{name}@example.com",
|
||||||
|
firstname: 'vaild_agent_group_permission-4',
|
||||||
|
lastname: "Agent#{name}",
|
||||||
|
email: "agent-default-preferences-4#{name}@example.com",
|
||||||
|
password: 'agentpw',
|
||||||
|
active: true,
|
||||||
|
roles: roles,
|
||||||
|
preferences: {
|
||||||
|
notification_sound: {
|
||||||
|
enabled: false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
updated_by_id: 1,
|
||||||
|
created_by_id: 1,
|
||||||
|
)
|
||||||
|
assert_equal(false, agent4.preferences[:notification_sound][:enabled])
|
||||||
|
agent4.preferences[:notification_sound][:enabled] = 'true'
|
||||||
|
agent4.save!
|
||||||
|
agent4.reload
|
||||||
|
assert_equal(true, agent4.preferences[:notification_sound][:enabled])
|
||||||
|
|
||||||
|
agent4.preferences[:notification_sound][:enabled] = 'invalid'
|
||||||
|
assert_raises(Exceptions::UnprocessableEntity) do
|
||||||
|
agent4.save!
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_raises(Exceptions::UnprocessableEntity) do
|
||||||
|
User.create!(
|
||||||
|
login: "agent-default-preferences-5#{name}@example.com",
|
||||||
|
firstname: 'vaild_agent_group_permission-5',
|
||||||
|
lastname: "Agent#{name}",
|
||||||
|
email: "agent-default-preferences-5#{name}@example.com",
|
||||||
|
password: 'agentpw',
|
||||||
|
active: true,
|
||||||
|
roles: roles,
|
||||||
|
preferences: {
|
||||||
|
notification_sound: {
|
||||||
|
enabled: 'invalid string',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
updated_by_id: 1,
|
||||||
|
created_by_id: 1,
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue