[Koha-cvs] koha/misc/migration_tools rebuild_zebra.pl [rel_3_0]

paul poulain paul at koha-fr.org
Tue Nov 28 16:15:35 CET 2006


CVSROOT:	/sources/koha
Module name:	koha
Branch:		rel_3_0
Changes by:	paul poulain <tipaul>	06/11/28 15:15:35

Modified files:
	misc/migration_tools: rebuild_zebra.pl 

Log message:
	directory cleaning (continued)
	- updating rebuild_zebra.pl to deal with new directory structure
	- updating rebuild_zebra.pl to create zebra-biblio.cfg that depends on server setup (tries to find where zebra & it's directories tab & modules are located on HD)
	
	Works fine for me :
	- create the complete directory structure from koha.xml
	- create directories & write files where they are needed
	
	Next step : doing the same thing for authorities... 

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/koha/misc/migration_tools/rebuild_zebra.pl?cvsroot=koha&only_with_tag=rel_3_0&r1=1.4.2.2&r2=1.4.2.3

Patches:
Index: rebuild_zebra.pl
===================================================================
RCS file: /sources/koha/koha/misc/migration_tools/rebuild_zebra.pl,v
retrieving revision 1.4.2.2
retrieving revision 1.4.2.3
diff -u -b -r1.4.2.2 -r1.4.2.3
--- rebuild_zebra.pl	15 Nov 2006 14:48:06 -0000	1.4.2.2
+++ rebuild_zebra.pl	28 Nov 2006 15:15:35 -0000	1.4.2.3
@@ -4,6 +4,7 @@
 use Getopt::Long;
 use C4::Biblio;
 
+use strict;
 # 
 # script that checks zebradir structure & create directories & mandatory files if needed
 #
@@ -14,6 +15,7 @@
 
 my $zebradir = C4::Context->zebraconfig('biblioserver')->{directory};
 my $kohadir = C4::Context->config('intranetdir');
+my $dbh = C4::Context->dbh;
 my ($biblionumbertagfield,$biblionumbertagsubfield) = &MARCfind_marc_from_kohafield($dbh,"biblio.biblionumber","");
 my ($biblioitemnumbertagfield,$biblioitemnumbertagsubfield) = &MARCfind_marc_from_kohafield($dbh,"biblioitems.biblioitemnumber","");
 
@@ -45,38 +47,38 @@
 print "====================\n";
 unless (-d "$zebradir") {
     system("mkdir -p $zebradir");
-    print "created $zebradir\n";
+    print "Info: created $zebradir\n";
     $created_dir_or_file++;
 }
 unless (-d "$zebradir/lock") {
     mkdir "$zebradir/lock";
-    print "created $zebradir/lock\n";
+    print "Info: created $zebradir/lock\n";
     $created_dir_or_file++;
 }
 unless (-d "$zebradir/register") {
     mkdir "$zebradir/register";
-    print "created $zebradir/register\n";
+    print "Info: created $zebradir/register\n";
     $created_dir_or_file++;
 }
 unless (-d "$zebradir/shadow") {
     mkdir "$zebradir/shadow";
-    print "created $zebradir/shadow\n";
+    print "Info: created $zebradir/shadow\n";
     $created_dir_or_file++;
 }
 unless (-d "$zebradir/tab") {
     mkdir "$zebradir/tab";
-    print "created $zebradir/tab\n";
+    print "Info: created $zebradir/tab\n";
     $created_dir_or_file++;
 }
 unless (-d "$zebradir/key") {
     mkdir "$zebradir/key";
-    print "created $zebradir/key\n";
+    print "Info: created $zebradir/key\n";
     $created_dir_or_file++;
 }
 
 unless (-d "$zebradir/etc") {
     mkdir "$zebradir/etc";
-    print "created $zebradir/etc\n";
+    print "Info: created $zebradir/etc\n";
     $created_dir_or_file++;
 }
 
@@ -86,49 +88,121 @@
 # the record model, depending on marc flavour
 unless (-f "$zebradir/tab/record.abs") {
     if (C4::Context->preference("marcflavour") eq "UNIMARC") {
-        system("cp -f $kohadir/zebraplugin/zebradb/biblios/tab/record_for_unimarc.abs $zebradir/tab/record.abs");
-        print "copied record.abs for UNIMARC\n";
+        system("cp -f $kohadir/misc/zebra/record_biblios_unimarc.abs $zebradir/tab/record.abs");
+        print "Info: copied record.abs for UNIMARC\n";
     } else {
-        system("cp -f $kohadir/zebraplugin/zebradb/biblios/tab/record.abs $zebradir/tab/record.abs");
-        print "copied record.abs for MARC21\n";
+        system("cp -f $kohadir/misc/zebra/record_biblios_usmarc.abs $zebradir/tab/record.abs");
+        print "Info: copied record.abs for USMARC\n";
     }
     $created_dir_or_file++;
 }
-unless (-f "$zebradir/tab/sort-string-utf.chr") {
-    system("cp -f $kohadir/zebraplugin/zebradb/biblios/tab/sort-string-utf.chr $zebradir/tab/sort-string-utf.chr");
-    print "copied sort-string-utf.chr\n";
+unless (-f "$zebradir/tab/sort-string-utf_french.chr") {
+    system("cp -f $kohadir/misc/zebra/sort-string-utf_french.chr $zebradir/tab/sort-string-utf.chr");
+    print "Info: copied sort-string-utf.chr\n";
     $created_dir_or_file++;
 }
 unless (-f "$zebradir/tab/word-phrase-utf.chr") {
-    system("cp -f $kohadir/zebraplugin/zebradb/biblios/tab/word-phrase-utf.chr $zebradir/tab/word-phrase-utf.chr");
-    print "copied word-phase-utf.chr\n";
+    system("cp -f $kohadir/misc/zebra/sort-string-utf_french.chr $zebradir/tab/word-phrase-utf.chr");
+    print "Info: copied word-phase-utf.chr\n";
     $created_dir_or_file++;
 }
 unless (-f "$zebradir/tab/bib1.att") {
-    system("cp -f $kohadir/zebraplugin/zebradb/biblios/tab/bib1.att $zebradir/tab/bib1.att");
-    print "copied bib1.att\n";
+    system("cp -f $kohadir/misc/zebra/bib1_biblios.att $zebradir/tab/bib1.att");
+    print "Info: copied bib1.att\n";
     $created_dir_or_file++;
 }
 unless (-f "$zebradir/etc/ccl.properties") {
-    system("cp -f $kohadir/zebraplugin/etc/ccl.properties $zebradir/etc/ccl.properties");
-    print "copied ccl.properties\n";
+    system("cp -f $kohadir/misc/zebra/ccl.properties $zebradir/etc/ccl.properties");
+    print "Info: copied ccl.properties\n";
     $created_dir_or_file++;
 }
 unless (-f "$zebradir/etc/pqf.properties") {
-    system("cp -f $kohadir/zebraplugin/etc/pqf.properties $zebradir/etc/pqf.properties");
-    print "copied pqf.properties\n";
+    system("cp -f $kohadir/misc/zebra/pqf.properties $zebradir/etc/pqf.properties");
+    print "Info: copied pqf.properties\n";
     $created_dir_or_file++;
 }
 
 #
-# creating zebra-biblios.cfg depending on systempreferences
+# creating zebra-biblios.cfg depending on system
 #
 
+# getting zebraidx directory
+my $zebraidxdir;
+foreach (qw(/usr/local/bin/zebraidx
+        /opt/bin/zebraidx
+        /usr/bin/zebraidx
+        )) {
+    if ( -f $_ ) {
+        $zebraidxdir=$_;
+    }
+}
+
+unless ($zebraidxdir) {
+    print qq|
+    ERROR: could not find zebraidx directory
+    ERROR: Either zebra is not installed,
+    ERROR: or it's in a directory I don't checked.
+    ERROR: do a which zebraidx and edit this file to add the result you get
+|;
+    exit;
+}
+$zebraidxdir =~ s/\/bin\/.*//;
+print "Info : zebra is in $zebraidxdir \n";
+
+# getting modules directory
+my $modulesdir;
+foreach (qw(/usr/local/lib/idzebra-2.0/modules/mod-grs-xml.so
+            /usr/local/lib/idzebra/modules/mod-grs-xml.so
+            /usr/lib/idzebra/modules/mod-grs-xml.so
+            /usr/lib/idzebra-2.0/modules/mod-grs-xml.so
+        )) {
+    if ( -f $_ ) {
+        $modulesdir=$_;
+    }
+}
+
+unless ($modulesdir) {
+    print qq|
+    ERROR: could not find mod-grs-xml.so directory
+    ERROR: Either zebra is not properly compiled (libxml2 is not setup and you don t have mod-grs-xml.so,
+    ERROR: or it's in a directory I don't checked.
+    ERROR: find where mod-grs-xml.so is and edit this file to add the result you get
+|;
+    exit;
+}
+$modulesdir =~ s/\/modules\/.*//;
+warn "Info: zebra modules dir : $modulesdir";
+
+# getting tab directory
+my $tabdir;
+foreach (qw(/usr/local/share/idzebra-2.0/tab/explain.att
+            /usr/local/share/idzebra/tab/explain.att
+            /usr/share/idzebra-2.0/tab/explain.att
+            /usr/share/idzebra/tab/explain.att
+        )) {
+    if ( -f $_ ) {
+        $tabdir=$_;
+    }
+}
+
+unless ($tabdir) {
+    print qq|
+    ERROR: could not find explain.att directory
+    ERROR: Either zebra is not properly compiled,
+    ERROR: or it's in a directory I don't checked.
+    ERROR: find where explain.att is and edit this file to add the result you get
+|;
+    exit;
+}
+$tabdir =~ s/\/tab\/.*//;
+warn "Info: tab dir : $tabdir";
+
+
 unless (-f "$zebradir/etc/zebra-biblios.cfg") {
 open ZD,">$zebradir/etc/zebra-biblios.cfg";
 print ZD "
 # generated by KOHA/misc/migrtion_tools/rebuild_zebra.pl 
-profilePath:\${srcdir:-.}:$zebradir/tab/:/usr/local/share/idzebra/tab/:\${srcdir:-.}/tab/
+profilePath:\${srcdir:-.}:$zebradir/tab/:$tabdir/tab/:\${srcdir:-.}/tab/
 
 encoding: UTF-8
 # Files that describe the attribute sets supported.
@@ -136,7 +210,7 @@
 attset: explain.att
 attset:gils.att
 
-modulePath:/usr/local/lib/idzebra-2.0/modules/
+modulePath:$modulesdir/modules/
 systag sysno rank
 # Specify record type
 iso2709.recordType:grs.marcxml.record
@@ -165,16 +239,17 @@
 memMax: 40M
 rank:rank-1
 ";
-    print "creating zebra-biblios.cfg\n";
+    print "Info: creating zebra-biblios.cfg\n";
     $created_dir_or_file++;
 }
 
 if ($created_dir_or_file) {
-    print "created : $created_dir_or_file directories & files\n";
+    print "Info: created : $created_dir_or_file directories & files\n";
 } else {
-    print "file & directories OK\n";
+    print "Info: file & directories OK\n";
 }
 
+# die;
 #
 # exporting biblios
 #
@@ -190,23 +265,32 @@
     open(OUT,">:utf8","$directory/export") or die $!;
     my $dbh=C4::Context->dbh;
     my $sth;
-    $sth=$dbh->prepare("select biblionumber from biblioitems where biblionumber <2000 order by biblionumber");
+    $sth=$dbh->prepare("select biblionumber from biblioitems where biblionumber <200 order by biblionumber");
     $sth->execute();
     my $i=0;
     while (my ($biblionumber) = $sth->fetchrow) {
         my $record = MARCgetbiblio($dbh,$biblionumber);
         # check that biblionumber & biblioitemnumber are stored in the MARC record, otherwise, add them & update the biblioitems.marcxml data.
         my $record_correct=1;
-        unless ($record->subfield($biblionumbertagfield,$biblionumbertagsubfield)) {
+        unless ($biblionumbertagfield<10?($record->field($biblionumbertagfield)):($record->subfield($biblionumbertagfield,$biblionumbertagsubfield))) {
             $record_correct=0;
 #             warn "INCORRECT BIBLIONUMBER :".$record->as_formatted;
             my $field;
             # if the field where biblionumber is already exist, just update it, otherwise create it
             if ($record->field($biblionumbertagfield)) {
                 $field =  $record->field($biblionumbertagfield);
+                if ($biblionumbertagfield <10) {
+                    $field->update($biblionumber);
+                } else {
                 $field->add_subfields($biblionumbertagsubfield => $biblionumber);
+                }
+            } else {
+                my $newfield;
+                if ($biblionumbertagfield <10) {
+                    $newfield = MARC::Field->new( $biblionumbertagfield, $biblionumber);
             } else {
-                my $newfield = MARC::Field->new( $biblionumbertagfield,'','', $biblionumbertagsubfield => $biblionumber);
+                    $newfield = MARC::Field->new( $biblionumbertagfield,'','', $biblionumbertagsubfield => $biblionumber);
+                }
                 $record->append_fields($newfield);
             }
 #             warn "FIXED BIBLIONUMBER".$record->as_formatted;
@@ -218,16 +302,25 @@
             # if the field where biblionumber is already exist, just update it, otherwise create it
             if ($record->field($biblioitemnumbertagfield)) {
                 $field =  $record->field($biblioitemnumbertagfield);
+                if ($biblioitemnumbertagfield <10) {
+                    $field->update($biblionumber);
+                } else {
                 $field->add_subfields($biblioitemnumbertagsubfield => $biblionumber);
+                }
             } else {
-                my $newfield = MARC::Field->new( $biblioitemnumbertagfield,'','', $biblioitemnumbertagsubfield => $biblionumber);
+                my $newfield;
+                if ($biblioitemnumbertagfield <10) {
+                    $newfield = MARC::Field->new( $biblioitemnumbertagfield, $biblionumber);
+                } else {
+                    $newfield = MARC::Field->new( $biblioitemnumbertagfield,'','', $biblioitemnumbertagsubfield => $biblionumber);
+                }
                 $record->insert_grouped_field($newfield);
             }
 #             warn "FIXED BIBLIOITEMNUMBER".$record->as_formatted;
         }
         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;
+#             warn "UPDATING $biblionumber (missing biblionumber or biblioitemnumber in MARC record : ".$record->as_xml;
             $update_xml->execute($record->as_xml,$biblionumber);
         }
         print ".";
@@ -249,7 +342,7 @@
 print "====================\n";
 print "CLEANING\n";
 print "====================\n";
-if ($k) {
+if ($keep_export) {
     print "NOTHING cleaned : the $directory has been kept. You can re-run this script with the -s parameter if you just want to rebuild zebra after changing the record.abs or another zebra config file\n";
 } else {
 #     system("rm -rf $export");





More information about the Koha-cvs mailing list