X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=opac%2Fopac-ics.pl;h=4069ce78cadb4a964d5f1b175b90839a2a9b868d;hb=refs%2Fheads%2Fkoha_ffzg;hp=337a939a2b7be0b2ff0019108b30f20f233f8682;hpb=803095a7989bd1cd4357ebe9736a19284d97b2db;p=koha.git diff --git a/opac/opac-ics.pl b/opac/opac-ics.pl index 337a939a2b..4069ce78ca 100755 --- a/opac/opac-ics.pl +++ b/opac/opac-ics.pl @@ -4,93 +4,101 @@ # This file is part of Koha. # -# Koha is free software; you can redistribute it and/or modify it under the -# terms of the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any later -# version. +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. # -# Koha is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License along -# with Koha; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . # This script builds an ICalendar file (rfc 2445) for use in programs such as Ical -use strict; -use warnings; +use Modern::Perl; -use CGI; +use CGI qw ( -utf8 ); use Data::ICal; use Data::ICal::Entry::Event; use DateTime; use DateTime::Format::ICal; -use Date::Calc qw (Parse_Date); +use DateTime::Event::ICal; +use URI; use C4::Auth; use C4::Koha; use C4::Circulation; use C4::Members; -use C4::Dates; +use Koha::DateUtils; my $query = new CGI; my ( $template, $borrowernumber, $cookie ) = get_template_and_user( { - template_name => "opac-user.tmpl", + template_name => "opac-ics.tt", query => $query, type => "opac", authnotrequired => 0, - flagsrequired => { borrow => 1 }, debug => 1, } ); -# get borrower information .... -my ( $borr ) = GetMemberDetails( $borrowernumber ); - # Create Calendar my $calendar = Data::ICal->new(); -# get issued items .... -my ($issues) = GetPendingIssues($borrowernumber); +my $patron = Koha::Patrons->find( $borrowernumber ); +my $pending_checkouts = $patron->pending_checkouts; -foreach my $issue ( @$issues ) { +while ( my $c = $pending_checkouts->next ) { + my $issue = $c->unblessed_all_relateds; 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 + $issue->{overdue} = $c->is_overdue; + $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;