diff options
-rw-r--r-- | Bugzilla/BugMail.pm | 21 | ||||
-rw-r--r-- | Bugzilla/Config/MTA.pm | 8 | ||||
-rw-r--r-- | Bugzilla/Constants.pm | 5 | ||||
-rw-r--r-- | Bugzilla/User.pm | 3 | ||||
-rw-r--r-- | docs/xml/administration.xml | 15 | ||||
-rwxr-xr-x | editparams.cgi | 10 | ||||
-rw-r--r-- | template/en/default/admin/params/mta.html.tmpl | 5 | ||||
-rw-r--r-- | template/en/default/email/newchangedmail.txt.tmpl | 2 |
8 files changed, 59 insertions, 10 deletions
diff --git a/Bugzilla/BugMail.pm b/Bugzilla/BugMail.pm index f5ad7c095..9a83b1cd3 100644 --- a/Bugzilla/BugMail.pm +++ b/Bugzilla/BugMail.pm @@ -50,11 +50,12 @@ use constant BIT_WATCHING => 2; # We need these strings for the X-Bugzilla-Reasons header # Note: this hash uses "," rather than "=>" to avoid auto-quoting of the LHS. use constant REL_NAMES => { - REL_ASSIGNEE, "AssignedTo", - REL_REPORTER, "Reporter", - REL_QA , "QAcontact", - REL_CC , "CC", - REL_VOTER , "Voter" + REL_ASSIGNEE , "AssignedTo", + REL_REPORTER , "Reporter", + REL_QA , "QAcontact", + REL_CC , "CC", + REL_VOTER , "Voter", + REL_GLOBAL_WATCHER, "GlobalWatcher" }; sub FormatTriple { @@ -392,7 +393,15 @@ sub Send { push (@{$watching{$watch->[0]}}, $watch->[1]); } } - + + # Global watcher + my @watchers = split(/[,\s]+/, Bugzilla->params->{'globalwatchers'}); + foreach (@watchers) { + my $watcher_id = login_to_id($_); + next unless $watcher_id; + $recipients{$watcher_id}->{+REL_GLOBAL_WATCHER} = BIT_DIRECT; + } + # We now have a complete set of all the users, and their relationships to # the bug in question. However, we are not necessarily going to mail them # all - there are preferences, permissions checks and all sorts to do yet. diff --git a/Bugzilla/Config/MTA.pm b/Bugzilla/Config/MTA.pm index a9bc4619c..27d03462a 100644 --- a/Bugzilla/Config/MTA.pm +++ b/Bugzilla/Config/MTA.pm @@ -72,7 +72,13 @@ sub get_param_list { type => 't', default => 7, checker => \&check_numeric - } ); + }, + + { + name => 'globalwatchers', + type => 't', + default => '', + }, ); return @param_list; } diff --git a/Bugzilla/Constants.pm b/Bugzilla/Constants.pm index 9c2cf77b4..ec1467136 100644 --- a/Bugzilla/Constants.pm +++ b/Bugzilla/Constants.pm @@ -85,7 +85,7 @@ use File::Basename; THROW_ERROR RELATIONSHIPS - REL_ASSIGNEE REL_QA REL_REPORTER REL_CC REL_VOTER + REL_ASSIGNEE REL_QA REL_REPORTER REL_CC REL_VOTER REL_GLOBAL_WATCHER REL_ANY POS_EVENTS @@ -244,9 +244,10 @@ use constant REL_QA => 1; use constant REL_REPORTER => 2; use constant REL_CC => 3; use constant REL_VOTER => 4; +use constant REL_GLOBAL_WATCHER => 5; use constant RELATIONSHIPS => REL_ASSIGNEE, REL_QA, REL_REPORTER, REL_CC, - REL_VOTER; + REL_VOTER, REL_GLOBAL_WATCHER; # Used for global events like EVT_FLAG_REQUESTED use constant REL_ANY => 100; diff --git a/Bugzilla/User.pm b/Bugzilla/User.pm index ff61034dd..3c18f1908 100644 --- a/Bugzilla/User.pm +++ b/Bugzilla/User.pm @@ -1460,6 +1460,9 @@ sub wants_mail { # No mail if there are no events return 0 if !scalar(@$events); + + # Skip DB query if relationship is explicit + return 1 if $relationship == REL_GLOBAL_WATCHER; my $dbh = Bugzilla->dbh; diff --git a/docs/xml/administration.xml b/docs/xml/administration.xml index 17ffacc44..f22523026 100644 --- a/docs/xml/administration.xml +++ b/docs/xml/administration.xml @@ -198,6 +198,21 @@ <varlistentry> <term> + globalwatcher + </term> + <listitem> + <para> + This allows to define specific users that will + receive notification each time a new bug in entered, or when + an existing bug changes, according to the normal groupset + permissions. It may be useful for sending notifications to a + mailing-list, for instance. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term> usestatuswhiteboard </term> <listitem> diff --git a/editparams.cgi b/editparams.cgi index cbce6405f..80b458d90 100755 --- a/editparams.cgi +++ b/editparams.cgi @@ -32,6 +32,7 @@ use Bugzilla::Config::Common; use Bugzilla::Util; use Bugzilla::Error; use Bugzilla::Token; +use Bugzilla::User; my $user = Bugzilla->login(LOGIN_REQUIRED); my $cgi = Bugzilla->cgi; @@ -116,6 +117,15 @@ if ($action eq 'save' && $current_module) { if ($ok ne "") { ThrowUserError('invalid_parameter', { name => $name, err => $ok }); } + } elsif ($name eq 'globalwatchers') { + # can't check this as others, as Bugzilla::Config::Common + # can not use Bugzilla::User + foreach my $watcher (split(/[,\s]+/, $value)) { + ThrowUserError( + 'invalid_parameter', + { name => $name, err => "no such user $watcher" } + ) unless login_to_id($watcher); + } } push(@changes, $name); SetParam($name, $value); diff --git a/template/en/default/admin/params/mta.html.tmpl b/template/en/default/admin/params/mta.html.tmpl index 224d21544..778f81d0a 100644 --- a/template/en/default/admin/params/mta.html.tmpl +++ b/template/en/default/admin/params/mta.html.tmpl @@ -58,6 +58,9 @@ whinedays => "The number of days that we'll let a $terms.bug sit untouched in a NEW " _ "state before our cronjob will whine at the owner.<br> " _ - "Set to 0 to disable whining." } + "Set to 0 to disable whining.", + + globalwatchers => "A comma-separated list of users who should receive a " _ + "copy of every notification mail the system sends." } %] diff --git a/template/en/default/email/newchangedmail.txt.tmpl b/template/en/default/email/newchangedmail.txt.tmpl index ad7d564b4..d9962496b 100644 --- a/template/en/default/email/newchangedmail.txt.tmpl +++ b/template/en/default/email/newchangedmail.txt.tmpl @@ -57,6 +57,8 @@ You are the QA contact for the [% terms.bug %]. You are on the CC list for the [% terms.bug %]. [% CASE constants.REL_VOTER %] You are a voter for the [% terms.bug %]. + [% CASE constants.REL_GLOBAL_WATCHER %] +You are watching all [% terms.bug %] changes. [% END %] [% END %] [% FOREACH relationship = reasons_watch %] |