1+ # !/usr/bin/perl
2+
3+ # Copyright 2009 BibLibre
4+ #
5+ # This file is part of Koha.
6+ #
7+ # Koha is free software; you can redistribute it and/or modify it
8+ # under the terms of the GNU General Public License as published by
9+ # the Free Software Foundation; either version 3 of the License, or
10+ # (at your option) any later version.
11+ #
12+ # Koha is distributed in the hope that it will be useful, but
13+ # WITHOUT ANY WARRANTY; without even the implied warranty of
14+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15+ # GNU General Public License for more details.
16+ #
17+ # You should have received a copy of the GNU General Public License
18+ # along with Koha; if not, see <http://www.gnu.org/licenses>.
19+
20+ use Modern::Perl;
21+
22+ use CGI qw ( -utf8 ) ;
23+ use Encode qw( encode ) ;
24+
25+ use C4::Auth qw( get_template_and_user ) ;
26+ use C4::Biblio qw( GetFrameworkCode GetISBDView ) ;
27+ use C4::Output qw( output_html_with_http_headers ) ;
28+ use C4::Record;
29+ use C4::Ris qw( marc2ris ) ;
30+ use Koha::Biblios;
31+ use Koha::CsvProfiles;
32+ use Koha::RecordProcessor;
33+
34+ use utf8;
35+ my $query = CGI-> new();
36+ do ' ../eds-methods.pl' ;
37+ my ( $template , $borrowernumber , $cookie ) = get_template_and_user (
38+ {
39+ template_name => " opac-downloadcart.tt" ,
40+ query => $query ,
41+ type => " opac" ,
42+ authnotrequired => ( C4::Context-> preference(" OpacPublic" ) ? 1 : 0 ),
43+ }
44+ );
45+ my $eds_data = " " ;
46+ my $bib_list = $query -> param(' bib_list' );
47+ # convert _dot_ to . to properly search for items
48+ $bib_list =~s /\_ dot\_ / \. / g ;
49+ my $format = $query -> param(' format' );
50+ my $dbh = C4::Context-> dbh;
51+ $eds_data = $query -> param(' eds_data' ); # EDS Patch
52+
53+ if ($bib_list && $format ) {
54+ my $patron = Koha::Patrons-> find($borrowernumber );
55+ my @bibs = split ( / \/ / , $bib_list );
56+
57+ my $marcflavour = C4::Context-> preference(' marcflavour' );
58+ my $output ;
59+ my $extension ;
60+ my $type ;
61+
62+ # CSV
63+ if ($format =~ / ^\d +$ / ) {
64+ my $csv_profile = Koha::CsvProfiles-> find($format );
65+ if ( not $csv_profile or $csv_profile -> staff_only ) {
66+ print $query -> redirect(' /cgi-bin/koha/errors/404.pl' );
67+ exit ;
68+ }
69+
70+ $output = marc2csv(\@bibs , $format );
71+ # Other formats
72+ } else {
73+ my $record_processor = Koha::RecordProcessor-> new({
74+ filters => ' ViewPolicy'
75+ });
76+ foreach my $biblionumber (@bibs ) {
77+ my $biblio = ' ' ;
78+ my $record = ' ' ;
79+ if ($biblionumber =~m /\_\_ / ){
80+ my $dat = ' ' ;
81+ ($record ,$dat )= ProcessEDSCartItems($biblionumber ,$eds_data ,$record ,$dat ); # EDS patch
82+ } else {
83+ $biblio = Koha::Biblios-> find($biblionumber );
84+ $record = $biblio -> metadata-> record(
85+ {
86+ embed_items => 1,
87+ opac => 1,
88+ patron => $patron ,
89+ }
90+ );
91+ }
92+ my $framework = &GetFrameworkCode( $biblio );
93+ $record_processor -> options({
94+ interface => ' opac' ,
95+ frameworkcode => $framework
96+ });
97+ $record_processor -> process($record );
98+
99+ next unless $record ;
100+
101+ if ($format eq ' iso2709' ) {
102+ # NOTE: If we don't explicitly UTF-8 encode the output,
103+ # the browser will guess the encoding, and it won't always choose UTF-8.
104+ $output .= encode(" UTF-8" , $record -> as_usmarc()) // q{ } ;
105+ }
106+ elsif ($format eq ' ris' ) {
107+ $output .= marc2ris($record );
108+ }
109+ elsif ($format eq ' bibtex' ) {
110+ $output .= marc2bibtex($record , $biblionumber );
111+ }
112+ elsif ( $format eq ' isbd' ) {
113+ my $framework = GetFrameworkCode( $biblionumber );
114+ $output .= GetISBDView({
115+ ' record' => $record ,
116+ ' template' => ' opac' ,
117+ ' framework' => $framework ,
118+ });
119+ $extension = " txt" ;
120+ $type = " text/plain" ;
121+ }
122+ }
123+ }
124+
125+ # If it was a CSV export we change the format after the export so the file extension is fine
126+ $format = " csv" if ($format =~ m / ^\d +$ / );
127+
128+ print $query -> header(
129+ -type => ($type ) ? $type : ' application/octet-stream' ,
130+ -' Content-Transfer-Encoding' => ' binary' ,
131+ -attachment => ($extension ) ? " cart.$format .$extension " : " cart.$format " );
132+ print $output ;
133+ } else {
134+ $template -> param(
135+ csv_profiles => Koha::CsvProfiles-> search(
136+ {
137+ type => ' marc' ,
138+ used_for => ' export_records' ,
139+ staff_only => 0
140+ }
141+ ),
142+ bib_list => $bib_list ,
143+ );
144+ output_html_with_http_headers $query , $cookie , $template -> output;
145+ }
0 commit comments