X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=opac%2Fopac-ics.pl;h=62603f3a2f43a2d45e7996d495cbdac72737c901;hb=1c115fcff70271246c500d5b5f9290c47b715693;hp=ec03b70b049a2e7b204a5b0a60e40c405d96b69a;hpb=cdbbf1e7d8de0518ded4e122709c24316cdefbe5;p=koha-ffzg.git diff --git a/opac/opac-ics.pl b/opac/opac-ics.pl index ec03b70b04..62603f3a2f 100755 --- a/opac/opac-ics.pl +++ b/opac/opac-ics.pl @@ -4,90 +4,96 @@ # 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., 59 Temple Place, -# Suite 330, Boston, MA 02111-1307 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 CGI; +use Modern::Perl; + +use CGI qw ( -utf8 ); use Data::ICal; use Data::ICal::Entry::Event; -use Date::ICal; -use Date::Calc qw (Parse_Date); +use DateTime; +use DateTime::Format::ICal; +use DateTime::Event::ICal; +use URI; -use C4::Auth; -use C4::Koha; -use C4::Circulation::Circ2; -use C4::Date; +use C4::Auth qw( get_template_and_user ); +use Koha::DateUtils qw( dt_from_string ); -my $query = new CGI; +my $query = CGI->new; 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, $flags ) = getpatroninformation( undef, $borrowernumber ); - # Create Calendar my $calendar = Data::ICal->new(); -# get issued items .... -my $issues = getissues($borr); +my $patron = Koha::Patrons->find( $borrowernumber ); +my $pending_checkouts = $patron->pending_checkouts; -foreach my $key ( keys %$issues ) { - my $issue = $issues->{$key}; +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 = Date::ICal->new( - day => $day, - month => $month, - year => $year, - hour => 9, - min => 0, - sec => 0 - )->ical; - my $dateend = Date::ICal->new( - day => $day, - month => $month, - year => $year, - hour => 10, - min => 0, - sec => 0 - )->ical; + my $timestamp = dt_from_string(undef,undef,"UTC"); #Get current time in 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 => $datestart, - dtend => $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;