From 2da1cc6689db29296e22a61b73cdb8c7efd583a6 Mon Sep 17 00:00:00 2001 From: Yorick Peterse Date: Thu, 6 Dec 2018 14:16:26 +0100 Subject: Allow EE to opt out of member notifications 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. --- app/models/member.rb | 7 +++++++ app/models/members/group_member.rb | 14 +++++++++----- 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 -- cgit v1.2.1