# -*- Mode: perl; indent-tabs-mode: nil -*- # # The contents of this file are subject to the Mozilla Public # License Version 1.1 (the "License"); you may not use this file # except in compliance with the License. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ # # Software distributed under the License is distributed on an "AS # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or # implied. See the License for the specific language governing # rights and limitations under the License. # # The Original Code is the Bugzilla Bug Tracking System. # # Contributor(s): Marc Schumann # Max Kanat-Alexander # Mads Bondo Dydensborg package Bugzilla::WebService::Bugzilla; use strict; use base qw(Bugzilla::WebService); use Bugzilla::Constants; use Bugzilla::Hook; use DateTime; # Basic info that is needed before logins use constant LOGIN_EXEMPT => { timezone => 1, version => 1, }; sub 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} = $self->type('string', $info->{$data}); } } return { extensions => $extensions }; } sub timezone { my $self = shift; my $offset = Bugzilla->local_timezone->offset_for_datetime(DateTime->now()); $offset = (($offset / 60) / 60) * 100; $offset = sprintf('%+05d', $offset); return { timezone => $self->type('string', $offset) }; } sub time { my ($self) = @_; my $dbh = Bugzilla->dbh; my $db_time = $dbh->selectrow_array('SELECT LOCALTIMESTAMP(0)'); my $now_utc = DateTime->now(); my $tz = Bugzilla->local_timezone; my $now_local = $now_utc->clone->set_time_zone($tz); my $tz_offset = $tz->offset_for_datetime($now_local); return { db_time => $self->type('dateTime', $db_time), web_time => $self->type('dateTime', $now_local), web_time_utc => $self->type('dateTime', $now_utc), tz_name => $self->type('string', $tz->name), tz_offset => $self->type('string', $tz->offset_as_string($tz_offset)), tz_short_name => $self->type('string', $now_local->time_zone_short_name), }; } 1; __END__ =head1 NAME Bugzilla::WebService::Bugzilla - Global functions for the webservice interface. =head1 DESCRIPTION This provides functions that tell you about Bugzilla in general. =head1 METHODS See L for a description of how parameters are passed, and what B, B, and B mean. =over =item C B =over =item B Returns the current version of Bugzilla. =item B (none) =item B A hash with a single item, C, that is the version as a string. =item B (none) =back =item C B =over =item B Gets information about the extensions that are currently installed and enabled in this Bugzilla. =item B (none) =item B A hash with a single item, C. This points to a hash. I hash contains the names of extensions as keys, and information about the extension as values. One of the values that must be returned is the 'version' of the extension =item B =over =item Added in Bugzilla B<3.2>. =back =back =item C B This method may be removed in a future version of Bugzilla. Use L instead. =over =item B Returns the timezone of the server Bugzilla is running on. This is important because all dates/times that the webservice interface returns will be in this timezone. =item B (none) =item B A hash with a single item, C, that is the timezone offset as a string in (+/-)XXXX (RFC 2822) format. =back =item C