summaryrefslogtreecommitdiffstats
path: root/Bugzilla/WebService/Server
diff options
context:
space:
mode:
authorJustin Wood <Callek@gmail.com>2010-03-04 20:28:32 +0100
committerJustin Wood <Callek@gmail.com>2010-03-04 20:28:32 +0100
commit9a9405da0b6b5baf8157206d34ba3895fb33b788 (patch)
tree32d3d3ce23bb242c7d68515bfd92e4a8eb140ebd /Bugzilla/WebService/Server
parentb30aeba04609049378374441209f7e808931e198 (diff)
downloadbugzilla-9a9405da0b6b5baf8157206d34ba3895fb33b788.tar.gz
bugzilla-9a9405da0b6b5baf8157206d34ba3895fb33b788.tar.xz
Bug 545299, XML-RPC WebService should take and return dates and times in UTC. Code part, r+=mkanat
Diffstat (limited to 'Bugzilla/WebService/Server')
-rw-r--r--Bugzilla/WebService/Server/JSONRPC.pm26
-rw-r--r--Bugzilla/WebService/Server/XMLRPC.pm10
2 files changed, 13 insertions, 23 deletions
diff --git a/Bugzilla/WebService/Server/JSONRPC.pm b/Bugzilla/WebService/Server/JSONRPC.pm
index f929b28ac..d07901a7f 100644
--- a/Bugzilla/WebService/Server/JSONRPC.pm
+++ b/Bugzilla/WebService/Server/JSONRPC.pm
@@ -27,7 +27,6 @@ use base qw(JSON::RPC::Server::CGI Bugzilla::WebService::Server);
use Bugzilla::Error;
use Bugzilla::WebService::Constants;
use Bugzilla::WebService::Util qw(taint_data);
-use Bugzilla::Util qw(datetime_from);
sub new {
my $class = shift;
@@ -77,20 +76,17 @@ sub type {
}
elsif ($type eq 'dateTime') {
# ISO-8601 "YYYYMMDDTHH:MM:SS" with a literal T
- $retval = $self->datetime_format($value);
+ $retval = $self->datetime_format_outbound($value);
}
# XXX Will have to implement base64 if Bugzilla starts using it.
return $retval;
}
-sub datetime_format {
- my ($self, $date_string) = @_;
-
- # YUI expects ISO8601 in UTC time; uncluding TZ specifier
- my $time = datetime_from($date_string, 'UTC');
- my $iso_datetime = $time->iso8601() . 'Z';
- return $iso_datetime;
+sub datetime_format_outbound {
+ my $self = shift;
+ # YUI expects ISO8601 in UTC time; including TZ specifier
+ return $self->SUPER::datetime_format_outbound(@_) . 'Z';
}
@@ -192,10 +188,10 @@ sub _argument_type_check {
my $value = $params->{$field};
if (ref $value eq 'ARRAY') {
$params->{$field} =
- [ map { $self->_bz_convert_datetime($_) } @$value ];
+ [ map { $self->datetime_format_inbound($_) } @$value ];
}
else {
- $params->{$field} = $self->_bz_convert_datetime($value);
+ $params->{$field} = $self->datetime_format_inbound($value);
}
}
}
@@ -220,14 +216,6 @@ sub _argument_type_check {
return $params;
}
-sub _bz_convert_datetime {
- my ($self, $time) = @_;
-
- my $converted = datetime_from($time, Bugzilla->local_timezone);
- $time = $converted->ymd() . ' ' . $converted->hms();
- return $time
-}
-
sub handle_login {
my $self = shift;
diff --git a/Bugzilla/WebService/Server/XMLRPC.pm b/Bugzilla/WebService/Server/XMLRPC.pm
index f06c81fc7..04e38c4a0 100644
--- a/Bugzilla/WebService/Server/XMLRPC.pm
+++ b/Bugzilla/WebService/Server/XMLRPC.pm
@@ -106,10 +106,12 @@ sub decode_value {
# We convert dateTimes to a DB-friendly date format.
if ($type eq 'dateTime.iso8601') {
- # We leave off the $ from the end of this regex to allow for possible
- # extensions to the XML-RPC date standard.
- $value =~ /^(\d{4})(\d{2})(\d{2})T(\d{2}):(\d{2}):(\d{2})/;
- $value = "$1-$2-$3 $4:$5:$6";
+ if ($value !~ /T.*[\-+Z]/i) {
+ # The caller did not specify a timezone, so we assume UTC.
+ # pass 'Z' specifier to datetime_from to force it
+ $value = $value . 'Z';
+ }
+ $value = $self->datetime_format_inbound($value);
}
return $value;