Bug 17600: Fix opac/svc/overdrive
[koha.git] / catalogue / export.pl
1 #!/usr/bin/perl
2 use Modern::Perl;
3
4 use C4::Record;
5 use C4::Auth qw( get_template_and_user );
6 use C4::Output;
7 use C4::Biblio qw( GetMarcBiblio GetMarcControlnumber );
8 use CGI qw ( -utf8 );
9 use C4::Ris qw( marc2ris );
10
11
12
13 my $query = CGI->new;
14 my ( $template, $loggedinuser, $cookie ) = get_template_and_user({
15     template_name   => "tools/export.tt",
16     query           => $query,
17     type            => "intranet",
18     flagsrequired   => { catalogue => 1 },
19     });
20
21 my $op=$query->param("op");
22 my $format=$query->param("format");
23 my $error = '';
24 if ($op eq "export") {
25     my $biblionumber = $query->param("bib");
26         if ($biblionumber){
27             my $file_id = $biblionumber;
28             my $file_pre = "bib-";
29
30             my $marc = GetMarcBiblio({
31                 biblionumber => $biblionumber,
32                 embed_items  => 1 });
33
34             if( C4::Context->preference('DefaultSaveRecordFileID') eq 'controlnumber' ){
35                 my $marcflavour = C4::Context->preference('marcflavour'); #FIXME This option is required but does not change control num behaviour
36                 my $control_num = GetMarcControlnumber( $marc, $marcflavour );
37                 if( $control_num ){
38                     $file_id = $control_num;
39                     $file_pre = "record-";
40                 }
41             }
42
43             if ($format =~ /endnote/) {
44                 $marc = marc2endnote($marc);
45                 $format = 'endnote';
46             }
47             elsif ($format =~ /marcxml/) {
48                 $marc = marc2marcxml($marc);
49                 $format = "marcxml";
50             }
51             elsif ($format=~ /mods/) {
52                 $marc = marc2modsxml($marc);
53                 $format = "mods";
54             }
55             elsif ($format =~ /ris/) {
56                 $marc = marc2ris($marc);
57                 $format = "ris";
58             }
59             elsif ($format =~ /bibtex/) {
60                 $marc = marc2bibtex($marc);
61                 $format = "bibtex";
62             }
63             elsif ($format =~ /dc$/) {
64                 $marc = marc2dcxml(undef, undef, $biblionumber, $format);
65                 $format = "dublin-core.xml";
66             }
67             elsif ($format =~ /marc8/) {
68                 $marc = changeEncoding($marc,"MARC","MARC21","MARC-8");
69                 $marc = $marc->as_usmarc();
70                 $format = "marc8";
71             }
72             elsif ($format =~ /utf8/) {
73                 C4::Charset::SetUTF8Flag($marc, 1);
74                 $marc = $marc->as_usmarc();
75                 $format = "utf8";
76             }
77             elsif ($format =~ /marcstd/) {
78                 C4::Charset::SetUTF8Flag($marc,1);
79                 ($error, $marc) = marc2marc($marc, 'marcstd', C4::Context->preference('marcflavour'));
80                 $format = "marcstd";
81             }
82             if ( $format =~ /utf8/ or $format =~ /marcstd/ ) {
83                 binmode STDOUT, ':encoding(UTF-8)';
84             }
85             print $query->header(
86                 -type => 'application/octet-stream',
87                 -attachment=>"$file_pre$file_id.$format");
88             print $marc;
89         }
90 }