diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-ics.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-ics.tt new file mode 100644 index 0000000000..8743ec76c2 --- /dev/null +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-ics.tt @@ -0,0 +1,8 @@ +[%# First line will be summary, second line will be description. Avoid indenting. -%] +[%- IF overdue == 1 -%] +[% title %] is overdue +Your copy of [% title %] (barcode [% barcode %]) is overdue +[%- ELSE -%] +[% title %] is due +Your copy of [% title %] (barcode [% barcode %]) is due back at the library today +[%- END -%] diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt index 00c6b89b2c..9aa4cc3c77 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt @@ -311,6 +311,7 @@ Using this account is not recommended because some parts of Koha will not functi [% END %] +

Download as iCal/.ics file

[% ELSE %] diff --git a/opac/opac-ics.pl b/opac/opac-ics.pl index f92d5aadd4..c4da67e829 100755 --- a/opac/opac-ics.pl +++ b/opac/opac-ics.pl @@ -27,19 +27,19 @@ use Data::ICal; use Data::ICal::Entry::Event; use DateTime; use DateTime::Format::ICal; -use Date::Calc qw (Parse_Date); -use DateTime; use DateTime::Event::ICal; +use URI; use C4::Auth; use C4::Koha; use C4::Circulation; use C4::Members; +use Koha::DateUtils; my $query = new CGI; my ( $template, $borrowernumber, $cookie ) = get_template_and_user( { - template_name => "opac-user.tt", + template_name => "opac-ics.tt", query => $query, type => "opac", authnotrequired => 0, @@ -55,39 +55,49 @@ my $issues = GetPendingIssues($borrowernumber); foreach my $issue ( @$issues ) { my $vevent = Data::ICal::Entry::Event->new(); - my ($year,$month,$day)=Parse_Date($issue->{'date_due'}); - ($year,$month,$day)=split /-|\/|\.|:/,$issue->{'date_due'} unless ($year && $month); -# Decode_Date_EU2($string)) - my $datestart = DateTime->new( - day => $day, - month => $month, - year => $year, - hour => 9, - minute => 0, - second => 0 - ); - my $dateend = DateTime->new( - day => $day, - month => $month, - year => $year, - hour => 10, - minute => 0, - second => 0 + my $timestamp = DateTime->now(); # Defaults to UTC + # Send some values to the template to generate summary and description + $template->param( + overdue => $issue->{'overdue'}, + title => $issue->{'title'}, + barcode => $issue->{'barcode'}, ); + # Catch the result of the template and split on newline + my ($summary,$description) = split /\n/, $template->output; + my $datestart; + if ($issue->{'overdue'} && $issue->{'overdue'} == 1) { + # Not much use adding an event in the past for a book that is overdue + # so we set datestart = now + $datestart = $timestamp; + } else { + $datestart = dt_from_string($issue->{'date_due'}); + $datestart->set_time_zone('UTC'); + } + # Create a UID that includes the issue number and the domain + my $domain = ''; + my $baseurl = C4::Context->preference('OPACBaseURL'); + if ( $baseurl ne '' ) { + my $url = URI->new($baseurl); + $domain = $url->host; + } else { + warn "Make sure the systempreference OPACBaseURL is set!"; + } + my $uid = 'issue-' . $issue->{'issue_id'} . '@' . $domain; + # Create the event $vevent->add_properties( - summary => "$issue->{'title'} Due", - description => -"Your copy of $issue->{'title'} barcode $issue->{'barcode'} is due back at the library today", - dtstart => DateTime::Format::ICal->format_datetime($datestart), - dtend => DateTime::Format::ICal->format_datetime($dateend), + summary => $summary, + description => $description, + dtstamp => DateTime::Format::ICal->format_datetime($timestamp), + dtstart => DateTime::Format::ICal->format_datetime($datestart), + uid => $uid, ); + # Add it to the calendar $calendar->add_entry($vevent); } print $query->header( - -type => 'application/octet-stream', + -type => 'application/octet-stream', -attachment => 'koha.ics' ); - print $calendar->as_string;
You have nothing checked out