[Rt-commit] r17848 - in rt/3.999/trunk: .

sunnavy at bestpractical.com sunnavy at bestpractical.com
Wed Jan 21 00:58:54 EST 2009


Author: sunnavy
Date: Wed Jan 21 00:58:53 2009
New Revision: 17848

Modified:
   rt/3.999/trunk/   (props changed)
   rt/3.999/trunk/lib/RT/Date.pm

Log:
 r18934 at sunnavys-mb:  sunnavy | 2009-01-21 11:50:07 +0800
 merged lib/RT/Date.pm


Modified: rt/3.999/trunk/lib/RT/Date.pm
==============================================================================
--- rt/3.999/trunk/lib/RT/Date.pm	(original)
+++ rt/3.999/trunk/lib/RT/Date.pm	Wed Jan 21 00:58:53 2009
@@ -185,10 +185,14 @@
         require Time::ParseDate;
 
         # the module supports only legacy timezones like PDT or EST...
-        # so we parse date as GMT and later apply offset
+        # so we parse date as GMT and later apply offset, this only
+        # should be applied to absolute times, so compensate shift in NOW
+        my $now = time;
+        $now += ( $self->Localtime( $args{timezone}, $now ) )[9];
         my $date = Time::ParseDate::parsedate(
             $args{'value'},
             GMT           => 1,
+            NOW           => $now,
             UK            => RT->config->get('DateDayBeforeMonth'),
             PREFER_PAST   => RT->config->get('AmbiguousDayInPast'),
             PREFER_FUTURE => RT->config->get('AmbiguousDayInFuture'),
@@ -379,7 +383,8 @@
     my $self = shift;
     my $dow  = shift;
 
-    return _("$DAYS_OF_WEEK[$dow].") if $DAYS_OF_WEEK[$dow];
+    return _( $DAYS_OF_WEEK[$dow] )
+      if $DAYS_OF_WEEK[$dow];
     return '';
 }
 
@@ -394,7 +399,8 @@
     my $self = shift;
     my $mon  = shift;
 
-    return _("$MONTHS[$mon].") if $MONTHS[$mon];
+    return _( $MONTHS[$mon] )
+      if $MONTHS[$mon];
     return '';
 }
 
@@ -719,34 +725,45 @@
     return $res;
 }
 
-=head4 iCal
+=head4 ical
 
-Returns the date and time formatted as an ICalendar string -- that is,
-C<yyyymmddThhmmssZ>
+Returns the object's date and time in iCalendar format,
+
+Supports arguments: C<Date> and C<Time>.
+See </Output formatters> for description of arguments.
 
 =cut
 
-sub iCal {
+sub ical {
     my $self = shift;
     my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $ydaym, $isdst, $offset )
       = $self->localtime("UTC");
 
-    return sprintf( '%04d%02d%02dT%02d%02d%02dZ',
-        $year, $mon, $mday, $hour, $min, $sec );
+    #the month needs incrementing, as gmtime returns 0-11
+    $mon++;
+
+    my $res;
+    if ( $args{'date'} && !$args{'time'} ) {
+        $res = sprintf( '%04d%02d%02d', $year, $mon, $mday );
+    }
+    elsif ( !$args{'date'} && $args{'time'} ) {
+        $res = sprintf( 'T%02d%02d%02dZ', $hour, $min, $sec );
+    }
+    else {
+        $res = sprintf( '%04d%02d%02dT%02d%02d%02dZ',
+            $year, $mon, $mday, $hour, $min, $sec );
+    }
+    return $res;
+    
 }
 
-=head4 iCalDate
+=head4 ical_date
 
 Returns the date formatted as an ICalendar string -- that is, C<yyyymmddZ>
 
 =cut
 
-sub iCalDate {
-    my $self = shift;
-    my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $ydaym, $isdst, $offset )
-      = $self->localtime("UTC");
-    return sprintf( '%04d%02d%02dZ', $year, $mon, $mday );
-}
+sub ical_date { return (shift)->ical( time => 0, @_ ) }
 
 sub _split_offset {
     my ( $self, $offset ) = @_;
@@ -759,7 +776,7 @@
 
 =head2 timezones handling
 
-=head3 Localtime $context [$time]
+=head3 localtime $context [$time]
 
 Takes one mandatory argument C<$context>, which determines whether
 we want "user local", "system" or "UTC" time. Also, takes optional


More information about the Rt-commit mailing list