summaryrefslogtreecommitdiffstats
path: root/extensions/TrackingFlags/lib/Admin.pm
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/TrackingFlags/lib/Admin.pm')
-rw-r--r--extensions/TrackingFlags/lib/Admin.pm721
1 files changed, 376 insertions, 345 deletions
diff --git a/extensions/TrackingFlags/lib/Admin.pm b/extensions/TrackingFlags/lib/Admin.pm
index 50a0e0a61..e6ff9a31a 100644
--- a/extensions/TrackingFlags/lib/Admin.pm
+++ b/extensions/TrackingFlags/lib/Admin.pm
@@ -30,8 +30,8 @@ use Scalar::Util qw(blessed);
use base qw(Exporter);
our @EXPORT = qw(
- admin_list
- admin_edit
+ admin_list
+ admin_edit
);
#
@@ -39,177 +39,189 @@ our @EXPORT = qw(
#
sub admin_list {
- my ($vars) = @_;
- $vars->{show_bug_counts} = Bugzilla->input_params->{show_bug_counts};
- $vars->{flags} = [ Bugzilla::Extension::TrackingFlags::Flag->get_all() ];
+ my ($vars) = @_;
+ $vars->{show_bug_counts} = Bugzilla->input_params->{show_bug_counts};
+ $vars->{flags} = [Bugzilla::Extension::TrackingFlags::Flag->get_all()];
}
sub admin_edit {
- my ($vars, $page) = @_;
- my $input = Bugzilla->input_params;
-
- $vars->{groups} = _groups_to_json();
- $vars->{mode} = $input->{mode} || 'new';
- $vars->{flag_id} = $input->{flag_id} || 0;
- $vars->{tracking_flag_types} = FLAG_TYPES;
-
- if ($input->{delete}) {
- my $token = $input->{token};
- check_hash_token($token, ['tracking_flags_edit']);
- delete_token($token);
-
- my $flag = Bugzilla::Extension::TrackingFlags::Flag->new($vars->{flag_id})
- || ThrowCodeError('tracking_flags_invalid_item_id', { item => 'flag', id => $vars->{flag_id} });
- $flag->remove_from_db();
-
- $vars->{message} = 'tracking_flag_deleted';
- $vars->{flag} = $flag;
- $vars->{flags} = [ Bugzilla::Extension::TrackingFlags::Flag->get_all() ];
-
- print Bugzilla->cgi->header;
- my $template = Bugzilla->template;
- $template->process('pages/tracking_flags_admin_list.html.tmpl', $vars)
- || ThrowTemplateError($template->error());
- exit;
-
- } elsif ($input->{save}) {
- my $token = $input->{token};
- check_hash_token($token, ['tracking_flags_edit']);
- delete_token($token);
-
- my ($flag, $values, $visibilities) = _load_from_input($input, $vars);
- _validate($flag, $values, $visibilities);
- my $flag_obj = _update_db($flag, $values, $visibilities);
-
- $vars->{flag} = $flag_obj;
- $vars->{values} = _flag_values_to_json($values);
- $vars->{visibility} = _flag_visibility_to_json($visibilities);
-
- if ($vars->{mode} eq 'new') {
- $vars->{message} = 'tracking_flag_created';
- } else {
- $vars->{message} = 'tracking_flag_updated';
- }
- $vars->{mode} = 'edit';
-
- } else {
- # initial load
-
- if ($vars->{mode} eq 'edit') {
- # edit - straight load
- my $flag = Bugzilla::Extension::TrackingFlags::Flag->new($vars->{flag_id})
- || ThrowCodeError('tracking_flags_invalid_item_id', { item => 'flag', id => $vars->{flag_id} });
- $vars->{flag} = $flag;
- $vars->{values} = _flag_values_to_json($flag->values);
- $vars->{visibility} = _flag_visibility_to_json($flag->visibility);
- $vars->{can_delete} = !$flag->bug_count;
-
- } elsif ($vars->{mode} eq 'copy') {
- # copy - load the source flag
- $vars->{mode} = 'new';
- my $flag = Bugzilla::Extension::TrackingFlags::Flag->new($input->{copy_from})
- || ThrowCodeError('tracking_flags_invalid_item_id', { item => 'flag', id => $vars->{copy_from} });
-
- # increment the number at the end of the name and description
- if ($flag->name =~ /^(\D+)(\d+)$/) {
- $flag->set_name("$1" . ($2 + 1));
- }
- if ($flag->description =~ /^(\D+)([\d\.]+)$/) {
- my $description = $1;
- my $version = $2;
- if ($version =~ /\./) {
- my ($major, $minor) = split(/\./, $version);
- $minor++;
- $version = "$major.$minor";
- }
- else {
- $version++;
- }
- $flag->set_description($description . $version);
- }
- $flag->set_sortkey(_next_unique_sortkey($flag->sortkey));
- $flag->set_type($flag->flag_type);
- $flag->set_enter_bug($flag->enter_bug);
- # always default new flags as active, even when copying an inactive one
- $flag->set_is_active(1);
-
- $vars->{flag} = $flag;
- $vars->{values} = _flag_values_to_json($flag->values, 1);
- $vars->{visibility} = _flag_visibility_to_json($flag->visibility, 1);
- $vars->{can_delete} = 0;
-
- } else {
- $vars->{mode} = 'new';
- $vars->{flag} = {
- sortkey => 0,
- enter_bug => 1,
- is_active => 1,
- };
- $vars->{values} = _flag_values_to_json([
- {
- id => 0,
- value => '---',
- setter_group_id => '',
- is_active => 1,
- comment => '',
- },
- ]);
- $vars->{visibility} = '';
- $vars->{can_delete} = 0;
- }
+ my ($vars, $page) = @_;
+ my $input = Bugzilla->input_params;
+
+ $vars->{groups} = _groups_to_json();
+ $vars->{mode} = $input->{mode} || 'new';
+ $vars->{flag_id} = $input->{flag_id} || 0;
+ $vars->{tracking_flag_types} = FLAG_TYPES;
+
+ if ($input->{delete}) {
+ my $token = $input->{token};
+ check_hash_token($token, ['tracking_flags_edit']);
+ delete_token($token);
+
+ my $flag
+ = Bugzilla::Extension::TrackingFlags::Flag->new($vars->{flag_id})
+ || ThrowCodeError('tracking_flags_invalid_item_id',
+ {item => 'flag', id => $vars->{flag_id}});
+ $flag->remove_from_db();
+
+ $vars->{message} = 'tracking_flag_deleted';
+ $vars->{flag} = $flag;
+ $vars->{flags} = [Bugzilla::Extension::TrackingFlags::Flag->get_all()];
+
+ print Bugzilla->cgi->header;
+ my $template = Bugzilla->template;
+ $template->process('pages/tracking_flags_admin_list.html.tmpl', $vars)
+ || ThrowTemplateError($template->error());
+ exit;
+
+ }
+ elsif ($input->{save}) {
+ my $token = $input->{token};
+ check_hash_token($token, ['tracking_flags_edit']);
+ delete_token($token);
+
+ my ($flag, $values, $visibilities) = _load_from_input($input, $vars);
+ _validate($flag, $values, $visibilities);
+ my $flag_obj = _update_db($flag, $values, $visibilities);
+
+ $vars->{flag} = $flag_obj;
+ $vars->{values} = _flag_values_to_json($values);
+ $vars->{visibility} = _flag_visibility_to_json($visibilities);
+
+ if ($vars->{mode} eq 'new') {
+ $vars->{message} = 'tracking_flag_created';
}
-}
+ else {
+ $vars->{message} = 'tracking_flag_updated';
+ }
+ $vars->{mode} = 'edit';
+
+ }
+ else {
+ # initial load
+
+ if ($vars->{mode} eq 'edit') {
+
+ # edit - straight load
+ my $flag
+ = Bugzilla::Extension::TrackingFlags::Flag->new($vars->{flag_id})
+ || ThrowCodeError('tracking_flags_invalid_item_id',
+ {item => 'flag', id => $vars->{flag_id}});
+ $vars->{flag} = $flag;
+ $vars->{values} = _flag_values_to_json($flag->values);
+ $vars->{visibility} = _flag_visibility_to_json($flag->visibility);
+ $vars->{can_delete} = !$flag->bug_count;
-sub _load_from_input {
- my ($input, $vars) = @_;
-
- # flag
-
- my $flag = {
- id => ($input->{mode} eq 'edit' ? $input->{flag_id} : 0),
- name => trim($input->{flag_name} || ''),
- description => trim($input->{flag_desc} || ''),
- sortkey => $input->{flag_sort} || 0,
- type => trim($input->{flag_type} || ''),
- enter_bug => $input->{flag_enter_bug} ? 1 : 0,
- is_active => $input->{flag_active} ? 1 : 0,
- };
- detaint_natural($flag->{id});
- detaint_natural($flag->{sortkey});
- detaint_natural($flag->{enter_bug});
- detaint_natural($flag->{is_active});
-
- # values
-
- my $values = decode_json($input->{values} || '[]');
- foreach my $value (@$values) {
- $value->{value} = '' unless exists $value->{value} && defined $value->{value};
- $value->{setter_group_id} = '' unless $value->{setter_group_id};
- $value->{is_active} = $value->{is_active} ? 1 : 0;
}
+ elsif ($vars->{mode} eq 'copy') {
+
+ # copy - load the source flag
+ $vars->{mode} = 'new';
+ my $flag
+ = Bugzilla::Extension::TrackingFlags::Flag->new($input->{copy_from})
+ || ThrowCodeError('tracking_flags_invalid_item_id',
+ {item => 'flag', id => $vars->{copy_from}});
+
+ # increment the number at the end of the name and description
+ if ($flag->name =~ /^(\D+)(\d+)$/) {
+ $flag->set_name("$1" . ($2 + 1));
+ }
+ if ($flag->description =~ /^(\D+)([\d\.]+)$/) {
+ my $description = $1;
+ my $version = $2;
+ if ($version =~ /\./) {
+ my ($major, $minor) = split(/\./, $version);
+ $minor++;
+ $version = "$major.$minor";
+ }
+ else {
+ $version++;
+ }
+ $flag->set_description($description . $version);
+ }
+ $flag->set_sortkey(_next_unique_sortkey($flag->sortkey));
+ $flag->set_type($flag->flag_type);
+ $flag->set_enter_bug($flag->enter_bug);
+
+ # always default new flags as active, even when copying an inactive one
+ $flag->set_is_active(1);
- # vibility
+ $vars->{flag} = $flag;
+ $vars->{values} = _flag_values_to_json($flag->values, 1);
+ $vars->{visibility} = _flag_visibility_to_json($flag->visibility, 1);
+ $vars->{can_delete} = 0;
- my $visibilities = decode_json($input->{visibility} || '[]');
- foreach my $visibility (@$visibilities) {
- $visibility->{product} = '' unless exists $visibility->{product} && defined $visibility->{product};
- $visibility->{component} = '' unless exists $visibility->{component} && defined $visibility->{component};
}
+ else {
+ $vars->{mode} = 'new';
+ $vars->{flag} = {sortkey => 0, enter_bug => 1, is_active => 1,};
+ $vars->{values} = _flag_values_to_json([
+ {
+ id => 0,
+ value => '---',
+ setter_group_id => '',
+ is_active => 1,
+ comment => '',
+ },
+ ]);
+ $vars->{visibility} = '';
+ $vars->{can_delete} = 0;
+ }
+ }
+}
- return ($flag, $values, $visibilities);
+sub _load_from_input {
+ my ($input, $vars) = @_;
+
+ # flag
+
+ my $flag = {
+ id => ($input->{mode} eq 'edit' ? $input->{flag_id} : 0),
+ name => trim($input->{flag_name} || ''),
+ description => trim($input->{flag_desc} || ''),
+ sortkey => $input->{flag_sort} || 0,
+ type => trim($input->{flag_type} || ''),
+ enter_bug => $input->{flag_enter_bug} ? 1 : 0,
+ is_active => $input->{flag_active} ? 1 : 0,
+ };
+ detaint_natural($flag->{id});
+ detaint_natural($flag->{sortkey});
+ detaint_natural($flag->{enter_bug});
+ detaint_natural($flag->{is_active});
+
+ # values
+
+ my $values = decode_json($input->{values} || '[]');
+ foreach my $value (@$values) {
+ $value->{value} = '' unless exists $value->{value} && defined $value->{value};
+ $value->{setter_group_id} = '' unless $value->{setter_group_id};
+ $value->{is_active} = $value->{is_active} ? 1 : 0;
+ }
+
+ # vibility
+
+ my $visibilities = decode_json($input->{visibility} || '[]');
+ foreach my $visibility (@$visibilities) {
+ $visibility->{product} = ''
+ unless exists $visibility->{product} && defined $visibility->{product};
+ $visibility->{component} = ''
+ unless exists $visibility->{component} && defined $visibility->{component};
+ }
+
+ return ($flag, $values, $visibilities);
}
sub _next_unique_sortkey {
- my ($sortkey) = @_;
+ my ($sortkey) = @_;
- my %current;
- foreach my $flag (Bugzilla::Extension::TrackingFlags::Flag->get_all()) {
- $current{$flag->sortkey} = 1;
- }
+ my %current;
+ foreach my $flag (Bugzilla::Extension::TrackingFlags::Flag->get_all()) {
+ $current{$flag->sortkey} = 1;
+ }
- $sortkey += 5;
- $sortkey += 5 while exists $current{$sortkey};
- return $sortkey;
+ $sortkey += 5;
+ $sortkey += 5 while exists $current{$sortkey};
+ return $sortkey;
}
#
@@ -217,77 +229,83 @@ sub _next_unique_sortkey {
#
sub _validate {
- my ($flag, $values, $visibilities) = @_;
-
- # flag
-
- my @missing;
- push @missing, 'Field Name' if $flag->{name} eq '';
- push @missing, 'Field Description' if $flag->{description} eq '';
- push @missing, 'Field Sort Key' if $flag->{sortkey} eq '';
- scalar(@missing)
- && ThrowUserError('tracking_flags_missing_mandatory', { fields => \@missing });
-
- $flag->{name} =~ /^cf_/
- || ThrowUserError('tracking_flags_cf_prefix');
-
- if ($flag->{id}) {
- my $old_flag = Bugzilla::Extension::TrackingFlags::Flag->new($flag->{id})
- || ThrowCodeError('tracking_flags_invalid_item_id', { item => 'flag', id => $flag->{id} });
- if ($flag->{name} ne $old_flag->name) {
- Bugzilla::Field->new({ name => $flag->{name} })
- && ThrowUserError('field_already_exists', { field => { name => $flag->{name} }});
- }
- } else {
- Bugzilla::Field->new({ name => $flag->{name} })
- && ThrowUserError('field_already_exists', { field => { name => $flag->{name} }});
+ my ($flag, $values, $visibilities) = @_;
+
+ # flag
+
+ my @missing;
+ push @missing, 'Field Name' if $flag->{name} eq '';
+ push @missing, 'Field Description' if $flag->{description} eq '';
+ push @missing, 'Field Sort Key' if $flag->{sortkey} eq '';
+ scalar(@missing)
+ && ThrowUserError('tracking_flags_missing_mandatory', {fields => \@missing});
+
+ $flag->{name} =~ /^cf_/ || ThrowUserError('tracking_flags_cf_prefix');
+
+ if ($flag->{id}) {
+ my $old_flag
+ = Bugzilla::Extension::TrackingFlags::Flag->new($flag->{id})
+ || ThrowCodeError('tracking_flags_invalid_item_id',
+ {item => 'flag', id => $flag->{id}});
+ if ($flag->{name} ne $old_flag->name) {
+ Bugzilla::Field->new({name => $flag->{name}})
+ && ThrowUserError('field_already_exists', {field => {name => $flag->{name}}});
}
+ }
+ else {
+ Bugzilla::Field->new({name => $flag->{name}})
+ && ThrowUserError('field_already_exists', {field => {name => $flag->{name}}});
+ }
- # values
+ # values
- scalar(@$values)
- || ThrowUserError('tracking_flags_missing_values');
+ scalar(@$values) || ThrowUserError('tracking_flags_missing_values');
- my %seen;
- foreach my $value (@$values) {
- my $v = $value->{value};
+ my %seen;
+ foreach my $value (@$values) {
+ my $v = $value->{value};
- $v eq ''
- && ThrowUserError('tracking_flags_missing_value');
+ $v eq '' && ThrowUserError('tracking_flags_missing_value');
- exists $seen{$v}
- && ThrowUserError('tracking_flags_duplicate_value', { value => $v });
- $seen{$v} = 1;
+ exists $seen{$v}
+ && ThrowUserError('tracking_flags_duplicate_value', {value => $v});
+ $seen{$v} = 1;
- push @missing, "Setter for $v" if !$value->{setter_group_id};
- }
- scalar(@missing)
- && ThrowUserError('tracking_flags_missing_mandatory', { fields => \@missing });
+ push @missing, "Setter for $v" if !$value->{setter_group_id};
+ }
+ scalar(@missing)
+ && ThrowUserError('tracking_flags_missing_mandatory', {fields => \@missing});
- # visibility
+ # visibility
- scalar(@$visibilities)
- || ThrowUserError('tracking_flags_missing_visibility');
+ scalar(@$visibilities) || ThrowUserError('tracking_flags_missing_visibility');
- %seen = ();
- foreach my $visibility (@$visibilities) {
- my $name = $visibility->{product} . ':' . $visibility->{component};
+ %seen = ();
+ foreach my $visibility (@$visibilities) {
+ my $name = $visibility->{product} . ':' . $visibility->{component};
- exists $seen{$name}
- && ThrowUserError('tracking_flags_duplicate_visibility', { name => $name });
+ exists $seen{$name}
+ && ThrowUserError('tracking_flags_duplicate_visibility', {name => $name});
- $visibility->{product_obj} = Bugzilla::Product->new({ name => $visibility->{product} })
- || ThrowCodeError('tracking_flags_invalid_product', { product => $visibility->{product} });
+ $visibility->{product_obj}
+ = Bugzilla::Product->new({name => $visibility->{product}})
+ || ThrowCodeError('tracking_flags_invalid_product',
+ {product => $visibility->{product}});
- if ($visibility->{component} ne '') {
- $visibility->{component_obj} = Bugzilla::Component->new({ product => $visibility->{product_obj},
- name => $visibility->{component} })
- || ThrowCodeError('tracking_flags_invalid_component', {
- product => $visibility->{product},
- component_name => $visibility->{component},
- });
+ if ($visibility->{component} ne '') {
+ $visibility->{component_obj}
+ = Bugzilla::Component->new({
+ product => $visibility->{product_obj}, name => $visibility->{component}
+ })
+ || ThrowCodeError(
+ 'tracking_flags_invalid_component',
+ {
+ product => $visibility->{product},
+ component_name => $visibility->{component},
}
+ );
}
+ }
}
@@ -296,106 +314,115 @@ sub _validate {
#
sub _update_db {
- my ($flag, $values, $visibilities) = @_;
- my $dbh = Bugzilla->dbh;
+ my ($flag, $values, $visibilities) = @_;
+ my $dbh = Bugzilla->dbh;
- $dbh->bz_start_transaction();
- my $flag_obj = _update_db_flag($flag);
- _update_db_values($flag_obj, $flag, $values);
- _update_db_visibility($flag_obj, $flag, $visibilities);
- $dbh->bz_commit_transaction();
+ $dbh->bz_start_transaction();
+ my $flag_obj = _update_db_flag($flag);
+ _update_db_values($flag_obj, $flag, $values);
+ _update_db_visibility($flag_obj, $flag, $visibilities);
+ $dbh->bz_commit_transaction();
- return $flag_obj;
+ return $flag_obj;
}
sub _update_db_flag {
- my ($flag) = @_;
+ my ($flag) = @_;
+
+ my $object_set = {
+ name => $flag->{name},
+ description => $flag->{description},
+ sortkey => $flag->{sortkey},
+ type => $flag->{type},
+ enter_bug => $flag->{enter_bug},
+ is_active => $flag->{is_active},
+ };
+
+ my $flag_obj;
+ if ($flag->{id}) {
+
+ # update existing flag
+ $flag_obj
+ = Bugzilla::Extension::TrackingFlags::Flag->new($flag->{id})
+ || ThrowCodeError('tracking_flags_invalid_item_id',
+ {item => 'flag', id => $flag->{id}});
+ $flag_obj->set_all($object_set);
+ $flag_obj->update();
+
+ }
+ else {
+ # create new flag
+ $flag_obj = Bugzilla::Extension::TrackingFlags::Flag->create($object_set);
+ }
+
+ return $flag_obj;
+}
- my $object_set = {
- name => $flag->{name},
- description => $flag->{description},
- sortkey => $flag->{sortkey},
- type => $flag->{type},
- enter_bug => $flag->{enter_bug},
- is_active => $flag->{is_active},
- };
+sub _update_db_values {
+ my ($flag_obj, $flag, $values) = @_;
- my $flag_obj;
- if ($flag->{id}) {
- # update existing flag
- $flag_obj = Bugzilla::Extension::TrackingFlags::Flag->new($flag->{id})
- || ThrowCodeError('tracking_flags_invalid_item_id', { item => 'flag', id => $flag->{id} });
- $flag_obj->set_all($object_set);
- $flag_obj->update();
-
- } else {
- # create new flag
- $flag_obj = Bugzilla::Extension::TrackingFlags::Flag->create($object_set);
+ # delete
+ foreach my $current_value (@{$flag_obj->values}) {
+ if (!grep { $_->{id} == $current_value->id } @$values) {
+ $current_value->remove_from_db();
}
+ }
- return $flag_obj;
-}
+ # add/update
+ my $sortkey = 0;
+ foreach my $value (@{$values}) {
+ $sortkey += 10;
-sub _update_db_values {
- my ($flag_obj, $flag, $values) = @_;
+ my $object_set = {
+ value => $value->{value},
+ setter_group_id => $value->{setter_group_id},
+ is_active => $value->{is_active},
+ sortkey => $sortkey,
+ comment => $value->{comment},
+ };
- # delete
- foreach my $current_value (@{ $flag_obj->values }) {
- if (!grep { $_->{id} == $current_value->id } @$values) {
- $current_value->remove_from_db();
- }
+ if ($value->{id}) {
+ my $value_obj
+ = Bugzilla::Extension::TrackingFlags::Flag::Value->new($value->{id})
+ || ThrowCodeError('tracking_flags_invalid_item_id',
+ {item => 'flag value', id => $flag->{id}});
+ my $old_value = $value_obj->value;
+ $value_obj->set_all($object_set);
+ $value_obj->update();
+ Bugzilla::Extension::TrackingFlags::Flag::Bug->update_all_values({
+ value_obj => $value_obj,
+ old_value => $old_value,
+ new_value => $value_obj->value,
+ });
}
-
- # add/update
- my $sortkey = 0;
- foreach my $value (@{ $values }) {
- $sortkey += 10;
-
- my $object_set = {
- value => $value->{value},
- setter_group_id => $value->{setter_group_id},
- is_active => $value->{is_active},
- sortkey => $sortkey,
- comment => $value->{comment},
- };
-
- if ($value->{id}) {
- my $value_obj = Bugzilla::Extension::TrackingFlags::Flag::Value->new($value->{id})
- || ThrowCodeError('tracking_flags_invalid_item_id', { item => 'flag value', id => $flag->{id} });
- my $old_value = $value_obj->value;
- $value_obj->set_all($object_set);
- $value_obj->update();
- Bugzilla::Extension::TrackingFlags::Flag::Bug->update_all_values({
- value_obj => $value_obj,
- old_value => $old_value,
- new_value => $value_obj->value,
- });
- } else {
- $object_set->{tracking_flag_id} = $flag_obj->flag_id;
- Bugzilla::Extension::TrackingFlags::Flag::Value->create($object_set);
- }
+ else {
+ $object_set->{tracking_flag_id} = $flag_obj->flag_id;
+ Bugzilla::Extension::TrackingFlags::Flag::Value->create($object_set);
}
+ }
}
sub _update_db_visibility {
- my ($flag_obj, $flag, $visibilities) = @_;
+ my ($flag_obj, $flag, $visibilities) = @_;
- # delete
- foreach my $current_visibility (@{ $flag_obj->visibility }) {
- if (!grep { $_->{id} == $current_visibility->id } @$visibilities) {
- $current_visibility->remove_from_db();
- }
- }
-
- # add
- foreach my $visibility (@{ $visibilities }) {
- next if $visibility->{id};
- Bugzilla::Extension::TrackingFlags::Flag::Visibility->create({
- tracking_flag_id => $flag_obj->flag_id,
- product_id => $visibility->{product_obj}->id,
- component_id => $visibility->{component} ? $visibility->{component_obj}->id : undef,
- });
+ # delete
+ foreach my $current_visibility (@{$flag_obj->visibility}) {
+ if (!grep { $_->{id} == $current_visibility->id } @$visibilities) {
+ $current_visibility->remove_from_db();
}
+ }
+
+ # add
+ foreach my $visibility (@{$visibilities}) {
+ next if $visibility->{id};
+ Bugzilla::Extension::TrackingFlags::Flag::Visibility->create({
+ tracking_flag_id => $flag_obj->flag_id,
+ product_id => $visibility->{product_obj}->id,
+ component_id => $visibility->{component}
+ ? $visibility->{component_obj}->id
+ : undef,
+ });
+ }
}
#
@@ -403,62 +430,66 @@ sub _update_db_visibility {
#
sub _groups_to_json {
- my @data;
- foreach my $group (sort { $a->name cmp $b->name } Bugzilla::Group->get_all()) {
- push @data, {
- id => $group->id,
- name => $group->name,
- };
- }
- return encode_json(\@data);
+ my @data;
+ foreach my $group (sort { $a->name cmp $b->name } Bugzilla::Group->get_all()) {
+ push @data, {id => $group->id, name => $group->name,};
+ }
+ return encode_json(\@data);
}
sub _flag_values_to_json {
- my ($values, $is_copy) = @_;
- # setting is_copy will set the id's to zero, to force new values rather
- # than editing existing ones
- my @data;
- foreach my $value (@$values) {
- push @data, {
- id => $is_copy ? 0 : $value->{id},
- value => $value->{value},
- setter_group_id => $value->{setter_group_id},
- is_active => $value->{is_active} ? JSON::true : JSON::false,
- comment => $value->{comment} // '',
- };
- }
- return encode_json(\@data);
+ my ($values, $is_copy) = @_;
+
+ # setting is_copy will set the id's to zero, to force new values rather
+ # than editing existing ones
+ my @data;
+ foreach my $value (@$values) {
+ push @data,
+ {
+ id => $is_copy ? 0 : $value->{id},
+ value => $value->{value},
+ setter_group_id => $value->{setter_group_id},
+ is_active => $value->{is_active} ? JSON::true : JSON::false,
+ comment => $value->{comment} // '',
+ };
+ }
+ return encode_json(\@data);
}
sub _flag_visibility_to_json {
- my ($visibilities, $is_copy) = @_;
- # setting is_copy will set the id's to zero, to force new visibilites
- # rather than editing existing ones
- my @data;
-
- foreach my $visibility (@$visibilities) {
- my $product = exists $visibility->{product_id}
- ? $visibility->product->name
- : $visibility->{product};
- my $component;
- if (exists $visibility->{component_id} && $visibility->{component_id}) {
- $component = $visibility->component->name;
- } elsif (exists $visibility->{component}) {
- $component = $visibility->{component};
- } else {
- $component = undef;
- }
- push @data, {
- id => $is_copy ? 0 : $visibility->{id},
- product => $product,
- component => $component,
- };
+ my ($visibilities, $is_copy) = @_;
+
+ # setting is_copy will set the id's to zero, to force new visibilites
+ # rather than editing existing ones
+ my @data;
+
+ foreach my $visibility (@$visibilities) {
+ my $product
+ = exists $visibility->{product_id}
+ ? $visibility->product->name
+ : $visibility->{product};
+ my $component;
+ if (exists $visibility->{component_id} && $visibility->{component_id}) {
+ $component = $visibility->component->name;
+ }
+ elsif (exists $visibility->{component}) {
+ $component = $visibility->{component};
+ }
+ else {
+ $component = undef;
}
- @data = sort {
- lc($a->{product}) cmp lc($b->{product})
- || lc($a->{component}) cmp lc($b->{component})
- } @data;
- return encode_json(\@data);
+ push @data,
+ {
+ id => $is_copy ? 0 : $visibility->{id},
+ product => $product,
+ component => $component,
+ };
+ }
+ @data = sort {
+ lc($a->{product}) cmp lc($b->{product})
+ || lc($a->{component}) cmp lc($b->{component})
+ } @data;
+ return encode_json(\@data);
}
1;