From bd49bafdb5915a8e738dcbb82c88e8ffdf65a769 Mon Sep 17 00:00:00 2001 From: "mkanat%bugzilla.org" <> Date: Fri, 10 Nov 2006 06:01:07 +0000 Subject: Bug 357482: Webservice should have a get_products method Patch By Mads Bondo Dydensborg r=mkanat, a=myk --- Bugzilla/User.pm | 12 ++++ Bugzilla/WebService/Product.pm | 132 ++++++++++++++++++++++++++++++++--------- 2 files changed, 115 insertions(+), 29 deletions(-) diff --git a/Bugzilla/User.pm b/Bugzilla/User.pm index cadc8574d..b3bce9087 100644 --- a/Bugzilla/User.pm +++ b/Bugzilla/User.pm @@ -29,6 +29,7 @@ # Justin C. De Vries # Dennis Melentyev # Frédéric Buclin +# Mads Bondo Dydensborg ################################################################################ # Module Initialization @@ -714,6 +715,17 @@ sub get_enterable_products { return $self->{enterable_products}; } +sub get_accessible_products { + my $self = shift; + + # Map the objects into a hash using the ids as keys + my %products = map { $_->id => $_ } + @{$self->get_selectable_products}, + @{$self->get_enterable_products}; + + return [ values %products ]; +} + sub can_request_flag { my ($self, $flag_type) = @_; diff --git a/Bugzilla/WebService/Product.pm b/Bugzilla/WebService/Product.pm index ee02143c1..8111da120 100755 --- a/Bugzilla/WebService/Product.pm +++ b/Bugzilla/WebService/Product.pm @@ -21,6 +21,7 @@ use strict; use base qw(Bugzilla::WebService); use Bugzilla::Product; use Bugzilla::User; +import SOAP::Data qw(type); # Get the ids of the products the user can search sub get_selectable_products { @@ -34,23 +35,35 @@ sub get_enterable_products { # Get the union of the products the user can search and enter bugs against. sub get_accessible_products { - my %union = (); - map $union{ $_->id } = 1, @{Bugzilla->user->get_selectable_products}; - map $union{ $_->id } = 1, @{Bugzilla->user->get_enterable_products}; - return { ids => [keys %union] }; + return {ids => [map {$_->id} @{Bugzilla->user->get_accessible_products}]}; } -sub get_product { - my $self = shift; - my ($product_name) = @_; - - Bugzilla->login; - - # Bugzilla::Product doesn't do permissions checks, so we can't do the call - # to Bugzilla::Product::new until a permissions check happens here. - $self->fail_unimplemented(); - - return new Bugzilla::Product({'name' => $product_name}); +# Get a list of actual products, based on list of ids +sub get_products { + my ($self, $params) = @_; + + # Only products that are in the users accessible products, + # can be allowed to be returned + my $accessible_products = Bugzilla->user->get_accessible_products; + + # Create a hash with the ids the user wants + my %ids = map { $_ => 1 } @{$params->{ids}}; + + # Return the intersection of this, by grepping the ids from + # accessible products. + my @requested_accessible = grep { $ids{$_->id} } @$accessible_products; + + # Now create a result entry for each. + my @products = + map {{ + internals => $_, + id => type('int')->value($_->id), + name => type('string')->value($_->name), + description => type('string')->value($_->description), + } + } @requested_accessible; + + return { products => \@products }; } 1; @@ -77,32 +90,93 @@ and B mean, and for more information about error codes. =item C B -Description: Returns a list of the ids of the products the user can search on. +=over + +=item B -Params: none +Returns a list of the ids of the products the user can search on. -Returns: A hash containing one item, C, that contains an array - of product ids. +=item B (none) + +=item B + +A hash containing one item, C, that contains an array of product +ids. + +=item B (none) + +=back =item C B -Description: Returns a list of the ids of the products the user can enter bugs - against. +=over + +=item B + +Returns a list of the ids of the products the user can enter bugs +against. + +=item B (none) + +=item B -Params: none +A hash containing one item, C, that contains an array of product +ids. -Returns: A hash containing one item, C, that contains an array - of product ids. +=item B (none) + +=back =item C B -Description: Returns a list of the ids of the products the user can search or - enter bugs against. +=over + +=item B -Params: none +Returns a list of the ids of the products the user can search or enter +bugs against. -Returns: A hash containing one item, C, that contains an array - of product ids. +=item B (none) + +=item B + +A hash containing one item, C, that contains an array of product +ids. + +=item B (none) + +=back + +=item C B + +=over + +=item B + +Returns a list of information about the products passed to it. + +=item B + +A hash containing one item, C, that is an array of product ids. + +=item B + +A hash containing one item, C, that is an array of +hashes. Each hash describes a product, and has the following items: +C, C, C, and C. The C item is +the id of the product. The C item is the name of the +product. The C is the description of the +product. Finally, the C is an internal representation of +the product. + +Note, that if the user tries to access a product that is not in the +list of accessible products for the user, or a product that does not +exist, that is silently ignored, and no information about that product +is returned. + +=item B (none) + +=back =back -- cgit v1.2.3-24-g4f1b