Bug 10676: Fix behaviour of OpacHiddenItems for items.restricted
[koha.git] / C4 / Breeding.pm
index b9d296e..9afd2f1 100644 (file)
@@ -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;
@@ -147,7 +148,7 @@ sub Z3950Search {
     my $s = 0;
     my $imported=0;
 
-    my ( $zquery, $squery ) = _build_query( $pars );
+    my ( $zquery, $squery ) = _bib_build_query( $pars );
 
     my $schema = Koha::Database->new()->schema();
     my $rs = $schema->resultset('Z3950server')->search(
@@ -230,19 +231,6 @@ sub Z3950Search {
 sub _auth_build_query {
     my ( $pars ) = @_;
 
-    #FIXME These variables are not used
-    my $nameany= $pars->{nameany};
-    my $authorany= $pars->{authorany};
-    my $authorpersonal= $pars->{authorpersonal};
-    my $authorcorp= $pars->{authorcorp};
-    my $authormeetingcon= $pars->{authormeetingcon};
-    my $title= $pars->{title};
-    my $uniformtitle= $pars->{uniformtitle};
-    my $subject= $pars->{subject};
-    my $subjectsubdiv= $pars->{subjectsubdiv};
-    my $srchany= $pars->{srchany};
-    my $authid= $pars->{authid};
-
     my $qry_build = {
         nameany           => '@attr 1=1002 "#term" ',
         authorany         => '@attr 1=1003 "#term" ',
@@ -257,26 +245,11 @@ sub _auth_build_query {
         controlnumber     => '@attr 1=12 "#term" ',
     };
 
-    my $zquery='';
-    my $squery='';
-    my $nterms=0;
-    foreach my $k ( sort keys %$pars ) {
-    #note that the sort keys forces an identical result under Perl 5.18
-    #one of the unit tests is based on that assumption
-        if( ( my $val=$pars->{$k} ) && $qry_build->{$k} ) {
-            $qry_build->{$k} =~ s/#term/$val/g;
-            $zquery .= $qry_build->{$k};
-            $squery .= "[$k]=\"$val\" and ";
-            $nterms++;
-        }
-    }
-    $zquery = "\@and " . $zquery for 2..$nterms;
-    $squery =~ s/ and $//;
-    return ( $zquery, $squery );
-
+    return _build_query( $pars, $qry_build );
 }
 
-sub _build_query {
+sub _bib_build_query {
+
     my ( $pars ) = @_;
 
     my $qry_build = {
@@ -293,6 +266,13 @@ sub _build_query {
         stdid   => '@attr 1=1007 "#term" ',
     };
 
+    return _build_query( $pars, $qry_build );
+}
+
+sub _build_query {
+
+    my ( $pars, $qry_build ) = @_;
+
     my $zquery='';
     my $squery='';
     my $nterms=0;
@@ -376,15 +356,68 @@ sub _add_rowdata {
         author => 'biblio.author',
         isbn =>'biblioitems.isbn',
         lccn =>'biblioitems.lccn', #LC control number (not call number)
-        edition =>'biblioitems.editionstatement',
-        date => 'biblio.copyrightdate', #MARC21
-        date2 => 'biblioitems.publicationyear', #UNIMARC
+        edition =>'biblioitems.editionstatement'
     );
+    $fetch{date} = C4::Context->preference('marcflavour') eq "MARC21" ? 'biblio.copyrightdate' : 'biblioitems.publicationyear';
+
     foreach my $k (keys %fetch) {
         $row->{$k} = C4::Biblio::TransformMarcToKohaOneField( $fetch{$k}, $record );
     }
     $row->{date}//= $row->{date2};
     $row->{isbn}=_isbn_replace($row->{isbn});
+
+    $row = _add_custom_field_rowdata($row, $record);
+
+    return $row;
+}
+
+sub _add_custom_field_rowdata
+{
+    my ( $row, $record ) = @_;
+    my $pref_newtags = C4::Context->preference('AdditionalFieldsInZ3950ResultSearch');
+    my $pref_flavour = C4::Context->preference('MarcFlavour');
+
+    $pref_newtags =~ s/^\s+|\s+$//g;
+    $pref_newtags =~ s/\h+/ /g;
+
+    my @addnumberfields;
+
+    foreach my $field (split /\,/, $pref_newtags) {
+        $field =~ s/^\s+|\s+$//g ;  # trim whitespace
+        my ($tag, $subtags) = split(/\$/, $field);
+
+        if ( $record->field($tag) ) {
+            my @content = ();
+
+            for my $marcfield ($record->field($tag)) {
+                if ( $subtags ) {
+                    my $str = '';
+                    for my $code (split //, $subtags) {
+                        if ( $marcfield->subfield($code) ) {
+                            $str .= $marcfield->subfield($code) . ' ';
+                        }
+                    }
+                    if ( not $str eq '') {
+                        push @content, $str;
+                    }
+                } elsif ( $tag == 10 ) {
+                    push @content, ( $pref_flavour eq "MARC21" ? $marcfield->data : $marcfield->as_string );
+                } elsif ( $tag < 10 ) {
+                    push @content, $marcfield->data();
+                } else {
+                    push @content, $marcfield->as_string();
+                }
+            }
+
+            if ( @content ) {
+                $row->{$field} = \@content;
+                push( @addnumberfields, $field );
+            }
+        }
+    }
+
+    $row->{'addnumberfields'} = \@addnumberfields;
+
     return $row;
 }