use strict;
use Socket;
-use Time::Zone;
use Bugzilla::Util;
use Bugzilla::Constants;
check_sslbase check_priority check_severity check_platform
check_opsys check_shadowdb check_urlbase check_webdotbase
check_netmask check_user_verify_class check_image_converter
- check_mail_delivery_method check_notification check_timezone check_utf8
+ check_mail_delivery_method check_notification check_utf8
check_bug_status check_smtp_auth
);
return "";
}
-sub check_timezone {
- my $tz = shift;
- unless (defined(tz_offset($tz))) {
- return "must be empty or a legal timezone name, such as PDT or JST";
- }
- return "";
-}
-
sub check_smtp_auth {
my $username = shift;
if ($username) {
default => '/'
},
- {
- name => 'timezone',
- type => 't',
- default => '',
- checker => \&check_timezone
- },
-
{
name => 'utf8',
type => 'b',
use Cwd qw(abs_path);
use MIME::Base64;
-# for time2str - replace by TT Date plugin??
use Date::Format ();
use File::Basename qw(dirname);
use File::Find;
# Format a time for display (more info in Bugzilla::Util)
time => [ sub {
- my ($context, $format) = @_;
+ my ($context, $format, $timezone) = @_;
return sub {
my $time = shift;
- return format_time($time, $format);
+ return format_time($time, $format, $timezone);
};
},
1
use Date::Parse;
use Date::Format;
use DateTime;
+use DateTime::TimeZone;
use Text::Wrap;
# This is from the perlsec page, slightly modified to remove a warning
}
sub format_time {
- my ($date, $format) = @_;
+ my ($date, $format, $timezone) = @_;
# If $format is undefined, try to guess the correct date format.
if (!defined($format)) {
# Use the timezone specified by the server.
time_zone => Bugzilla->local_timezone});
- # Now display the date using the user's timezone.
- $dt->set_time_zone(Bugzilla->user->timezone);
+ # Now display the date using the given timezone,
+ # or the user's timezone if none is given.
+ $dt->set_time_zone($timezone || Bugzilla->user->timezone);
$date = $dt->strftime($format);
}
else {
=item C<format_time($time)>
-Takes a time, converts it to the desired format and appends the timezone
-as defined in editparams.cgi, if desired. This routine will be expanded
-in the future to adjust for user preferences regarding what timezone to
-display times in.
+Takes a time and converts it to the desired format and timezone.
+If no format is given, the routine guesses the correct one and returns
+an empty array if it cannot. If no timezone is given, the user's timezone
+is used, as defined in his preferences.
This routine is mainly called from templates to filter dates, see
-"FILTER time" in Templates.pm. In this case, $format is undefined and
-the routine has to "guess" the date format that was passed to $dbh->sql_date_format().
-
+"FILTER time" in L<Bugzilla::Template>.
=item C<format_time_decimal($time)>
use Bugzilla::Constants;
use Bugzilla::Hook;
-use Time::Zone;
+use DateTime;
# Basic info that is needed before logins
use constant LOGIN_EXEMPT => {
sub timezone {
my $self = shift;
- my $offset = tz_offset();
+ 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) };
# Utilities
################################################################################
-local our @weekday= qw( Sun Mon Tue Wed Thu Fri Sat );
sub DiffDate {
my ($datestr) = @_;
my $date = str2time($datestr);
my $age = time() - $date;
- my ($s,$m,$h,$d,$mo,$y,$wd)= localtime $date;
+
if( $age < 18*60*60 ) {
- $date = sprintf "%02d:%02d:%02d", $h,$m,$s;
+ $date = format_time($datestr, '%H:%M:%S');
} elsif( $age < 6*24*60*60 ) {
- $date = sprintf "%s %02d:%02d", $weekday[$wd],$h,$m;
+ $date = format_time($datestr, '%a %H:%M');
} else {
- $date = sprintf "%04d-%02d-%02d", 1900+$y,$mo+1,$d;
+ $date = format_time($datestr, '%Y-%m-%d');
}
return $date;
}
$bug->{'changeddate'} =~
s/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/$1-$2-$3 $4:$5:$6/;
- # Put in the change date as a time, so that the template date plugin
- # can format the date in any way needed by the template. ICS and Atom
- # have specific, and different, date and time formatting.
- $bug->{'changedtime'} = str2time($bug->{'changeddate'}, Bugzilla->params->{'timezone'});
- $bug->{'changeddate'} = DiffDate($bug->{'changeddate'});
+ $bug->{'changedtime'} = $bug->{'changeddate'}; # for iCalendar and Atom
+ $bug->{'changeddate'} = DiffDate($bug->{'changeddate'});
}
if ($bug->{'opendate'}) {
- # Put in the open date as a time for the template date plugin.
- $bug->{'opentime'} = str2time($bug->{'opendate'}, Bugzilla->params->{'timezone'});
+ $bug->{'opentime'} = $bug->{'opendate'}; # for iCalendar
$bug->{'opendate'} = DiffDate($bug->{'opendate'});
}
</listitem>
</varlistentry>
- <varlistentry>
- <term>
- timezone
- </term>
- <listitem>
- <para>
- Timezone of server. The timezone is displayed with timestamps. If
- this parameter is left blank, the timezone is not displayed.
- </para>
- </listitem>
- </varlistentry>
-
<varlistentry>
<term>
utf8
push @{$vars->{'available_queries'}}, $query;
}
$vars->{'token'} = issue_session_token('edit_whine');
+$vars->{'local_timezone'} = Bugzilla->local_timezone->short_name_for_datetime(DateTime->now());
$template->process("whine/schedule.html.tmpl", $vars)
|| ThrowTemplateError($template->error());
my $comments;
$comments .= "\n\n--- Bug imported by $exporter_login ";
- $comments .= time2str( "%Y-%m-%d %H:%M", time ) . " ";
- $comments .= $params->{'timezone'};
+ $comments .= format_time(localtime(time()), '%Y-%m-%d %H:%M %Z') . " ";
$comments .= " ---\n\n";
$comments .= "This bug was previously known as _bug_ $bug_fields{'bug_id'} at ";
$comments .= $urlbase . "show_bug.cgi?id=" . $bug_fields{'bug_id'} . "\n";
"all sites served by this web server or virtual host to read " _
"$terms.Bugzilla cookies.",
- timezone => "The timezone that your database server lives in, " _
- "such as UTC, PDT or JST. If set to '', " _
- "then the timezone will not be displayed with the timestamps.",
-
utf8 => "Use UTF-8 (Unicode) encoding for all text in ${terms.Bugzilla}. New " _
"installations should set this to true to avoid character encoding " _
"problems. <strong>Existing databases should set this to true " _
# Frédéric Buclin <LpSolit@gmail.com>
#%]
-[% USE date %]
-
[% PROCESS "global/field-descs.none.tmpl" %]
[% title = "Time Summary " %]
#%]
[% PROCESS global/variables.none.tmpl %]
-[% USE date %]
[% DEFAULT title = "$terms.Bugzilla $terms.Bugs" %]
<link rel="self" type="application/atom+xml"
href="[% urlbase FILTER html %]buglist.cgi?
[%- urlquerypart FILTER xml %]"/>
- <updated>[% date.format(format=>"%Y-%m-%dT%H:%M:%SZ",
- time=>bugs.nsort('changedtime').last.changedtime,
- gmt=>1) FILTER xml %]</updated>
+ <updated>[% bugs.nsort('changedtime').last.changedtime FILTER time("%Y-%m-%dT%H:%M:%SZ", "UTC")
+ FILTER xml %]</updated>
<id>[% urlbase FILTER html %]buglist.cgi?[% urlquerypart FILTER xml %]</id>
[% FOREACH bug = bugs %]
<author>
<name>[% bug.reporter_realname FILTER xml %]</name>
</author>
- <updated>[% date.format(format=>"%Y-%m-%dT%H:%M:%SZ",time=>bug.changedtime,
- gmt=>1) FILTER xml %]</updated>
+ <updated>[% bug.changedtime FILTER time("%Y-%m-%dT%H:%M:%SZ", "UTC") FILTER xml %]</updated>
<summary type="html">
[%# Filter out the entire block, so that we don't need to escape the html code out %]
[% FILTER xml %]
#%]
[% PROCESS "global/field-descs.none.tmpl" %]
-[% USE date %]
[% colsepchar = user.settings.csv_colsepchar.value %]
[% colsepchar %]
[% IF column == "opendate" OR column == "changeddate" %]
[% rawcolumn = column.replace("date", "time") %]
- [% bug.$column = date.format(bug.$rawcolumn, "%Y-%m-%d %H:%M:%S") %]
+ [% bug.$column = bug.$rawcolumn FILTER time("%Y-%m-%d %H:%M:%S") %]
[% ELSIF column == 'bug_status' %]
[% bug.$column = get_status(bug.$column) %]
[% ELSIF column == 'resolution' %]
[%+ PROCESS ics_status bug_status = bug.bug_status +%]
[%+ PROCESS ics_dtstamp +%]
[% IF bug.changeddate %]
-[%+ time2str("%Y%m%dT%H%M%SZ", bug.changedtime, "UTC") FILTER ics('LAST-MODIFIED') +%]
+[%+ bug.changedtime FILTER time("%Y%m%dT%H%M%SZ", "UTC") FILTER ics('LAST-MODIFIED') +%]
[% END %]
[% IF bug.percentage_complete %]
[%+ bug.percentage_complete FILTER format('%d') FILTER ics('PERCENT-COMPLETE') +%]
[% END %]
[% BLOCK ics_dtstart %]
- [% time2str("%Y%m%dT%H%M%SZ", bug.opentime, "UTC") FILTER ics('DTSTART') %]
+ [% bug.opentime FILTER time("%Y%m%dT%H%M%SZ", "UTC") FILTER ics('DTSTART') %]
[% END %]
[% BLOCK ics_dtstamp %]
- [% time2str("%Y%m%dT%H%M%SZ", currenttime, "UTC") FILTER ics('DTSTAMP') %]
+ [% currenttime FILTER time("%Y%m%dT%H%M%SZ", "UTC") FILTER ics('DTSTAMP') %]
[% END %]
[% BLOCK ics_status %]
</p>
<p>
- [% IF Param("timezone") %]
- All times are server local time ([% Param("timezone") FILTER upper %]).
- [% ELSE %]
- All times are server local time.
- [% END %]
+ All times are server local time ([% local_timezone FILTER html %]).
</p>
<form method="post" action="editwhines.cgi">