X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=opac%2Fopac-downloadcart.pl;h=ade1a53770a246415bcfe0d4af71f5ab6c8da9a8;hb=9d6d641d1f8b77271800f43bc027b651f9aea52b;hp=ff1b58f49caacc96feac4383f9014640b7e121e9;hpb=89afee2810dc245e5be440f91f501adfc047a2f5;p=srvgit diff --git a/opac/opac-downloadcart.pl b/opac/opac-downloadcart.pl index ff1b58f49c..ade1a53770 100755 --- a/opac/opac-downloadcart.pl +++ b/opac/opac-downloadcart.pl @@ -4,44 +4,41 @@ # # 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. - -use strict; -use warnings; - -use CGI; -use Encode qw(encode); -use Switch; - -use C4::Auth; -use C4::Biblio; -use C4::Items; -use C4::Output; -use C4::VirtualShelves; +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . + +use Modern::Perl; + +use CGI qw ( -utf8 ); +use Encode qw( encode ); + +use C4::Auth qw( get_template_and_user ); +use C4::Biblio qw( GetFrameworkCode GetISBDView GetMarcBiblio ); +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::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 ), } ); @@ -51,42 +48,98 @@ my $dbh = C4::Context->dbh; if ($bib_list && $format) { + my $borcat = q{}; + if ( C4::Context->preference('OpacHiddenItemsExceptions') ) { + # we need to fetch the borrower info here, so we can pass the category + my $borrower = Koha::Patrons->find( { borrowernumber => $borrowernumber } ); + $borcat = $borrower ? $borrower->categorycode : $borcat; + } + 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 + # Other formats } else { - foreach my $biblio (@bibs) { - - my $record = GetMarcBiblio($biblio); - next unless $record; - - switch ($format) { - case "iso2709" { $output .= $record->as_usmarc(); } - case "ris" { $output .= marc2ris($record); } - case "bibtex" { $output .= marc2bibtex($record, $biblio); } - } - } + my $record_processor = Koha::RecordProcessor->new({ + filters => 'ViewPolicy' + }); + foreach my $biblio (@bibs) { + + my $record = GetMarcBiblio({ + biblionumber => $biblio, + embed_items => 1, + opac => 1, + borcat => $borcat }); + my $framework = &GetFrameworkCode( $biblio ); + $record_processor->options({ + interface => 'opac', + frameworkcode => $framework + }); + $record_processor->process($record); + + next unless $record; + + if ($format eq 'iso2709') { + #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); + } + 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"; + } + } } # If it was a CSV export we change the format after the export so the file extension is fine $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( + csv_profiles => [ + Koha::CsvProfiles->search( + { + type => 'marc', + used_for => 'export_records', + staff_only => 0 + } + ) + ] + ); $template->param(bib_list => $bib_list); output_html_with_http_headers $query, $cookie, $template->output; }