summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xBugzilla/WebService.pm9
-rwxr-xr-xBugzilla/WebService/Bug.pm31
-rwxr-xr-xBugzilla/WebService/Bugzilla.pm14
-rwxr-xr-xBugzilla/WebService/Product.pm7
-rwxr-xr-xBugzilla/WebService/User.pm36
5 files changed, 51 insertions, 46 deletions
diff --git a/Bugzilla/WebService.pm b/Bugzilla/WebService.pm
index 94dbb6217..7812a237b 100755
--- a/Bugzilla/WebService.pm
+++ b/Bugzilla/WebService.pm
@@ -20,6 +20,7 @@ package Bugzilla::WebService;
use strict;
use Bugzilla::WebService::Constants;
use Date::Parse;
+use XMLRPC::Lite;
sub fail_unimplemented {
my $this = shift;
@@ -62,6 +63,14 @@ sub login_exempt {
return $class->LOGIN_EXEMPT->{$method};
}
+sub type {
+ my ($self, $type, $value) = @_;
+ if ($type eq 'dateTime') {
+ $value = $self->datetime_format($value);
+ }
+ return XMLRPC::Data->type($type)->value($value);
+}
+
1;
package Bugzilla::WebService::XMLRPC::Transport::HTTP::CGI;
diff --git a/Bugzilla/WebService/Bug.pm b/Bugzilla/WebService/Bug.pm
index 3323fd5dd..1cdf44d83 100755
--- a/Bugzilla/WebService/Bug.pm
+++ b/Bugzilla/WebService/Bug.pm
@@ -22,7 +22,6 @@ package Bugzilla::WebService::Bug;
use strict;
use base qw(Bugzilla::WebService);
-import SOAP::Data qw(type);
use Bugzilla::Constants;
use Bugzilla::Error;
@@ -87,17 +86,15 @@ sub get {
# This is done in this fashion in order to produce a stable API.
# The internals of Bugzilla::Bug are not stable enough to just
# return them directly.
- my $creation_ts = $self->datetime_format($bug->creation_ts);
- my $delta_ts = $self->datetime_format($bug->delta_ts);
my %item;
- $item{'creation_time'} = type('dateTime')->value($creation_ts);
- $item{'last_change_time'} = type('dateTime')->value($delta_ts);
+ $item{'creation_time'} = $self->type('dateTime', $bug->creation_ts);
+ $item{'last_change_time'} = $self->type('dateTime', $bug->delta_ts);
$item{'internals'} = $bug;
- $item{'id'} = type('int')->value($bug->bug_id);
- $item{'summary'} = type('string')->value($bug->short_desc);
+ $item{'id'} = $self->type('int', $bug->bug_id);
+ $item{'summary'} = $self->type('string', $bug->short_desc);
if (Bugzilla->params->{'usebugaliases'}) {
- $item{'alias'} = type('string')->value($bug->alias);
+ $item{'alias'} = $self->type('string', $bug->alias);
}
else {
# For API reasons, we always want the value to appear, we just
@@ -131,18 +128,18 @@ sub get_history {
foreach my $changeset (@$activity) {
my %bug_history;
- $bug_history{when} = type('dateTime')->value(
+ $bug_history{when} = $self->type('dateTime',
$self->datetime_format($changeset->{when}));
- $bug_history{who} = type('string')->value($changeset->{who});
+ $bug_history{who} = $self->type('string', $changeset->{who});
$bug_history{changes} = [];
foreach my $change (@{ $changeset->{changes} }) {
my $attach_id = delete $change->{attachid};
if ($attach_id) {
- $change->{attachment_id} = type('int')->value($attach_id);
+ $change->{attachment_id} = $self->type('int', $attach_id);
}
- $change->{removed} = type('string')->value($change->{removed});
- $change->{added} = type('string')->value($change->{added});
- $change->{field_name} = type('string')->value(
+ $change->{removed} = $self->type('string', $change->{removed});
+ $change->{added} = $self->type('string', $change->{added});
+ $change->{field_name} = $self->type('string',
delete $change->{fieldname});
# This is going to go away in the future from GetBugActivity
# so we shouldn't put it in the API.
@@ -157,7 +154,7 @@ sub get_history {
# then they get to know which bug activity relates to which value
# they passed
if (Bugzilla->params->{'usebugaliases'}) {
- $item{alias} = type('string')->value($bug->alias);
+ $item{alias} = $self->type('string', $bug->alias);
}
else {
# For API reasons, we always want the value to appear, we just
@@ -189,7 +186,7 @@ sub create {
Bugzilla::BugMail::Send($bug->bug_id, { changer => $bug->reporter->login });
- return { id => type('int')->value($bug->bug_id) };
+ return { id => $self->type('int', $bug->bug_id) };
}
sub legal_values {
@@ -232,7 +229,7 @@ sub legal_values {
my @result;
foreach my $val (@$values) {
- push(@result, type('string')->value($val));
+ push(@result, $self->type('string', $val));
}
return { values => \@result };
diff --git a/Bugzilla/WebService/Bugzilla.pm b/Bugzilla/WebService/Bugzilla.pm
index 7b58af254..af64f4e3a 100755
--- a/Bugzilla/WebService/Bugzilla.pm
+++ b/Bugzilla/WebService/Bugzilla.pm
@@ -22,7 +22,6 @@ use strict;
use base qw(Bugzilla::WebService);
use Bugzilla::Constants;
use Bugzilla::Hook;
-import SOAP::Data qw(type);
use Time::Zone;
@@ -33,26 +32,29 @@ use constant LOGIN_EXEMPT => {
};
sub version {
- return { version => type('string')->value(BUGZILLA_VERSION) };
+ my $self = shift;
+ return { version => $self->type('string', BUGZILLA_VERSION) };
}
sub extensions {
+ my $self = shift;
my $extensions = Bugzilla::Hook::enabled_plugins();
foreach my $name (keys %$extensions) {
my $info = $extensions->{$name};
- foreach my $data (keys %$info)
- {
- $extensions->{$name}->{$data} = type('string')->value($info->{$data});
+ foreach my $data (keys %$info) {
+ $extensions->{$name}->{$data} =
+ $self->type('string', $info->{$data});
}
}
return { extensions => $extensions };
}
sub timezone {
+ my $self = shift;
my $offset = tz_offset();
$offset = (($offset / 60) / 60) * 100;
$offset = sprintf('%+05d', $offset);
- return { timezone => type('string')->value($offset) };
+ return { timezone => $self->type('string', $offset) };
}
1;
diff --git a/Bugzilla/WebService/Product.pm b/Bugzilla/WebService/Product.pm
index 995e0adc0..0f15a7e30 100755
--- a/Bugzilla/WebService/Product.pm
+++ b/Bugzilla/WebService/Product.pm
@@ -21,7 +21,6 @@ use strict;
use base qw(Bugzilla::WebService);
use Bugzilla::Product;
use Bugzilla::User;
-import SOAP::Data qw(type);
##################################################
# Add aliases here for method name compatibility #
@@ -63,9 +62,9 @@ sub get {
my @products =
map {{
internals => $_,
- id => type('int')->value($_->id),
- name => type('string')->value($_->name),
- description => type('string')->value($_->description),
+ id => $self->type('int', $_->id),
+ name => $self->type('string', $_->name),
+ description => $self->type('string', $_->description),
}
} @requested_accessible;
diff --git a/Bugzilla/WebService/User.pm b/Bugzilla/WebService/User.pm
index fcc91c2dd..35e4daad4 100755
--- a/Bugzilla/WebService/User.pm
+++ b/Bugzilla/WebService/User.pm
@@ -22,8 +22,6 @@ package Bugzilla::WebService::User;
use strict;
use base qw(Bugzilla::WebService);
-import SOAP::Data qw(type);
-
use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Error;
@@ -63,7 +61,7 @@ sub login {
$cgi->param('Bugzilla_remember', $remember);
Bugzilla->login;
- return { id => type('int')->value(Bugzilla->user->id) };
+ return { id => $self->type('int', Bugzilla->user->id) };
}
sub logout {
@@ -118,7 +116,7 @@ sub create {
cryptpassword => $password
});
- return { id => type('int')->value($user->id) };
+ return { id => $self->type('int', $user->id) };
}
@@ -149,9 +147,9 @@ sub get {
ThrowUserError('user_access_by_match_denied');
}
@users = map {filter $params, {
- id => type('int')->value($_->id),
- real_name => type('string')->value($_->name),
- name => type('string')->value($_->login),
+ id => $self->type('int', $_->id),
+ real_name => $self->type('string', $_->name),
+ name => $self->type('string', $_->login),
}} @user_objects;
return { users => \@users };
@@ -195,24 +193,24 @@ sub get {
if (Bugzilla->user->in_group('editusers')) {
@users =
map {filter $params, {
- id => type('int')->value($_->id),
- real_name => type('string')->value($_->name),
- name => type('string')->value($_->login),
- email => type('string')->value($_->email),
- can_login => type('boolean')->value(!($_->is_disabled)),
- email_enabled => type('boolean')->value($_->email_enabled),
- login_denied_text => type('string')->value($_->disabledtext),
+ id => $self->type('int', $_->id),
+ real_name => $self->type('string', $_->name),
+ name => $self->type('string', $_->login),
+ email => $self->type('string', $_->email),
+ can_login => $self->type('boolean', $_->is_disabled ? 0 : 1),
+ email_enabled => $self->type('boolean', $_->email_enabled),
+ login_denied_text => $self->type('string', $_->disabledtext),
}} @user_objects;
}
else {
@users =
map {filter $params, {
- id => type('int')->value($_->id),
- real_name => type('string')->value($_->name),
- name => type('string')->value($_->login),
- email => type('string')->value($_->email),
- can_login => type('boolean')->value(!($_->is_disabled)),
+ id => $self->type('int', $_->id),
+ real_name => $self->type('string', $_->name),
+ name => $self->type('string', $_->login),
+ email => $self->type('string', $_->email),
+ can_login => $self->type('boolean', $_->is_disabled ? 0 : 1),
}} @user_objects;
}