From 2c156e3c7bbade01c36eee18327f1ced6eebea79 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Tue, 17 Mar 2020 18:09:44 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- .../import_export/project_export_presenter.rb | 40 ++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 app/presenters/projects/import_export/project_export_presenter.rb (limited to 'app/presenters') diff --git a/app/presenters/projects/import_export/project_export_presenter.rb b/app/presenters/projects/import_export/project_export_presenter.rb new file mode 100644 index 00000000000..8f3fc53af10 --- /dev/null +++ b/app/presenters/projects/import_export/project_export_presenter.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +module Projects + module ImportExport + class ProjectExportPresenter < Gitlab::View::Presenter::Delegated + include ActiveModel::Serializers::JSON + + presents :project + + def project_members + super + converted_group_members + end + + def description + self.respond_to?(:override_description) ? override_description : super + end + + private + + def converted_group_members + group_members.each do |group_member| + group_member.source_type = 'Project' # Make group members project members of the future import + end + end + + # rubocop: disable CodeReuse/ActiveRecord + def group_members + return [] unless current_user.can?(:admin_group, project.group) + + # We need `.where.not(user_id: nil)` here otherwise when a group has an + # invitee, it would make the following query return 0 rows since a NULL + # user_id would be present in the subquery + # See http://stackoverflow.com/questions/129077/not-in-clause-and-null-values + non_null_user_ids = project.project_members.where.not(user_id: nil).select(:user_id) + GroupMembersFinder.new(project.group).execute.where.not(user_id: non_null_user_ids) + end + # rubocop: enable CodeReuse/ActiveRecord + end + end +end -- cgit v1.2.3