my (@fields, @vals);
foreach (qw( matcher_id template_id branchcode
overlay_action nomatch_action item_action
- import_status batch_type file_name comments )) {
+ import_status batch_type file_name comments record_type )) {
if (exists $params->{$_}) {
push @fields, $_;
push @vals, $params->{$_};
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;
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);
}
=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
my $encoding = shift;
my $z3950random = shift;
my $update_counts = @_ ? shift : 1;
+ my $marc_type = shift || C4::Context->preference('marcflavour');
+
+ $marc_type = 'UNIMARCAUTH' if $marc_type eq 'UNIMARC';
- my $import_record_id = _create_import_record($batch_id, $record_sequence, $marc_record, 'auth', $encoding, $z3950random);
+ 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;
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');
}
my $branch_code = shift;
my $parse_items = shift;
my $leave_as_staging = shift;
-
+
# optional callback to monitor status
# of job
my $progress_interval = 0;
batch_type => 'batch',
file_name => $file_name,
comments => $comments,
+ record_type => $record_type,
} );
if ($parse_items) {
SetImportBatchItemAction($batch_id, 'always_add');
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;
&$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;
if (scalar($marc_record->fields()) == 0) {
push @invalid_records, $marc_blob;
} else {
+
+ # Normalize the record so it doesn't have separated diacritics
+ SetUTF8Flag($marc_record);
+
$num_valid++;
if ($record_type eq 'biblio') {
$import_record_id = AddBiblioToBatch($batch_id, $rec_num, $marc_record, $encoding, int(rand(99999)), 0);
$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);
}
}
}
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;
}
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'};
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') {
$num_items_errored += $bib_items_errored;
}
} else {
- my $authid = AddAuthority($marc_record, undef, GuessAuthTypeCode($marc_record));
+ $recordid = AddAuthority($marc_record, undef, GuessAuthTypeCode($marc_record));
$query = "UPDATE import_auths SET matched_authid = ? WHERE import_record_id = ?";
}
my $sth = $dbh->prepare_cached($query);
# 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'});
+ # FIXME: GetXmlBiblio output should not contain item info any more! So the next foreach should not be needed. Does not hurt either; may remove old 952s that should not have been there anymore.
+ 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 = ?";
$num_items_errored += $bib_items_errored;
}
} else {
- my $oldxml = GetAuthorityXML($recordid);
+ $oldxml = GetAuthorityXML($recordid);
ModAuthority($recordid, $marc_record, GuessAuthTypeCode($marc_record));
$query = "UPDATE import_auths SET matched_authid = ? WHERE import_record_id = ?";
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'});
}
} 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);
$sth->execute();
while (my $row = $sth->fetchrow_hashref) {
if ($row->{'record_type'} eq 'auth') {
- $row->{'authorized_heading'} = GetAuthorizedHeading( { authid => $row->{'candidate_match_id'} } );
+ $row->{'authorized_heading'} = C4::AuthoritiesMarc::GetAuthorizedHeading( { authid => $row->{'candidate_match_id'} } );
}
next if ($row->{'record_type'} eq 'biblio' && not $row->{'biblionumber'});
push @$results, $row;
# 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();
}
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();
}
if ($marc_record->field('001')) {
$controlnumber = $marc_record->field('001')->data();
}
- my $authorized_heading = GetAuthorizedHeading($marc_record);
+ my $authorized_heading = C4::AuthoritiesMarc::GetAuthorizedHeading({ record => $marc_record });
my $dbh = C4::Context->dbh;
- my $sth = $dbh->prepare("INSERT INTO import_auths (import_record_id, controlnumber, authorized_heading) VALUES (?, ?, ?)");
+ my $sth = $dbh->prepare("INSERT INTO import_auths (import_record_id, control_number, authorized_heading) VALUES (?, ?, ?)");
$sth->execute($import_record_id, $controlnumber, $authorized_heading);
$sth->finish();
}
num_records = (
SELECT COUNT(*)
FROM import_records
- WHERE import_batch_id = import_batches.import_batch_id
- AND record_type = 'biblio'),
+ WHERE import_batch_id = import_batches.import_batch_id),
num_items = (
SELECT COUNT(*)
FROM import_records