diff options
author | Byron Jones <glob@mozilla.com> | 2015-03-30 18:05:18 +0200 |
---|---|---|
committer | Byron Jones <glob@mozilla.com> | 2015-03-30 18:05:18 +0200 |
commit | 3e7f7dd04fe614f3642f85bd29d7b67c09cdb488 (patch) | |
tree | af9365a12f3ee87bbae0124a6062a10f7d295a69 /extensions/TrackingFlags/Extension.pm | |
parent | f45322b31e660ce344cd2859e56f4a2f129eefa5 (diff) | |
download | bugzilla-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.pm | 40 |
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'} = { |