From: Max Kanat-Alexander Date: Thu, 11 Feb 2010 20:12:48 +0000 (-0800) Subject: Bug 545683: New Hook: bugmail_recipients X-Git-Tag: bugzilla-3.6rc1~52 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=99e24464dbc0cd3eeca5cba00c4ece088013b69c;p=thirdparty%2Fbugzilla.git Bug 545683: New Hook: bugmail_recipients r=mkanat, a=mkanat (module owner) --- diff --git a/Bugzilla/BugMail.pm b/Bugzilla/BugMail.pm index f7af921ebc..20336b1d99 100644 --- a/Bugzilla/BugMail.pm +++ b/Bugzilla/BugMail.pm @@ -42,6 +42,7 @@ use Bugzilla::Product; use Bugzilla::Component; use Bugzilla::Status; use Bugzilla::Mailer; +use Bugzilla::Hook; use Date::Parse; use Date::Format; @@ -418,6 +419,9 @@ sub Send { } } } + + Bugzilla::Hook::process('bugmail_recipients', + { bug => $bug, recipients => \%recipients }); # Find all those user-watching anyone on the current list, who is not # on it already themselves. diff --git a/Bugzilla/Hook.pm b/Bugzilla/Hook.pm index 13e435e86e..2b9341ab43 100644 --- a/Bugzilla/Hook.pm +++ b/Bugzilla/Hook.pm @@ -354,6 +354,48 @@ The definition is structured as: =back +=head2 bugmail_recipients + +This allows you to modify the list of users who are going to be receiving +a particular bugmail. It also allows you to specify why they are receiving +the bugmail. + +Users' bugmail preferences will be applied to any users that you add +to the list. (So, for example, if you add somebody as though they were +a CC on the bug, and their preferences state that they don't get email +when they are a CC, they won't get email.) + +This hook is called before watchers or globalwatchers are added to the +recipient list. + +Params: + +=over + +=item C + +The L that bugmail is being sent about. + +=item C + +This is a hashref. The keys are numeric user ids from the C +table in the database, for each user who should be receiving this bugmail. +The values are hashrefs. The keys in I hashrefs correspond to +the "relationship" that the user has to the bug they're being emailed +about, and the value should always be C<1>. The "relationships" +are described by the various C constants in L. + +Here's an example of adding userid C<123> to the recipient list +as though he were on the CC list: + + $recipients->{123}->{+REL_CC} = 1 + +(We use C<+> in front of C so that Perl interprets it as a constant +instead of as a string.) + +=back + + =head2 colchange_columns This happens in F right after the list of possible display diff --git a/extensions/Example/Extension.pm b/extensions/Example/Extension.pm index 1a483ad536..8ce2ece6ac 100644 --- a/extensions/Example/Extension.pm +++ b/extensions/Example/Extension.pm @@ -188,6 +188,18 @@ sub buglist_columns { $columns->{'example'} = { 'name' => 'bugs.delta_ts' , 'title' => 'Example' }; } +sub bugmail_recipients { + my ($self, $args) = @_; + my $recipients = $args->{recipients}; + my $bug = $args->{bug}; + if ($bug->id == 1) { + # Uncomment the line below to add the second user in the Bugzilla + # database to the recipients list of every bugmail sent out about + # bug 1 as though that user were on the CC list. + #$recipients->{2}->{+REL_CC} = 1; + } +} + sub colchange_columns { my ($self, $args) = @_;