View | Details | Raw Unified | Return to bug 29597
Collapse All | Expand All

(-)a/misc/migration_tools/bulkmarcimport.pl (-20 / +47 lines)
Lines 45-50 use Koha::Logger; Link Here
45
use Koha::Biblios;
45
use Koha::Biblios;
46
use Koha::SearchEngine;
46
use Koha::SearchEngine;
47
use Koha::SearchEngine::Search;
47
use Koha::SearchEngine::Search;
48
use Koha::Plugins::Handler;
48
49
49
use open qw( :std :encoding(UTF-8) );
50
use open qw( :std :encoding(UTF-8) );
50
binmode(STDOUT, ":encoding(UTF-8)");
51
binmode(STDOUT, ":encoding(UTF-8)");
Lines 79-84 my $framework = ''; Link Here
79
my $localcust;
80
my $localcust;
80
my $marc_mod_template = '';
81
my $marc_mod_template = '';
81
my $marc_mod_template_id = -1;
82
my $marc_mod_template_id = -1;
83
my $to_marc_plugin;
82
$| = 1;
84
$| = 1;
83
85
84
GetOptions(
86
GetOptions(
Lines 115-120 GetOptions( Link Here
115
    'framework=s' => \$framework,
117
    'framework=s' => \$framework,
116
    'custom:s' => \$localcust,
118
    'custom:s' => \$localcust,
117
    'marcmodtemplate:s' => \$marc_mod_template,
119
    'marcmodtemplate:s' => \$marc_mod_template,
120
    'tomarcplugin:s' => \$to_marc_plugin,
118
);
121
);
119
122
120
$biblios ||= !$authorities;
123
$biblios ||= !$authorities;
Lines 254-279 my $searcher = Koha::SearchEngine::Search->new( Link Here
254
print "Characteristic MARC flavour: $marc_flavour\n" if $verbose;
257
print "Characteristic MARC flavour: $marc_flavour\n" if $verbose;
255
my $starttime = gettimeofday;
258
my $starttime = gettimeofday;
256
259
257
my $fh = IO::File->new($input_marc_file); # don't let MARC::Batch open the file, as it applies the ':utf8' IO layer
260
if ($to_marc_plugin) {
258
if (defined $format && $format =~ /XML/i) {
261
    my $marc_records_blob = undef;
259
    # ugly hack follows -- MARC::File::XML, when used by MARC::Batch,
262
    {
260
    # appears to try to convert incoming XML records from MARC-8
263
        local $/ = undef;
261
    # to UTF-8.  Setting the BinaryEncoding key turns that off
264
        open FILE, $input_marc_file;
262
    # TODO: see what happens to ISO-8859-1 XML files.
265
        binmode FILE, ':raw';
263
    # TODO: determine if MARC::Batch can be fixed to handle
266
        $marc_records_blob = <FILE>;
264
    #       XML records properly -- it probably should be
267
        close FILE;
265
    #       be using a proper push or pull XML parser to
268
    }
266
    #       extract the records, not using regexes to look
269
    $marc_records_blob = Koha::Plugins::Handler->run(
267
    #       for <record>.*</record>.
270
        {
268
    $MARC::File::XML::_load_args{BinaryEncoding} = 'utf-8';
271
            class  => $to_marc_plugin,
269
    my $recordformat = ($marc_flavour eq "MARC21" ? "USMARC" : uc($marc_flavour));
272
            method => 'to_marc',
270
    #UNIMARC Authorities have a different way to manage encoding than UNIMARC biblios.
273
            params => { data => $marc_records_blob }
271
    $recordformat = $recordformat . "AUTH" if ($authorities and $marc_flavour ne "MARC21");
274
        }
272
    $MARC::File::XML::_load_args{RecordFormat} = $recordformat;
275
    );
273
    $batch = MARC::Batch->new('XML', $fh);
276
    open(my $fh, '<', \$marc_records_blob);
274
}
277
    binmode $fh, ':raw';
275
else {
276
    $batch = MARC::Batch->new('USMARC', $fh);
278
    $batch = MARC::Batch->new('USMARC', $fh);
279
} else {
280
    my $fh = IO::File->new($input_marc_file); # don't let MARC::Batch open the file, as it applies the ':utf8' IO layer
281
    if (defined $format && $format =~ /XML/i) {
282
        # ugly hack follows -- MARC::File::XML, when used by MARC::Batch,
283
        # appears to try to convert incoming XML records from MARC-8
284
        # to UTF-8.  Setting the BinaryEncoding key turns that off
285
        # TODO: see what happens to ISO-8859-1 XML files.
286
        # TODO: determine if MARC::Batch can be fixed to handle
287
        #       XML records properly -- it probably should be
288
        #       be using a proper push or pull XML parser to
289
        #       extract the records, not using regexes to look
290
        #       for <record>.*</record>.
291
        $MARC::File::XML::_load_args{BinaryEncoding} = 'utf-8';
292
        my $recordformat = ($marc_flavour eq "MARC21" ? "USMARC" : uc($marc_flavour));
293
        #UNIMARC Authorities have a different way to manage encoding than UNIMARC biblios.
294
        $recordformat = $recordformat . "AUTH" if ($authorities and $marc_flavour ne "MARC21");
295
        $MARC::File::XML::_load_args{RecordFormat} = $recordformat;
296
        $batch = MARC::Batch->new('XML', $fh);
297
    }
298
    else {
299
        $batch = MARC::Batch->new('USMARC', $fh);
300
    }
277
}
301
}
278
302
279
$batch->warnings_off();
303
$batch->warnings_off();
Lines 962-967 modification template to apply as the MARC records are imported (these Link Here
962
templates are created in the "MARC modification templates" tool in Koha).
986
templates are created in the "MARC modification templates" tool in Koha).
963
If not specified, no MARC modification templates are used (default).
987
If not specified, no MARC modification templates are used (default).
964
988
989
=item B<-tomarcplugin>=I<PLUGIN>
990
991
Fully qualified class name of plugin with to_marc method for processing raw MARC data.
992
965
=back
993
=back
966
994
967
=cut
995
=cut
968
- 

Return to bug 29597