X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Fshare%2Fhtml%2FNoAuth%2FiCal%2Fdhandler;h=1877ad1d2853cd41769d952576c1956380b1020f;hb=44dd00a3ff974a17999e86e64488e996edc71e3c;hp=338db8b0fc0e9c62242f99e5e20b1dbf4d881343;hpb=7588a4ac90a9b07c08a3107cd1107d773be1c991;p=freeside.git diff --git a/rt/share/html/NoAuth/iCal/dhandler b/rt/share/html/NoAuth/iCal/dhandler index 338db8b0f..1877ad1d2 100644 --- a/rt/share/html/NoAuth/iCal/dhandler +++ b/rt/share/html/NoAuth/iCal/dhandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2019 Best Practical Solutions, LLC %# %# %# (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;