summaryrefslogtreecommitdiffstats
path: root/extensions/TrackingFlags/Extension.pm
diff options
context:
space:
mode:
authorByron Jones <glob@mozilla.com>2015-03-30 18:05:18 +0200
committerByron Jones <glob@mozilla.com>2015-03-30 18:05:18 +0200
commit3e7f7dd04fe614f3642f85bd29d7b67c09cdb488 (patch)
treeaf9365a12f3ee87bbae0124a6062a10f7d295a69 /extensions/TrackingFlags/Extension.pm
parentf45322b31e660ce344cd2859e56f4a2f129eefa5 (diff)
downloadbugzilla-3e7f7dd04fe614f3642f85bd29d7b67c09cdb488.tar.gz
bugzilla-3e7f7dd04fe614f3642f85bd29d7b67c09cdb488.tar.xz
Bug 972040: For bugs filed against Trunk, automatically set 'affected' and 'fixed' release-tracking flags
Diffstat (limited to 'extensions/TrackingFlags/Extension.pm')
-rw-r--r--extensions/TrackingFlags/Extension.pm40
1 files changed, 37 insertions, 3 deletions
diff --git a/extensions/TrackingFlags/Extension.pm b/extensions/TrackingFlags/Extension.pm
index cc2c55334..0c70c54f6 100644
--- a/extensions/TrackingFlags/Extension.pm
+++ b/extensions/TrackingFlags/Extension.pm
@@ -77,9 +77,11 @@ sub template_before_process {
is_active => 1,
});
- $vars->{tracking_flags} = $flags;
- $vars->{tracking_flags_json} = _flags_to_json($flags);
- $vars->{tracking_flag_types} = FLAG_TYPES;
+ $vars->{tracking_flags} = $flags;
+ $vars->{tracking_flags_json} = _flags_to_json($flags);
+ $vars->{tracking_flag_types} = FLAG_TYPES;
+ $vars->{tracking_flag_components} = _flags_to_components($flags, $vars->{product});
+ $vars->{highest_status_firefox} = _get_highest_status_firefox($flags);
}
elsif ($file eq 'bug/edit.html.tmpl'|| $file eq 'bug/show.xml.tmpl'
|| $file eq 'email/bugmail.html.tmpl' || $file eq 'email/bugmail.txt.tmpl')
@@ -140,6 +142,38 @@ sub _flags_to_json {
return encode_json($json);
}
+sub _flags_to_components {
+ my ($flags, $product) = @_;
+
+ # for each component, generate a list of visible tracking flags
+ my $json = {};
+ foreach my $component (@{ $product->components }) {
+ next unless $component->is_active;
+ foreach my $flag (@$flags) {
+ foreach my $visibility (@{ $flag->visibility }) {
+ if ($visibility->product_id == $product->id
+ && (!$visibility->component_id || $visibility->component_id == $component->id))
+ {
+ $json->{$component->name} //= [];
+ push @{ $json->{$component->name} }, $flag->name;
+ }
+ }
+ }
+ }
+ return encode_json($json);
+}
+
+sub _get_highest_status_firefox {
+ my ($flags) = @_;
+
+ my @status_flags =
+ sort { $b <=> $a }
+ map { $_->name =~ /(\d+)$/; $1 }
+ grep { $_->is_active && $_->name =~ /^cf_status_firefox\d/ }
+ @$flags;
+ return @status_flags ? $status_flags[0] : undef;
+}
+
sub db_schema_abstract_schema {
my ($self, $args) = @_;
$args->{'schema'}->{'tracking_flags'} = {