@ISA = qw(Exporter);
@EXPORT = qw(
GetZ3950BatchId
+ GetWebserviceBatchId
GetImportRecordMarc
+ GetImportRecordMarcXML
AddImportBatch
GetImportBatch
AddBiblioToBatch
+ AddItemsToImportBiblio
ModBiblioInBatch
BatchStageMarcRecords
CleanBatch
GetAllImportBatches
+ GetStagedWebserviceBatches
GetImportBatchRangeDesc
GetNumberOfNonZ3950ImportBatches
GetImportBibliosRange
if (defined $rowref) {
return $rowref->[0];
} else {
- my $batch_id = AddImportBatch('create_new', 'staged', 'z3950', $z3950server, '');
+ my $batch_id = AddImportBatch( {
+ overlay_action => 'create_new',
+ import_status => 'staged',
+ batch_type => 'z3950',
+ file_name => $z3950server,
+ } );
return $batch_id;
}
}
+=head2 GetWebserviceBatchId
+
+ my $batchid = GetWebserviceBatchId();
+
+Retrieves the ID of the import batch for webservice.
+If necessary, creates the import batch.
+
+=cut
+
+my $WEBSERVICE_BASE_QRY = <<EOQ;
+SELECT import_batch_id FROM import_batches
+WHERE batch_type = 'webservice'
+AND import_status = 'staged'
+EOQ
+sub GetWebserviceBatchId {
+ my ($params) = @_;
+
+ my $dbh = C4::Context->dbh;
+ my $sql = $WEBSERVICE_BASE_QRY;
+ my @args;
+ foreach my $field (qw(matcher_id overlay_action nomatch_action item_action)) {
+ if (my $val = $params->{$field}) {
+ $sql .= " AND $field = ?";
+ push @args, $val;
+ }
+ }
+ my $id = $dbh->selectrow_array($sql, undef, @args);
+ return $id if $id;
+
+ $params->{batch_type} = 'webservice';
+ $params->{import_status} = 'staged';
+ return AddImportBatch($params);
+}
+
=head2 GetImportRecordMarc
my ($marcblob, $encoding) = GetImportRecordMarc($import_record_id);
}
-=head2 AddImportBatch
+=head2 GetImportRecordMarcXML
- my $batch_id = AddImportBatch($overlay_action, $import_status, $type,
- $file_name, $comments);
+ my $marcxml = GetImportRecordMarcXML($import_record_id);
=cut
-sub AddImportBatch {
- my ($overlay_action, $import_status, $type, $file_name, $comments) = @_;
+sub GetImportRecordMarcXML {
+ my ($import_record_id) = @_;
my $dbh = C4::Context->dbh;
- my $sth = $dbh->prepare("INSERT INTO import_batches (overlay_action, import_status, batch_type,
- file_name, comments)
- VALUES (?, ?, ?, ?, ?)");
- $sth->execute($overlay_action, $import_status, $type, $file_name, $comments);
- my $batch_id = $dbh->{'mysql_insertid'};
+ my $sth = $dbh->prepare("SELECT marcxml FROM import_records WHERE import_record_id = ?");
+ $sth->execute($import_record_id);
+ my ($marcxml) = $sth->fetchrow();
$sth->finish();
+ return $marcxml;
- return $batch_id;
+}
+
+=head2 AddImportBatch
+
+ my $batch_id = AddImportBatch($params_hash);
+
+=cut
+sub AddImportBatch {
+ my ($params) = @_;
+
+ my (@fields, @vals);
+ foreach (qw( matcher_id template_id branchcode
+ overlay_action nomatch_action item_action
+ import_status batch_type file_name comments )) {
+ if (exists $params->{$_}) {
+ push @fields, $_;
+ push @vals, $params->{$_};
+ }
+ }
+ my $dbh = C4::Context->dbh;
+ $dbh->do("INSERT INTO import_batches (".join( ',', @fields).")
+ VALUES (".join( ',', map '?', @fields).")",
+ undef,
+ @vals);
+ return $dbh->{'mysql_insertid'};
}
=head2 GetImportBatch
=head2 BatchStageMarcRecords
($batch_id, $num_records, $num_items, @invalid_records) =
- BatchStageMarcRecords($marc_flavor, $marc_records, $file_name,
+ BatchStageMarcRecords($encoding, $marc_records, $file_name,
$comments, $branch_code, $parse_items,
$leave_as_staging,
$progress_interval, $progress_callback);
=cut
sub BatchStageMarcRecords {
- my $marc_flavor = shift;
+ my $encoding = shift;
my $marc_records = shift;
my $file_name = shift;
my $comments = shift;
$progress_interval = 0 unless 'CODE' eq ref $progress_callback;
}
- my $batch_id = AddImportBatch('create_new', 'staging', 'batch', $file_name, $comments);
+ my $batch_id = AddImportBatch( {
+ overlay_action => 'create_new',
+ import_status => 'staging',
+ batch_type => 'batch',
+ file_name => $file_name,
+ comments => $comments,
+ } );
if ($parse_items) {
SetImportBatchItemAction($batch_id, 'always_add');
} else {
&$progress_callback($rec_num);
}
my ($marc_record, $charset_guessed, $char_errors) =
- MarcToUTF8Record($marc_blob, C4::Context->preference("marcflavour"));
+ MarcToUTF8Record($marc_blob, C4::Context->preference("marcflavour"), $encoding);
+
+ $encoding = $charset_guessed unless $encoding;
+
my $import_record_id;
if (scalar($marc_record->fields()) == 0) {
push @invalid_records, $marc_blob;
} else {
$num_valid++;
- $import_record_id = AddBiblioToBatch($batch_id, $rec_num, $marc_record, $marc_flavor, int(rand(99999)), 0);
+ $import_record_id = AddBiblioToBatch($batch_id, $rec_num, $marc_record, $encoding, int(rand(99999)), 0);
if ($parse_items) {
my @import_items_ids = AddItemsToImportBiblio($batch_id, $import_record_id, $marc_record, 0);
$num_items += scalar(@import_items_ids);
=head2 BatchCommitBibRecords
my ($num_added, $num_updated, $num_items_added, $num_items_errored,
- $num_ignored) = BatchCommitBibRecords($batch_id,
+ $num_ignored) = BatchCommitBibRecords($batch_id, $framework,
$progress_interval, $progress_callback);
=cut
sub BatchCommitBibRecords {
my $batch_id = shift;
+ my $framework = shift;
# optional callback to monitor status
# of job
if ($bib_result eq 'create_new') {
$num_added++;
- my ($biblionumber, $biblioitemnumber) = AddBiblio($marc_record, '');
+ my ($biblionumber, $biblioitemnumber) = AddBiblio($marc_record, $framework);
my $sth = $dbh->prepare_cached("UPDATE import_biblios SET matched_biblionumber = ? WHERE import_record_id = ?");
$sth->execute($biblionumber, $rowref->{'import_record_id'});
$sth->finish();
sub GetAllImportBatches {
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare_cached("SELECT * FROM import_batches
- WHERE batch_type = 'batch'
+ WHERE batch_type IN ('batch', 'webservice')
ORDER BY import_batch_id ASC");
my $results = [];
return $results;
}
+=head2 GetStagedWebserviceBatches
+
+ my $batch_ids = GetStagedWebserviceBatches();
+
+Returns a references to an array of batch id's
+of batch_type 'webservice' that are not imported
+
+=cut
+
+my $PENDING_WEBSERVICE_BATCHES_QRY = <<EOQ;
+SELECT import_batch_id FROM import_batches
+WHERE batch_type = 'webservice'
+AND import_status = 'staged'
+EOQ
+sub GetStagedWebserviceBatches {
+ my $dbh = C4::Context->dbh;
+ return $dbh->selectcol_arrayref($PENDING_WEBSERVICE_BATCHES_QRY);
+}
+
=head2 GetImportBatchRangeDesc
my $results = GetImportBatchRangeDesc($offset, $results_per_group);
my $dbh = C4::Context->dbh;
my $query = "SELECT * FROM import_batches
- WHERE batch_type = 'batch'
+ WHERE batch_type IN ('batch', 'webservice')
ORDER BY import_batch_id DESC";
my @params;
if ($results_per_group){
sub GetNumberOfNonZ3950ImportBatches {
my $dbh = C4::Context->dbh;
- my $sth = $dbh->prepare("SELECT COUNT(*) FROM import_batches WHERE batch_type='batch'");
+ my $sth = $dbh->prepare("SELECT COUNT(*) FROM import_batches WHERE batch_type != 'z3950'");
$sth->execute();
my ($count) = $sth->fetchrow_array();
$sth->finish();
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(), $import_record_id);
+ $sth->execute($marc_record->as_usmarc(), $marc_record->as_xml(C4::Context->preference('marcflavour')), $import_record_id);
$sth->finish();
}
my ($batch_id) = @_;
my $dbh = C4::Context->dbh;
- my $sth = $dbh->prepare_cached("UPDATE import_batches SET num_biblios = (
- SELECT COUNT(*)
- FROM import_records
- WHERE import_batch_id = import_batches.import_batch_id
- AND record_type = 'biblio')
+ my $sth = $dbh->prepare_cached("UPDATE import_batches SET
+ num_biblios = (
+ SELECT COUNT(*)
+ FROM import_records
+ WHERE import_batch_id = import_batches.import_batch_id
+ AND record_type = 'biblio'),
+ num_items = (
+ SELECT COUNT(*)
+ FROM import_records
+ JOIN import_items USING (import_record_id)
+ WHERE import_batch_id = import_batches.import_batch_id
+ AND record_type = 'biblio')
WHERE import_batch_id = ?");
$sth->bind_param(1, $batch_id);
$sth->execute();
$sth->finish();
- $sth = $dbh->prepare_cached("UPDATE import_batches SET num_items = (
- SELECT COUNT(*)
- FROM import_records
- JOIN import_items USING (import_record_id)
- WHERE import_batch_id = import_batches.import_batch_id
- AND record_type = 'biblio')
- WHERE import_batch_id = ?");
- $sth->bind_param(1, $batch_id);
- $sth->execute();
- $sth->finish();
-
}
sub _get_commit_action {
=head1 AUTHOR
-Koha Development Team <info@koha.org>
+Koha Development Team <http://koha-community.org/>
Galen Charlton <galen.charlton@liblime.com>