diff options
Diffstat (limited to 'app/models/member.rb')
-rw-r--r-- | app/models/member.rb | 15 |
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 |