From 5734dd9a1514f15c9b8e69c059a9375df3c4e27b Mon Sep 17 00:00:00 2001 From: Fridolin Somers Date: Wed, 19 Nov 2014 11:56:54 +0100 Subject: [PATCH] Bug 13296 - error when using z3950 with UNIMARC authorities When using a z3950 connexion with UNIMARC authorities, you get an error : Unsupported UNIMARC character encoding [ ] for XML output for UNIMARCAUTH; 100$a -> 20141119 I've seen thant Bug 2060 when adds authorities import adds a special behavior for UNIMARC : marc flavor must be UNIMARCAUTH instead of just UNIMARC. This patch adds the same behavior when using z3950 connexion and import. Test plan : - Use a UNIMARC install - Define a z3950 connexion for UNIMARC authorities - Go to Authorities module - Click on "New from Z39.50" - Perform a search => Without patch : you get the error => With patch : you get results - Import one result => You get the authoritie creation form with all datas You may check same plan with MARC21 install Signed-off-by: Jonathan Druart Signed-off-by: Katrin Fischer NOTE: depending on the target, the syntax in the configuration might not be UNIMARC, but MARC21/USMARC instead! Signed-off-by: Mason James (cherry picked from commit 08a938597e3649d80eea63347787d7bbbe6d0086) Signed-off-by: Fridolin Somers --- C4/Breeding.pm | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/C4/Breeding.pm b/C4/Breeding.pm index 03f3ed57d4..62ceb41192 100644 --- a/C4/Breeding.pm +++ b/C4/Breeding.pm @@ -373,6 +373,9 @@ sub ImportBreedingAuth { my $searchbreeding = $dbh->prepare("select import_record_id from import_auths where control_number=? and authorized_heading=?"); # $encoding = C4::Context->preference("marcflavour") unless $encoding; + my $marc_type = C4::Context->preference('marcflavour'); + $marc_type .= 'AUTH' if ($marc_type eq 'UNIMARC'); + # fields used for import results my $imported=0; my $alreadyindb = 0; @@ -382,7 +385,7 @@ sub ImportBreedingAuth { for (my $i=0;$i<=$#marcarray;$i++) { my ($marcrecord, $charset_result, $charset_errors); ($marcrecord, $charset_result, $charset_errors) = - MarcToUTF8Record($marcarray[$i]."\x1D", C4::Context->preference("marcflavour"), $encoding); + MarcToUTF8Record($marcarray[$i]."\x1D", $marc_type, $encoding); # Normalize the record so it doesn't have separated diacritics SetUTF8Flag($marcrecord); @@ -484,6 +487,9 @@ sub Z3950SearchAuth { my $query; my $nterms=0; + my $marc_type = C4::Context->preference('marcflavour'); + $marc_type .= 'AUTH' if ($marc_type eq 'UNIMARC'); + if ($nameany) { $query .= " \@attr 1=1002 \"$nameany\" "; #Any name (this includes personal, corporate, meeting/conference authors, and author names in subject headings) #This attribute is supported by both the Library of Congress and Libraries Australia 08/05/2013 @@ -597,7 +603,7 @@ sub Z3950SearchAuth { $marcdata = $rec->raw(); my ($charset_result, $charset_errors); - ($marcrecord, $charset_result, $charset_errors)= MarcToUTF8Record($marcdata, C4::Context->preference('marcflavour'), $encoding[$k]); + ($marcrecord, $charset_result, $charset_errors)= MarcToUTF8Record($marcdata, $marc_type, $encoding[$k]); my $heading; my $heading_authtype_code; -- 2.39.5