use C4::Koha;
use C4::Charset;
use MARC::File::USMARC;
+use MARC::Field;
use C4::ImportBatch;
use C4::AuthoritiesMarc; #GuessAuthTypeCode, FindDuplicateAuthority
use C4::Languages;
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(
sub _auth_build_query {
my ( $pars ) = @_;
- 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" ',
title => '@attr 1=4 "#term" ',
uniformtitle => '@attr 1=6 "#term" ',
srchany => '@attr 1=1016 "#term" ',
+ 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 = {
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;
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;
}