diff options
Diffstat (limited to 'Bugzilla/WebService/Server')
-rw-r--r-- | Bugzilla/WebService/Server/JSONRPC.pm | 26 | ||||
-rw-r--r-- | Bugzilla/WebService/Server/XMLRPC.pm | 22 |
2 files changed, 24 insertions, 24 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..a492266c6 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; @@ -288,7 +290,9 @@ API via: C<http://bugzilla.yourdomain.com/xmlrpc.cgi> =head1 PARAMETERS C<dateTime> fields are the standard C<dateTime.iso8601> XML-RPC field. They -should be in C<YYYY-MM-DDTHH:MM:SS> format (where C<T> is a literal T). +should be in C<YYYY-MM-DDTHH:MM:SS> format (where C<T> is a literal T). As +of Bugzilla B<3.6>, Bugzilla always expects C<dateTime> fields to be in the +UTC timezone, and all returned C<dateTime> values are in the UTC timezone. All other fields are standard XML-RPC types. @@ -306,6 +310,14 @@ Normally, XML-RPC does not allow empty values for C<int>, C<double>, or C<dateTime.iso8601> fields. Bugzilla does--it treats empty values as C<undef> (called C<NULL> or C<None> in some programming languages). +Bugzilla accepts a timezone specifier at the end of C<dateTime.iso8601> +fields that are specified as method arguments. The format of the timezone +specifier is specified in the ISO-8601 standard. If no timezone specifier +is included, the passed-in time is assumed to be in the UTC timezone. +Bugzilla will never output a timezone specifier on returned data, because +doing so would violate the XML-RPC specification. All returned times are in +the UTC timezone. + Bugzilla also accepts an element called C<< <nil> >>, as specified by the XML-RPC extension here: L<http://ontosys.com/xml-rpc/extensions.php>, which is always considered to be C<undef>, no matter what it contains. |