GitLab wurde aktualisiert. Dank regelmäßiger Updates bleibt das THM GitLab sicher und Sie profitieren von den neuesten Funktionen. Vielen Dank für Ihre Geduld.

Commit c34186f8 authored by Marin Jankovski's avatar Marin Jankovski
Browse files

Refactor project watchers collecting.

parent e6fbf79b
......@@ -178,21 +178,41 @@ def project_was_moved(project)
# Get project users with WATCH notification level
def project_watchers(project)
project_watchers = []
member_methods = { project => :users_projects }
member_methods.merge!( => :users_groups) if
member_methods.each do |object, member_method|
# Get project notification settings since it has higher priority
user_ids = object.send(member_method).where(notification_level: Notification::N_WATCH).pluck(:user_id)
project_watchers += User.where(id: user_ids)
# next collect users who use global settings with watch state
user_ids = object.send(member_method).where(notification_level: Notification::N_GLOBAL).pluck(:user_id)
project_watchers += User.where(id: user_ids, notification_level: Notification::N_WATCH)
# Gather all user ids that have WATCH notification setting for project
project_notification_uids = project_notification_list(project, Notification::N_WATCH)
# Gather all user ids that have WATCH notification setting for group
group_notification_uids = group_notification_list(project, Notification::N_WATCH)
# Gather all user ids that have GLOBAL setting
global_notification_uids = global_notification_list(project)
project_and_group_uids = [project_notification_uids, group_notification_uids].flatten.uniq
group_and_project_watchers = User.where(id: project_and_group_uids)
# Find all users that have WATCH as their GLOBAL setting
global_watchers = User.where(id: global_notification_uids, notification_level: Notification::N_WATCH)
[group_and_project_watchers, global_watchers].flatten.uniq
def project_notification_list(project, notification_level)
project.users_projects.where(notification_level: notification_level).pluck(:user_id)
def group_notification_list(project, notification_level)
if notification_level).pluck(:user_id)
def global_notification_list(project)
project_notification_list(project, Notification::N_GLOBAL),
group_notification_list(project, Notification::N_GLOBAL)
# 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