#!/usr/bin/perl # Small script that rebuilds the non-MARC DB # Formerly named rebuildnonmarc.pl use strict; #use warnings; FIXME - Bug 2505 BEGIN { # find Koha's Perl modules # test carefully before changing this use FindBin (); eval { require "$FindBin::Bin/kohalib.pl" }; } # Koha modules used use Koha::Script; use MARC::Record; use C4::Charset; use C4::Context; use C4::Biblio qw( GetXmlBiblio TransformMarcToKoha ); use Time::HiRes qw( gettimeofday ); use Getopt::Long qw( GetOptions ); my ($version, $confirm); GetOptions( 'c' => \$confirm, 'h' => \$version ); if ($version || (!$confirm)) { print < show this screen) \t./batchRebuildBiblioTables.pl -c (c like confirm => rebuild non-MARC fields (may take long) EOF ; exit; } $|=1; # non-buffered output my $dbh = C4::Context->dbh; my $i=0; my $starttime = gettimeofday; my $marcflavour = C4::Context->preference('marcflavour'); my $sth = $dbh->prepare('SELECT biblionumber, frameworkcode FROM biblio'); $sth->execute(); my @errors; while (my ($biblionumber, $frameworkcode) = $sth->fetchrow) { my $marcxml = GetXmlBiblio($biblionumber); if (not defined $marcxml) { push @errors, $biblionumber; next; } $marcxml = C4::Charset::StripNonXmlChars( $marcxml ); my $record = eval { MARC::Record::new_from_xml($marcxml, 'UTF-8', $marcflavour); }; if ($@) { push @errors, $biblionumber; next; } my $biblio = TransformMarcToKoha($record); C4::Biblio::_koha_modify_biblio($dbh, $biblio, $frameworkcode); C4::Biblio::_koha_modify_biblioitem_nonmarc($dbh, $biblio); $i++; printf("%lu records processed in %.2f seconds\n", $i, gettimeofday() - $starttime) unless ($i % 100); } printf("\n%lu records processed in %.2f seconds\n", $i, gettimeofday() - $starttime); if (scalar(@errors) > 0) { print "Some records could not be processed though: ", join(' ', @errors); }