Commit 528a641e authored by Marin Jankovski's avatar Marin Jankovski

Use group notification settings while honoring project settings.

parent ce30a56f
...@@ -178,28 +178,28 @@ class NotificationService ...@@ -178,28 +178,28 @@ class NotificationService
# Get project users with WATCH notification level # Get project users with WATCH notification level
def project_watchers(project) def project_watchers(project)
# Gather all user that have WATCH notification setting for project and group project_members = project_notification_list(project)
project_uids, group_uids = project_and_group_watchers(project, Notification::N_WATCH)
# Gather all user that have WATCH as their GLOBAL setting project_global= project_notification_list(project, Notification::N_GLOBAL)
global_setting_project, global_setting_group = project_and_group_watchers(project, Notification::N_GLOBAL) group_global = group_notification_list(project, Notification::N_GLOBAL)
global_uids = [global_setting_project, global_setting_group].flatten.uniq global_watch = User.where(
global_watchers_ids = User.where(id: global_uids, notification_level: Notification::N_WATCH).pluck(:id) id: [project_global, group_global].flatten.uniq,
notification_level: Notification::N_WATCH
).pluck(:id)
# Select watchers based on what the project setting is project_watch = watch_project(project, project_global, global_watch)
project_watchers, user_ids = select_watchers(global_watchers_ids, global_setting_project, project_uids) group_watch = watch_group(project, project_members, group_global, global_watch)
# Select watchers based on what the group setting is User.where(id: project_watch.concat(group_watch).uniq).to_a
group_watchers, ids = select_watchers(user_ids, global_setting_group, group_uids)
project_watchers.concat(group_watchers.concat(ids)).uniq
watchers = User.where(id: project_watchers)
watchers.to_a
end end
def project_notification_list(project, notification_level) def project_notification_list(project, notification_level=nil)
project.users_projects.where(notification_level: notification_level).pluck(:user_id) project_members = project.users_projects
if notification_level
project_members.where(notification_level: notification_level).pluck(:user_id)
else
project_members.pluck(:user_id)
end
end end
def group_notification_list(project, notification_level) def group_notification_list(project, notification_level)
...@@ -210,25 +210,34 @@ class NotificationService ...@@ -210,25 +210,34 @@ class NotificationService
end end
end end
def select_watchers(user_ids, global_setting, setting) def watch_project(project, global_setting, watch_global)
watchers = [] uids = project_notification_list(project, Notification::N_WATCH)
user_ids.each do |i|
if setting.include?(i) global_setting.each do |i|
watchers << i if watch_global.include?(i)
elsif global_setting.include?(i) uids << i
watchers << i
else
user_ids.delete(i)
end end
end end
[watchers, user_ids] uids.uniq
end
def watch_group(project, project_members, global_setting, watch_global)
uids = group_notification_list(project, Notification::N_WATCH)
# Group setting is watch, add to watchers list user is not project member
watch = []
uids.each do |i|
if project_members.exclude?(i)
watch << i
end
end
global_setting.each do |i|
if project_members.exclude?(i) && watch_global.include?(i)
watch << i
end
end end
def project_and_group_watchers(project, notification_level) watch.uniq
[
project_notification_list(project, notification_level),
group_notification_list(project, notification_level)
]
end end
# Remove users with disabled notifications from array # Remove users with disabled notifications from array
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment