Allows for search by equivalent ISBN-10 and ISBN-13 numbers. * rebuild_zebra.pl now inserts 999$e subfields into bib records containing the ISBN-10 and ISBN-13 forms off all ISBNs in the original MARC record. * added 999$e to ISBN index * Adds dependency on Business::ISBN
This work was sponsored by the Plano Independent School District. --- Makefile.PL | 1 + about.pl | 1 + etc/zebradb/marc_defs/marc21/biblios/record.abs | 7 +++-- misc/migration_tools/rebuild_zebra.pl | 32 +++++++++++++++++++++++ 4 files changed, 38 insertions(+), 3 deletions(-) diff --git a/Makefile.PL b/Makefile.PL index 3150394..db791d8 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -534,6 +534,7 @@ WriteMakefile( PREREQ_PM => { 'Algorithm::CheckDigits' => 0.50, 'Biblio::EndnoteStyle' => 0.05, + 'Business::ISBN' => 2.05, 'CGI' => 3.15, 'CGI::Carp' => 1.29, 'CGI::Session' => 4.20, diff --git a/about.pl b/about.pl index 56d1717..df8d4c4 100755 --- a/about.pl +++ b/about.pl @@ -64,6 +64,7 @@ my @component_names = qw/ Algorithm::CheckDigits Biblio::EndnoteStyle +Business::ISBN CGI CGI::Carp CGI::Session diff --git a/etc/zebradb/marc_defs/marc21/biblios/record.abs b/etc/zebradb/marc_defs/marc21/biblios/record.abs index 47be88f..047f13b 100644 --- a/etc/zebradb/marc_defs/marc21/biblios/record.abs +++ b/etc/zebradb/marc_defs/marc21/biblios/record.abs @@ -52,9 +52,10 @@ melm 015 BNB-card-number,BGF-number,Number-db,Number-natl-biblio,Identifi melm 017 Number-legal-deposit,Identifier-standard melm 018 Identifier-standard melm 020$a ISBN:w,Identifier-standard:w -melm 020 Identifier-standard -melm 022$a ISSN:w,Identifier-standard:w -melm 022 Identifier-standard +melm 999$e ISBN:w,Identifier-standard:w +melm 020 ISBN,Identifier-standard +melm 022$a ISSN:w,ISBN:w +melm 022 ISSN,Identifier-standard melm 023 Identifier-standard melm 024$a Identifier-other melm 024 Identifier-standard diff --git a/misc/migration_tools/rebuild_zebra.pl b/misc/migration_tools/rebuild_zebra.pl index 0f4b4a0..9751bf3 100755 --- a/misc/migration_tools/rebuild_zebra.pl +++ b/misc/migration_tools/rebuild_zebra.pl @@ -8,6 +8,7 @@ use File::Temp qw/ tempdir /; use File::Path; use C4::Biblio; use C4::AuthoritiesMarc; +use Business::ISBN; # # script that checks zebradir structure & create directories & mandatory files if needed @@ -380,6 +381,7 @@ sub get_corrected_marc_record { if ($record_type eq 'biblio') { my $succeeded = fix_biblio_ids($marc, $record_number); return unless $succeeded; + add_isbn13s($marc); } else { fix_authority_id($marc, $record_number); } @@ -477,6 +479,36 @@ sub fix_biblio_ids { return 1; } +sub add_isbn13s { + my $marc = shift; + + my ($isbntag, $isbnsubfield) = GetMarcFromKohaField('biblioitems.isbn', ''); + return unless $isbntag and $isbnsubfield; + my %isbns =(); + foreach my $field ($marc->field($isbntag)) { + my $sfa = $field->subfield('a'); + next unless $sfa; + my ($isbn_str) = $sfa =~ /^([0-9-]+[0-9xX])/; + next unless defined $isbn_str; + $isbn_str =~ s/-//; + $isbns{$isbn_str}++; + my $isbn = Business::ISBN->new($isbn_str); + next unless $isbn->is_valid(); + next unless $isbn->is_valid(); + my $isbn13_str = $isbn->as_isbn13()->as_string([]); + $isbns{$isbn13_str}++; + my $isbn10 = $isbn->as_isbn10(); + next unless defined $isbn10; + $isbns{$isbn10->as_string([])}++; + } + return unless %isbns; + if (my $f999 = $marc->field('999')) { + $f999->add_subfields(map { ('e' => $_) } keys %isbns); + } else { + $marc->append_field(MARC::Field->new('999', ' ', ' ', map { ('e' => $_) } keys %isbns)); + } +} + sub fix_authority_id { # FIXME - as with fix_biblio_ids, the authid must be present # for Zebra's sake. However, this really belongs -- 1.5.6.5 _______________________________________________ Koha-patches mailing list Koha-patches@lists.koha.org http://lists.koha.org/mailman/listinfo/koha-patches