diff options
-rw-r--r-- | Attachment.pm | 10 | ||||
-rw-r--r-- | Bugzilla/Attachment.pm | 10 | ||||
-rw-r--r-- | Bugzilla/Util.pm | 51 | ||||
-rw-r--r-- | CGI.pl | 2 | ||||
-rwxr-xr-x | attachment.cgi | 4 | ||||
-rw-r--r-- | bug_form.pl | 14 | ||||
-rwxr-xr-x | checksetup.pl | 1 | ||||
-rw-r--r-- | defparams.pl | 8 | ||||
-rw-r--r-- | globals.pl | 9 | ||||
-rwxr-xr-x | request.cgi | 2 | ||||
-rw-r--r-- | t/004template.t | 1 | ||||
-rw-r--r-- | t/007util.t | 17 | ||||
-rw-r--r-- | template/en/default/attachment/list.html.tmpl | 2 | ||||
-rw-r--r-- | template/en/default/attachment/show-multiple.html.tmpl | 2 | ||||
-rw-r--r-- | template/en/default/bug/activity/table.html.tmpl | 2 | ||||
-rw-r--r-- | template/en/default/bug/comments.html.tmpl | 2 | ||||
-rw-r--r-- | template/en/default/bug/edit.html.tmpl | 5 | ||||
-rw-r--r-- | template/en/default/request/queue.html.tmpl | 2 |
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 + @@ -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 %] |