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 == "---"); %] - + [% IF type == "tracking" %] [% END %] [% END %] @@ -79,7 +76,7 @@ [% FOREACH row IN tracking_flags_table %] [% NEXT UNLESS row.type == type %] - + [% IF type == "tracking" %] [% END %] @@ -94,15 +91,11 @@
[% row.name FILTER html %][% row.description FILTER html %] - [% 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 != '---' %] - [% 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 != '---' %]
[% row.name FILTER html %][% row.description FILTER html %][% INCLUDE tf_select flag=row.tracking %]