From f3aa105384d5c7b293d5ca3e325edba036176a7c Mon Sep 17 00:00:00 2001 From: charles Date: Mon, 20 Apr 2015 17:24:29 -0400 Subject: [PATCH] Bug 12747 - Add extra column in Z3950 search result This patch uses the standard field syntax (ex: 023$ab), allows writing fields without mentionning subfields and uses whitespace as a field separator instead of semicolon. sponsored by the CCSR ( http://www.ccsr.qc.ca ) --- C4/Breeding.pm | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/C4/Breeding.pm b/C4/Breeding.pm index 6042862..d8b995c 100644 --- a/C4/Breeding.pm +++ b/C4/Breeding.pm @@ -25,6 +25,7 @@ use C4::Biblio; use C4::Koha; use C4::Charset; use MARC::File::USMARC; +use MARC::Field; use C4::ImportBatch; use C4::AuthoritiesMarc; #GuessAuthTypeCode, FindDuplicateAuthority use C4::Languages; @@ -228,7 +229,8 @@ sub Z3950Search { } my $pref_addnumber = C4::Context->preference('AdditionalFieldsInZ3950ResultSearch'); - $pref_addnumber =~ s/\s+//g; + $pref_addnumber =~ s/^\s+|\s+$//g; + $pref_addnumber =~ s/\h+/ /g; if ($pref_addnumber){ $template->param( additionalFields => '1', @@ -355,25 +357,37 @@ sub _add_rowdata { $row->{isbn}=_isbn_replace($row->{isbn}); my $pref_addnumber = C4::Context->preference('AdditionalFieldsInZ3950ResultSearch'); - $pref_addnumber =~ s/\s+//g; - my @addnumber_array = split /;/, $pref_addnumber; + $pref_addnumber =~ s/^\s+|\s+$//g; + $pref_addnumber =~ s/\h+/ /g; + my @addnumber_array = split / /, $pref_addnumber; my @addnumberfields; foreach (@addnumber_array) { my $length = length($_); my $adTag = substr($_, 0, 3); - my $row_field = 'field_'.$adTag; if ($record->field($adTag)) { my $field = $record->field($adTag); my $fieldContent=''; if ($length > 3){ my $adSubfield; - for (my $i=0; $i<$length-3; $i++){ - $adSubfield = substr($_, 3+$i, 1); + for (my $i=0; $i<$length-4; $i++){ # 4 because 3 digits, 1 dollar sign ($) + $adSubfield = substr($_, 4+$i, 1); $fieldContent = $fieldContent.$field->subfield($adSubfield).' '; } push(@addnumberfields, $_); $row->{$_} = $fieldContent; } + else { + if($adTag <= 10){ + my $data = $field->data(); + push(@addnumberfields, $_); + $row->{$_} = $data; + } + else { + my $subfields_text = $field->as_string(); + push(@addnumberfields, $_); + $row->{$_} = $subfields_text; + } + } } } -- 1.9.1