From 0a9ba9d9dffb7291eb9a8d7cfa24523a8b1bdd1c Mon Sep 17 00:00:00 2001 From: Katrin Fischer Date: Sun, 11 Mar 2012 20:00:39 +0100 Subject: [PATCH] Bug 6831 follow-up: add support for UNIMARC and NORMARC 1) Removes unused subroutine get_host_control_num 2) Fixes small mistake, correct subfield for ISBN 020 is z 3) Checks system preference for correct marcflavour instead of assuming MARC21 4) Fixes MARC21 to not use author(), because it would also add fields like $w and $0 to 773$a 5) Fixes MARC21 to not use title(), but 245$a, because it would also add too many subfields. 6) Adds definitions for UNIMARC and includes NORMARC Signed-off-by: Jared Camins-Esakov Works properly with all supported MARC flavours. Signed-off-by: Paul Poulain --- C4/Biblio.pm | 95 ++++++++++++++++++++++++++++++++++------ cataloguing/addbiblio.pl | 9 ---- 2 files changed, 82 insertions(+), 22 deletions(-) diff --git a/C4/Biblio.pm b/C4/Biblio.pm index 5fe0be9a2e..432eb6b426 100644 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -3650,19 +3650,25 @@ Generate the host item entry for an analytic child entry sub prepare_host_field { my ( $hostbiblio, $marcflavour ) = @_; - $marcflavour ||= 'MARC21'; + $marcflavour ||= C4::Context->preference('marcflavour'); my $host = GetMarcBiblio($hostbiblio); - if ( $marcflavour eq 'MARC21' ) { - - # unfortunately as_string does not 'do the right thing' - # if field returns undef - my %sfd; - my $field; - if ( $field = $host->author() ) { - $sfd{a} = $field; + # unfortunately as_string does not 'do the right thing' + # if field returns undef + my %sfd; + my $field; + my $host_field; + if ( $marcflavour eq 'MARC21' || $marcflavour eq 'NORMARC' ) { + if ( $field = $host->field('100') || $host->field('110') || $host->field('11') ) { + my $s = $field->as_string('ab'); + if ($s) { + $sfd{a} = $s; + } } - if ( $field = $host->title() ) { - $sfd{t} = $field; + if ( $field = $host->field('245') ) { + my $s = $field->as_string('a'); + if ($s) { + $sfd{t} = $s; + } } if ( $field = $host->field('260') ) { my $s = $field->as_string('abc'); @@ -3685,13 +3691,76 @@ sub prepare_host_field { if ( $field = $host->field('020') ) { my $s = $field->as_string('a'); if ($s) { - $sfd{x} = $s; + $sfd{z} = $s; } } if ( $field = $host->field('001') ) { $sfd{w} = $field->data(),; } - my $host_field = MARC::Field->new( 773, '0', ' ', %sfd ); + $host_field = MARC::Field->new( 773, '0', ' ', %sfd ); + return $host_field; + } + elsif ( $marcflavour eq 'UNIMARC' ) { + #author + if ( $field = $host->field('700') || $host->field('710') || $host->field('720') ) { + my $s = $field->as_string('ab'); + if ($s) { + $sfd{a} = $s; + } + } + #title + if ( $field = $host->field('200') ) { + my $s = $field->as_string('a'); + if ($s) { + $sfd{t} = $s; + } + } + #place of publicaton + if ( $field = $host->field('210') ) { + my $s = $field->as_string('a'); + if ($s) { + $sfd{c} = $s; + } + } + #date of publication + if ( $field = $host->field('210') ) { + my $s = $field->as_string('d'); + if ($s) { + $sfd{d} = $s; + } + } + #edition statement + if ( $field = $host->field('205') ) { + my $s = $field->as_string(); + if ($s) { + $sfd{a} = $s; + } + } + #URL + if ( $field = $host->field('856') ) { + my $s = $field->as_string('u'); + if ($s) { + $sfd{u} = $s; + } + } + #ISSN + if ( $field = $host->field('011') ) { + my $s = $field->as_string('a'); + if ($s) { + $sfd{x} = $s; + } + } + #ISBN + if ( $field = $host->field('010') ) { + my $s = $field->as_string('a'); + if ($s) { + $sfd{y} = $s; + } + } + if ( $field = $host->field('001') ) { + $sfd{0} = $field->data(),; + } + $host_field = MARC::Field->new( 461, '0', ' ', %sfd ); return $host_field; } return; diff --git a/cataloguing/addbiblio.pl b/cataloguing/addbiblio.pl index 22d1b8d268..8e4defd9ba 100755 --- a/cataloguing/addbiblio.pl +++ b/cataloguing/addbiblio.pl @@ -995,12 +995,3 @@ $template->param( ); output_html_with_http_headers $input, $cookie, $template->output; - -sub get_host_control_num { - my $host_biblio_nr = shift; - my $host = GetMarcBiblio($host_biblio_nr); - my $control_num = GetMarcControlnumber($host, C4::Context->preference('marcflavour')); - $host = GetBiblioData($host_biblio_nr); - $host->{control_number} = $control_num; - return $host; -} -- 2.39.5