From 6cf3c88ecb5077a9c6f3941fbae139f3e6937430 Mon Sep 17 00:00:00 2001 From: "mkanat%bugzilla.org" <> Date: Tue, 1 Jul 2008 13:19:20 +0000 Subject: Bug 437617: Make "type" a method of Bugzilla::WebService Patch By Max Kanat-Alexander r=dkl, a=mkanat --- Bugzilla/WebService.pm | 9 +++++++++ Bugzilla/WebService/Bug.pm | 31 ++++++++++++++----------------- Bugzilla/WebService/Bugzilla.pm | 14 ++++++++------ Bugzilla/WebService/Product.pm | 7 +++---- Bugzilla/WebService/User.pm | 36 +++++++++++++++++------------------- 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; } -- cgit v1.2.3-24-g4f1b