From 8d725040a9d021cbe32002fa8536c66207d0878d Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Mon, 26 Feb 2018 11:36:19 +0100 Subject: [PATCH] Show also roles based groups in profile notification settings. --- .../controllers/_profile/notification.coffee | 19 +++++----- .../javascripts/app/models/ticket.coffee | 15 +++----- app/assets/javascripts/app/models/user.coffee | 19 ++++++++++ ...nup_user_preferences_notification_sound.rb | 36 +++++++++++++++++++ 4 files changed, 70 insertions(+), 19 deletions(-) create mode 100644 db/migrate/20180223000001_cleanup_user_preferences_notification_sound.rb diff --git a/app/assets/javascripts/app/controllers/_profile/notification.coffee b/app/assets/javascripts/app/controllers/_profile/notification.coffee index 8cf097a83..4ecedc83d 100644 --- a/app/assets/javascripts/app/controllers/_profile/notification.coffee +++ b/app/assets/javascripts/app/controllers/_profile/notification.coffee @@ -73,16 +73,15 @@ class Index extends App.ControllerSubContent user_group_config = false groups = [] - group_ids = @Session.get('group_ids') + group_ids = App.User.find(@Session.get('id')).all_group_ids() if group_ids - for group_id, access of group_ids - if _.contains(access, 'full') - group = App.Group.find(group_id) - groups.push group - if !user_group_config - if !config['group_ids'] - config['group_ids'] = [] - config['group_ids'].push group_id.toString() + for group_id in group_ids + group = App.Group.find(group_id) + groups.push group + if !user_group_config + if !config['group_ids'] + config['group_ids'] = [] + config['group_ids'].push group_id.toString() for sound in @sounds sound.selected = sound.file is App.OnlineNotification.soundFile() ? true : false @@ -150,6 +149,8 @@ class Index extends App.ControllerSubContent params.notification_sound = form_params.notification_sound if !params.notification_sound.enabled params.notification_sound.enabled = false + else + params.notification_sound.enabled = true # get data @ajax( diff --git a/app/assets/javascripts/app/models/ticket.coffee b/app/assets/javascripts/app/models/ticket.coffee index 87865f956..90e56db84 100644 --- a/app/assets/javascripts/app/models/ticket.coffee +++ b/app/assets/javascripts/app/models/ticket.coffee @@ -248,15 +248,10 @@ class App.Ticket extends App.Model editable: (permission = 'change') -> user_id = App.Session.get('id') return true if user_id is @customer_id - group_ids = App.Session.get('group_ids') - if group_ids - return true if group_ids[@group_id] && (_.include(group_ids[@group_id], permission) || _.include(group_ids[@group_id], 'full')) - role_ids = App.Session.get('role_ids') - if role_ids - for role_id in role_ids - if App.Role.exists(role_id) - role = App.Role.find(role_id) - if role.group_ids - return true if role.group_ids[@group_id] && (_.include(role.group_ids[@group_id], permission) || _.include(role.group_ids[@group_id], 'full')) + return false if !App.User.exists(user_id) + group_ids = App.User.find(user_id).all_group_ids(permission) + for local_group_id in group_ids + if local_group_id.toString() is @group_id.toString() + return true false diff --git a/app/assets/javascripts/app/models/user.coffee b/app/assets/javascripts/app/models/user.coffee index 69dfa12d4..a122cffa3 100644 --- a/app/assets/javascripts/app/models/user.coffee +++ b/app/assets/javascripts/app/models/user.coffee @@ -258,6 +258,25 @@ class App.User extends App.Model return access if access false + all_group_ids: (permission = 'full') -> + group_ids = [] + user_group_ids = App.Session.get('group_ids') + if user_group_ids + for local_group_id, local_permission of user_group_ids + if _.include(local_permission, permission) || _.include(local_permission, 'full') + group_ids.push local_group_id + + user_role_ids = App.Session.get('role_ids') + if user_role_ids + for role_id in user_role_ids + if App.Role.exists(role_id) + role = App.Role.find(role_id) + if role.group_ids + for local_group_id, local_permission of role.group_ids + if _.include(local_permission, permission) || _.include(local_permission, 'full') + group_ids.push local_group_id + _.uniq(group_ids) + @outOfOfficeTextPlaceholder: -> today = new Date() outOfOfficeText = 'Christmas holiday' diff --git a/db/migrate/20180223000001_cleanup_user_preferences_notification_sound.rb b/db/migrate/20180223000001_cleanup_user_preferences_notification_sound.rb new file mode 100644 index 000000000..b7b4b71a4 --- /dev/null +++ b/db/migrate/20180223000001_cleanup_user_preferences_notification_sound.rb @@ -0,0 +1,36 @@ +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