summaryrefslogtreecommitdiffstats
path: root/extensions/TrackingFlags/Extension.pm
diff options
context:
space:
mode:
authorByron Jones <glob@mozilla.com>2014-07-22 09:23:21 +0200
committerByron Jones <glob@mozilla.com>2014-07-22 09:23:21 +0200
commitbff9f8e135cdf6e72228d7502cf160b3bdd9bde4 (patch)
treeda82f0b3b2b4e3d44b4c4bf00be9f07854f15717 /extensions/TrackingFlags/Extension.pm
parent235190a76c418d89f808f48d174bdcde5add4073 (diff)
downloadbugzilla-bff9f8e135cdf6e72228d7502cf160b3bdd9bde4.tar.gz
bugzilla-bff9f8e135cdf6e72228d7502cf160b3bdd9bde4.tar.xz
Bug 713307: Please add FlagTypeComments for tracking/approval flags
Diffstat (limited to 'extensions/TrackingFlags/Extension.pm')
-rw-r--r--extensions/TrackingFlags/Extension.pm44
1 files changed, 41 insertions, 3 deletions
diff --git a/extensions/TrackingFlags/Extension.pm b/extensions/TrackingFlags/Extension.pm
index dd852e472..b107c0393 100644
--- a/extensions/TrackingFlags/Extension.pm
+++ b/extensions/TrackingFlags/Extension.pm
@@ -25,6 +25,8 @@ use Bugzilla::Field;
use Bugzilla::Install::Filesystem;
use Bugzilla::Product;
+use JSON;
+
our $VERSION = '1';
BEGIN {
@@ -66,13 +68,15 @@ sub template_before_process {
if ($file eq 'bug/create/create.html.tmpl'
|| $file eq 'bug/create/create-winqual.html.tmpl')
{
- $vars->{'tracking_flags'} = Bugzilla::Extension::TrackingFlags::Flag->match({
+ my $flags = Bugzilla::Extension::TrackingFlags::Flag->match({
product => $vars->{'product'}->name,
enter_bug => 1,
is_active => 1,
});
- $vars->{'tracking_flag_types'} = FLAG_TYPES;
+ $vars->{tracking_flags} = $flags;
+ $vars->{tracking_flags_json} = _flags_to_json($flags);
+ $vars->{tracking_flag_types} = FLAG_TYPES;
}
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')
@@ -81,12 +85,15 @@ sub template_before_process {
my $bug = exists $vars->{'bugs'} ? $vars->{'bugs'}[0] : $vars->{'bug'};
if ($bug && !$bug->{error}) {
- $vars->{'tracking_flags'} = Bugzilla::Extension::TrackingFlags::Flag->match({
+ my $flags = Bugzilla::Extension::TrackingFlags::Flag->match({
product => $bug->product,
component => $bug->component,
bug_id => $bug->id,
is_active => 1,
});
+
+ $vars->{tracking_flags} = $flags;
+ $vars->{tracking_flags_json} = _flags_to_json($flags);
}
$vars->{'tracking_flag_types'} = FLAG_TYPES;
@@ -99,6 +106,37 @@ sub template_before_process {
}
}
+sub _flags_to_json {
+ my ($flags) = @_;
+
+ my $json = {
+ flags => {},
+ types => [],
+ comments => {},
+ };
+
+ my %type_map = map { $_->{name} => $_ } @{ FLAG_TYPES() };
+ foreach my $flag (@$flags) {
+ my $flag_type = $flag->flag_type;
+
+ $json->{flags}->{$flag_type}->{$flag->name} = $flag->bug_flag->value;
+
+ if ($type_map{$flag_type}->{collapsed}
+ && !grep { $_ eq $flag_type } @{ $json->{types} })
+ {
+ push @{ $json->{types} }, $flag_type;
+ }
+
+ foreach my $value (@{ $flag->values }) {
+ if (defined($value->comment) && $value->comment ne '') {
+ $json->{comments}->{$flag->name}->{$value->value} = $value->comment;
+ }
+ }
+ }
+
+ return encode_json($json);
+}
+
sub db_schema_abstract_schema {
my ($self, $args) = @_;
$args->{'schema'}->{'tracking_flags'} = {