From: Frank Becker Date: Tue, 31 Jul 2012 04:28:36 +0000 (-0400) Subject: Bug 775056 - Add prefix to filter() and filter_wants() X-Git-Tag: bugzilla-4.3.3~58 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=75f87ced8b8ac2d4b3cf025dc3cff5bac596bb70;p=thirdparty%2Fbugzilla.git Bug 775056 - Add prefix to filter() and filter_wants() r=dkl, a=LpSolit --- diff --git a/Bugzilla/WebService/Util.pm b/Bugzilla/WebService/Util.pm index ac57549f22..83b9250156 100644 --- a/Bugzilla/WebService/Util.pm +++ b/Bugzilla/WebService/Util.pm @@ -22,22 +22,24 @@ our @EXPORT_OK = qw( params_to_objects ); -sub filter ($$) { - my ($params, $hash) = @_; +sub filter ($$;$) { + my ($params, $hash, $prefix) = @_; my %newhash = %$hash; foreach my $key (keys %$hash) { - delete $newhash{$key} if !filter_wants($params, $key); + delete $newhash{$key} if !filter_wants($params, $key, $prefix); } return \%newhash; } -sub filter_wants ($$) { - my ($params, $field) = @_; +sub filter_wants ($$;$) { + my ($params, $field, $prefix) = @_; my %include = map { $_ => 1 } @{ $params->{'include_fields'} || [] }; my %exclude = map { $_ => 1 } @{ $params->{'exclude_fields'} || [] }; + $field = "${prefix}.${field}" if $prefix; + if (defined $params->{include_fields}) { return 0 if !$include{$field}; } @@ -150,6 +152,13 @@ of WebService methods. Given a hash (the second argument to this subroutine), this will remove any keys that are I in C and then remove any keys that I in C. +An optional third option can be passed that prefixes the field name to allow +filtering of data two or more levels deep. + +For example, if you want to filter out the C key/value in components returned +by Product.get, you would use the value C in your C +list. + =head2 filter_wants Returns C<1> if a filter would preserve the specified field when passing