$VERSION = 3.07.00.049;
require Exporter;
@ISA = qw(Exporter);
- @EXPORT = qw(&ImportBreeding &BreedingSearch &Z3950Search &Z3950SearchAuth);
+ @EXPORT = qw(&BreedingSearch &Z3950Search &Z3950SearchAuth);
}
=head1 NAME
=head1 SYNOPSIS
- use C4::Scan;
- &ImportBreeding($marcrecords,$overwrite_biblio,$filename,$z3950random,$batch_type);
-
- C<$marcrecord> => the MARC::Record
- C<$overwrite_biblio> => if set to 1 a biblio with the same ISBN will be overwritted.
- if set to 0 a biblio with the same isbn will be ignored (the previous will be kept)
- if set to -1 the biblio will be added anyway (more than 1 biblio with the same ISBN
- possible in the breeding
- C<$encoding> => USMARC
- or UNIMARC. used for char_decoding.
- If not present, the parameter marcflavour is used instead
- C<$z3950random> => the random value created during a z3950 search result.
+ Z3950Search($pars, $template);
+ ($count, @results) = &BreedingSearch($title,$isbn,$random);
=head1 DESCRIPTION
- ImportBreeding import MARC records in the reservoir (import_records/import_batches tables).
- the records can be properly encoded or not, we try to reencode them in utf-8 if needed.
- works perfectly with BNF server, that sends UNIMARC latin1 records. Should work with other servers too.
-
-=head2 ImportBreeding
-
- ImportBreeding($marcrecords,$overwrite_biblio,$filename,$encoding,$z3950random,$batch_type);
-
- TODO description
-
-=cut
-
-sub ImportBreeding {
- my ($marcrecords,$overwrite_biblio,$filename,$encoding,$z3950random,$batch_type) = @_;
- my @marcarray = split /\x1D/, $marcrecords;
-
- my $dbh = C4::Context->dbh;
-
- my $batch_id = GetZ3950BatchId($filename);
- my $searchisbn = $dbh->prepare("select biblioitemnumber from biblioitems where isbn=?");
- my $searchissn = $dbh->prepare("select biblioitemnumber from biblioitems where issn=?");
- # FIXME -- not sure that this kind of checking is actually needed
- my $searchbreeding = $dbh->prepare("select import_record_id from import_biblios where isbn=? and title=?");
-
-# $encoding = C4::Context->preference("marcflavour") unless $encoding;
- # fields used for import results
- my $imported=0;
- my $alreadyindb = 0;
- my $alreadyinfarm = 0;
- my $notmarcrecord = 0;
- my $breedingid;
- 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);
-
- # Normalize the record so it doesn't have separated diacritics
- SetUTF8Flag($marcrecord);
-
-# warn "$i : $marcarray[$i]";
- # FIXME - currently this does nothing
- my @warnings = $marcrecord->warnings();
-
- if (scalar($marcrecord->fields()) == 0) {
- $notmarcrecord++;
- } else {
- my $oldbiblio = TransformMarcToKoha($dbh,$marcrecord,'');
- # if isbn found and biblio does not exist, add it. If isbn found and biblio exists,
- # overwrite or ignore depending on user choice
- # drop every "special" char : spaces, - ...
- $oldbiblio->{isbn} = C4::Koha::_isbn_cleanup($oldbiblio->{isbn}); # FIXME C4::Koha::_isbn_cleanup should be public
- # search if biblio exists
- my $biblioitemnumber;
- if ($oldbiblio->{isbn}) {
- $searchisbn->execute($oldbiblio->{isbn});
- ($biblioitemnumber) = $searchisbn->fetchrow;
- } else {
- if ($oldbiblio->{issn}) {
- $searchissn->execute($oldbiblio->{issn});
- ($biblioitemnumber) = $searchissn->fetchrow;
- }
- }
- if ($biblioitemnumber && $overwrite_biblio ne 2) {
- $alreadyindb++;
- } else {
- # FIXME - in context of batch load,
- # rejecting records because already present in the reservoir
- # not correct in every case.
- # search in breeding farm
- if ($oldbiblio->{isbn}) {
- $searchbreeding->execute($oldbiblio->{isbn},$oldbiblio->{title});
- ($breedingid) = $searchbreeding->fetchrow;
- } elsif ($oldbiblio->{issn}){
- $searchbreeding->execute($oldbiblio->{issn},$oldbiblio->{title});
- ($breedingid) = $searchbreeding->fetchrow;
- }
- if ($breedingid && $overwrite_biblio eq '0') {
- $alreadyinfarm++;
- } else {
- if ($breedingid && $overwrite_biblio eq '1') {
- ModBiblioInBatch($breedingid, $marcrecord);
- } else {
- my $import_id = AddBiblioToBatch($batch_id, $imported, $marcrecord, $encoding, $z3950random);
- $breedingid = $import_id;
- }
- $imported++;
- }
- }
- }
- }
- return ($notmarcrecord,$alreadyindb,$alreadyinfarm,$imported,$breedingid);
-}
-
+This module contains routines related to Koha's Z39.50 search into
+cataloguing reservoir features.
=head2 BreedingSearch
my $sth;
my @results;
+ # normalise ISBN like at import
+ $isbn = C4::Koha::GetNormalizedISBN($isbn);
+
$query = "SELECT import_record_id, file_name, isbn, title, author
FROM import_biblios
JOIN import_records USING (import_record_id)
my ($error)= $oConnection[$k]->error_x(); #ignores errmsg, addinfo, diagset
if ($error) {
if ($error =~ m/^(10000|10007)$/ ) {
- push(@errconn, { 'server' => $serverinfo[$k]->{host} } );
+ push(@errconn, { server => $serverinfo[$k]->{host}, error => $error } );
}
}
else {
my ($marcrecord) = MarcToUTF8Record($raw, C4::Context->preference('marcflavour'), $servhref->{encd}); #ignores charset return values
SetUTF8Flag($marcrecord);
- #call to ImportBreeding replaced by next two calls for optimization
my $batch_id = GetZ3950BatchId($servhref->{name});
my $breedingid = AddBiblioToBatch($batch_id, $seq, $marcrecord, 'UTF-8', 0, 0);
#FIXME passing 0 for z3950random
ImportBreedingAuth($marcrecords,$overwrite_auth,$filename,$encoding,$z3950random,$batch_type);
-TODO description
+ ImportBreedingAuth imports MARC records in the reservoir (import_records table).
+ ImportBreedingAuth is based on the ImportBreeding subroutine.
=cut
# Normalize the record so it doesn't have separated diacritics
SetUTF8Flag($marcrecord);
-# warn "$i : $marcarray[$i]";
- # FIXME - currently this does nothing
- my @warnings = $marcrecord->warnings();
-
if (scalar($marcrecord->fields()) == 0) {
$notmarcrecord++;
} else {
if ($duplicateauthid && $overwrite_auth ne 2) {
#If the authority record exists and $overwrite_auth doesn't equal 2, then mark it as already in the DB
- #FIXME: What does $overwrite_auth = 2 even mean?
-
- #FIXME: Should we bother with $overwrite_auth values? Currently, the hard-coded $overwrite_auth value is 2, which means the database gets filled with import_records...
- #^^ of course, we might not want to reject records if their control number/heading exist in the db or breeding/import pool...as we might be wanting to update existing authority records...
$alreadyindb++;
} else {
if ($controlnumber && $heading) {
($breedingid) = $searchbreeding->fetchrow;
}
if ($breedingid && $overwrite_auth eq '0') {
- #FIXME: What does $overwrite_auth = 0 even mean?
$alreadyinfarm++;
} else {
if ($breedingid && $overwrite_auth eq '1') {
- #FIXME: What does $overwrite_auth = 1 even mean?
ModAuthorityInBatch($breedingid, $marcrecord);
} else {
my $import_id = AddAuthToBatch($batch_id, $imported, $marcrecord, $encoding, $z3950random);