diff --git a/extensions/BugModal/Extension.pm b/extensions/BugModal/Extension.pm
index 9726e23c65..dff8990be6 100644
--- a/extensions/BugModal/Extension.pm
+++ b/extensions/BugModal/Extension.pm
@@ -201,6 +201,14 @@ sub template_before_process {
file => 'bug/edit.html.tmpl', vars => $vars,
});
+ my $tracking_flags = Bugzilla::Extension::TrackingFlags::Flag->match({
+ product => $bug->product,
+ component => $bug->component,
+ bug_id => $bug->id,
+ is_active => 1,
+ });
+ $vars->{tracking_flags} = $tracking_flags;
+
if (any { $bug->product eq $_ } READABLE_BUG_STATUS_PRODUCTS) {
my @flags = map { {name => $_->name, status => $_->status} } @{$bug->flags};
$vars->{readable_bug_status_json} = encode_json({
@@ -212,7 +220,7 @@ sub template_before_process {
status => $bug->bug_status,
flags => \@flags,
target_milestone => $bug->target_milestone,
- map { $_->name => $_->bug_flag($bug->id)->value } @{$vars->{tracking_flags}},
+ map { $_->name => $_->bug_flag($bug->id)->value } @{$tracking_flags},
});
# HTML4 attributes cannot be longer than this, so just skip it in this case.
@@ -273,24 +281,46 @@ sub template_before_process {
# group tracking flags by version to allow for a better tabular output
my @tracking_table;
- my $tracking_flags = $vars->{tracking_flags};
- foreach my $flag (@$tracking_flags) {
- my $flag_type = $flag->flag_type;
- my $type = 'status';
- my $name = $flag->description;
- if ($flag_type eq 'tracking' && $name =~ /^(tracking|status)-(.+)/) {
- ($type, $name) = ($1, $2);
+ foreach my $flag (@{$tracking_flags}) {
+ my $flag_type = $flag->flag_type;
+ my $type = 'status';
+ my $name = $flag->name;
+ my $description = $flag->description;
+ my $value = $flag->bug_flag($bug->id)->value;
+
+ # Use short version of tracking flag description for the UI description
+ if ($flag_type eq 'tracking' && $description =~ /^(tracking|status)-(.+)/) {
+ ($type, $description) = ($1, $2);
}
+ # Only include values that are active and the current user can set
+ my @values = ();
+ foreach my $value (@{$flag->values}) {
+ next if !$value->is_active || !$flag->can_set_value($value->name);
+ push @values, {id => $value->id, name => $value->name};
+ }
+
+ # If we already have a similar description, then add this flag to the same row
+ # in the UI. Otherwise it will be on a different row.
my ($existing)
- = grep { $_->{type} eq $flag_type && $_->{name} eq $name } @tracking_table;
+ = grep { $_->{type} eq $flag_type && $_->{description} eq $description }
+ @tracking_table;
if ($existing) {
- $existing->{$type} = $flag;
+ $existing->{$type} = {name => $name, value => $value, values => \@values};
}
else {
- push @tracking_table, {$type => $flag, name => $name, type => $flag_type,};
+ push @tracking_table,
+ {
+ $type => {name => $name, value => $value, values => \@values},
+ description => $description,
+ type => $flag_type,
+ };
}
}
+
+ # Sort by description
+ @tracking_table
+ = sort { $a->{description} cmp $b->{description} } @tracking_table;
$vars->{tracking_flags_table} = \@tracking_table;
# for the "View -> Hide Treeherder Comments" menu item
diff --git a/extensions/BugModal/template/en/default/bug_modal/header.html.tmpl b/extensions/BugModal/template/en/default/bug_modal/header.html.tmpl
index 5ce82dc481..fbbdb5ea48 100644
--- a/extensions/BugModal/template/en/default/bug_modal/header.html.tmpl
+++ b/extensions/BugModal/template/en/default/bug_modal/header.html.tmpl
@@ -69,13 +69,6 @@
%]
[% javascript = BLOCK %]
- [%# add tracking flags JSON if available %]
- [% IF tracking_flags %]
- [% javascript_urls.push("extensions/TrackingFlags/web/js/flags.js") %]
- var tracking_flags_str = "[% tracking_flags_json FILTER js %]";
- var TrackingFlags = $.parseJSON(tracking_flags_str);
- [% END %]
-
[%# update last-visited %]
[% IF user.id %]
document.addEventListener('DOMContentLoaded', () => show_new_changes_indicator(), { once: true });
diff --git a/extensions/BugModal/template/en/default/bug_modal/tracking_flags.html.tmpl b/extensions/BugModal/template/en/default/bug_modal/tracking_flags.html.tmpl
index 21678f6920..75e90d106e 100644
--- a/extensions/BugModal/template/en/default/bug_modal/tracking_flags.html.tmpl
+++ b/extensions/BugModal/template/en/default/bug_modal/tracking_flags.html.tmpl
@@ -11,19 +11,17 @@
#%]
[%
- flags = [];
- set_flags = [];
- FOREACH flag IN tracking_flags;
- NEXT UNLESS flag.flag_type == type;
- flags.push(flag);
- NEXT IF flag.bug_flag(bug.id).value == "---";
- set_flags.push(flag);
+ RETURN UNLESS tracking_flags_table.size;
+ set_flags = 0;
+ FOREACH row IN tracking_flags_table;
+ NEXT IF (!row.tracking || row.tracking.value == "---")
+ && (!row.status || row.status.value == "---");
+ set_flags = 1;
END;
- RETURN UNLESS flags.size;
%]
[%# view %]
-[% IF set_flags.size %]
+[% IF set_flags %]
[% IF type == "tracking" %]
@@ -34,31 +32,30 @@
[% END %]
[% FOREACH row IN tracking_flags_table %]
- [%
+ [%
NEXT UNLESS row.type == type;
- tracking_value = row.tracking.bug_flag(bug_id).value || "---";
- status_value = row.status.bug_flag(bug_id).value || "---";
- NEXT IF tracking_value == "---" && status_value == "---";
+ NEXT IF (!row.tracking || row.tracking.value == "---")
+ && (!row.status || row.status.value == "---");
%]
- [% row.name FILTER html %] |
+ [% row.description FILTER html %] |
[% IF type == "tracking" %]
- [% IF tracking_value != '---' %]
+ [% IF row.tracking.value != '---' %]
+ &o1=equals&v1=[% row.tracking.value FILTER uri %]">
[% END %]
- [%~ tracking_value FILTER html ~%]
- [% '' IF tracking_value != '---' %]
+ [%~ row.tracking.value FILTER html ~%]
+ [% '' IF row.tracking.value != '---' %]
|
[% END %]
- [% IF status_value != '---' %]
+ [% IF row.status.value != '---' %]
+ &o1=equals&v1=[% row.status.value FILTER uri %]">
[% END %]
- [%~ status_value FILTER html ~%]
- [% '' IF status_value != '---' %]
+ [%~ row.status.value FILTER html ~%]
+ [% '' IF row.status.value != '---' %]
|
[% END %]
@@ -79,7 +76,7 @@
[% FOREACH row IN tracking_flags_table %]
[% NEXT UNLESS row.type == type %]
- [% row.name FILTER html %] |
+ [% row.description FILTER html %] |
[% IF type == "tracking" %]
[% INCLUDE tf_select flag=row.tracking %] |
[% END %]
@@ -94,15 +91,11 @@