X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=tools%2Fexport.pl;h=80a15b4cf9c3b6da02580e382379d92fa185d51a;hb=49f2837b2e75511becd09059db99d209917647a7;hp=f1bbcbb80e94e30aa5583c4fa32469da97360bc6;hpb=e20270fec4f6d34f01050bea4c5765d5b3c4ed33;p=koha.git diff --git a/tools/export.pl b/tools/export.pl index f1bbcbb80e..80a15b4cf9 100755 --- a/tools/export.pl +++ b/tools/export.pl @@ -3,18 +3,18 @@ # # 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 . use Modern::Perl; use MARC::File::XML; @@ -48,6 +48,10 @@ my $output_format = $query->param("format") || $query->param("output_format") || # Checks if the script is called from commandline my $commandline = not defined $ENV{GATEWAY_INTERFACE}; + +# @biblionumbers is only use for csv export from circulation.pl +my @biblionumbers = uniq $query->param("biblionumbers"); + if ( $commandline ) { # Getting parameters @@ -134,21 +138,37 @@ my $limit_ind_branch = && !C4::Context->IsSuperLibrarian() && C4::Context->userenv->{branch} ) ? 1 : 0; -my $branch = $query->param("branch") || ''; +my @branch = $query->param("branch"); if ( C4::Context->preference("IndependentBranches") && C4::Context->userenv && !C4::Context->IsSuperLibrarian() ) { - $branch = C4::Context->userenv->{'branch'}; + @branch = ( C4::Context->userenv->{'branch'} ); } +# if stripping nonlocal items, use loggedinuser's branch +my $localbranch = C4::Context->userenv ? C4::Context->userenv->{'branch'} : undef; + +my %branchmap = map { $_ => 1 } @branch; # for quick lookups my $backupdir = C4::Context->config('backupdir'); if ( $op eq "export" ) { - if ( $output_format eq "iso2709" or $output_format eq "xml" ) { + if ( + $output_format eq "iso2709" + or $output_format eq "xml" + or ( + $output_format eq 'csv' + and not @biblionumbers + ) + ) { my $charset = 'utf-8'; my $mimetype = 'application/octet-stream'; - binmode STDOUT, ':encoding(UTF-8)'; + + binmode STDOUT, ':encoding(UTF-8)' + if $filename =~ m/\.gz$/ + or $filename =~ m/\.bz2$/ + or $output_format ne 'csv'; + if ( $filename =~ m/\.gz$/ ) { $mimetype = 'application/x-gzip'; $charset = ''; @@ -162,7 +182,7 @@ if ( $op eq "export" ) { print $query->header( -type => $mimetype, -charset => $charset, - -attachment => $filename + -attachment => $filename, ) unless ($commandline); $record_type = $query->param("record_type") unless ($commandline); @@ -246,7 +266,7 @@ if ( $op eq "export" ) { itemstable => $itemstable, StartingBiblionumber => $StartingBiblionumber, EndingBiblionumber => $EndingBiblionumber, - branch => $branch, + branch => \@branch, start_callnumber => $start_callnumber, end_callnumber => $end_callnumber, start_accession => $start_accession, @@ -323,7 +343,6 @@ if ( $op eq "export" ) { # Someone is trying to mess us up exit; } - unless (@biblionumbers) { my $sth = $dbh->prepare($sql_query); $sth->execute(@sql_params); @@ -364,14 +383,10 @@ if ( $op eq "export" ) { my ( $homebranchfield, $homebranchsubfield ) = GetMarcFromKohaField( 'items.homebranch', '' ); for my $itemfield ( $record->field($homebranchfield) ) { - -# if stripping nonlocal items, use loggedinuser's branch if they didn't select one - $branch = C4::Context->userenv->{'branch'} - unless $branch; $record->delete_field($itemfield) if ( $dont_export_items - || $itemfield->subfield($homebranchsubfield) ne - $branch ); + || $localbranch ne $itemfield->subfield( + $homebranchsubfield) ); } } } @@ -394,7 +409,7 @@ if ( $op eq "export" ) { } } else { - $record->delete_fields($field); + $record->delete_fields($record->field($field)); } } } @@ -416,7 +431,7 @@ if ( $op eq "export" ) { print MARC::File::XML::record($record); print "\n"; } - else { + elsif ( $output_format eq 'iso2709' ) { my $errorcount_on_decode = eval { scalar(MARC::File::USMARC->decode( $record->as_usmarc )->warnings()) }; if ($errorcount_on_decode or $@){ warn $@ if $@; @@ -431,15 +446,25 @@ if ( $op eq "export" ) { print MARC::File::XML::footer(); print "\n"; } + if ( $output_format eq 'csv' ) { + my $csv_profile_id = $query->param('csv_profile') + || GetCsvProfileId( C4::Context->preference('ExportWithCsvProfile') ); + my $output = + marc2csv( \@recordids, + $csv_profile_id ); + + print $output; + } exit; } elsif ( $output_format eq "csv" ) { my @biblionumbers = uniq $query->param("biblionumbers"); my @itemnumbers = $query->param("itemnumbers"); + my $csv_profile_id = $query->param('csv_profile') || GetCsvProfileId( C4::Context->preference('ExportWithCsvProfile') ); my $output = marc2csv( \@biblionumbers, - GetCsvProfileId( C4::Context->preference('ExportWithCsvProfile') ), + $csv_profile_id, \@itemnumbers, ); print $query->header( -type => 'application/octet-stream', @@ -472,7 +497,7 @@ else { push @branchloop, { value => $thisbranch, - selected => $thisbranch eq $branch, + selected => %branchmap ? $branchmap{$thisbranch} : 1, branchname => $branches->{$thisbranch}->{'branchname'}, }; } @@ -513,6 +538,7 @@ else { itemtypeloop => \@itemtypesloop, authtypeloop => \@authtypesloop, export_remove_fields => C4::Context->preference("ExportRemoveFields"), + csv_profiles => C4::Csv::GetCsvProfiles('marc'), ); output_html_with_http_headers $query, $cookie, $template->output; @@ -547,14 +573,14 @@ sub construct_query { my $itemstable = $params->{itemstable}; my $StartingBiblionumber = $params->{StartingBiblionumber}; my $EndingBiblionumber = $params->{EndingBiblionumber}; - my $branch = $params->{branch}; + my @branch = @{ $params->{branch} }; my $start_callnumber = $params->{start_callnumber}; my $end_callnumber = $params->{end_callnumber}; my $start_accession = $params->{start_accession}; my $end_accession = $params->{end_accession}; my $itemtype = $params->{itemtype}; my $items_filter = - $branch + @branch || $start_callnumber || $end_callnumber || $start_accession @@ -576,9 +602,9 @@ sub construct_query { push @sql_params, $EndingBiblionumber; } - if ($branch) { - $sql_query .= " AND homebranch = ? "; - push @sql_params, $branch; + if (@branch) { + $sql_query .= " AND homebranch IN (".join(',',map({'?'} @branch)).")"; + push @sql_params, @branch; } if ($start_callnumber) {