diff options
author | Yorick Peterse <yorickpeterse@gmail.com> | 2018-12-06 14:16:26 +0100 |
---|---|---|
committer | Yorick Peterse <yorickpeterse@gmail.com> | 2018-12-06 14:54:26 +0100 |
commit | 2da1cc6689db29296e22a61b73cdb8c7efd583a6 (patch) | |
tree | 0c7c4d6415aa3a438b1f34e6136ec8de7e27685f | |
parent | 6caaca1d3cbb0b65993795fb1059c19e7b04b421 (diff) | |
download | gitlab-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.rb | 7 | ||||
-rw-r--r-- | app/models/members/group_member.rb | 14 | ||||
-rw-r--r-- | app/models/members/project_member.rb | 15 |
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 |