X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=misc%2Fmigration_tools%2Frebuild_zebra.pl;h=02f50b7b30f0571e857681b7f6b8845609d07388;hb=262a6e2a9a16b404a42c34961e0d15140ead6347;hp=1cb9618b15b6f78c84c80ed6094b24575b76b261;hpb=9149a711fbb981d092dc702c169fa701e464db20;p=koha_fer diff --git a/misc/migration_tools/rebuild_zebra.pl b/misc/migration_tools/rebuild_zebra.pl index 1cb9618b15..02f50b7b30 100755 --- a/misc/migration_tools/rebuild_zebra.pl +++ b/misc/migration_tools/rebuild_zebra.pl @@ -177,44 +177,44 @@ if ($authorities) { # the record model, depending on marc flavour unless (-f "$authorityserverdir/tab/record.abs") { if (C4::Context->preference("marcflavour") eq "UNIMARC") { - system("cp -f $kohadir/misc/zebra/record_authorities_unimarc.abs $authorityserverdir/tab/record.abs"); + system("cp -f $kohadir/etc/zebradb/authorities/etc/record_unimarc.abs $authorityserverdir/tab/record.abs"); print "Info: copied record.abs for UNIMARC\n"; } else { - system("cp -f $kohadir/misc/zebra/record_authorities_usmarc.abs $authorityserverdir/tab/record.abs"); + system("cp -f $kohadir/etc/zebradb/authorities/etc/record.abs $authorityserverdir/tab/record.abs"); print "Info: copied record.abs for USMARC\n"; } $created_dir_or_file++; } unless (-f "$authorityserverdir/tab/sort-string-utf.chr") { - system("cp -f $kohadir/misc/zebra/sort-string-utf_french.chr $authorityserverdir/tab/sort-string-utf.chr"); + system("cp -f $kohadir/etc/zebradb/etc/sort-string-utf_french.chr $authorityserverdir/tab/sort-string-utf.chr"); print "Info: copied sort-string-utf.chr\n"; $created_dir_or_file++; } unless (-f "$authorityserverdir/tab/word-phrase-utf.chr") { - system("cp -f $kohadir/misc/zebra/sort-string-utf_french.chr $authorityserverdir/tab/word-phrase-utf.chr"); + system("cp -f $kohadir/etc/zebradb/etc/sort-string-utf_french.chr $authorityserverdir/tab/word-phrase-utf.chr"); print "Info: copied word-phase-utf.chr\n"; $created_dir_or_file++; } unless (-f "$authorityserverdir/tab/auth1.att") { - system("cp -f $kohadir/misc/zebra/bib1_authorities.att $authorityserverdir/tab/auth1.att"); + system("cp -f $kohadir/etc/zebradb/authorities/etc/bib1.att $authorityserverdir/tab/auth1.att"); print "Info: copied auth1.att\n"; $created_dir_or_file++; } unless (-f "$authorityserverdir/tab/default.idx") { - system("cp -f $kohadir/misc/zebra/default.idx $authorityserverdir/tab/default.idx"); + system("cp -f $kohadir/etc/zebradb/etc/default.idx $authorityserverdir/tab/default.idx"); print "Info: copied default.idx\n"; $created_dir_or_file++; } unless (-f "$authorityserverdir/etc/ccl.properties") { -# system("cp -f $kohadir/misc/zebra/ccl.properties ".C4::Context->zebraconfig('authorityserver')->{ccl2rpn}); - system("cp -f $kohadir/misc/zebra/ccl.properties $authorityserverdir/etc/ccl.properties"); +# system("cp -f $kohadir/etc/zebradb/ccl.properties ".C4::Context->zebraconfig('authorityserver')->{ccl2rpn}); + system("cp -f $kohadir/etc/zebradb/ccl.properties $authorityserverdir/etc/ccl.properties"); print "Info: copied ccl.properties\n"; $created_dir_or_file++; } unless (-f "$authorityserverdir/etc/pqf.properties") { -# system("cp -f $kohadir/misc/zebra/pqf.properties ".C4::Context->zebraconfig('authorityserver')->{ccl2rpn}); - system("cp -f $kohadir/misc/zebra/pqf.properties $authorityserverdir/etc/pqf.properties"); +# system("cp -f $kohadir/etc/zebradb/pqf.properties ".C4::Context->zebraconfig('authorityserver')->{ccl2rpn}); + system("cp -f $kohadir/etc/zebradb/pqf.properties $authorityserverdir/etc/pqf.properties"); print "Info: copied pqf.properties\n"; $created_dir_or_file++; } @@ -388,43 +388,43 @@ if ($biblios) { # the record model, depending on marc flavour unless (-f "$biblioserverdir/tab/record.abs") { if (C4::Context->preference("marcflavour") eq "UNIMARC") { - system("cp -f $kohadir/misc/zebra/record_biblios_unimarc.abs $biblioserverdir/tab/record.abs"); + system("cp -f $kohadir/etc/zebradb/biblios/etc/record_unimarc.abs $biblioserverdir/tab/record.abs"); print "Info: copied record.abs for UNIMARC\n"; } else { - system("cp -f $kohadir/misc/zebra/record_biblios_usmarc.abs $biblioserverdir/tab/record.abs"); + system("cp -f $kohadir/etc/zebradb/biblios/etc/record.abs $biblioserverdir/tab/record.abs"); print "Info: copied record.abs for USMARC\n"; } $created_dir_or_file++; } unless (-f "$biblioserverdir/tab/sort-string-utf.chr") { - system("cp -f $kohadir/misc/zebra/sort-string-utf_french.chr $biblioserverdir/tab/sort-string-utf.chr"); + system("cp -f $kohadir/etc/zebradb/etc/sort-string-utf_french.chr $biblioserverdir/tab/sort-string-utf.chr"); print "Info: copied sort-string-utf.chr\n"; $created_dir_or_file++; } unless (-f "$biblioserverdir/tab/word-phrase-utf.chr") { - system("cp -f $kohadir/misc/zebra/sort-string-utf_french.chr $biblioserverdir/tab/word-phrase-utf.chr"); + system("cp -f $kohadir/etc/zebradb/etc/sort-string-utf_french.chr $biblioserverdir/tab/word-phrase-utf.chr"); print "Info: copied word-phase-utf.chr\n"; $created_dir_or_file++; } unless (-f "$biblioserverdir/tab/bib1.att") { - system("cp -f $kohadir/misc/zebra/bib1_biblios.att $biblioserverdir/tab/bib1.att"); + system("cp -f $kohadir/etc/zebradb/biblios/etc/bib1.att $biblioserverdir/tab/bib1.att"); print "Info: copied bib1.att\n"; $created_dir_or_file++; } unless (-f "$biblioserverdir/tab/default.idx") { - system("cp -f $kohadir/misc/zebra/default.idx $biblioserverdir/tab/default.idx"); + system("cp -f $kohadir/etc/zebradb/etc/default.idx $biblioserverdir/tab/default.idx"); print "Info: copied default.idx\n"; $created_dir_or_file++; } unless (-f "$biblioserverdir/etc/ccl.properties") { -# system("cp -f $kohadir/misc/zebra/ccl.properties ".C4::Context->zebraconfig('biblioserver')->{ccl2rpn}); - system("cp -f $kohadir/misc/zebra/ccl.properties $biblioserverdir/etc/ccl.properties"); +# system("cp -f $kohadir/etc/zebradb/ccl.properties ".C4::Context->zebraconfig('biblioserver')->{ccl2rpn}); + system("cp -f $kohadir/etc/zebradb/ccl.properties $biblioserverdir/etc/ccl.properties"); print "Info: copied ccl.properties\n"; $created_dir_or_file++; } unless (-f "$biblioserverdir/etc/pqf.properties") { -# system("cp -f $kohadir/misc/zebra/pqf.properties ".C4::Context->zebraconfig('biblioserver')->{ccl2rpn}); - system("cp -f $kohadir/misc/zebra/pqf.properties $biblioserverdir/etc/pqf.properties"); +# system("cp -f $kohadir/etc/zebradb/pqf.properties ".C4::Context->zebraconfig('biblioserver')->{ccl2rpn}); + system("cp -f $kohadir/etc/zebradb/pqf.properties $biblioserverdir/etc/pqf.properties"); print "Info: copied pqf.properties\n"; $created_dir_or_file++; } @@ -569,10 +569,12 @@ rank:rank-1 } close (OUT); } else { - $sth=$dbh->prepare("select biblionumber from biblioitems order by biblionumber $limit"); + $sth=$dbh->prepare("SELECT biblionumber FROM biblioitems ORDER BY biblionumber $limit"); $sth->execute(); my $i=0; while (my ($biblionumber) = $sth->fetchrow) { + print "."; + print "\r$i" unless ($i++ %100); my $record; eval { $record = GetMarcBiblio($biblionumber); @@ -582,16 +584,19 @@ rank:rank-1 next; } next unless $record; -# warn $record->as_formatted; # die if $record->subfield('090','9') eq 11; # print $record; # check that biblionumber & biblioitemnumber are stored in the MARC record, otherwise, add them & update the biblioitems.marcxml data. my $record_correct=1; # skip uncorrect records : isn't this bogus, as just after we reintroduce biblionumber if it's missing ? # FIXME next unless $record->field($biblionumbertagfield); - # check if biblionumber is present, otherwise, add it on the fly + # + # + # CHECK biblionumber + # + # if ($biblionumbertagfield eq '001') { - unless ($record->field($biblionumbertagfield)->data()) { + unless ($record->field($biblionumbertagfield) && $record->field($biblionumbertagfield)->data()) { $record_correct=0; my $field; # if the field where biblionumber is already exist, just update it, otherwise create it @@ -606,6 +611,7 @@ rank:rank-1 } } else { unless ($record->subfield($biblionumbertagfield,$biblionumbertagsubfield)) { +# warn "fixing biblionumber for $biblionumbertagfield,$biblionumbertagsubfield = $biblionumber"; $record_correct=0; my $field; # if the field where biblionumber is already exist, just update it, otherwise create it @@ -618,11 +624,16 @@ rank:rank-1 $record->append_fields($newfield); } } - # warn "FIXED BIBLIONUMBER".$record->as_formatted; +# warn "FIXED BIBLIONUMBER".$record->as_formatted; } + # + # + # CHECK BIBLIOITEMNUMBER + # + # unless ($record->subfield($biblioitemnumbertagfield,$biblioitemnumbertagsubfield)) { +# warn "fixing biblioitemnumber for $biblioitemnumbertagfield,$biblioitemnumbertagsubfield = $biblionumber"; $record_correct=0; - # warn "INCORRECT BIBLIOITEMNUMBER :".$record->as_formatted; my $field; # if the field where biblionumber is already exist, just update it, otherwise create it if ($record->field($biblioitemnumbertagfield)) { @@ -643,13 +654,37 @@ rank:rank-1 } # warn "FIXED BIBLIOITEMNUMBER".$record->as_formatted; } + # + # + # CHECK FIELD 100 + # + # + my $encoding = C4::Context->preference("marcflavour"); + # deal with UNIMARC field 100 (encoding) : create it if needed & set encoding to unicode + if ( $encoding eq "UNIMARC" ) { + my $string; + if ( length($record->subfield( 100, "a" )) == 35 ) { + $string = $record->subfield( 100, "a" ); + my $f100 = $record->field(100); + $record->delete_field($f100); + } + else { + $string = POSIX::strftime( "%Y%m%d", localtime ); + $string =~ s/\-//g; + $string = sprintf( "%-*s", 35, $string ); + } + substr( $string, 22, 6, "frey50" ); + unless ( length($record->subfield( 100, "a" )) == 35 ) { + $record->delete_field($record->field(100)); + $record->insert_grouped_field( + MARC::Field->new( 100, "", "", "a" => $string ) ); + } + } unless ($record_correct) { my $update_xml = $dbh->prepare("update biblioitems set marcxml=? where biblionumber=?"); warn "UPDATING $biblionumber (missing biblionumber or biblioitemnumber in MARC record : ".$record->as_xml; $update_xml->execute($record->as_xml,$biblionumber); } - print "."; - print "\r$i" unless ($i++ %100); # remove leader length, that could be wrong, it will be calculated automatically by as_usmarc # otherwise, if it's wron, zebra will fail miserabily (and never index what is after the failing record) my $leader=$record->leader;