Do not remove visibility values the user cannot see in editvalues
parent
3efbc41166
commit
8e13a0ff60
|
@ -551,7 +551,8 @@ sub can_tweak
|
|||
return 1;
|
||||
}
|
||||
|
||||
# Return valid values for this field, arrayref of Bugzilla::Field::Choice objects.
|
||||
# Return valid values for this field, arrayref of Bugzilla::Field::Choice objects,
|
||||
# filtered by the current user's permissions.
|
||||
# Includes disabled values is $include_disabled == true
|
||||
sub legal_values
|
||||
{
|
||||
|
@ -943,24 +944,24 @@ sub touch
|
|||
sub set_visibility_values
|
||||
{
|
||||
my $self = shift;
|
||||
my ($value_ids) = @_;
|
||||
$self->update_visibility_values(FLAG_VISIBLE, $value_ids);
|
||||
my ($value_ids, $skip_invisible) = @_;
|
||||
$self->update_visibility_values(FLAG_VISIBLE, $value_ids, $skip_invisible);
|
||||
return $value_ids && @$value_ids;
|
||||
}
|
||||
|
||||
sub set_null_visibility_values
|
||||
{
|
||||
my $self = shift;
|
||||
my ($value_ids) = @_;
|
||||
$self->update_visibility_values(FLAG_NULLABLE, $value_ids);
|
||||
my ($value_ids, $skip_invisible) = @_;
|
||||
$self->update_visibility_values(FLAG_NULLABLE, $value_ids, $skip_invisible);
|
||||
return $value_ids && @$value_ids;
|
||||
}
|
||||
|
||||
sub set_clone_visibility_values
|
||||
{
|
||||
my $self = shift;
|
||||
my ($value_ids) = @_;
|
||||
$self->update_visibility_values(FLAG_CLONED, $value_ids);
|
||||
my ($value_ids, $skip_invisible) = @_;
|
||||
$self->update_visibility_values(FLAG_CLONED, $value_ids, $skip_invisible);
|
||||
return $value_ids && @$value_ids;
|
||||
}
|
||||
|
||||
|
@ -992,7 +993,7 @@ sub clear_default_values
|
|||
sub update_visibility_values
|
||||
{
|
||||
my $self = shift;
|
||||
my ($controlled_value_id, $visibility_value_ids) = @_;
|
||||
my ($controlled_value_id, $visibility_value_ids, $skip_invisible) = @_;
|
||||
$visibility_value_ids ||= [];
|
||||
my $vis_field = $self->flag_field($controlled_value_id);
|
||||
if (!$vis_field)
|
||||
|
@ -1014,6 +1015,16 @@ sub update_visibility_values
|
|||
$h = $h->{null}->{$self->id} if $controlled_value_id == FLAG_NULLABLE;
|
||||
$h = $h->{clone}->{$self->id} if $controlled_value_id == FLAG_CLONED;
|
||||
$h = $h ? { %$h } : {};
|
||||
if ($skip_invisible)
|
||||
{
|
||||
# Do not affect visibility values the user can't see
|
||||
# so he can't damage other user's visibility values for the same field value
|
||||
my $allowed = { map { $_->id => 1 } @{$vis_field->legal_values} };
|
||||
for (keys %$h)
|
||||
{
|
||||
delete $h->{$_} if !$allowed->{$_};
|
||||
}
|
||||
}
|
||||
my $add = [];
|
||||
for (@$visibility_value_ids)
|
||||
{
|
||||
|
|
|
@ -413,8 +413,8 @@ sub set_sortkey { $_[0]->set('sortkey', $_[1]); }
|
|||
sub set_visibility_values
|
||||
{
|
||||
my $self = shift;
|
||||
my ($value_ids) = @_;
|
||||
$self->field->update_visibility_values($self->id, $value_ids);
|
||||
my ($value_ids, $skip_invisible) = @_;
|
||||
$self->field->update_visibility_values($self->id, $value_ids, $skip_invisible);
|
||||
delete $self->{visibility_values};
|
||||
return $value_ids;
|
||||
}
|
||||
|
|
|
@ -148,7 +148,7 @@ elsif ($action eq 'update')
|
|||
}
|
||||
else
|
||||
{
|
||||
$field->${\$_->[2]}([ list $ARGS->{$_->[3]} ]);
|
||||
$field->${\$_->[2]}([ list $ARGS->{$_->[3]} ], 'SKIP_INVISIBLE');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -165,7 +165,7 @@ if ($action eq 'update')
|
|||
}
|
||||
if ($value->field->value_field)
|
||||
{
|
||||
$vars->{changes}->{visibility_values} = $value->set_visibility_values([ list $ARGS->{visibility_value_id} ]);
|
||||
$vars->{changes}->{visibility_values} = $value->set_visibility_values([ list $ARGS->{visibility_value_id} ], 'SKIP_INVISIBLE');
|
||||
}
|
||||
$vars->{changes}->{control_lists} = 1 if $field->update_control_lists($value->id, $ARGS);
|
||||
delete_token($token);
|
||||
|
|
Loading…
Reference in New Issue