summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2018-12-06 14:16:26 +0100
committerYorick Peterse <yorickpeterse@gmail.com>2018-12-06 14:54:26 +0100
commit2da1cc6689db29296e22a61b73cdb8c7efd583a6 (patch)
tree0c7c4d6415aa3a438b1f34e6136ec8de7e27685f
parent6caaca1d3cbb0b65993795fb1059c19e7b04b421 (diff)
downloadgitlab-ce-refactor-member-skip-notification.tar.gz
Allow EE to opt out of member notificationsrefactor-member-skip-notification
EE wants to disable certain notifications in the GroupMember and ProjectMember models. To do so, it defines the "skip_notification" accessor on the Member model and uses this variable in a variety of places. This however will result in merge conflicts any time CE changes these lines. To resolve this, we add `Member#skip_notification?` and use this in the places where EE expects it to be. By default this method just returns `false`, so the CE behaviour remains the same while allowing EE to easily redefine it.
-rw-r--r--app/models/member.rb7
-rw-r--r--app/models/members/group_member.rb14
-rw-r--r--app/models/members/project_member.rb15
3 files changed, 26 insertions, 10 deletions
diff --git a/app/models/member.rb b/app/models/member.rb
index 9fc95ea00c3..2457eb2e1e6 100644
--- a/app/models/member.rb
+++ b/app/models/member.rb
@@ -449,4 +449,11 @@ class Member < ActiveRecord::Base
errors.add(:access_level, s_("should be higher than %{access} inherited membership from group %{group_name}") % error_parameters)
end
end
+
+ def skip_notification?
+ # In EE we want to disable the sending of notifications in certain
+ # scenarios. To allow this, we define this method in CE so EE can easily
+ # redefine it according to its needs.
+ false
+ end
end
diff --git a/app/models/members/group_member.rb b/app/models/members/group_member.rb
index fc49ee7ac8c..83cea8798db 100644
--- a/app/models/members/group_member.rb
+++ b/app/models/members/group_member.rb
@@ -39,19 +39,23 @@ class GroupMember < Member
private
def send_invite
- run_after_commit_or_now { notification_service.invite_group_member(self, @raw_invite_token) }
+ unless skip_notification?
+ run_after_commit_or_now { notification_service.invite_group_member(self, @raw_invite_token) }
+ end
super
end
def post_create_hook
- run_after_commit_or_now { notification_service.new_group_member(self) }
+ unless skip_notification?
+ run_after_commit_or_now { notification_service.new_group_member(self) }
+ end
super
end
def post_update_hook
- if access_level_changed?
+ if access_level_changed? && !skip_notification?
run_after_commit { notification_service.update_group_member(self) }
end
@@ -59,13 +63,13 @@ class GroupMember < Member
end
def after_accept_invite
- notification_service.accept_group_invite(self)
+ notification_service.accept_group_invite(self) unless skip_notification?
super
end
def after_decline_invite
- notification_service.decline_group_invite(self)
+ notification_service.decline_group_invite(self) unless skip_notification?
super
end
diff --git a/app/models/members/project_member.rb b/app/models/members/project_member.rb
index 537f2a3a231..d7125e8475a 100644
--- a/app/models/members/project_member.rb
+++ b/app/models/members/project_member.rb
@@ -94,7 +94,9 @@ class ProjectMember < Member
private
def send_invite
- run_after_commit_or_now { notification_service.invite_project_member(self, @raw_invite_token) }
+ unless skip_notification?
+ run_after_commit_or_now { notification_service.invite_project_member(self, @raw_invite_token) }
+ end
super
end
@@ -102,14 +104,17 @@ class ProjectMember < Member
def post_create_hook
unless owner?
event_service.join_project(self.project, self.user)
- run_after_commit_or_now { notification_service.new_project_member(self) }
+
+ unless skip_notification?
+ run_after_commit_or_now { notification_service.new_project_member(self) }
+ end
end
super
end
def post_update_hook
- if access_level_changed?
+ if access_level_changed? && !skip_notification?
run_after_commit { notification_service.update_project_member(self) }
end
@@ -127,13 +132,13 @@ class ProjectMember < Member
end
def after_accept_invite
- notification_service.accept_project_invite(self)
+ notification_service.accept_project_invite(self) unless skip_notification?
super
end
def after_decline_invite
- notification_service.decline_project_invite(self)
+ notification_service.decline_project_invite(self) unless skip_notification?
super
end