X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=misc%2Fstage_file.pl;h=b86f5254d6aacbe3589d66275acf03d2c483c77d;hb=1083256d4168672a1d4bc631fbb42d221371a8ee;hp=95ac9414c53c38bf446701cec9a480761071f1aa;hpb=aa5bf4d3cc0e4d57b958e665ad1c6efa8a76a9fb;p=koha.git diff --git a/misc/stage_file.pl b/misc/stage_file.pl index 95ac9414c5..b86f5254d6 100755 --- a/misc/stage_file.pl +++ b/misc/stage_file.pl @@ -19,8 +19,7 @@ # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -use strict; -use warnings; +use Modern::Perl; BEGIN { # find Koha's Perl modules # test carefully before changing this @@ -31,13 +30,14 @@ BEGIN { use C4::Context; use C4::ImportBatch; use C4::Matcher; +use C4::MarcModificationTemplates; use Getopt::Long; $| = 1; # command-line parameters my $record_type = "biblio"; -my $encoding = ""; +my $encoding = "UTF-8"; my $authorities = 0; my $match = 0; my $add_items = 0; @@ -48,27 +48,46 @@ my $no_replace; my $format = 'ISO2709'; my $no_create; my $item_action = 'always_add'; +my $marc_mod_template = ''; +my $marc_mod_template_id = undef; my $result = GetOptions( - 'encoding:s' => \$encoding, - 'file:s' => \$input_file, - 'format:s' => \$format, - 'match|match-bibs:s' => \$match, - 'add-items' => \$add_items, - 'item-action:s' => \$item_action, - 'no-replace' => \$no_replace, - 'no-create' => \$no_create, - 'comment:s' => \$batch_comment, - 'authorities' => \$authorities, - 'h|help' => \$want_help + 'encoding:s' => \$encoding, + 'file:s' => \$input_file, + 'format:s' => \$format, + 'match|match-bibs:s' => \$match, + 'add-items' => \$add_items, + 'item-action:s' => \$item_action, + 'no-replace' => \$no_replace, + 'no-create' => \$no_create, + 'comment:s' => \$batch_comment, + 'authorities' => \$authorities, + 'marcmodtemplate:s' => \$marc_mod_template, + 'h|help' => \$want_help ); -$record_type = 'auth' if ($authorities); +if($marc_mod_template ne '') { + my @templates = GetModificationTemplates(); + foreach my $this_template (@templates) { + if($this_template->{'name'} eq $marc_mod_template) { + if(!defined $marc_mod_template_id) { + $marc_mod_template_id = $this_template->{'template_id'}; + } else { + print "WARNING: MARC modification template name " . + "'$marc_mod_template' matches multiple templates. " . + "Please fix this issue before proceeding.\n"; + exit 1; + } + } + } -if ($encoding eq "") { - $encoding = "utf8"; + if(!defined $marc_mod_template_id ) { + die "Can't locate MARC modification template '$marc_mod_template'\n"; + } } +$record_type = 'auth' if ($authorities); + if (not $result or $input_file eq "" or $want_help) { print_usage(); exit 0; @@ -85,31 +104,59 @@ unless (-r $input_file) { my $dbh = C4::Context->dbh; $dbh->{AutoCommit} = 0; -process_batch($format, $input_file, $record_type, $match, $add_items, $batch_comment); +process_batch( + { + format => $format, + input_file => $input_file, + record_type => $record_type, + match => $match, + add_items => $add_items, + batch_comment => $batch_comment, + encoding => $encoding, + no_replace => $no_replace, + no_create => $no_create, + item_action => $item_action, + marc_mod_template_id => $marc_mod_template_id, + } +); $dbh->commit(); exit 0; sub process_batch { - my ($format, $input_file, $record_type, $match, $add_items, $batch_comment) = @_; + my ( $params ) = @_; #Possible params are: format input_file record_type match add_items batch_comment encoding no_replace no_create item_action + my $format = $params->{format} // ''; + my $record_type = $params->{record_type} // 'biblio'; - my ($errors, $marc_records) = C4::ImportBatch::RecordsFromISO2709File($input_file, $record_type, $encoding) if $format eq 'ISO2709'; - warn $errors if $errors; - $marc_records = C4::ImportBatch::RecordsFromMARCXMLFile($input_file, $encoding) if $format eq 'MARCXML'; + my ( $errors, $marc_records ); + if( $format eq 'ISO2709' ) { + ( $errors, $marc_records ) = C4::ImportBatch::RecordsFromISO2709File( + $params->{input_file}, $record_type, $params->{encoding} ); + } elsif( $format eq 'MARCXML' ) { + ( $errors, $marc_records ) = C4::ImportBatch::RecordsFromMARCXMLFile( + $params->{input_file}, $params->{encoding} ); + } + warn ( join ',', @$errors ) if @$errors; my $num_input_records = ($marc_records) ? scalar(@$marc_records) : 0; print "... staging MARC records -- please wait\n"; #FIXME: We should really allow the use of marc modification frameworks and to_marc plugins here if possible - my ($batch_id, $num_valid_records, $num_items, @import_errors) = - BatchStageMarcRecords($record_type, $encoding, $marc_records, $input_file, undef, undef, $batch_comment, '', $add_items, 0, - 100, \&print_progress_and_commit); + my ( $batch_id, $num_valid_records, $num_items, @import_errors ) = + BatchStageMarcRecords( + $record_type, $params->{encoding}, + $marc_records, $params->{input_file}, + $params->{'marc_mod_template_id'}, $params->{batch_comment}, + '', $params->{add_items}, + 0, 100, + \&print_progress_and_commit + ); print "... finished staging MARC records\n"; my $num_with_matches = 0; - if ($match) { - my $matcher = C4::Matcher->fetch($match) ; + if ( $params->{match} ) { + my $matcher = C4::Matcher->fetch( $params->{match} ); if (defined $matcher) { - SetImportBatchMatcher($batch_id, $match); + SetImportBatchMatcher( $batch_id, $params->{match} ); } elsif ($record_type eq 'biblio') { $matcher = C4::Matcher->new($record_type); $matcher->add_simple_matchpoint('isbn', 1000, '020', 'a', -1, 0, ''); @@ -117,9 +164,9 @@ sub process_batch { '245', 'a', -1, 0, ''); } # set default record overlay behavior - SetImportBatchOverlayAction($batch_id, ($no_replace) ? 'ignore' : 'replace'); - SetImportBatchNoMatchAction($batch_id, ($no_create) ? 'ignore' : 'create_new'); - SetImportBatchItemAction($batch_id, $item_action); + SetImportBatchOverlayAction( $batch_id, $params->{no_replace} ? 'ignore' : 'replace' ); + SetImportBatchNoMatchAction( $batch_id, $params->{no_create} ? 'ignore' : 'create_new' ); + SetImportBatchItemAction( $batch_id, $params->{item_action} ); print "... looking for matches with records already in database\n"; $num_with_matches = BatchFindDuplicates($batch_id, $matcher, 10, 100, \&print_progress_and_commit); print "... finished looking for matches\n"; @@ -130,19 +177,19 @@ sub process_batch { MARC record staging report ------------------------------------ -Input file: $input_file +Input file: $params->{input_file} Record type: $record_type Number of input records: $num_input_records Number of valid records: $num_valid_records Number of invalid records: $num_invalid_records _SUMMARY_ - if ($match) { + if( $params->{match} ) { print "Number of records matched: $num_with_matches\n"; } else { print "Incoming records not matched against existing records (--match option not supplied)\n"; } if ($record_type eq 'biblio') { - if ($add_items) { + if ( $params->{add_items} ) { print "Number of items parsed: $num_items\n"; } else { print "No items parsed (--add-items option not supplied)\n"; @@ -176,7 +223,7 @@ records into the main Koha database. Parameters: --file name of input MARC bib file --authorities stage authority records instead of bibs - --encoding encoding of MARC records, default is utf8. + --encoding encoding of MARC records, default is UTF-8. Other possible options are: MARC-8, ISO_5426, ISO_6937, ISO_8859-1, EUC-KR --format The MARC transport format to use? @@ -203,6 +250,14 @@ Parameters: the record batch; if the comment has spaces in it, surround the comment with quotation marks. + --marcmodtemplate