diff options
-rw-r--r-- | extensions/BugmailFilter/Extension.pm | 15 | ||||
-rw-r--r-- | extensions/BugmailFilter/lib/Filter.pm | 16 | ||||
-rw-r--r-- | extensions/BugmailFilter/template/en/default/account/prefs/bugmail_filter.html.tmpl | 70 |
3 files changed, 99 insertions, 2 deletions
diff --git a/extensions/BugmailFilter/Extension.pm b/extensions/BugmailFilter/Extension.pm index f645d03ac..ebfc1f851 100644 --- a/extensions/BugmailFilter/Extension.pm +++ b/extensions/BugmailFilter/Extension.pm @@ -49,6 +49,16 @@ sub user_preferences { $params->{field_name} = '~' . $input->{field_contains}; } $params->{relationship} = $input->{relationship} || IS_NULL; + if ($input->{changer}) { + Bugzilla::User::match_field({ changer => { type => 'single'} }); + $params->{changer_id} = Bugzilla::User->check({ + name => $input->{changer}, + cache => 1, + })->id; + } + else { + $params->{changer_id} = IS_NULL; + } if (my $product_name = $input->{product}) { my $product = Bugzilla::Product->check({ name => $product_name, cache => 1 @@ -57,7 +67,7 @@ sub user_preferences { if (my $component_name = $input->{component}) { $params->{component_id} = Bugzilla::Component->check({ - name => $component_name, product => $product, + name => $component_name, product => $product, cache => 1 })->id; } @@ -268,7 +278,7 @@ sub _should_drop { # calculate relationships - my ($user, $bug, $relationship) = @$args{qw( user bug relationship )}; + my ($user, $bug, $relationship, $changer) = @$args{qw( user bug relationship changer )}; my ($user_id, $login) = ($user->id, $user->login); my $bit_direct = Bugzilla::BugMail::BIT_DIRECT; my $bit_watching = Bugzilla::BugMail::BIT_WATCHING; @@ -306,6 +316,7 @@ sub _should_drop { product_id => $bug->product_id, component_id => $bug->component_id, rel_map => \@rel_map, + changer_id => $changer->id, }; foreach my $field (@$fields) { diff --git a/extensions/BugmailFilter/lib/Filter.pm b/extensions/BugmailFilter/lib/Filter.pm index a6e8af459..6246f51d9 100644 --- a/extensions/BugmailFilter/lib/Filter.pm +++ b/extensions/BugmailFilter/lib/Filter.pm @@ -30,6 +30,7 @@ use constant DB_COLUMNS => qw( component_id field_name relationship + changer_id action ); @@ -117,6 +118,17 @@ sub relationship { return $_[0]->{relationship}; } +sub changer_id { + return $_[0]->{changer_id}; +} + +sub changer { + my ($self) = @_; + return $self->{changer_id} + ? Bugzilla::User->new({ id => $self->{changer_id}, cache => 1 }) + : undef; +} + sub relationship_name { my ($self) = @_; foreach my $rel (@{ FILTER_RELATIONSHIPS() }) { @@ -190,6 +202,10 @@ sub matches { return 0; } + if ($self->{changer_id} && $self->{changer_id} != $args->{changer_id}) { + return 0; + } + return 1; } diff --git a/extensions/BugmailFilter/template/en/default/account/prefs/bugmail_filter.html.tmpl b/extensions/BugmailFilter/template/en/default/account/prefs/bugmail_filter.html.tmpl index 43d18f516..e7e0ed749 100644 --- a/extensions/BugmailFilter/template/en/default/account/prefs/bugmail_filter.html.tmpl +++ b/extensions/BugmailFilter/template/en/default/account/prefs/bugmail_filter.html.tmpl @@ -109,6 +109,20 @@ var cpts = new Array(); </td> </tr> <tr> + <th>Changer:</th> + <td> + [% INCLUDE global/userselect.html.tmpl + id => "changer" + name => "changer" + size => 32 + emptyok => 1 + %] + </td> + <td class="blurb"> + the person who made the change (leave empty for "anyone") + </td> +</tr> +<tr> <th>Action:</th> <td> <select name="action" id="action"> @@ -141,6 +155,7 @@ var cpts = new Array(); <th>Component</th> <th>Field</th> <th>Relationship</th> + <th>Changer</th> <th>Action</th> </tr> [% FOREACH filter = filters %] @@ -153,6 +168,15 @@ var cpts = new Array(); <td>[% filter.component ? filter.component.name : 'Any' FILTER html %]</td> <td>[% filter.field_description FILTER html %]</td> <td>[% filter.relationship ? filter.relationship_name : 'Any' FILTER html %]</td> + <td> + [% IF filter.changer %] + <span title="[% filter.changer.name FILTER html %]"> + [% filter.changer.login FILTER html %] + </span> + [% ELSE %] + Anyone + [% END %] + </td> <td>[% filter.action ? 'Exclude' : 'Include' %]</td> </tr> [% END %] @@ -235,6 +259,40 @@ var cpts = new Array(); <td>Not Assignee</td> </tr> <tr> + <th>Changer:</th> + <td>(empty)</td> + </tr> + <tr> + <th>Action:</th> + <td>Exclude</td> + </tr> +</table> + +<p> + To never receive email for any change made by webops-kanban@mozilla.bugs: +</p> +<table class="example_filter_table"> + <tr> + <th>Field:</th> + <td>__Any__</td> + </tr> + <tr> + <th>Product:</th> + <td>__Any__</td> + </tr> + <tr> + <th>Component:</th> + <td>__Any__</td> + </tr> + <tr> + <th>Relationship:</th> + <td>__Any__</td> + </tr> + <tr> + <th>Changer:</th> + <td>webops-kanban@mozilla.bugs</td> + </tr> + <tr> <th>Action:</th> <td>Exclude</td> </tr> @@ -264,6 +322,10 @@ var cpts = new Array(); <td>__Any__</td> </tr> <tr> + <th>Changer:</th> + <td>(empty)</td> + </tr> + <tr> <th>Action:</th> <td>Exclude</td> </tr> @@ -290,6 +352,10 @@ var cpts = new Array(); <td>__Any__</td> </tr> <tr> + <th>Changer:</th> + <td>(empty)</td> + </tr> + <tr> <th>Action:</th> <td>Include</td> </tr> @@ -316,6 +382,10 @@ var cpts = new Array(); <td>__Any__</td> </tr> <tr> + <th>Changer:</th> + <td>(empty)</td> + </tr> + <tr> <th>Action:</th> <td>Include</td> </tr> |