diff options
Diffstat (limited to 'Bugzilla/WebService')
-rwxr-xr-x | Bugzilla/WebService/Bug.pm | 200 | ||||
-rwxr-xr-x | Bugzilla/WebService/Constants.pm | 22 |
2 files changed, 222 insertions, 0 deletions
diff --git a/Bugzilla/WebService/Bug.pm b/Bugzilla/WebService/Bug.pm index 6698fdc97..d61448d7d 100755 --- a/Bugzilla/WebService/Bug.pm +++ b/Bugzilla/WebService/Bug.pm @@ -13,15 +13,38 @@ # The Original Code is the Bugzilla Bug Tracking System. # # Contributor(s): Marc Schumann <wurblzap@gmail.com> +# Max Kanat-Alexander <mkanat@bugzilla.org> package Bugzilla::WebService::Bug; use strict; use base qw(Bugzilla::WebService); +import SOAP::Data qw(type); use Bugzilla::WebService::Constants; use Bugzilla::Util qw(detaint_natural); use Bugzilla::Bug; +use Bugzilla::BugMail; +use Bugzilla::Constants; + +############# +# Constants # +############# + +# This maps the names of internal Bugzilla bug fields to things that would +# make sense to somebody who's not intimately familiar with the inner workings +# of Bugzilla. (These are the field names that the WebService uses.) +use constant FIELD_MAP => { + status => 'bug_status', + severity => 'bug_severity', + description => 'comment', + summary => 'short_desc', + platform => 'rep_platform', +}; + +########### +# Methods # +########### sub get_bug { my $self = shift; @@ -33,4 +56,181 @@ sub get_bug { return new Bugzilla::Bug($bug_id); } + +sub create { + my ($self, $params) = @_; + + Bugzilla->login(LOGIN_REQUIRED); + + my %field_values; + foreach my $field (keys %$params) { + my $field_name = FIELD_MAP->{$field} || $field; + $field_values{$field_name} = $params->{$field}; + } + + # Make sure all the required fields are in the hash. + foreach my $field (Bugzilla::Bug::REQUIRED_CREATE_FIELDS) { + $field_values{$field} = undef unless exists $field_values{$field}; + } + + # WebService users can't set the creation date of a bug. + delete $field_values{'creation_ts'}; + + my $bug = Bugzilla::Bug->create(\%field_values); + + Bugzilla::BugMail::Send($bug->bug_id, { changer => $bug->reporter->login }); + + return { id => type('int')->value($bug->bug_id) }; +} + 1; + +__END__ + +=head1 NAME + +Bugzilla::Webservice::Bug - The API for creating, changing, and getting the +details of bugs. + +=head1 DESCRIPTION + +This part of the Bugzilla API allows you to file a new bug in Bugzilla. + +=head1 METHODS + +See L<Bugzilla::WebService> for a description of B<STABLE>, B<UNSTABLE>, +and B<EXPERIMENTAL>. + +=over + +=item C<create> B<EXPERIMENTAL> + +=over + +=item B<Description> + +This allows you to create a new bug in Bugzilla. If you specify any +invalid fields, they will be ignored. If you specify any fields you +are not allowed to set, they will just be set to their defaults or ignored. + +You cannot currently set all the items here that you can set on enter_bug.cgi. + +The WebService interface may allow you to set things other than those listed +here, but realize that anything undocumented is B<UNSTABLE> and will very +likely change in the future. + +=item B<Params> + +Some params must be set, or an error will be thrown. These params are +marked B<Required>. + +Some parameters can have defaults set in Bugzilla, by the administrator. +If these parameters have defaults set, you can omit them. These parameters +are marked B<Defaulted>. + +Clients that want to be able to interact uniformly with multiple +Bugzillas should always set both the params marked B<Required> and those +marked B<Defaulted>, because some Bugzillas may not have defaults set +for B<Defaulted> parameters, and then this method will throw an error +if you don't specify them. + +The descriptions of the parameters below are what they mean when Bugzilla is +being used to track software bugs. They may have other meanings in some +installations. + +=over + +=item C<product> (string) B<Required> - The name of the product the bug +is being filed against. + +=item C<component> (string) B<Required> - The name of a component in the +product above. + +=item C<summary> (string) B<Required> - A brief description of the bug being +filed. + +=item C<version> (string) B<Required> - A version of the product above; +the version the bug was found in. + +=item C<description> (string) B<Defaulted> - The initial description for +this bug. Some Bugzilla installations require this to not be blank. + +=item C<op_sys> (string) B<Defaulted> - The operating system the bug was +discovered on. + +=item C<platform> (string) B<Defaulted> - What type of hardware the bug was +experienced on. + +=item C<priority> (string) B<Defaulted> - What order the bug will be fixed +in by the developer, compared to the developer's other bugs. + +=item C<severity> (string) B<Defaulted> - How severe the bug is. + +=item C<alias> (string) - A brief alias for the bug that can be used +instead of a bug number when accessing this bug. Must be unique in +all of this Bugzilla. + +=item C<assigned_to> (username) - A user to assign this bug to, if you +don't want it to be assigned to the component owner. + +=item C<cc> (array) - An array of usernames to CC on this bug. + +=item C<qa_contact> (username) - If this installation has QA Contacts +enabled, you can set the QA Contact here if you don't want to use +the component's default QA Contact. + +=item C<status> (string) - The status that this bug should start out as. +Note that only certain statuses can be set on bug creation. + +=item C<target_milestone> (string) - A valid target milestone for this +product. + +=back + +In addition to the above parameters, if your installation has any custom +fields, you can set them just by passing in the name of the field and +its value as a string. + +=item B<Returns> + +A hash with one element, C<id>. This is the id of the newly-filed bug. + +=item B<Errors> + +=over + +=item 103 (Invalid Alias) + +The alias you specified is invalid for some reason. See the error message +for more details. + +=item 104 (Invalid Field) + +One of the drop-down fields has an invalid value. The error message will +have more detail. + +=item 105 (Invalid Component) + +Either you didn't specify a component, or the component you specified was +invalid. + +=item 106 (Invalid Product) + +Either you didn't specify a product, this product doesn't exist, or +you don't have permission to enter bugs in this product. + +=item 107 (Invalid Summary) + +You didn't specify a summary for the bug. + +=item 504 (Invalid User) + +Either the QA Contact, Assignee, or CC lists have some invalid user +in them. The error message will have more details. + +=back + +=back + + +=back diff --git a/Bugzilla/WebService/Constants.pm b/Bugzilla/WebService/Constants.pm index ba26f3bfa..e0bb05e5a 100755 --- a/Bugzilla/WebService/Constants.pm +++ b/Bugzilla/WebService/Constants.pm @@ -52,6 +52,24 @@ use constant WS_ERROR_CODE => { invalid_bug_id_or_alias => 100, invalid_bug_id_non_existent => 101, bug_access_denied => 102, + # These all mean "invalid alias" + alias_not_defined => 103, + alias_too_long => 103, + alias_in_use => 103, + alias_is_numeric => 103, + alias_has_comma_or_space => 103, + # Misc. bug field errors + illegal_field => 104, + # Component errors + require_component => 105, + component_name_too_long => 105, + component_not_valid => 105, + # Invalid Product + no_products => 106, + entry_access_denied => 106, + product_disabled => 106, + # Invalid Summary + require_summary => 107, # Authentication errors are usually 300-400. invalid_username_or_password => 300, @@ -64,6 +82,10 @@ use constant WS_ERROR_CODE => { illegal_email_address => 501, password_too_short => 502, password_too_long => 503, + invalid_username => 504, + # This is from strict_isolation, but it also basically means + # "invalid user." + invalid_user_group => 504, }; # These are the fallback defaults for errors not in ERROR_CODE. |