summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Attachment.pm10
-rw-r--r--Bugzilla/Attachment.pm10
-rw-r--r--Bugzilla/Util.pm51
-rw-r--r--CGI.pl2
-rwxr-xr-xattachment.cgi4
-rw-r--r--bug_form.pl14
-rwxr-xr-xchecksetup.pl1
-rw-r--r--defparams.pl8
-rw-r--r--globals.pl9
-rwxr-xr-xrequest.cgi2
-rw-r--r--t/004template.t1
-rw-r--r--t/007util.t17
-rw-r--r--template/en/default/attachment/list.html.tmpl2
-rw-r--r--template/en/default/attachment/show-multiple.html.tmpl2
-rw-r--r--template/en/default/bug/activity/table.html.tmpl2
-rw-r--r--template/en/default/bug/comments.html.tmpl2
-rw-r--r--template/en/default/bug/edit.html.tmpl5
-rw-r--r--template/en/default/request/queue.html.tmpl2
18 files changed, 100 insertions, 44 deletions
diff --git a/Attachment.pm b/Attachment.pm
index 53690170e..27d7fa2ca 100644
--- a/Attachment.pm
+++ b/Attachment.pm
@@ -69,8 +69,8 @@ sub query
# Retrieve a list of attachments for this bug and write them into an array
# of hashes in which each hash represents a single attachment.
&::SendSQL("
- SELECT attach_id, creation_ts, mimetype, description, ispatch,
- isobsolete, isprivate, submitter_id
+ SELECT attach_id, DATE_FORMAT(creation_ts, '%Y.%m.%d %H:%i'),
+ mimetype, description, ispatch, isobsolete, isprivate, submitter_id
FROM attachments WHERE bug_id = $bugid ORDER BY attach_id
");
my @attachments = ();
@@ -81,12 +81,6 @@ sub query
$a{'ispatch'}, $a{'isobsolete'}, $a{'isprivate'}, $submitter_id)
= &::FetchSQLData();
- # Format the attachment's creation/modification date into a standard
- # format (YYYY-MM-DD HH:MM)
- if ($a{'date'} =~ /^(\d\d\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/) {
- $a{'date'} = "$1-$2-$3 $4:$5";
- }
-
# Retrieve a list of flags for this attachment.
$a{'flags'} = Bugzilla::Flag::match({ 'attach_id' => $a{'attachid'} });
diff --git a/Bugzilla/Attachment.pm b/Bugzilla/Attachment.pm
index 53690170e..27d7fa2ca 100644
--- a/Bugzilla/Attachment.pm
+++ b/Bugzilla/Attachment.pm
@@ -69,8 +69,8 @@ sub query
# Retrieve a list of attachments for this bug and write them into an array
# of hashes in which each hash represents a single attachment.
&::SendSQL("
- SELECT attach_id, creation_ts, mimetype, description, ispatch,
- isobsolete, isprivate, submitter_id
+ SELECT attach_id, DATE_FORMAT(creation_ts, '%Y.%m.%d %H:%i'),
+ mimetype, description, ispatch, isobsolete, isprivate, submitter_id
FROM attachments WHERE bug_id = $bugid ORDER BY attach_id
");
my @attachments = ();
@@ -81,12 +81,6 @@ sub query
$a{'ispatch'}, $a{'isobsolete'}, $a{'isprivate'}, $submitter_id)
= &::FetchSQLData();
- # Format the attachment's creation/modification date into a standard
- # format (YYYY-MM-DD HH:MM)
- if ($a{'date'} =~ /^(\d\d\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/) {
- $a{'date'} = "$1-$2-$3 $4:$5";
- }
-
# Retrieve a list of flags for this attachment.
$a{'flags'} = Bugzilla::Flag::match({ 'attach_id' => $a{'attachid'} });
diff --git a/Bugzilla/Util.pm b/Bugzilla/Util.pm
index f87c6fbc6..efd107c0a 100644
--- a/Bugzilla/Util.pm
+++ b/Bugzilla/Util.pm
@@ -25,11 +25,13 @@
package Bugzilla::Util;
+use Bugzilla::Config;
+
use base qw(Exporter);
@Bugzilla::Util::EXPORT = qw(is_tainted trick_taint detaint_natural
html_quote url_quote value_quote
lsearch max min
- trim);
+ trim format_time);
use strict;
@@ -122,6 +124,36 @@ sub trim {
return $str;
}
+# Bug 67077
+sub format_time {
+ my ($time) = @_;
+
+ my ($year, $month, $day, $hour, $min);
+ if ($time =~ m/^\d{14}$/) {
+ # We appear to have a timestamp direct from MySQL
+ $year = substr($time,0,4);
+ $month = substr($time,4,2);
+ $day = substr($time,6,2);
+ $hour = substr($time,8,2);
+ $min = substr($time,10,2);
+ }
+ elsif ($time =~ m/^(\d{4})\.(\d{2})\.(\d{2}) (\d{2}):(\d{2})(:\d{2})?$/) {
+ $year = $1;
+ $month = $2;
+ $day = $3;
+ $hour = $4;
+ $min = $5;
+ }
+ else {
+ warn "Date/Time format ($time) unrecogonzied";
+ }
+
+ if (defined $year) {
+ $time = "$year-$month-$day $hour:$min " . &::Param('timezone');
+ }
+ return $time;
+}
+
1;
__END__
@@ -152,6 +184,9 @@ Bugzilla::Util - Generic utility functions for bugzilla
# Functions for trimming variables
$val = trim(" abc ");
+ # Functions for formatting time
+ format_time($time);
+
=head1 DESCRIPTION
This package contains various utility functions which do not belong anywhere
@@ -252,3 +287,17 @@ Removes any leading or trailing whitespace from a string. This routine does not
modify the existing string.
=back
+
+=head2 Formatting Time
+
+=over 4
+
+=item C<format_time($time)>
+
+Takes a time and appends the timezone as defined in editparams.cgi. This routine
+will be expanded in the future to adjust for user preferences regarding what
+timezone to display times in. In the future, it may also allow for the time to be
+shown in different formats.
+
+=back
+
diff --git a/CGI.pl b/CGI.pl
index 24f92c072..ef1c16d85 100644
--- a/CGI.pl
+++ b/CGI.pl
@@ -812,7 +812,7 @@ sub GetBugActivity {
SELECT IFNULL(fielddefs.description, bugs_activity.fieldid),
fielddefs.name,
bugs_activity.attach_id,
- bugs_activity.bug_when,
+ DATE_FORMAT(bugs_activity.bug_when,'%Y.%m.%d %H:%i'),
bugs_activity.removed, bugs_activity.added,
profiles.login_name
FROM bugs_activity LEFT JOIN fielddefs ON
diff --git a/attachment.cgi b/attachment.cgi
index 6e925e69a..27c2c107c 100755
--- a/attachment.cgi
+++ b/attachment.cgi
@@ -369,8 +369,8 @@ sub viewall
if (Param("insidergroup") && !(UserInGroup(Param("insidergroup")))) {
$privacy = "AND isprivate < 1 ";
}
- SendSQL("SELECT attach_id, creation_ts, mimetype, description,
- ispatch, isobsolete, isprivate
+ SendSQL("SELECT attach_id, DATE_FORMAT(creation_ts, '%Y.%m.%d %H:%i'),
+ mimetype, description, ispatch, isobsolete, isprivate
FROM attachments WHERE bug_id = $::FORM{'bugid'} $privacy
ORDER BY attach_id");
my @attachments; # the attachments array
diff --git a/bug_form.pl b/bug_form.pl
index e390ad51e..b4a2ef678 100644
--- a/bug_form.pl
+++ b/bug_form.pl
@@ -85,8 +85,7 @@ sub show_bug {
bug_severity, bugs.component_id, components.name, assigned_to,
reporter, bug_file_loc, short_desc, target_milestone,
qa_contact, status_whiteboard,
- date_format(creation_ts,'%Y-%m-%d %H:%i'),
- delta_ts, sum(votes.count), delta_ts calc_disp_date,
+ DATE_FORMAT(creation_ts,'%Y.%m.%d %H:%i'), delta_ts, sum(votes.count),
estimated_time, remaining_time
FROM bugs LEFT JOIN votes USING(bug_id), products, components
WHERE bugs.bug_id = $id
@@ -111,19 +110,10 @@ sub show_bug {
"priority", "bug_severity", "component_id", "component",
"assigned_to", "reporter", "bug_file_loc", "short_desc",
"target_milestone", "qa_contact", "status_whiteboard",
- "creation_ts", "delta_ts", "votes", "calc_disp_date",
+ "creation_ts", "delta_ts", "votes",
"estimated_time", "remaining_time")
{
$value = shift(@row);
- if ($field eq "calc_disp_date") {
- # Convert MySQL timestamp (_ts) to datetime format(%Y-%m-%d %H:%i)
- $disp_date = substr($value,0,4) . '-';
- $disp_date .= substr($value,4,2) . '-';
- $disp_date .= substr($value,6,2) . ' ';
- $disp_date .= substr($value,8,2) . ':';
- $disp_date .= substr($value,10,2);
- $value = $disp_date;
- }
$bug{$field} = defined($value) ? $value : "";
}
diff --git a/checksetup.pl b/checksetup.pl
index 5f947dabe..101583096 100755
--- a/checksetup.pl
+++ b/checksetup.pl
@@ -968,6 +968,7 @@ END
html_linebreak => sub { return $_; },
url_quote => sub { return $_; },
csv => sub { return $_; },
+ time => sub { return $_; },
},
}) || die ("Could not create Template Provider: "
. Template::Provider->error() . "\n");
diff --git a/defparams.pl b/defparams.pl
index ae0923295..3e4807dc2 100644
--- a/defparams.pl
+++ b/defparams.pl
@@ -231,6 +231,14 @@ sub check_netmask {
},
{
+ name => 'timezone',
+ desc => 'The timezone that your SQL server lives in. If set to "" then' .
+ 'the timezone can\'t be displayed with the timestamps.',
+ type => 't',
+ default => '',
+ },
+
+ {
name => 'enablequips',
desc => 'Controls the appearance of quips at the top of buglists.<ul> ' .
'<li>on - Bugzilla will display a quip, and lets users add to ' .
diff --git a/globals.pl b/globals.pl
index 07e9804c2..547fd1b95 100644
--- a/globals.pl
+++ b/globals.pl
@@ -1294,7 +1294,7 @@ sub GetLongDescriptionAsText {
my $result = "";
my $count = 0;
my $anyprivate = 0;
- my ($query) = ("SELECT profiles.login_name, longdescs.bug_when, " .
+ my ($query) = ("SELECT profiles.login_name, DATE_FORMAT(longdescs.bug_when,'%Y.%d.%m %H:%i'), " .
" longdescs.thetext, longdescs.isprivate " .
"FROM longdescs, profiles " .
"WHERE profiles.userid = longdescs.who " .
@@ -1316,7 +1316,7 @@ sub GetLongDescriptionAsText {
my ($who, $when, $text, $isprivate, $work_time) = (FetchSQLData());
if ($count) {
$result .= "\n\n------- Additional Comments From $who".Param('emailsuffix')." ".
- time2str("%Y-%m-%d %H:%M", str2time($when)) . " -------\n";
+ Bugzilla::Util::format_time($when) . " -------\n";
}
if (($isprivate > 0) && Param("insidergroup")) {
$anyprivate = 1;
@@ -1332,7 +1332,7 @@ sub GetComments {
my ($id) = (@_);
my @comments;
SendSQL("SELECT profiles.realname, profiles.login_name,
- date_format(longdescs.bug_when,'%Y-%m-%d %H:%i'),
+ date_format(longdescs.bug_when,'%Y.%m.%d %H:%i'),
longdescs.thetext, longdescs.work_time,
isprivate,
date_format(longdescs.bug_when,'%Y%m%d%H%i%s')
@@ -1793,6 +1793,9 @@ $::template ||= Template->new(
}
return $var;
} ,
+
+ # Format a time for display (more info in Bugzilla::Util)
+ time => \&Bugzilla::Util::format_time,
} ,
}
) || die("Template creation failed: " . Template->error());
diff --git a/request.cgi b/request.cgi
index c74e97e64..920ac79cf 100755
--- a/request.cgi
+++ b/request.cgi
@@ -76,7 +76,7 @@ sub queue {
flags.attach_id, attachments.description,
requesters.realname, requesters.login_name,
requestees.realname, requestees.login_name,
- flags.creation_date,
+ DATE_FORMAT(flags.creation_date,'%Y.%m.%d %H:%i'),
" .
# Select columns that help us weed out secure bugs to which the user
# should not have access.
diff --git a/t/004template.t b/t/004template.t
index bbcb9f860..6c44fca48 100644
--- a/t/004template.t
+++ b/t/004template.t
@@ -82,6 +82,7 @@ my $provider = Template::Provider->new(
strike => sub { return $_ } ,
url_quote => sub { return $_ } ,
csv => sub { return $_ } ,
+ time => sub { return $_ } ,
},
}
);
diff --git a/t/007util.t b/t/007util.t
index a683f407e..c32087d32 100644
--- a/t/007util.t
+++ b/t/007util.t
@@ -40,10 +40,19 @@ use lib 't';
use Support::Files;
BEGIN {
- use Test::More tests => 10;
+ use Test::More tests => 12;
use_ok(Bugzilla::Util);
}
+# We need to override the the Param() function so we can get an expected
+# value when Bugzilla::Utim::format_time calls asks for Param('timezone').
+# This will also prevent the tests from failing on site that do not have a
+# data/params file containing Param('timezone') yet.
+sub myParam {
+ return "TEST" if $_[0] eq 'timezone';
+}
+*::Param = *myParam;
+
# we don't test the taint functions since that's going to take some more work.
# XXX: test taint functions
@@ -69,3 +78,9 @@ is(min(@list),2,'min()');
#trim():
is(trim(" fg<*\$%>+=~~ "),'fg<*$%>+=~~','trim()');
+
+#format_time();
+is(format_time("20021123140436"),'2002-11-23 14:04 TEST','format_time("20021123140436")');
+is(format_time("2002.11.24 00:05:56"),'2002-11-24 00:05 TEST','format_time("2002.11.24 00:05:56")');
+
+
diff --git a/template/en/default/attachment/list.html.tmpl b/template/en/default/attachment/list.html.tmpl
index 265803602..d64e65953 100644
--- a/template/en/default/attachment/list.html.tmpl
+++ b/template/en/default/attachment/list.html.tmpl
@@ -50,7 +50,7 @@
[% END %]
</td>
- <td valign="top">[% attachment.date %]</td>
+ <td valign="top">[% attachment.date FILTER time %]</td>
[% IF show_attachment_flags %]
<td valign="top">
diff --git a/template/en/default/attachment/show-multiple.html.tmpl b/template/en/default/attachment/show-multiple.html.tmpl
index 5e12f622e..53149085a 100644
--- a/template/en/default/attachment/show-multiple.html.tmpl
+++ b/template/en/default/attachment/show-multiple.html.tmpl
@@ -58,7 +58,7 @@
[% END %]
</td>
- <td valign="top">[% a.date %]</td>
+ <td valign="top">[% a.date FILTER time %]</td>
<td valign="top">
[% IF a.statuses.size == 0 %]
diff --git a/template/en/default/bug/activity/table.html.tmpl b/template/en/default/bug/activity/table.html.tmpl
index 45c8e4380..95beaef14 100644
--- a/template/en/default/bug/activity/table.html.tmpl
+++ b/template/en/default/bug/activity/table.html.tmpl
@@ -61,7 +61,7 @@
[% operation.who %]
</td>
<td rowspan="[% operation.changes.size %]" valign="top">
- [% operation.when %]
+ [% operation.when FILTER time %]
</td>
[% FOREACH change = operation.changes %]
[% "</tr><tr>" IF loop.index > 0 %]
diff --git a/template/en/default/bug/comments.html.tmpl b/template/en/default/bug/comments.html.tmpl
index 6e97d9b1e..42971b327 100644
--- a/template/en/default/bug/comments.html.tmpl
+++ b/template/en/default/bug/comments.html.tmpl
@@ -44,7 +44,7 @@
<i>------- Additional Comment
<a name="c[% count %]" href="#c[% count %]">#[% count %]</a> From
<a href="mailto:[% comment.email FILTER html %]">[% comment.name FILTER html %]</a>
- [%+ comment.time %]
+ [%+ comment.time FILTER time %]
-------
</i>
[% END %]
diff --git a/template/en/default/bug/edit.html.tmpl b/template/en/default/bug/edit.html.tmpl
index 4af65af1c..aa56678dd 100644
--- a/template/en/default/bug/edit.html.tmpl
+++ b/template/en/default/bug/edit.html.tmpl
@@ -21,12 +21,13 @@
#%]
[% filtered_desc = bug.short_desc FILTER html %]
+[% filtered_timestamp = bug.delta_ts FILTER time %]
[% UNLESS header_done %]
[% PROCESS global/header.html.tmpl
title = "Bug $bug.bug_id - $bug.short_desc"
h1 = "Bugzilla Bug $bug.bug_id"
h2 = filtered_desc
- h3 = "Last modified: $bug.calc_disp_date"
+ h3 = "Last modified: $filtered_timestamp"
style_urls = [ "css/edit_bug.css" ]
%]
[% END %]
@@ -590,7 +591,7 @@
</b>
</td>
<td align="right" width="100%">
- Opened: [% bug.creation_ts %]
+ Opened: [% bug.creation_ts FILTER time %]
</td>
</tr>
</table>
diff --git a/template/en/default/request/queue.html.tmpl b/template/en/default/request/queue.html.tmpl
index fcf30ee6d..19e2cbe54 100644
--- a/template/en/default/request/queue.html.tmpl
+++ b/template/en/default/request/queue.html.tmpl
@@ -200,6 +200,6 @@
[% END %]
[% BLOCK display_created %]
- [% request.created FILTER html %]
+ [% request.created FILTER time %]
[% END %]