Bug 89472 - Backout r1531

git-svn-id: svn://svn.office.custis.ru/3rdparty/bugzilla.org/trunk@1534 6955db30-a419-402b-8a0d-67ecbb4d7f56
master v2012.05
vfilippov 2012-05-03 12:31:28 +00:00
parent 52d0f96fe6
commit fffa9a25d2
1 changed files with 28 additions and 38 deletions

View File

@ -9,7 +9,6 @@ use strict;
use base qw(Bugzilla::WebService);
use Bugzilla::Field::Choice;
use Bugzilla::User;
use Bugzilla::Hook;
use Bugzilla::WebService::Util qw(validate);
# { field => 'field_name' }
@ -46,7 +45,6 @@ sub get_values
# { field => 'field_name', value => 'value_name',
# sortkey => number_for_sorting,
# [optional] id => id,
# other columns from $type->DB_COLUMNS }
sub add_value
{
@ -57,8 +55,8 @@ sub add_value
return {status => 'field_not_found'};
}
my $type = Bugzilla::Field::Choice->type($field);
if ($type->new({ name => $params->{value} }) ||
$params->{id} && $type->new({ id => $params->{id} }))
my $value = $type->new({ name => $params->{value} });
if ($value)
{
return {status => 'value_already_exists'};
}
@ -74,31 +72,13 @@ sub add_value
$row->{$_} = $params->{$_};
}
}
my $value = $type->create($row);
$value = $type->create($row);
return {status => 'ok', id => $value->id};
}
# Get value by id=$params->{id} or name=$params->{value}
sub _get_value
{
my ($type, $params) = @_;
my $value;
if ($params->{id})
{
$value = $type->new({ id => $params->{id} });
}
elsif ($params->{value})
{
$value = $type->new({ name => $params->{value} });
}
return $value;
}
# { field => 'field_name'
# ( id => 'old_id' | value => 'old_value' )
# ( new_value => 'new_value' )?
# sortkey => new_sortkey
# isactive => new_isactive
# { field => 'field_name', old_value => 'old_value',
# value => 'new_value', sortkey => new_sortkey,
# isactive => new_isactive,
# other columns from $type->DB_COLUMNS }
sub update_value
{
@ -109,22 +89,25 @@ sub update_value
return {status => 'field_not_found'};
}
my $type = Bugzilla::Field::Choice->type($field);
my $value = _get_value($type, $params) || return {status => 'value_not_found'};
# Name
if (defined $params->{new_value} && $params->{new_value} ne $value->name)
my $value = $type->new({ name => $params->{old_value} });
if (!$value)
{
my $newvalue = $type->new({ name => $params->{new_value} });
return {status => 'value_not_found'};
}
$params->{value} = $params->{old_value} unless defined $params->{value};
if ($params->{value} ne $params->{old_value})
{
my $newvalue = $type->new({ name => $params->{value} });
if ($newvalue)
{
return {status => 'value_already_exists'};
}
$value->set_name($params->{new_value});
$value->set_name($params->{value});
}
# Other fields
# Остальные колонки
for ($type->DB_COLUMNS)
{
if ($_ ne $type->NAME_FIELD &&
$_ ne $type->ID_FIELD &&
exists $params->{$_})
{
my $m = "set_$_";
@ -135,7 +118,7 @@ sub update_value
return {status => 'ok', id => $value->id};
}
# { field => 'field_name', ( id => value_id | value => 'value_name' ) }
# { field => 'field_name', value => 'value_name' }
sub delete_value
{
my ($self, $params) = @_;
@ -145,13 +128,16 @@ sub delete_value
return {status => 'field_not_found'};
}
my $type = Bugzilla::Field::Choice->type($field);
my $value = _get_value($type, $params) || return {status => 'value_not_found'};
my $value = $type->new({ name => $params->{value} });
if (!$value)
{
return {status => 'value_not_found'};
}
$value->remove_from_db;
return {status => 'ok'};
}
# { field => 'field_name', ( id => value_id | value => 'value_name' ),
# ids => [ visibility_ID, visibility_ID, ... ] }
# { field => 'field_name', value => 'value_name', ids => [ visibility_ID, visibility_ID, ... ] }
sub set_visibility_values
{
my ($self, $params) = @_;
@ -165,7 +151,11 @@ sub set_visibility_values
return {status => 'fieldvalues_not_controlled'};
}
my $type = Bugzilla::Field::Choice->type($field);
my $value = _get_value($type, $params) || return {status => 'value_not_found'};
my $value = $type->new({ name => $params->{value} });
if (!$value)
{
return {status => 'value_not_found'};
}
my $ids = $params->{ids} || [];
$ids = [ $ids ] unless ref $ids;
$ids = [ map { $_->id } @{ Bugzilla::Field::Choice->type($field->value_field)->new_from_list($ids) } ];