Skip to content

Bug 1446236 - BugmailFilter: Divorce from TrackingFlags extension #34

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 34 additions & 27 deletions extensions/BugmailFilter/Extension.pm
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ use Bugzilla::Product;
use Bugzilla::User;
use Bugzilla::Util qw(template_var);
use Encode;
use List::MoreUtils qw(uniq);
use List::MoreUtils qw(any uniq);
use Sys::Syslog qw(:DEFAULT);

#
Expand Down Expand Up @@ -124,10 +124,13 @@ sub user_preferences {
delete $fields{$field};
}

# remove all tracking flag fields. these change too frequently to be of
# value, so they only add noise to the list.
foreach my $field (Bugzilla->tracking_flag_names) {
delete $fields{$field};
# remove all tracking flag fields (from the TrackingFlags extension).
# these change too frequently to be of value,
# so they only add noise to the list.
if (Bugzilla->has_extension('TrackingFlags')) {
foreach my $field (Bugzilla->tracking_flag_names) {
delete $fields{$field};
}
}

# add tracking flag types instead
Expand Down Expand Up @@ -182,22 +185,24 @@ sub user_preferences {
}

# build a list of tracking-flags, grouped by type
require Bugzilla::Extension::TrackingFlags::Constants;
require Bugzilla::Extension::TrackingFlags::Flag;
my %flag_types = map { $_->{name} => $_->{description} }
@{Bugzilla::Extension::TrackingFlags::Constants::FLAG_TYPES()};
my %tracking_flags_by_type;
foreach my $flag (Bugzilla::Extension::TrackingFlags::Flag->get_all) {
my $type = $flag_types{$flag->flag_type};
$tracking_flags_by_type{$type} //= [];
push @{$tracking_flags_by_type{$type}}, $flag;
}
my @tracking_flags_by_type;
foreach my $type (sort keys %tracking_flags_by_type) {
push @tracking_flags_by_type,
{name => $type, flags => $tracking_flags_by_type{$type},};
if (Bugzilla->has_extension('TrackingFlags')) {
require Bugzilla::Extension::TrackingFlags::Constants;
require Bugzilla::Extension::TrackingFlags::Flag;
my %flag_types = map { $_->{name} => $_->{description} }
@{Bugzilla::Extension::TrackingFlags::Constants::FLAG_TYPES()};
my %tracking_flags_by_type;
foreach my $flag (Bugzilla::Extension::TrackingFlags::Flag->get_all) {
my $type = $flag_types{$flag->flag_type};
$tracking_flags_by_type{$type} //= [];
push @{$tracking_flags_by_type{$type}}, $flag;
}
my @tracking_flags_by_type;
foreach my $type (sort keys %tracking_flags_by_type) {
push @tracking_flags_by_type,
{name => $type, flags => $tracking_flags_by_type{$type},};
}
$vars->{tracking_flags_by_type} = \@tracking_flags_by_type;
}
$vars->{tracking_flags_by_type} = \@tracking_flags_by_type;

${$args->{handled}} = 1;
}
Expand Down Expand Up @@ -287,13 +292,15 @@ sub user_wants_mail {
}

# set filter_field on tracking flags to tracking.$type
require Bugzilla::Extension::TrackingFlags::Flag;
my @tracking_flags = Bugzilla->tracking_flags;
foreach my $field (@$fields) {
next unless my $field_name = $field->{field_name};
foreach my $tracking_flag (@tracking_flags) {
if ($field_name eq $tracking_flag->name) {
$field->{filter_field} = 'tracking.' . $tracking_flag->flag_type;
if (Bugzilla->has_extension('TrackingFlags')) {
require Bugzilla::Extension::TrackingFlags::Flag;
my @tracking_flags = Bugzilla->tracking_flags;
foreach my $field (@$fields) {
next unless my $field_name = $field->{field_name};
foreach my $tracking_flag (@tracking_flags) {
if ($field_name eq $tracking_flag->name) {
$field->{filter_field} = 'tracking.' . $tracking_flag->flag_type;
}
}
}
}
Expand Down
23 changes: 13 additions & 10 deletions extensions/BugmailFilter/lib/FakeField.pm
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ use strict;
use warnings;

use Bugzilla::Extension::BugmailFilter::Constants;
use List::MoreUtils qw(any);

# object

Expand Down Expand Up @@ -40,17 +41,19 @@ sub fake_fields {
sub tracking_flag_fields {
my $cache = Bugzilla->request_cache->{bugmail_filter};
if (!$cache->{tracking_flag_fields}) {
require Bugzilla::Extension::TrackingFlags::Constants;
my @fields;
my $tracking_types
= Bugzilla::Extension::TrackingFlags::Constants::FLAG_TYPES();
foreach my $tracking_type (@$tracking_types) {
push @fields,
Bugzilla::Extension::BugmailFilter::FakeField->new({
name => 'tracking.' . $tracking_type->{name},
description => $tracking_type->{description},
sortkey => $tracking_type->{sortkey},
});
if (Bugzilla->has_extension('TrackingFlags')) {
require Bugzilla::Extension::TrackingFlags::Constants;
my $tracking_types
= Bugzilla::Extension::TrackingFlags::Constants::FLAG_TYPES();
foreach my $tracking_type (@$tracking_types) {
push @fields,
Bugzilla::Extension::BugmailFilter::FakeField->new({
name => 'tracking.' . $tracking_type->{name},
description => $tracking_type->{description},
sortkey => $tracking_type->{sortkey},
});
}
}
$cache->{tracking_flag_fields} = \@fields;
}
Expand Down