diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-04-20 23:50:22 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-04-20 23:50:22 +0000 |
commit | 9dc93a4519d9d5d7be48ff274127136236a3adb3 (patch) | |
tree | 70467ae3692a0e35e5ea56bcb803eb512a10bedb /app/controllers/profiles/notifications_controller.rb | |
parent | 4b0f34b6d759d6299322b3a54453e930c6121ff0 (diff) | |
download | gitlab-ce-9dc93a4519d9d5d7be48ff274127136236a3adb3.tar.gz |
Add latest changes from gitlab-org/gitlab@13-11-stable-eev13.11.0-rc43
Diffstat (limited to 'app/controllers/profiles/notifications_controller.rb')
-rw-r--r-- | app/controllers/profiles/notifications_controller.rb | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/app/controllers/profiles/notifications_controller.rb b/app/controllers/profiles/notifications_controller.rb index 0a73239709a..6ef0ed6d365 100644 --- a/app/controllers/profiles/notifications_controller.rb +++ b/app/controllers/profiles/notifications_controller.rb @@ -3,18 +3,13 @@ class Profiles::NotificationsController < Profiles::ApplicationController feature_category :users - # rubocop: disable CodeReuse/ActiveRecord def show @user = current_user @user_groups = user_groups @group_notifications = UserGroupNotificationSettingsFinder.new(current_user, user_groups).execute - - @project_notifications = current_user.notification_settings.for_projects.order(:id) - .preload_source_route - .select { |notification| current_user.can?(:read_project, notification.source) } + @project_notifications = project_notifications_with_preloaded_associations @global_notification_setting = current_user.global_notification_setting end - # rubocop: enable CodeReuse/ActiveRecord def update result = Users::UpdateService.new(current_user, user_params.merge(user: current_user)).execute @@ -37,4 +32,20 @@ class Profiles::NotificationsController < Profiles::ApplicationController def user_groups GroupsFinder.new(current_user, all_available: false).execute.order_name_asc.page(params[:page]) end + + # rubocop: disable CodeReuse/ActiveRecord + def project_notifications_with_preloaded_associations + project_notifications = current_user + .notification_settings + .for_projects + .order_by_id_asc + .preload_source_route + + projects = project_notifications.map(&:source) + ActiveRecord::Associations::Preloader.new.preload(projects, { namespace: [:route, :owner], group: [] }) + Preloaders::UserMaxAccessLevelInProjectsPreloader.new(projects, current_user).execute + + project_notifications.select { |notification| current_user.can?(:read_project, notification.source) } + end + # rubocop: enable CodeReuse/ActiveRecord end |