@@ -, +, @@ --- C4/ImportBatch.pm | 45 ++++++++++++++++++---- .../prog/en/modules/tools/stage-marc-import.tt | 20 ++-------- tools/stage-marc-import.pl | 13 +++++-- 3 files changed, 50 insertions(+), 28 deletions(-) --- a/C4/ImportBatch.pm +++ a/C4/ImportBatch.pm @@ -399,13 +399,6 @@ sub BatchStageMarcRecords { SetImportBatchItemAction($batch_id, 'ignore'); } - $marc_records = Koha::Plugins::Handler->run( - { - class => $to_marc_plugin, - method => 'to_marc', - params => { data => $marc_records } - } - ) if $to_marc_plugin && @$marc_records; my $marc_type = C4::Context->preference('marcflavour'); $marc_type .= 'AUTH' if ($marc_type eq 'UNIMARC' && $record_type eq 'auth'); @@ -1556,6 +1549,44 @@ sub RecordsFromMARCXMLFile { return (\@errors, \@marcRecords); } +=head2 RecordsFromMarcPlugin + + Converts text of input_file into array of MARC records with to_marc plugin + +=cut + +sub RecordsFromMarcPlugin { + my ($input_file, $plugin_class, $encoding) = @_; + + # Read input file + open IN, "<$input_file" or die "$0: cannot open input file $input_file: $!\n"; + my ( $text, $marc, @return ); + $/ = "\035"; + while () { + s/^\s+//; + s/\s+$//; + next unless $_; + $text .= $_; + } + close IN; + + # Convert to large MARC blob with plugin + $text = Koha::Plugins::Handler->run({ + class => $plugin_class, + method => 'to_marc', + params => { data => $text }, + }); + + # Convert to array of MARC records + my $marc_type = C4::Context->preference('marcflavour'); + foreach my $blob ( split(/\x1D/, $text) ) { + next if $blob =~ /^\s*$/; + my ($marcrecord) = MarcToUTF8Record($blob, $marc_type, $encoding); + push @return, $marcrecord; + } + return \@return; +} + # internal functions sub _create_import_record { --- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/stage-marc-import.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/stage-marc-import.tt @@ -198,27 +198,13 @@ function cbUpload( status, fileid ) { - [% IF plugins %] -
- Transform file to MARC: -
    -
  1. - - -
  2. -
-
- [% END %] - [% IF MarcModificationTemplatesLoop %]
Use MARC Modification Template: --- a/tools/stage-marc-import.pl +++ a/tools/stage-marc-import.pl @@ -57,8 +57,7 @@ my $item_action = $input->param('item_action'); my $comments = $input->param('comments'); my $record_type = $input->param('record_type'); my $encoding = $input->param('encoding') || 'UTF-8'; -my $format = $input->param('format') || 'ISO2709'; -my $to_marc_plugin = $input->param('to_marc_plugin'); +my $format = $input->param('format'); my $marc_modification_template = $input->param('marc_modification_template_id'); my ( $template, $loggedinuser, $cookie ) = get_template_and_user( @@ -90,10 +89,16 @@ if ($completedJobID) { my $filename = $upload->filename; my ( $errors, $marcrecords ); +warn "L92 $format"; if( $format eq 'MARCXML' ) { ( $errors, $marcrecords ) = C4::ImportBatch::RecordsFromMARCXMLFile( $file, $encoding); - } else { + } elsif( $format eq 'MARC' ) { ( $errors, $marcrecords ) = C4::ImportBatch::RecordsFromISO2709File( $file, $record_type, $encoding ); + } elsif( $format ) { # plugin + $errors = []; + $marcrecords = C4::ImportBatch::RecordsFromMarcPlugin( $file, $format, $encoding ); + } else { + die "No format specified"; } warn "$filename: " . ( join ',', @$errors ) if @$errors; # no need to exit if we have no records (or only errors) here @@ -141,7 +146,7 @@ if ($completedJobID) { BatchStageMarcRecords( $record_type, $encoding, $marcrecords, $filename, - $to_marc_plugin, $marc_modification_template, + undef, $marc_modification_template, $comments, '', $parse_items, 0, 50, staging_progress_callback( $job, $dbh ) --