summaryrefslogtreecommitdiff
path: root/app/presenters
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-03-17 18:09:44 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-03-17 18:09:44 +0000
commit2c156e3c7bbade01c36eee18327f1ced6eebea79 (patch)
tree115fa8dbf6bc05037378b380311d31acb805f54c /app/presenters
parent8e129497b2565b8c595ef4f806d9a9595ca654e5 (diff)
downloadgitlab-ce-2c156e3c7bbade01c36eee18327f1ced6eebea79.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/presenters')
-rw-r--r--app/presenters/projects/import_export/project_export_presenter.rb40
1 files changed, 40 insertions, 0 deletions
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