Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/member.rb')
-rw-r--r--app/models/member.rb15
1 files changed, 14 insertions, 1 deletions
diff --git a/app/models/member.rb b/app/models/member.rb
index 38574d67cb6..e978552592d 100644
--- a/app/models/member.rb
+++ b/app/models/member.rb
@@ -137,6 +137,12 @@ class Member < ApplicationRecord
scope :with_source_id, ->(source_id) { where(source_id: source_id) }
scope :including_source, -> { includes(:source) }
+ scope :distinct_on_user_with_max_access_level, -> do
+ distinct_members = select('DISTINCT ON (user_id, invite_email) *')
+ .order('user_id, invite_email, access_level DESC, expires_at DESC, created_at ASC')
+ Member.from(distinct_members, :members)
+ end
+
scope :order_name_asc, -> { left_join_users.reorder(Gitlab::Database.nulls_last_order('users.name', 'ASC')) }
scope :order_name_desc, -> { left_join_users.reorder(Gitlab::Database.nulls_last_order('users.name', 'DESC')) }
scope :order_recent_sign_in, -> { left_join_users.reorder(Gitlab::Database.nulls_last_order('users.last_sign_in_at', 'DESC')) }
@@ -278,10 +284,16 @@ class Member < ApplicationRecord
Gitlab::Access.sym_options
end
+ def valid_email?(email)
+ Devise.email_regexp.match?(email)
+ end
+
private
def parse_users_list(source, list)
- emails, user_ids, users = [], [], []
+ emails = []
+ user_ids = []
+ users = []
existing_members = {}
list.each do |item|
@@ -299,6 +311,7 @@ class Member < ApplicationRecord
if user_ids.present?
users.concat(User.where(id: user_ids))
+ # the below will automatically discard invalid user_ids
existing_members = source.members_and_requesters.where(user_id: user_ids).index_by(&:user_id)
end