Fix for Bug 5650, item type page key wrong
[koha.git] / misc / batchRebuildBiblioTables.pl
blobb15a91ade748d8cf7ce006ba4a2e2a393f17a668
1 #!/usr/bin/perl
2 # Small script that rebuilds the non-MARC DB
3 # Formerly named rebuildnonmarc.pl
5 use strict;
6 #use warnings; FIXME - Bug 2505
8 BEGIN {
9 # find Koha's Perl modules
10 # test carefully before changing this
11 use FindBin;
12 eval { require "$FindBin::Bin/kohalib.pl" };
15 # Koha modules used
16 use MARC::Record;
17 use C4::Context;
18 use C4::Biblio;
19 use Time::HiRes qw(gettimeofday);
21 use Getopt::Long;
22 my ( $input_marc_file, $number) = ('', 0);
23 my ($version, $confirm, $test_parameter);
24 GetOptions(
25 'c' => \$confirm,
26 'h' => \$version,
27 't' => \$test_parameter,
30 if ($version || (!$confirm)) {
31 print <<EOF
32 This script rebuilds the non-MARC DB from the MARC values.
33 You can/must use it when you change your mapping.
35 Example: you decide to map biblio.title to 200\$a (it was previously mapped to 610\$a).
36 Run this script or you will have strange results in OPAC !
38 Syntax:
39 \t./batchRebuildBiblioTables.pl -h (or without arguments => shows this screen)
40 \t./batchRebuildBiblioTables.pl -c (c like confirm => rebuild non marc DB (may be long)
41 \t-t => test only, change nothing in DB
42 EOF
44 exit;
47 my $dbh = C4::Context->dbh;
48 my $i=0;
49 my $starttime = time();
51 $|=1; # flushes output
52 $starttime = gettimeofday;
54 #1st of all, find item MARC tag.
55 my ($tagfield,$tagsubfield) = &GetMarcFromKohaField("items.itemnumber",'');
56 # $dbh->do("lock tables biblio write, biblioitems write, items write, marc_biblio write, marc_subfield_table write, marc_blob_subfield write, marc_word write, marc_subfield_structure write, stopwords write");
57 my $sth = $dbh->prepare("SELECT biblionumber FROM biblio");
58 $sth->execute;
59 # my ($biblionumbermax) = $sth->fetchrow;
60 # warn "$biblionumbermax <<==";
61 while (my ($biblionumber)= $sth->fetchrow) {
62 #now, parse the record, extract the item fields, and store them in somewhere else.
63 my $record = GetMarcBiblio($biblionumber);
64 my @fields = $record->field($tagfield);
65 my @items;
66 my $nbitems=0;
67 print ".";
68 my $timeneeded = gettimeofday - $starttime;
69 print "$i in $timeneeded s\n" unless ($i % 50);
70 $i++;
71 foreach my $field (@fields) {
72 my $item = MARC::Record->new();
73 $item->append_fields($field);
74 push @items,$item;
75 $record->delete_field($field);
76 $nbitems++;
78 # print "$biblionumber\n";
79 my $frameworkcode = GetFrameworkCode($biblionumber);
80 localNEWmodbiblio($dbh,$record,$biblionumber,$frameworkcode) unless $test_parameter;
82 # $dbh->do("unlock tables");
83 my $timeneeded = time() - $starttime;
84 print "$i MARC record done in $timeneeded seconds\n";
86 # modified NEWmodbiblio to jump the MARC part of the biblio modif
87 # highly faster
88 sub localNEWmodbiblio {
89 my ($dbh,$record,$biblionumber,$frameworkcode) =@_;
90 $frameworkcode="" unless $frameworkcode;
91 my $oldbiblio = TransformMarcToKoha($dbh,$record,$frameworkcode);
92 C4::Biblio::_koha_modify_biblio( $dbh, $oldbiblio, $frameworkcode );
93 C4::Biblio::_koha_modify_biblioitem_nonmarc( $dbh, $oldbiblio );
94 return 1;