Bug 2060 follow-up: add support for UNIMARCAUTH

The staged MARC management script was not correctly informing
the decoder ring that we had UNIMARC authorities, and the decoder
ring was dutifully trying to turn the authority records into a
bibliographic box of cereal.
This commit is contained in:
Jared Camins-Esakov 2012-09-14 08:46:04 -04:00 committed by Paul Poulain
parent 7ad5e203da
commit 65c0174e63
2 changed files with 40 additions and 16 deletions

View file

@ -255,7 +255,7 @@ sub AddBiblioToBatch {
my $z3950random = shift;
my $update_counts = @_ ? shift : 1;
my $import_record_id = _create_import_record($batch_id, $record_sequence, $marc_record, 'biblio', $encoding, $z3950random);
my $import_record_id = _create_import_record($batch_id, $record_sequence, $marc_record, 'biblio', $encoding, $z3950random, C4::Context->preference('marcflavour'));
_add_biblio_fields($import_record_id, $marc_record);
_update_batch_record_counts($batch_id) if $update_counts;
return $import_record_id;
@ -270,7 +270,7 @@ sub AddBiblioToBatch {
sub ModBiblioInBatch {
my ($import_record_id, $marc_record) = @_;
_update_import_record_marc($import_record_id, $marc_record);
_update_import_record_marc($import_record_id, $marc_record, C4::Context->preference('marcflavour'));
_update_biblio_fields($import_record_id, $marc_record);
}
@ -278,7 +278,7 @@ sub ModBiblioInBatch {
=head2 AddAuthToBatch
my $import_record_id = AddAuthToBatch($batch_id, $record_sequence,
$marc_record, $encoding, $z3950random, $update_counts);
$marc_record, $encoding, $z3950random, $update_counts, [$marc_type]);
=cut
@ -289,8 +289,11 @@ sub AddAuthToBatch {
my $encoding = shift;
my $z3950random = shift;
my $update_counts = @_ ? shift : 1;
my $marc_type = shift || C4::Context->preference('marcflavour');
my $import_record_id = _create_import_record($batch_id, $record_sequence, $marc_record, 'auth', $encoding, $z3950random);
$marc_type = 'UNIMARCAUTH' if $marc_type eq 'UNIMARC';
my $import_record_id = _create_import_record($batch_id, $record_sequence, $marc_record, 'auth', $encoding, $z3950random, $marc_type);
_add_auth_fields($import_record_id, $marc_record);
_update_batch_record_counts($batch_id) if $update_counts;
return $import_record_id;
@ -305,7 +308,8 @@ sub AddAuthToBatch {
sub ModAuthInBatch {
my ($import_record_id, $marc_record) = @_;
_update_import_record_marc($import_record_id, $marc_record);
my $marcflavour = C4::Context->preference('marcflavour');
_update_import_record_marc($import_record_id, $marc_record, $marcflavour eq 'UNIMARC' ? 'UNIMARCAUTH' : 'USMARC');
}
@ -354,6 +358,8 @@ sub BatchStageMarcRecords {
SetImportBatchItemAction($batch_id, 'ignore');
}
my $marc_type = C4::Context->preference('marcflavour');
$marc_type .= 'AUTH' if ($marc_type eq 'UNIMARC' && $record_type eq 'auth');
my @invalid_records = ();
my $num_valid = 0;
my $num_items = 0;
@ -368,7 +374,7 @@ sub BatchStageMarcRecords {
&$progress_callback($rec_num);
}
my ($marc_record, $charset_guessed, $char_errors) =
MarcToUTF8Record($marc_blob, C4::Context->preference("marcflavour"), $encoding);
MarcToUTF8Record($marc_blob, $marc_type, $encoding);
$encoding = $charset_guessed unless $encoding;
@ -384,7 +390,7 @@ sub BatchStageMarcRecords {
$num_items += scalar(@import_items_ids);
}
} elsif ($record_type eq 'auth') {
$import_record_id = AddAuthToBatch($batch_id, $rec_num, $marc_record, $encoding, int(rand(99999)), 0);
$import_record_id = AddAuthToBatch($batch_id, $rec_num, $marc_record, $encoding, int(rand(99999)), 0, $marc_type);
}
}
}
@ -430,7 +436,7 @@ sub AddItemsToImportBiblio {
if ($#import_items_ids > -1) {
_update_batch_record_counts($batch_id) if $update_counts;
_update_import_record_marc($import_record_id, $marc_record);
_update_import_record_marc($import_record_id, $marc_record, C4::Context->preference('marcflavour'));
}
return @import_items_ids;
}
@ -545,6 +551,7 @@ sub BatchCommitRecords {
LEFT JOIN import_biblios ON (import_records.import_record_id=import_biblios.import_record_id)
WHERE import_batch_id = ?");
$sth->execute($batch_id);
my $marcflavour = C4::Context->preference('marcflavour');
my $rec_num = 0;
while (my $rowref = $sth->fetchrow_hashref) {
$record_type = $rowref->{'record_type'};
@ -557,6 +564,14 @@ sub BatchCommitRecords {
next;
}
my $marc_type;
if ($marcflavour eq 'UNIMARC' && $record_type eq 'auth') {
$marc_type = 'UNIMARCAUTH';
} elsif ($marcflavour eq 'UNIMARC') {
$marc_type = 'UNIMARC';
} else {
$marc_type = 'USMARC';
}
my $marc_record = MARC::Record->new_from_usmarc($rowref->{'marc'});
if ($record_type eq 'biblio') {
@ -602,11 +617,11 @@ sub BatchCommitRecords {
# remove item fields so that they don't get
# added again if record is reverted
my $old_marc = MARC::Record->new_from_xml(StripNonXmlChars($oldxml), 'UTF-8', $rowref->{'encoding'});
my $old_marc = MARC::Record->new_from_xml(StripNonXmlChars($oldxml), 'UTF-8', $rowref->{'encoding'}, $marc_type);
foreach my $item_field ($old_marc->field($item_tag)) {
$old_marc->delete_field($item_field);
}
$oldxml = $old_marc->as_xml();
$oldxml = $old_marc->as_xml($marc_type);
ModBiblio($marc_record, $recordid, $oldbiblio->{'frameworkcode'});
$query = "UPDATE import_biblios SET matched_biblionumber = ? WHERE import_record_id = ?";
@ -725,12 +740,21 @@ sub BatchRevertRecords {
LEFT JOIN import_biblios ON (import_records.import_record_id=import_biblios.import_record_id)
WHERE import_batch_id = ?");
$sth->execute($batch_id);
my $marc_type;
my $marcflavour = C4::Context->preference('marcflavour');
while (my $rowref = $sth->fetchrow_hashref) {
$record_type = $rowref->{'record_type'};
if ($rowref->{'status'} eq 'error' or $rowref->{'status'} eq 'reverted') {
$num_ignored++;
next;
}
if ($marcflavour eq 'UNIMARC' && $record_type eq 'auth') {
$marc_type = 'UNIMARCAUTH';
} elsif ($marcflavour eq 'UNIMARC') {
$marc_type = 'UNIMARC';
} else {
$marc_type = 'USMARC';
}
my $record_result = _get_revert_action($overlay_action, $rowref->{'overlay_status'}, $rowref->{'status'});
@ -750,7 +774,7 @@ sub BatchRevertRecords {
}
} elsif ($record_result eq 'restore') {
$num_reverted++;
my $old_record = MARC::Record->new_from_xml(StripNonXmlChars($rowref->{'marcxml_old'}), 'UTF-8', $rowref->{'encoding'});
my $old_record = MARC::Record->new_from_xml(StripNonXmlChars($rowref->{'marcxml_old'}), 'UTF-8', $rowref->{'encoding'}, $marc_type);
if ($record_type eq 'biblio') {
my $biblionumber = $rowref->{'matched_biblionumber'};
my ($count, $oldbiblio) = GetBiblio($biblionumber);
@ -1321,13 +1345,13 @@ sub SetImportRecordMatches {
# internal functions
sub _create_import_record {
my ($batch_id, $record_sequence, $marc_record, $record_type, $encoding, $z3950random) = @_;
my ($batch_id, $record_sequence, $marc_record, $record_type, $encoding, $z3950random, $marc_type) = @_;
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare("INSERT INTO import_records (import_batch_id, record_sequence, marc, marcxml,
record_type, encoding, z3950random)
VALUES (?, ?, ?, ?, ?, ?, ?)");
$sth->execute($batch_id, $record_sequence, $marc_record->as_usmarc(), $marc_record->as_xml(),
$sth->execute($batch_id, $record_sequence, $marc_record->as_usmarc(), $marc_record->as_xml($marc_type),
$record_type, $encoding, $z3950random);
my $import_record_id = $dbh->{'mysql_insertid'};
$sth->finish();
@ -1335,12 +1359,12 @@ sub _create_import_record {
}
sub _update_import_record_marc {
my ($import_record_id, $marc_record) = @_;
my ($import_record_id, $marc_record, $marc_type) = @_;
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare("UPDATE import_records SET marc = ?, marcxml = ?
WHERE import_record_id = ?");
$sth->execute($marc_record->as_usmarc(), $marc_record->as_xml(C4::Context->preference('marcflavour')), $import_record_id);
$sth->execute($marc_record->as_usmarc(), $marc_record->as_xml($marc_type), $import_record_id);
$sth->finish();
}

View file

@ -60,7 +60,7 @@ my ($template, $loggedinuser, $cookie)
});
my %cookies = parse CGI::Cookie($cookie);
my $sessionID = $cookies{'CGISESSID'}->value;
our $sessionID = $cookies{'CGISESSID'}->value;
our $dbh = C4::Context->dbh;
# Frameworks selection loop