summaryrefslogtreecommitdiff
path: root/app/services/members/create_service.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/members/create_service.rb')
-rw-r--r--app/services/members/create_service.rb22
1 files changed, 22 insertions, 0 deletions
diff --git a/app/services/members/create_service.rb b/app/services/members/create_service.rb
index 7b81cc27635..5d3c4a5c54a 100644
--- a/app/services/members/create_service.rb
+++ b/app/services/members/create_service.rb
@@ -16,6 +16,7 @@ module Members
end
def execute
+ validate_invite_source!
validate_invites!
add_members
@@ -33,6 +34,10 @@ module Members
params[:user_ids]
end
+ def validate_invite_source!
+ raise ArgumentError, s_('AddMember|No invite source provided.') unless invite_source.present?
+ end
+
def validate_invites!
raise BlankInvitesError, blank_invites_message if invites.blank?
@@ -72,6 +77,23 @@ module Members
errors << "#{prefix}#{member.errors.full_messages.to_sentence}"
end
+ def after_execute(member:)
+ super
+
+ Gitlab::Tracking.event(self.class.name, 'create_member', label: invite_source, property: tracking_property(member), user: current_user)
+ end
+
+ def invite_source
+ params[:invite_source]
+ end
+
+ def tracking_property(member)
+ # ideally invites go down the invite service class instead, but there is nothing that limits an invite
+ # from being used in this class and if you send emails as a comma separated list to the api/members
+ # endpoint, it will support invites
+ member.invite? ? 'net_new_user' : 'existing_user'
+ end
+
def user_limit
limit = params.fetch(:limit, DEFAULT_INVITE_LIMIT)