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

(-)a/C4/ImportBatch.pm (-15 / +39 lines)
Lines 255-261 sub AddBiblioToBatch { Link Here
255
    my $z3950random = shift;
255
    my $z3950random = shift;
256
    my $update_counts = @_ ? shift : 1;
256
    my $update_counts = @_ ? shift : 1;
257
257
258
    my $import_record_id = _create_import_record($batch_id, $record_sequence, $marc_record, 'biblio', $encoding, $z3950random);
258
    my $import_record_id = _create_import_record($batch_id, $record_sequence, $marc_record, 'biblio', $encoding, $z3950random, C4::Context->preference('marcflavour'));
259
    _add_biblio_fields($import_record_id, $marc_record);
259
    _add_biblio_fields($import_record_id, $marc_record);
260
    _update_batch_record_counts($batch_id) if $update_counts;
260
    _update_batch_record_counts($batch_id) if $update_counts;
261
    return $import_record_id;
261
    return $import_record_id;
Lines 270-276 sub AddBiblioToBatch { Link Here
270
sub ModBiblioInBatch {
270
sub ModBiblioInBatch {
271
    my ($import_record_id, $marc_record) = @_;
271
    my ($import_record_id, $marc_record) = @_;
272
272
273
    _update_import_record_marc($import_record_id, $marc_record);
273
    _update_import_record_marc($import_record_id, $marc_record, C4::Context->preference('marcflavour'));
274
    _update_biblio_fields($import_record_id, $marc_record);
274
    _update_biblio_fields($import_record_id, $marc_record);
275
275
276
}
276
}
Lines 278-284 sub ModBiblioInBatch { Link Here
278
=head2 AddAuthToBatch
278
=head2 AddAuthToBatch
279
279
280
  my $import_record_id = AddAuthToBatch($batch_id, $record_sequence,
280
  my $import_record_id = AddAuthToBatch($batch_id, $record_sequence,
281
                $marc_record, $encoding, $z3950random, $update_counts);
281
                $marc_record, $encoding, $z3950random, $update_counts, [$marc_type]);
282
282
283
=cut
283
=cut
284
284
Lines 289-296 sub AddAuthToBatch { Link Here
289
    my $encoding = shift;
289
    my $encoding = shift;
290
    my $z3950random = shift;
290
    my $z3950random = shift;
291
    my $update_counts = @_ ? shift : 1;
291
    my $update_counts = @_ ? shift : 1;
292
    my $marc_type = shift || C4::Context->preference('marcflavour');
293
294
    $marc_type = 'UNIMARCAUTH' if $marc_type eq 'UNIMARC';
292
295
293
    my $import_record_id = _create_import_record($batch_id, $record_sequence, $marc_record, 'auth', $encoding, $z3950random);
296
    my $import_record_id = _create_import_record($batch_id, $record_sequence, $marc_record, 'auth', $encoding, $z3950random, $marc_type);
294
    _add_auth_fields($import_record_id, $marc_record);
297
    _add_auth_fields($import_record_id, $marc_record);
295
    _update_batch_record_counts($batch_id) if $update_counts;
298
    _update_batch_record_counts($batch_id) if $update_counts;
296
    return $import_record_id;
299
    return $import_record_id;
Lines 305-311 sub AddAuthToBatch { Link Here
305
sub ModAuthInBatch {
308
sub ModAuthInBatch {
306
    my ($import_record_id, $marc_record) = @_;
309
    my ($import_record_id, $marc_record) = @_;
307
310
308
    _update_import_record_marc($import_record_id, $marc_record);
311
    my $marcflavour = C4::Context->preference('marcflavour');
312
    _update_import_record_marc($import_record_id, $marc_record, $marcflavour eq 'UNIMARC' ? 'UNIMARCAUTH' : 'USMARC');
309
313
310
}
314
}
311
315
Lines 354-359 sub BatchStageMarcRecords { Link Here
354
        SetImportBatchItemAction($batch_id, 'ignore');
358
        SetImportBatchItemAction($batch_id, 'ignore');
355
    }
359
    }
356
360
361
    my $marc_type = C4::Context->preference('marcflavour');
362
    $marc_type .= 'AUTH' if ($marc_type eq 'UNIMARC' && $record_type eq 'auth');
357
    my @invalid_records = ();
363
    my @invalid_records = ();
358
    my $num_valid = 0;
364
    my $num_valid = 0;
359
    my $num_items = 0;
365
    my $num_items = 0;
Lines 368-374 sub BatchStageMarcRecords { Link Here
368
            &$progress_callback($rec_num);
374
            &$progress_callback($rec_num);
369
        }
375
        }
370
        my ($marc_record, $charset_guessed, $char_errors) =
376
        my ($marc_record, $charset_guessed, $char_errors) =
371
            MarcToUTF8Record($marc_blob, C4::Context->preference("marcflavour"), $encoding);
377
            MarcToUTF8Record($marc_blob, $marc_type, $encoding);
372
378
373
        $encoding = $charset_guessed unless $encoding;
379
        $encoding = $charset_guessed unless $encoding;
374
380
Lines 384-390 sub BatchStageMarcRecords { Link Here
384
                    $num_items += scalar(@import_items_ids);
390
                    $num_items += scalar(@import_items_ids);
385
                }
391
                }
386
            } elsif ($record_type eq 'auth') {
392
            } elsif ($record_type eq 'auth') {
387
                $import_record_id = AddAuthToBatch($batch_id, $rec_num, $marc_record, $encoding, int(rand(99999)), 0);
393
                $import_record_id = AddAuthToBatch($batch_id, $rec_num, $marc_record, $encoding, int(rand(99999)), 0, $marc_type);
388
            }
394
            }
389
        }
395
        }
390
    }
396
    }
Lines 430-436 sub AddItemsToImportBiblio { Link Here
430
436
431
    if ($#import_items_ids > -1) {
437
    if ($#import_items_ids > -1) {
432
        _update_batch_record_counts($batch_id) if $update_counts;
438
        _update_batch_record_counts($batch_id) if $update_counts;
433
        _update_import_record_marc($import_record_id, $marc_record);
439
        _update_import_record_marc($import_record_id, $marc_record, C4::Context->preference('marcflavour'));
434
    }
440
    }
435
    return @import_items_ids;
441
    return @import_items_ids;
436
}
442
}
Lines 545-550 sub BatchCommitRecords { Link Here
545
                             LEFT JOIN import_biblios ON (import_records.import_record_id=import_biblios.import_record_id)
551
                             LEFT JOIN import_biblios ON (import_records.import_record_id=import_biblios.import_record_id)
546
                             WHERE import_batch_id = ?");
552
                             WHERE import_batch_id = ?");
547
    $sth->execute($batch_id);
553
    $sth->execute($batch_id);
554
    my $marcflavour = C4::Context->preference('marcflavour');
548
    my $rec_num = 0;
555
    my $rec_num = 0;
549
    while (my $rowref = $sth->fetchrow_hashref) {
556
    while (my $rowref = $sth->fetchrow_hashref) {
550
        $record_type = $rowref->{'record_type'};
557
        $record_type = $rowref->{'record_type'};
Lines 557-562 sub BatchCommitRecords { Link Here
557
            next;
564
            next;
558
        }
565
        }
559
566
567
        my $marc_type;
568
        if ($marcflavour eq 'UNIMARC' && $record_type eq 'auth') {
569
            $marc_type = 'UNIMARCAUTH';
570
        } elsif ($marcflavour eq 'UNIMARC') {
571
            $marc_type = 'UNIMARC';
572
        } else {
573
            $marc_type = 'USMARC';
574
        }
560
        my $marc_record = MARC::Record->new_from_usmarc($rowref->{'marc'});
575
        my $marc_record = MARC::Record->new_from_usmarc($rowref->{'marc'});
561
576
562
        if ($record_type eq 'biblio') {
577
        if ($record_type eq 'biblio') {
Lines 602-612 sub BatchCommitRecords { Link Here
602
617
603
                # remove item fields so that they don't get
618
                # remove item fields so that they don't get
604
                # added again if record is reverted
619
                # added again if record is reverted
605
                my $old_marc = MARC::Record->new_from_xml(StripNonXmlChars($oldxml), 'UTF-8', $rowref->{'encoding'});
620
                my $old_marc = MARC::Record->new_from_xml(StripNonXmlChars($oldxml), 'UTF-8', $rowref->{'encoding'}, $marc_type);
606
                foreach my $item_field ($old_marc->field($item_tag)) {
621
                foreach my $item_field ($old_marc->field($item_tag)) {
607
                    $old_marc->delete_field($item_field);
622
                    $old_marc->delete_field($item_field);
608
                }
623
                }
609
                $oldxml = $old_marc->as_xml();
624
                $oldxml = $old_marc->as_xml($marc_type);
610
625
611
                ModBiblio($marc_record, $recordid, $oldbiblio->{'frameworkcode'});
626
                ModBiblio($marc_record, $recordid, $oldbiblio->{'frameworkcode'});
612
                $query = "UPDATE import_biblios SET matched_biblionumber = ? WHERE import_record_id = ?";
627
                $query = "UPDATE import_biblios SET matched_biblionumber = ? WHERE import_record_id = ?";
Lines 725-736 sub BatchRevertRecords { Link Here
725
                             LEFT JOIN import_biblios ON (import_records.import_record_id=import_biblios.import_record_id)
740
                             LEFT JOIN import_biblios ON (import_records.import_record_id=import_biblios.import_record_id)
726
                             WHERE import_batch_id = ?");
741
                             WHERE import_batch_id = ?");
727
    $sth->execute($batch_id);
742
    $sth->execute($batch_id);
743
    my $marc_type;
744
    my $marcflavour = C4::Context->preference('marcflavour');
728
    while (my $rowref = $sth->fetchrow_hashref) {
745
    while (my $rowref = $sth->fetchrow_hashref) {
729
        $record_type = $rowref->{'record_type'};
746
        $record_type = $rowref->{'record_type'};
730
        if ($rowref->{'status'} eq 'error' or $rowref->{'status'} eq 'reverted') {
747
        if ($rowref->{'status'} eq 'error' or $rowref->{'status'} eq 'reverted') {
731
            $num_ignored++;
748
            $num_ignored++;
732
            next;
749
            next;
733
        }
750
        }
751
        if ($marcflavour eq 'UNIMARC' && $record_type eq 'auth') {
752
            $marc_type = 'UNIMARCAUTH';
753
        } elsif ($marcflavour eq 'UNIMARC') {
754
            $marc_type = 'UNIMARC';
755
        } else {
756
            $marc_type = 'USMARC';
757
        }
734
758
735
        my $record_result = _get_revert_action($overlay_action, $rowref->{'overlay_status'}, $rowref->{'status'});
759
        my $record_result = _get_revert_action($overlay_action, $rowref->{'overlay_status'}, $rowref->{'status'});
736
760
Lines 750-756 sub BatchRevertRecords { Link Here
750
            }
774
            }
751
        } elsif ($record_result eq 'restore') {
775
        } elsif ($record_result eq 'restore') {
752
            $num_reverted++;
776
            $num_reverted++;
753
            my $old_record = MARC::Record->new_from_xml(StripNonXmlChars($rowref->{'marcxml_old'}), 'UTF-8', $rowref->{'encoding'});
777
            my $old_record = MARC::Record->new_from_xml(StripNonXmlChars($rowref->{'marcxml_old'}), 'UTF-8', $rowref->{'encoding'}, $marc_type);
754
            if ($record_type eq 'biblio') {
778
            if ($record_type eq 'biblio') {
755
                my $biblionumber = $rowref->{'matched_biblionumber'};
779
                my $biblionumber = $rowref->{'matched_biblionumber'};
756
                my ($count, $oldbiblio) = GetBiblio($biblionumber);
780
                my ($count, $oldbiblio) = GetBiblio($biblionumber);
Lines 1321-1333 sub SetImportRecordMatches { Link Here
1321
# internal functions
1345
# internal functions
1322
1346
1323
sub _create_import_record {
1347
sub _create_import_record {
1324
    my ($batch_id, $record_sequence, $marc_record, $record_type, $encoding, $z3950random) = @_;
1348
    my ($batch_id, $record_sequence, $marc_record, $record_type, $encoding, $z3950random, $marc_type) = @_;
1325
1349
1326
    my $dbh = C4::Context->dbh;
1350
    my $dbh = C4::Context->dbh;
1327
    my $sth = $dbh->prepare("INSERT INTO import_records (import_batch_id, record_sequence, marc, marcxml, 
1351
    my $sth = $dbh->prepare("INSERT INTO import_records (import_batch_id, record_sequence, marc, marcxml, 
1328
                                                         record_type, encoding, z3950random)
1352
                                                         record_type, encoding, z3950random)
1329
                                    VALUES (?, ?, ?, ?, ?, ?, ?)");
1353
                                    VALUES (?, ?, ?, ?, ?, ?, ?)");
1330
    $sth->execute($batch_id, $record_sequence, $marc_record->as_usmarc(), $marc_record->as_xml(),
1354
    $sth->execute($batch_id, $record_sequence, $marc_record->as_usmarc(), $marc_record->as_xml($marc_type),
1331
                  $record_type, $encoding, $z3950random);
1355
                  $record_type, $encoding, $z3950random);
1332
    my $import_record_id = $dbh->{'mysql_insertid'};
1356
    my $import_record_id = $dbh->{'mysql_insertid'};
1333
    $sth->finish();
1357
    $sth->finish();
Lines 1335-1346 sub _create_import_record { Link Here
1335
}
1359
}
1336
1360
1337
sub _update_import_record_marc {
1361
sub _update_import_record_marc {
1338
    my ($import_record_id, $marc_record) = @_;
1362
    my ($import_record_id, $marc_record, $marc_type) = @_;
1339
1363
1340
    my $dbh = C4::Context->dbh;
1364
    my $dbh = C4::Context->dbh;
1341
    my $sth = $dbh->prepare("UPDATE import_records SET marc = ?, marcxml = ?
1365
    my $sth = $dbh->prepare("UPDATE import_records SET marc = ?, marcxml = ?
1342
                             WHERE  import_record_id = ?");
1366
                             WHERE  import_record_id = ?");
1343
    $sth->execute($marc_record->as_usmarc(), $marc_record->as_xml(C4::Context->preference('marcflavour')), $import_record_id);
1367
    $sth->execute($marc_record->as_usmarc(), $marc_record->as_xml($marc_type), $import_record_id);
1344
    $sth->finish();
1368
    $sth->finish();
1345
}
1369
}
1346
1370
(-)a/tools/manage-marc-import.pl (-2 / +1 lines)
Lines 60-66 my ($template, $loggedinuser, $cookie) Link Here
60
                 });
60
                 });
61
61
62
my %cookies = parse CGI::Cookie($cookie);
62
my %cookies = parse CGI::Cookie($cookie);
63
my $sessionID = $cookies{'CGISESSID'}->value;
63
our $sessionID = $cookies{'CGISESSID'}->value;
64
our $dbh = C4::Context->dbh;
64
our $dbh = C4::Context->dbh;
65
65
66
# Frameworks selection loop
66
# Frameworks selection loop
67
- 

Return to bug 2060