diff options
Diffstat (limited to 'Bugzilla')
-rw-r--r-- | Bugzilla/WebService/Constants.pm | 9 | ||||
-rw-r--r-- | Bugzilla/WebService/Product.pm | 115 |
2 files changed, 124 insertions, 0 deletions
diff --git a/Bugzilla/WebService/Constants.pm b/Bugzilla/WebService/Constants.pm index 0adb190ec..f2c007965 100644 --- a/Bugzilla/WebService/Constants.pm +++ b/Bugzilla/WebService/Constants.pm @@ -150,6 +150,15 @@ use constant WS_ERROR_CODE => { # Error 605 attachment_url_disabled no longer exists. zero_length_file => 606, + # Product erros are 700-800 + product_blank_name => 700, + product_name_too_long => 701, + product_name_already_in_use => 702, + product_name_diff_in_case => 702, + product_must_have_description => 703, + product_must_have_version => 704, + product_must_define_defaultmilestone => 705, + # Errors thrown by the WebService itself. The ones that are negative # conform to http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php xmlrpc_invalid_value => -32600, diff --git a/Bugzilla/WebService/Product.pm b/Bugzilla/WebService/Product.pm index b25226a45..74beb5b33 100644 --- a/Bugzilla/WebService/Product.pm +++ b/Bugzilla/WebService/Product.pm @@ -21,6 +21,9 @@ use strict; use base qw(Bugzilla::WebService); use Bugzilla::Product; use Bugzilla::User; +use Bugzilla::Error; +use Bugzilla::Constants; +use Bugzilla::WebService::Constants; use Bugzilla::WebService::Util qw(validate); use constant READ_ONLY => qw( @@ -79,6 +82,28 @@ sub get { return { products => \@products }; } +sub create { + my ($self, $params) = @_; + + Bugzilla->login(LOGIN_REQUIRED); + Bugzilla->user->in_group('editcomponents') + || ThrowUserError("auth_failure", { group => "editcomponents", + action => "add", + object => "products"}); + # Create product + my $product = Bugzilla::Product->create({ + allows_unconfirmed => $params->{has_unconfirmed}, + classification => $params->{classification}, + name => $params->{name}, + description => $params->{description}, + version => $params->{version}, + defaultmilestone => $params->{default_milestone}, + isactive => $params->{is_open}, + create_series => $params->{create_series} + }); + return { id => $self->type('int', $product->id) }; +} + 1; __END__ @@ -198,3 +223,93 @@ is returned. =item B<Errors> (none) =back + +=head1 Product Creation + +=head2 create + +B<EXPERIMENTAL> + +=over + +=item B<Description> + +This allows you to create a new product in Bugzilla. + +=item B<Params> + +Some params must be set, or an error will be thrown. These params are marked Required. + +=over + +=item C<name> + +B<Required> C<string> The name of this product. Must be unique. + +=item C<description> + +B<Required> C<string> A description for this product. Allows some simple HTML. + +=item C<version> + +B<Required> C<string> The default version for this product. + +=item C<has_unconfirmed> + +C<boolean> Allows unconfirmed bugs in the product. + +=item C<classification> + +C<boolean> Classification wich contains the product. + +=item C<default_milestone> + +C<boolean> The default milestone of this product. + +=item C<is_open> + +C<boolean> True if the product is currently allowing bugs to be entered into it. + +=item C<create_series> + +C<boolean> Set if series are creating for the new product. + +=back + +=item B<Returns> + +A hash with one element, id. This is the id of the newly-filed product. + +=item B<Errors> + +=over + +=item 700 (Product blank name) + +You must specify a non blank name for this product. + +=item 701 (Product name too long) + +The name specified for this product was longer than the maximum allowed length. + +=item 702 (Product name already exists) + +You specified the name of a product that already exists. (Product names must be globally unique in Bugzilla.) + +=item 703 (Product must have description) + +You must specify a description for this product. + +=item 704 (Product must have version) + +You must specify a version for this product. + +=item 705 (Product must define a defaut milestone) + +You must define a default milestone. + +=back + +=back + +=cut |