2 # Small script that rebuilds the non-MARC DB
3 # Formerly named rebuildnonmarc.pl
6 #use warnings; FIXME - Bug 2505
17 use Time::HiRes qw( gettimeofday );
19 use Getopt::Long qw( GetOptions );
21 my ($version, $confirm);
27 if ($version || (!$confirm)) {
29 This script rebuilds the non-MARC fields from the MARC values.
30 You can/must use it when you change your mapping.
32 Example: you decide to map biblio.title to 200\$a (it was previously mapped to 610\$a).
33 Run this script or you will have strange results in the UI!
36 \t./batchRebuildBiblioTables.pl -h (or without arguments => show this screen)
37 \t./batchRebuildBiblioTables.pl -c (c like confirm => rebuild non-MARC fields (may take long)
43 $|=1; # non-buffered output
45 my $dbh = C4::Context->dbh;
47 my $starttime = gettimeofday;
48 my $marcflavour = C4::Context->preference('marcflavour');
49 my $sth = $dbh->prepare('SELECT biblionumber, frameworkcode FROM biblio');
53 while (my ($biblionumber, $frameworkcode) = $sth->fetchrow) {
54 my $marcxml = GetXmlBiblio($biblionumber);
55 if (not defined $marcxml) {
56 push @errors, $biblionumber;
60 $marcxml = C4::Charset::StripNonXmlChars( $marcxml );
62 MARC::Record::new_from_xml($marcxml, 'UTF-8', $marcflavour);
65 push @errors, $biblionumber;
69 my $biblio = TransformMarcToKoha({ record => $record });
70 C4::Biblio::_koha_modify_biblio($dbh, $biblio, $frameworkcode);
71 C4::Biblio::_koha_modify_biblioitem_nonmarc($dbh, $biblio);
74 printf("%lu records processed in %.2f seconds\n", $i, gettimeofday() - $starttime) unless ($i % 100);
77 printf("\n%lu records processed in %.2f seconds\n", $i, gettimeofday() - $starttime);
78 if (scalar(@errors) > 0) {
79 print "Some records could not be processed though: ", join(' ', @errors);