Bug 9811: Remove useless orderby management
[koha_fer] / C4 / AuthoritiesMarc.pm
index 1c87285..95fe33a 100644 (file)
@@ -266,16 +266,21 @@ sub SearchAuthorities {
         
         ##Here we have to extract MARC record and $authid from ZEBRA AUTHORITIES
         my $rec=$oAResult->record($counter);
-        my $marcdata=$rec->raw();
-        my $authrecord;
-        my $separator=C4::Context->preference('authoritysep');
-        $authrecord = MARC::File::USMARC::decode($marcdata);
+        my $separator=C4::Context->preference('AuthoritySeparator');
+        my $authrecord = C4::Search::new_record_from_zebra(
+            'authorityserver',
+            $rec->raw()
+        );
+
+        if ( !defined $authrecord or !defined $authrecord->field('001') ) {
+            $counter++;
+            next;
+        }
+
         my $authid=$authrecord->field('001')->data();
         my %newline;
         $newline{authid} = $authid;
         if ( !$skipmetadata ) {
-            my $summary =
-              BuildSummary( $authrecord, $authid, GetAuthTypeCode($authid) );
             my $query_auth_tag =
 "SELECT auth_tag_to_report FROM auth_types WHERE authtypecode=?";
             my $sth = $dbh->prepare($query_auth_tag);
@@ -284,15 +289,18 @@ sub SearchAuthorities {
             my $reported_tag;
             my $mainentry = $authrecord->field($auth_tag_to_report);
             if ($mainentry) {
-
                 foreach ( $mainentry->subfields() ) {
                     $reported_tag .= '$' . $_->[0] . $_->[1];
                 }
             }
-            my $thisauthtype = GetAuthType(GetAuthTypeCode($authid));
+            my $thisauthtypecode = GetAuthTypeCode($authid);
+            my $thisauthtype = GetAuthType($thisauthtypecode);
             unless (defined $thisauthtype) {
-                $thisauthtype = GetAuthType($authtypecode) if $authtypecode;
+                $thisauthtypecode = $authtypecode;
+                $thisauthtype = GetAuthType($authtypecode);
             }
+            my $summary = BuildSummary( $authrecord, $authid, $thisauthtypecode );
+
             $newline{authtype}     = defined($thisauthtype) ?
                                         $thisauthtype->{'authtypetext'} : '';
             $newline{summary}      = $summary;
@@ -847,15 +855,18 @@ sub FindDuplicateAuthority {
     my $query='at:'.$authtypecode.' ';
     my $filtervalues=qr([\001-\040\!\'\"\`\#\$\%\&\*\+,\-\./:;<=>\?\@\(\)\{\[\]\}_\|\~]);
     if ($record->field($auth_tag_to_report)) {
-      foreach ($record->field($auth_tag_to_report)->subfields()) {
-        $_->[1]=~s/$filtervalues/ /g; $query.= " $op he:\"".$_->[1]."\"" if ($_->[0]=~/[A-z]/);
-      }
+        foreach ($record->field($auth_tag_to_report)->subfields()) {
+            $_->[1]=~s/$filtervalues/ /g; $query.= " $op he:\"".$_->[1]."\"" if ($_->[0]=~/[A-z]/);
+        }
     }
     my ($error, $results, $total_hits) = C4::Search::SimpleSearch( $query, 0, 1, [ "authorityserver" ] );
     # there is at least 1 result => return the 1st one
     if (!defined $error && @{$results} ) {
-      my $marcrecord = MARC::File::USMARC::decode($results->[0]);
-      return $marcrecord->field('001')->data,BuildSummary($marcrecord,$marcrecord->field('001')->data,$authtypecode);
+        my $marcrecord = C4::Search::new_record_from_zebra(
+            'authorityserver',
+            $results->[0]
+        );
+        return $marcrecord->field('001')->data,BuildSummary($marcrecord,$marcrecord->field('001')->data,$authtypecode);
     }
     # no result, returns nothing
     return;
@@ -878,12 +889,18 @@ sub BuildSummary {
     my ($record,$authid,$authtypecode)=@_;
     my $dbh=C4::Context->dbh;
     my %summary;
+    my $summary_template;
     # handle $authtypecode is NULL or eq ""
     if ($authtypecode) {
         my $authref = GetAuthType($authtypecode);
         $summary{authtypecode} = $authref->{authtypecode};
         $summary{type} = $authref->{authtypetext};
-        $summary{summary} = $authref->{summary};
+        $summary_template = $authref->{summary};
+        # for MARC21, the authority type summary displays a label meant for
+        # display
+        if (C4::Context->preference('marcflavour') ne 'UNIMARC') {
+            $summary{summary} = $authref->{summary};
+        }
     }
     my $marc21subfields = 'abcdfghjklmnopqrstuvxyz68';
     my %marc21controlrefs = ( 'a' => 'earlier',
@@ -916,14 +933,14 @@ sub BuildSummary {
 #         suit the MARC21 version, so for now the "templating"
 #         feature will be enabled only for UNIMARC for backwards
 #         compatibility.
-    if ($summary{summary} and C4::Context->preference('marcflavour') eq 'UNIMARC') {
+    if ($summary_template and C4::Context->preference('marcflavour') eq 'UNIMARC') {
         my @fields = $record->fields();
 #             $reported_tag = '$9'.$result[$counter];
-        my @stringssummary;
+        my @repets;
         foreach my $field (@fields) {
             my $tag = $field->tag();
             my $tagvalue = $field->as_string();
-            my $localsummary= $summary{summary};
+            my $localsummary= $summary_template;
             $localsummary =~ s/\[(.?.?.?.?)$tag\*(.*?)\]/$1$tagvalue$2\[$1$tag$2\]/g;
             if ($tag<10) {
                 if ($tag eq '001') {
@@ -938,13 +955,13 @@ sub BuildSummary {
                     $localsummary =~ s/\[(.?.?.?.?)$tagsubf(.*?)\]/$1$subfieldvalue$2\[$1$tagsubf$2\]/g;
                 }
             }
-            push @stringssummary, $localsummary if ($localsummary ne $summary{summary});
+            if ($localsummary ne $summary_template) {
+                $localsummary =~ s/\[(.*?)\]//g;
+                $localsummary =~ s/\n/<br>/g;
+                push @repets, $localsummary;
+            }
         }
-        my $resultstring;
-        $resultstring = join(" -- ",@stringssummary);
-        $resultstring =~ s/\[(.*?)\]//g;
-        $resultstring =~ s/\n/<br>/g;
-        $summary{summary}      =  $resultstring;
+        $summary{repets} = \@repets;
     }
     my @authorized;
     my @notes;
@@ -957,7 +974,7 @@ sub BuildSummary {
         foreach my $field ($record->field('2..')) {
             push @authorized, {
                 heading => $field->as_string('abcdefghijlmnopqrstuvwxyz'),
-                hemain  => $field->subfield('a'),
+                hemain  => ( $field->subfield('a') // undef ),
                 field   => $field->tag(),
             };
         }
@@ -969,7 +986,7 @@ sub BuildSummary {
             my $thesaurus = $field->subfield('2') ? "thes. : ".$thesaurus{"$field->subfield('2')"}." : " : '';
             push @seefrom, {
                 heading => $thesaurus . $field->as_string('abcdefghijlmnopqrstuvwxyz'),
-                hemain  => $field->subfield('a'),
+                hemain  => ( $field->subfield('a') // undef ),
                 type    => 'seefrom',
                 field   => $field->tag(),
             };
@@ -983,9 +1000,9 @@ sub BuildSummary {
                 field   => $_->tag,
                 type    => $type,
                 heading => $heading,
-                hemain  => $_->subfield('a'),
+                hemain  => ( $_->subfield('a') // undef ),
                 search  => $heading,
-                authid  => $_->subfield('9'),
+                authid  => ( $_->subfield('9') // undef ),
             }
         } $record->field('5..');
 
@@ -1036,13 +1053,13 @@ sub BuildSummary {
             if ($subfields_to_report) {
                 push @authorized, {
                     heading => $field->as_string($subfields_to_report),
-                    hemain  => $field->subfield( substr($subfields_to_report, 0, 1) ),
+                    hemain  => ( $field->subfield( substr($subfields_to_report, 0, 1) ) // undef ),
                     field   => $tag,
                 };
             } else {
                 push @authorized, {
                     heading => $field->as_string(),
-                    hemain  => $field->subfield('a'),
+                    hemain  => ( $field->subfield( 'a' ) // undef ),
                     field   => $tag,
                 };
             }
@@ -1452,13 +1469,15 @@ sub merge {
     }
     my $z=0;
     while ( $z<$count ) {
-        my $rec;
-        $rec=$oResult->record($z);
-        my $marcdata = $rec->raw();
-        my $marcrecordzebra= MARC::Record->new_from_usmarc($marcdata);
+        my $marcrecordzebra = C4::Search::new_record_from_zebra(
+            'biblioserver',
+            $oResult->record($z)->raw()
+        );
         my ( $biblionumbertagfield, $biblionumbertagsubfield ) = &GetMarcFromKohaField( "biblio.biblionumber", '' );
-        my $i = ($biblionumbertagfield < 10) ? $marcrecordzebra->field($biblionumbertagfield)->data : $marcrecordzebra->subfield($biblionumbertagfield, $biblionumbertagsubfield);
-        my $marcrecorddb=GetMarcBiblio($i);
+        my $i = ($biblionumbertagfield < 10)
+            ? $marcrecordzebra->field( $biblionumbertagfield )->data
+            : $marcrecordzebra->subfield( $biblionumbertagfield, $biblionumbertagsubfield );
+        my $marcrecorddb = GetMarcBiblio($i);
         push @reccache, $marcrecorddb;
         $z++;
     }