]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 67077 - We now include the timezone (as configured in editparams.cgi) on every...
authorjake%bugzilla.org <>
Thu, 28 Nov 2002 00:00:20 +0000 (00:00 +0000)
committerjake%bugzilla.org <>
Thu, 28 Nov 2002 00:00:20 +0000 (00:00 +0000)
r=justdave
a=justdave

18 files changed:
Attachment.pm
Bugzilla/Attachment.pm
Bugzilla/Util.pm
CGI.pl
attachment.cgi
bug_form.pl
checksetup.pl
defparams.pl
globals.pl
request.cgi
t/004template.t
t/007util.t
template/en/default/attachment/list.html.tmpl
template/en/default/attachment/show-multiple.html.tmpl
template/en/default/bug/activity/table.html.tmpl
template/en/default/bug/comments.html.tmpl
template/en/default/bug/edit.html.tmpl
template/en/default/request/queue.html.tmpl

index 53690170e202106d23db569284e91f92504b85d5..27d7fa2cab76ce3749beefea0c16dccaa877020b 100644 (file)
@@ -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'} });
     
index 53690170e202106d23db569284e91f92504b85d5..27d7fa2cab76ce3749beefea0c16dccaa877020b 100644 (file)
@@ -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'} });
     
index f87c6fbc6220443567de09c7c4a77636d3173180..efd107c0ad7533c10ba63730b70b2f99e68257c9 100644 (file)
 
 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 24f92c072fd88305e84553e72aaa95745dd0d745..ef1c16d853be43853e932086d32318a6fc327eb6 100644 (file)
--- 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 
index 6e925e69ab54d2093f0b60e6822119425d08fd4f..27c2c107c16909e16266c874c8537bd0a4d7e369 100755 (executable)
@@ -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
index e390ad51ef1b7f179edbcd3e6d364f8d86d3b445..b4a2ef67841b279081722f91aa572ee04a0eadd4 100644 (file)
@@ -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 : "";
     }
 
index 5f947dabef324c5f90fecc890e6f68fe99fc072b..101583096de147fc5f4c6ed890a349c7c2cc2eb0 100755 (executable)
@@ -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");
index ae09232951254428c53d4ca65e07ba89ca2075c7..3e4807dc242ba820a563d721f0ebc58f60d7d4ec 100644 (file)
@@ -230,6 +230,14 @@ sub check_netmask {
    default => '/'
   },
 
+  {
+   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> ' .
index 07e9804c259a0054c9f90ebe7d4400721fb132db..547fd1b958560828ec0737b52173d26fecd4c987 100644 (file)
@@ -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());
index c74e97e64cc475fa078cb19c79ad66ef60c5c858..920ac79cfdb0c85b38df70545c9222f944defd3b 100755 (executable)
@@ -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.
index bbcb9f860ac9971bc50ca5f478527939dc3ccaee..6c44fca48570c0e69676a1f0778d8f6e2a5a654f 100644 (file)
@@ -82,6 +82,7 @@ my $provider = Template::Provider->new(
         strike    => sub { return $_ } ,
         url_quote => sub { return $_ } ,
         csv       => sub { return $_ } ,
+        time      => sub { return $_ } ,
     },
 }
 );
index a683f407e66f9a4a9dcb22773d7d4c89b833aad3..c32087d321e82b021af74b99091ccc31ca4cfabd 100644 (file)
@@ -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")');
+
+
index 2658036024d60a466c76dfc82cdd10e734b58c77..d64e6595355f562f10f4b1c0ec0594a6bef7e18e 100644 (file)
@@ -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">
index 5e12f622ed30316ffea295b77b2c6826890bace5..53149085a8db94bc2cbc82c02517a07040fcd95e 100644 (file)
@@ -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 %]
index 45c8e43802510c73c6297fda0095e3e0e78717e3..95beaef14061d315e4699e2eb561b1076188a6c9 100644 (file)
@@ -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 %]
index 6e97d9b1e7bf829ee3db807dc99b192d2132f5ae..42971b327d24b3e4e2f2927acf1f423d2dd0b6bd 100644 (file)
@@ -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 %]
index 4af65af1c4259868232d6676bd195ae54cb45a47..aa56678dd803ba1f6c318712f4770673bdd1b171 100644 (file)
   #%]
 
 [% 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 %]
       </b>
     </td>
     <td align="right" width="100%">
-      Opened: [% bug.creation_ts %]
+      Opened: [% bug.creation_ts FILTER time %]
     </td>
   </tr>
 </table>
index fcf30ee6d3f0fd78e0271e2ddcf93d9ceffcef78..19e2cbe54ceffa9db542da268a02ad0e96116f60 100644 (file)
 [% END %]
 
 [% BLOCK display_created %]
-  [% request.created FILTER html %]
+  [% request.created FILTER time %]
 [% END %]