X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=opac%2Fopac-downloadcart.pl;h=1f4b20d1fb419d98783e0e52b2274c3fcb4df28b;hb=28fd57d78a69a9bb7963597ddc8ec7a70883c7e1;hp=3a4cdc1051f37a8b0ccdff77b8b2171055e130c0;hpb=bd73c9f9ce8d161a1ed0f2e1205e5c0c8eecb0ae;p=koha-ffzg.git diff --git a/opac/opac-downloadcart.pl b/opac/opac-downloadcart.pl index 3a4cdc1051..1f4b20d1fb 100755 --- a/opac/opac-downloadcart.pl +++ b/opac/opac-downloadcart.pl @@ -4,43 +4,42 @@ # # 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 . -use strict; -use warnings; +use Modern::Perl; -use CGI; -use Encode qw(encode); +use CGI qw ( -utf8 ); +use Encode qw( encode ); -use C4::Auth; -use C4::Biblio; -use C4::Items; -use C4::Output; -use C4::VirtualShelves; +use C4::Auth qw( get_template_and_user ); +use C4::Biblio qw( GetFrameworkCode GetISBDView ); +use C4::Output qw( output_html_with_http_headers ); use C4::Record; -use C4::Ris; -use C4::Csv; +use C4::Ris qw( marc2ris ); +use Koha::Biblios; +use Koha::CsvProfiles; +use Koha::RecordProcessor; + use utf8; -my $query = new CGI; +my $query = CGI->new(); my ( $template, $borrowernumber, $cookie ) = get_template_and_user ( { - template_name => "opac-downloadcart.tmpl", + template_name => "opac-downloadcart.tt", query => $query, type => "opac", - authnotrequired => 1, - flagsrequired => { borrow => 1 }, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), } ); @@ -50,25 +49,54 @@ my $dbh = C4::Context->dbh; if ($bib_list && $format) { + my $patron = Koha::Patrons->find($borrowernumber); + my @bibs = split( /\//, $bib_list ); - my $marcflavour = C4::Context->preference('marcflavour'); + my $marcflavour = C4::Context->preference('marcflavour'); my $output; + my $extension; + my $type; # CSV if ($format =~ /^\d+$/) { + my $csv_profile = Koha::CsvProfiles->find($format); + if ( not $csv_profile or $csv_profile->staff_only ) { + print $query->redirect('/cgi-bin/koha/errors/404.pl'); + exit; + } + $output = marc2csv(\@bibs, $format); # Other formats } else { - foreach my $biblio (@bibs) { + my $record_processor = Koha::RecordProcessor->new({ + filters => 'ViewPolicy' + }); + foreach my $biblionumber (@bibs) { + + my $biblio = Koha::Biblios->find($biblionumber); + my $record = $biblio->metadata->record( + { + embed_items => 1, + opac => 1, + patron => $patron, + } + ); + my $framework = &GetFrameworkCode( $biblio ); + $record_processor->options({ + interface => 'opac', + frameworkcode => $framework + }); + $record_processor->process($record); - my $record = GetMarcBiblio($biblio, 1); next unless $record; if ($format eq 'iso2709') { - $output .= $record->as_usmarc(); + #NOTE: If we don't explicitly UTF-8 encode the output, + #the browser will guess the encoding, and it won't always choose UTF-8. + $output .= encode("UTF-8", $record->as_usmarc()) // q{}; } elsif ($format eq 'ris') { $output .= marc2ris($record); @@ -76,6 +104,16 @@ if ($bib_list && $format) { elsif ($format eq 'bibtex') { $output .= marc2bibtex($record, $biblio); } + elsif ( $format eq 'isbd' ) { + my $framework = GetFrameworkCode( $biblio ); + $output .= GetISBDView({ + 'record' => $record, + 'template' => 'opac', + 'framework' => $framework, + }); + $extension = "txt"; + $type = "text/plain"; + } } } @@ -83,13 +121,22 @@ if ($bib_list && $format) { $format = "csv" if ($format =~ m/^\d+$/); print $query->header( - -type => 'application/octet-stream', - -'Content-Transfer-Encoding' => 'binary', - -attachment=>"cart.$format"); + -type => ($type) ? $type : 'application/octet-stream', + -'Content-Transfer-Encoding' => 'binary', + -attachment => ($extension) ? "cart.$format.$extension" : "cart.$format" + ); print $output; } else { - $template->param(csv_profiles => GetCsvProfilesLoop()); - $template->param(bib_list => $bib_list); + $template->param( + csv_profiles => Koha::CsvProfiles->search( + { + type => 'marc', + used_for => 'export_records', + staff_only => 0 + } + ), + bib_list => $bib_list, + ); output_html_with_http_headers $query, $cookie, $template->output; }