From 04b1c637cc7ac1d07fff56a7430f7de0efc0e180 Mon Sep 17 00:00:00 2001 From: Paul Poulain Date: Wed, 15 Dec 2010 13:59:43 +0100 Subject: [PATCH] Bug 5881 : CSV export : deal with control fields to avoid an error (C4/Record.pm) --- C4/Record.pm | 49 ++++++++++++++++++++++++++++++------------------- 1 files changed, 30 insertions(+), 19 deletions(-) diff --git a/C4/Record.pm b/C4/Record.pm index 497c03d..4c8eb8e 100644 --- a/C4/Record.pm +++ b/C4/Record.pm @@ -460,26 +460,37 @@ sub marcrecord2csv { } } push (@fieldstab, join($subfieldseparator, @tmpfields)); - # Or a field - } else { - my @fields = ($record->field($marcfield)); - my $authvalues = GetKohaAuthorisedValuesFromField($marcfield, undef, $frameworkcode, undef); - - my @valuesarray; - foreach (@fields) { - my $value; - - # Getting authorised value - $value = defined $authvalues->{$_->as_string} ? $authvalues->{$_->as_string} : $_->as_string; - - # Field processing - eval $fieldprocessing if ($fieldprocessing); + # Or a field - push @valuesarray, $value; - } - push (@fieldstab, join($fieldseparator, @valuesarray)); - } - }; + } else { + my @fields = ( $record->field($marcfield) ); + my $authvalues = GetKohaAuthorisedValuesFromField( $marcfield, undef, $frameworkcode, undef ); + + my @valuesarray; + foreach (@fields) { + my $value; + + # If it is a control field + if ($_->is_control_field) { + $value = defined $authvalues->{$_->as_string} ? $authvalues->{$_->as_string} : $_->as_string; + } else { + # If it is a field, we gather all subfields, joined by the subfield separator + my @subvaluesarray; + my @subfields = $_->subfields; + foreach my $subfield (@subfields) { + push (@subvaluesarray, defined $authvalues->{$subfield->[1]} ? $authvalues->{$subfield->[1]} : $subfield->[1]); + } + $value = join ($subfieldseparator, @subvaluesarray); + } + + # Field processing + eval $fieldprocessing if ($fieldprocessing); + + push @valuesarray, $value; + } + push( @fieldstab, join( $fieldseparator, @valuesarray ) ); + } + } $csv->combine(@fieldstab); $output .= $csv->string() . "\n"; -- 1.7.1