summaryrefslogtreecommitdiffstats
path: root/Bugzilla
diff options
context:
space:
mode:
Diffstat (limited to 'Bugzilla')
-rw-r--r--Bugzilla/WebService/Constants.pm9
-rw-r--r--Bugzilla/WebService/Product.pm115
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