rt 4.2.14 (#13852)
[freeside.git] / rt / share / html / NoAuth / iCal / dhandler
index 0e9e812..1dc4666 100644 (file)
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 %#                                          <sales@bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -48,7 +48,6 @@
 <%init>
 use Data::ICal;
 use Data::ICal::Entry::Event;
-use Encode ();
 
 my $path = $m->dhandler_arg;
 
@@ -62,8 +61,8 @@ $notfound->() unless $path =~ m!^([^/]+)/([^/]+)/(.*)(\.(ical|ics))?!;
 my ($name, $auth, $search) = ($1, $2, $3);
 # Unescape parts
 $_ =~ s/\%([0-9a-z]{2})/chr(hex($1))/gei for $name, $search;
-# convert to perl strings
-$_ = Encode::decode_utf8( $_ ) for $name, $search;
+# Decode from bytes to characters
+$_ = Encode::decode( "UTF-8", $_ ) for $name, $search;
 
 my $user = RT::User->new( RT->SystemUser );
 $user->Load( $name );
@@ -86,34 +85,64 @@ $feed->add_properties('method'   => ['publish']);
 $feed->add_properties('prodid'   => ["-//" . RT->Config->Get('rtname') ."//"]);
 
 while (my $t = $tickets->Next) {
-    next unless $t->DueObj->Unix > 0;
+    next unless $t->DueObj->IsSet;
 
-    my $starttime = $t->StartsObj->Unix > 0 ? $t->StartsObj : $t->CreatedObj;
+    my $starttime = $t->StartsObj->IsSet ? $t->StartsObj : $t->CreatedObj;
+
+    my $url;
+    if ( RT->Config->Get('CanonicalizeURLsInFeeds') ) {
+        $url = RT->Config->Get('WebURL');
+    }
+    else {
+        $url = RT::Interface::Web::GetWebURLFromRequest();
+    }
+    $url .= "Ticket/Display.html?id=".$t->id,
 
     my $now = RT::Date->new( $cu ); $now->SetToNow;
     my $start = Data::ICal::Entry::Event->new;
     my $end   = Data::ICal::Entry::Event->new;
+
+
     $_->add_properties(
-        url       => RT->Config->Get('WebURL') . "Ticket/Display.html?id=".$t->id,
-        organizer => $t->OwnerObj->Name,
-        dtstamp   => $now->iCal,
-        created   => $t->CreatedObj->iCal,
+        url            => $url,
+        description    => $url,
+        organizer      => $t->OwnerObj->Name,
+        dtstamp        => $now->iCal,
+        created        => $t->CreatedObj->iCal,
        'last-modified' => $t->LastUpdatedObj->iCal,
     ) for $start, $end;
 
-    $start->add_properties(
-        summary   => "Start: ".$t->Subject,
-        dtstart   => [$starttime->iCal( Time => 0 ) => { value => 'DATE' }],
-        dtend     => [$starttime->iCal( Time => 0 ) => { value => 'DATE'}],
-    );
-    $end->add_properties(
-        summary   => "Due: ".$t->Subject,
-        dtstart   => [$t->DueObj->iCal( Time => 0 ) => { value => 'DATE' }],
-        dtend     => [$t->DueObj->iCal( Time => 0 ) => { value => 'DATE' }],
-    );
-
-    $feed->add_entry($start);
-    $feed->add_entry($end);
+    my %time = ( Time => 0 );
+    my %ical_value = ( value => 'DATE' );
+
+    if ( defined $ARGS{Time} ?
+         $ARGS{Time} : RT->Config->Get('TimeInICal', $user) ) {
+        $time{Time} = 1;
+        $ical_value{value} = 'DATE-TIME';
+    }
+
+    if( $ARGS{SingleEvent} ){
+        $start->add_properties(
+                               summary   => $t->Subject,
+                               dtstart   => [$starttime->iCal( %time ) => \%ical_value ],
+                               dtend     => [$t->DueObj->iCal( %time ) => \%ical_value ],
+                              );
+        $feed->add_entry($start);
+    }
+    else{
+        $start->add_properties(
+                               summary   => "Start: ".$t->Subject,
+                               dtstart   => [$starttime->iCal( %time ) => \%ical_value ],
+                               dtend     => [$starttime->iCal( %time ) => \%ical_value ],
+                              );
+        $end->add_properties(
+                             summary   => "Due: ".$t->Subject,
+                             dtstart   => [$t->DueObj->iCal( %time ) => \%ical_value ],
+                             dtend     => [$t->DueObj->iCal( %time ) => \%ical_value ],
+                            );
+        $feed->add_entry($start);
+        $feed->add_entry($end);
+    }
 }
 
 $m->clear_buffer;