2 # Small script that rebuilds the non-MARC DB
3 # Formerly named rebuildnonmarc.pl
6 #use warnings; FIXME - Bug 2505
9 # find Koha's Perl modules
10 # test carefully before changing this
12 eval { require "$FindBin::Bin/kohalib.pl" };
21 use Time
::HiRes
qw(gettimeofday);
25 my ($version, $confirm);
31 if ($version || (!$confirm)) {
33 This script rebuilds the non-MARC fields from the MARC values.
34 You can/must use it when you change your mapping.
36 Example: you decide to map biblio.title to 200\$a (it was previously mapped to 610\$a).
37 Run this script or you will have strange results in the UI!
40 \t./batchRebuildBiblioTables.pl -h (or without arguments => show this screen)
41 \t./batchRebuildBiblioTables.pl -c (c like confirm => rebuild non-MARC fields (may take long)
47 $|=1; # non-buffered output
49 my $dbh = C4
::Context
->dbh;
51 my $starttime = gettimeofday
;
52 my $marcflavour = C4
::Context
->preference('marcflavour');
53 my $sth = $dbh->prepare('SELECT biblionumber, frameworkcode FROM biblio');
57 while (my ($biblionumber, $frameworkcode) = $sth->fetchrow) {
58 my $marcxml = GetXmlBiblio
($biblionumber);
59 if (not defined $marcxml) {
60 push @errors, $biblionumber;
64 $marcxml = C4
::Charset
::StripNonXmlChars
( $marcxml );
66 MARC
::Record
::new_from_xml
($marcxml, 'UTF-8', $marcflavour);
69 push @errors, $biblionumber;
73 my $biblio = TransformMarcToKoha
($record);
74 C4
::Biblio
::_koha_modify_biblio
($dbh, $biblio, $frameworkcode);
75 C4
::Biblio
::_koha_modify_biblioitem_nonmarc
($dbh, $biblio);
78 printf("%lu records processed in %.2f seconds\n", $i, gettimeofday
() - $starttime) unless ($i % 100);
81 printf("\n%lu records processed in %.2f seconds\n", $i, gettimeofday
() - $starttime);
82 if (scalar(@errors) > 0) {
83 print "Some records could not be processed though: ", join(' ', @errors);