#!/usr/bin/perl
-# small script that rebuilds the non-MARC DB
+# 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 Time::HiRes qw(gettimeofday);
use Getopt::Long;
-my ( $input_marc_file, $number) = ('',0);
-my ($version, $confirm,$test_parameter);
+my ( $input_marc_file, $number) = ('', 0);
+my ($version, $confirm, $test_parameter);
GetOptions(
'c' => \$confirm,
'h' => \$version,
print <<EOF
This script rebuilds the non-MARC DB from the MARC values.
You can/must use it when you change your mapping.
-For example : you decide to map biblio.title to 200$a (it was previously mapped to 610$a) : run this script or you will have strange
-results in OPAC !
-syntax :
-\t./rebuildnonmarc.pl -h (or without arguments => shows this screen)
-\t./rebuildnonmarc.pl -c (c like confirm => rebuild non marc DB (may be long)
+
+Example: you decide to map biblio.title to 200\$a (it was previously mapped to 610\$a).
+Run this script or you will have strange results in OPAC !
+
+Syntax:
+\t./batchRebuildBiblioTables.pl -h (or without arguments => shows this screen)
+\t./batchRebuildBiblioTables.pl -c (c like confirm => rebuild non marc DB (may be long)
\t-t => test only, change nothing in DB
EOF
;
-die;
+ exit;
}
my $dbh = C4::Context->dbh;
$sth->execute;
# my ($biblionumbermax) = $sth->fetchrow;
# warn "$biblionumbermax <<==";
+my @errors;
while (my ($biblionumber)= $sth->fetchrow) {
#now, parse the record, extract the item fields, and store them in somewhere else.
my $record = GetMarcBiblio($biblionumber);
+ if (not defined $record) {
+ push @errors, $biblionumber;
+ next;
+ }
my @fields = $record->field($tagfield);
my @items;
my $nbitems=0;
# $dbh->do("unlock tables");
my $timeneeded = time() - $starttime;
print "$i MARC record done in $timeneeded seconds\n";
+if (scalar(@errors) > 0) {
+ print "Some biblionumber could not be processed though: ", join(" ", @errors);
+}
# modified NEWmodbiblio to jump the MARC part of the biblio modif
# highly faster
my ($dbh,$record,$biblionumber,$frameworkcode) =@_;
$frameworkcode="" unless $frameworkcode;
my $oldbiblio = TransformMarcToKoha($dbh,$record,$frameworkcode);
- C4::Biblio::_koha_modify_biblio( $dbh, $oldbiblio );
+ C4::Biblio::_koha_modify_biblio( $dbh, $oldbiblio, $frameworkcode );
C4::Biblio::_koha_modify_biblioitem_nonmarc( $dbh, $oldbiblio );
return 1;
}