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 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
|
# Includes disabled values is $include_disabled == true
|
||||||
sub legal_values
|
sub legal_values
|
||||||
{
|
{
|
||||||
|
@ -943,24 +944,24 @@ sub touch
|
||||||
sub set_visibility_values
|
sub set_visibility_values
|
||||||
{
|
{
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my ($value_ids) = @_;
|
my ($value_ids, $skip_invisible) = @_;
|
||||||
$self->update_visibility_values(FLAG_VISIBLE, $value_ids);
|
$self->update_visibility_values(FLAG_VISIBLE, $value_ids, $skip_invisible);
|
||||||
return $value_ids && @$value_ids;
|
return $value_ids && @$value_ids;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub set_null_visibility_values
|
sub set_null_visibility_values
|
||||||
{
|
{
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my ($value_ids) = @_;
|
my ($value_ids, $skip_invisible) = @_;
|
||||||
$self->update_visibility_values(FLAG_NULLABLE, $value_ids);
|
$self->update_visibility_values(FLAG_NULLABLE, $value_ids, $skip_invisible);
|
||||||
return $value_ids && @$value_ids;
|
return $value_ids && @$value_ids;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub set_clone_visibility_values
|
sub set_clone_visibility_values
|
||||||
{
|
{
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my ($value_ids) = @_;
|
my ($value_ids, $skip_invisible) = @_;
|
||||||
$self->update_visibility_values(FLAG_CLONED, $value_ids);
|
$self->update_visibility_values(FLAG_CLONED, $value_ids, $skip_invisible);
|
||||||
return $value_ids && @$value_ids;
|
return $value_ids && @$value_ids;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -992,7 +993,7 @@ sub clear_default_values
|
||||||
sub update_visibility_values
|
sub update_visibility_values
|
||||||
{
|
{
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my ($controlled_value_id, $visibility_value_ids) = @_;
|
my ($controlled_value_id, $visibility_value_ids, $skip_invisible) = @_;
|
||||||
$visibility_value_ids ||= [];
|
$visibility_value_ids ||= [];
|
||||||
my $vis_field = $self->flag_field($controlled_value_id);
|
my $vis_field = $self->flag_field($controlled_value_id);
|
||||||
if (!$vis_field)
|
if (!$vis_field)
|
||||||
|
@ -1014,6 +1015,16 @@ sub update_visibility_values
|
||||||
$h = $h->{null}->{$self->id} if $controlled_value_id == FLAG_NULLABLE;
|
$h = $h->{null}->{$self->id} if $controlled_value_id == FLAG_NULLABLE;
|
||||||
$h = $h->{clone}->{$self->id} if $controlled_value_id == FLAG_CLONED;
|
$h = $h->{clone}->{$self->id} if $controlled_value_id == FLAG_CLONED;
|
||||||
$h = $h ? { %$h } : {};
|
$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 = [];
|
my $add = [];
|
||||||
for (@$visibility_value_ids)
|
for (@$visibility_value_ids)
|
||||||
{
|
{
|
||||||
|
|
|
@ -413,8 +413,8 @@ sub set_sortkey { $_[0]->set('sortkey', $_[1]); }
|
||||||
sub set_visibility_values
|
sub set_visibility_values
|
||||||
{
|
{
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my ($value_ids) = @_;
|
my ($value_ids, $skip_invisible) = @_;
|
||||||
$self->field->update_visibility_values($self->id, $value_ids);
|
$self->field->update_visibility_values($self->id, $value_ids, $skip_invisible);
|
||||||
delete $self->{visibility_values};
|
delete $self->{visibility_values};
|
||||||
return $value_ids;
|
return $value_ids;
|
||||||
}
|
}
|
||||||
|
|
|
@ -148,7 +148,7 @@ elsif ($action eq 'update')
|
||||||
}
|
}
|
||||||
else
|
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)
|
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);
|
$vars->{changes}->{control_lists} = 1 if $field->update_control_lists($value->id, $ARGS);
|
||||||
delete_token($token);
|
delete_token($token);
|
||||||
|
|
Loading…
Reference in New Issue