Bug 13296 - error when using z3950 with UNIMARC authorities
authorFridolin Somers <fridolin.somers@biblibre.com>
Wed, 19 Nov 2014 10:56:54 +0000 (11:56 +0100)
committerFridolin Somers <fridolin.somers@biblibre.com>
Mon, 29 Dec 2014 17:37:30 +0000 (18:37 +0100)
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 <jonathan.druart@biblibre.com>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
NOTE: depending on the target, the syntax in the configuration
might not be UNIMARC, but MARC21/USMARC instead!
Signed-off-by: Mason James <mtj@kohaaloha.com>

(cherry picked from commit 08a938597e3649d80eea63347787d7bbbe6d0086)
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>

C4/Breeding.pm

index 03f3ed5..62ceb41 100644 (file)
@@ -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;