Removing duplicate syspref
[koha.git] / misc / stage_biblios_file.pl
index a741990..5518359 100755 (executable)
@@ -1,6 +1,12 @@
 #!/usr/bin/perl
 
 use strict;
+BEGIN {
+    # find Koha's Perl modules
+    # test carefully before changing this
+    use FindBin;
+    eval { require "$FindBin::Bin/kohalib.pl" };
+}
 
 use C4::Context;
 use C4::ImportBatch;
@@ -15,11 +21,13 @@ my $add_items = 0;
 my $input_file = "";
 my $batch_comment = "";
 my $want_help = 0;
+my $no_replace ;
 
 my $result = GetOptions(
     'file:s'        => \$input_file,
-    'match-bibs'    => \$match_bibs,
+    'match-bibs:s'    => \$match_bibs,
     'add-items'     => \$add_items,
+    'no-replace'    => \$no_replace,
     'comment:s'     => \$batch_comment,
     'h|help'        => \$want_help
 );
@@ -33,7 +41,10 @@ unless (-r $input_file) {
     die "$0: cannot open input file $input_file: $!\n";
 }
 
+my $dbh = C4::Context->dbh;
+$dbh->{AutoCommit} = 0;
 process_batch($input_file, $match_bibs, $add_items, $batch_comment);
+$dbh->commit();
 
 exit 0;
 
@@ -45,6 +56,10 @@ sub process_batch {
     $/ = "\035";
     my $num_input_records = 0;
     while (<IN>) {
+        s/^\s+//;
+        s/\s+$//;
+        next unless $_; # skip if record has only whitespace, as might occur
+                        # if file includes newlines between each MARC record
         $marc_records .= $_; # FIXME - this sort of string concatenation
                              # is probably rather inefficient
         $num_input_records++;
@@ -56,17 +71,26 @@ sub process_batch {
     print "... staging MARC records -- please wait\n";
     my ($batch_id, $num_valid, $num_items, @import_errors) = 
         BatchStageMarcRecords($marc_flavor, $marc_records, $input_file, $batch_comment, '', $add_items, 0,
-                              100, \&print_progress);
+                              100, \&print_progress_and_commit);
     print "... finished staging MARC records\n";
 
     my $num_with_matches = 0;
     if ($match_bibs) {
-        my $matcher = C4::Matcher->new('biblio');
-        $matcher->add_simple_matchpoint('isbn', 1000, '020', 'a', -1, 0, '');
-        $matcher->add_simple_required_check('245', 'a', -1, 0, '', 
+        my $matcher = C4::Matcher->fetch($match_bibs) ;
+        if (! defined $matcher) {
+            $matcher = C4::Matcher->new('biblio');
+            $matcher->add_simple_matchpoint('isbn', 1000, '020', 'a', -1, 0, '');
+            $matcher->add_simple_required_check('245', 'a', -1, 0, '', 
                                             '245', 'a', -1, 0, '');
+        } else {
+            SetImportBatchMatcher($batch_id, $match_bibs);
+        }
+        # set default record overlay behavior
+        SetImportBatchOverlayAction($batch_id, ($no_replace) ? 'ignore' : 'replace');
+        SetImportBatchNoMatchAction($batch_id, 'create_new');
+        SetImportBatchItemAction($batch_id, 'always_add');
         print "... looking for matches with records already in database\n";
-        $num_with_matches = BatchFindBibDuplicates($batch_id, $matcher, 10, 100, \&print_progress);
+        $num_with_matches = BatchFindBibDuplicates($batch_id, $matcher, 10, 100, \&print_progress_and_commit);
         print "... finished looking for matches\n";
     }
 
@@ -96,8 +120,9 @@ _SUMMARY_
     print "\n";
 }
 
-sub print_progress {
+sub print_progress_and_commit {
     my $recs = shift;
+    $dbh->commit();
     print "... processed $recs records\n";
 }
 
@@ -115,12 +140,16 @@ records into the main Koha database.
 
 Parameters:
     --file <file_name>      name of input MARC bib file
-    --match-bibs            use this option to match bibs
+    --match-bibs <match_id> use this option to match bibs
                             in the file with bibs already in 
                             the database for future overlay.
+                            If <match_id> isn't defined, a default 
+                            MARC21 ISBN & title match rule will be applied.
     --add-items             use this option to specify that
                             item data is embedded in the MARC
                             bibs and should be parsed.
+    --no-replace            overlay action for bib record: default is to 
+                            replace extant bib with the imported record.
     --comment <comment>     optional comment to describe
                             the record batch; if the comment
                             has spaces in it, surround the