#
# This file is part of Koha.
#
-# Koha is free software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the Free Software
-# Foundation; either version 2 of the License, or (at your option) any later
-# version.
+# Koha is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
#
-# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+# Koha is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
#
-# You should have received a copy of the GNU General Public License along
-# with Koha; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
use strict;
use warnings;
use C4::Charset;
use C4::AuthoritiesMarc;
use C4::MarcModificationTemplates;
+use Koha::Plugins::Handler;
+use Koha::Logger;
-use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
+use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
BEGIN {
# set the version for version checking
);
}
+our $logger = Koha::Logger->get( { category => 'C4.ImportBatch' } );
+
=head1 NAME
C4::ImportBatch - manage batches of imported MARC records
my ($import_record_id) = @_;
my $dbh = C4::Context->dbh;
- my $sth = $dbh->prepare("SELECT marc, encoding FROM import_records WHERE import_record_id = ?");
- $sth->execute($import_record_id);
- my ($marc, $encoding) = $sth->fetchrow();
- $sth->finish();
+ my ( $marc, $encoding ) = $dbh->selectrow_array(q|
+ SELECT marc, encoding
+ FROM import_records
+ WHERE import_record_id = ?
+ |, undef, $import_record_id );
+
return $marc, $encoding;
+}
+
+sub GetRecordFromImportBiblio {
+ my ( $import_record_id, $embed_items ) = @_;
+
+ my ($marc) = GetImportRecordMarc($import_record_id);
+ my $record = MARC::Record->new_from_usmarc($marc);
+ EmbedItemsInImportBiblio( $record, $import_record_id ) if $embed_items;
+
+ return $record;
+}
+
+sub EmbedItemsInImportBiblio {
+ my ( $record, $import_record_id ) = @_;
+ my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField("items.itemnumber", '');
+ my $dbh = C4::Context->dbh;
+ my $import_items = $dbh->selectall_arrayref(q|
+ SELECT import_items.marcxml
+ FROM import_items
+ WHERE import_record_id = ?
+ |, { Slice => {} }, $import_record_id );
+ my @item_fields;
+ for my $import_item ( @$import_items ) {
+ my $item_marc = MARC::Record::new_from_xml($import_item->{marcxml});
+ push @item_fields, $item_marc->field($itemtag);
+ }
+ $record->append_fields(@item_fields);
+ return $record;
}
=head2 GetImportRecordMarcXML
=head2 BatchStageMarcRecords
- ($batch_id, $num_records, $num_items, @invalid_records) =
- BatchStageMarcRecords($encoding, $marc_records, $file_name, $marc_modification_template,
- $comments, $branch_code, $parse_items,
- $leave_as_staging,
- $progress_interval, $progress_callback);
+( $batch_id, $num_records, $num_items, @invalid_records ) =
+ BatchStageMarcRecords(
+ $encoding, $marc_records,
+ $file_name, $to_marc_plugin,
+ $marc_modification_template, $comments,
+ $branch_code, $parse_items,
+ $leave_as_staging, $progress_interval,
+ $progress_callback
+ );
=cut
my $encoding = shift;
my $marc_records = shift;
my $file_name = shift;
+ my $to_marc_plugin = shift;
my $marc_modification_template = shift;
my $comments = shift;
my $branch_code = shift;
SetImportBatchItemAction($batch_id, 'ignore');
}
+ $marc_records = Koha::Plugins::Handler->run(
+ {
+ class => $to_marc_plugin,
+ method => 'to_marc',
+ params => { data => $marc_records }
+ }
+ ) if $to_marc_plugin;
+
my $marc_type = C4::Context->preference('marcflavour');
$marc_type .= 'AUTH' if ($marc_type eq 'UNIMARC' && $record_type eq 'auth');
my @invalid_records = ();
$recordid = $record_match;
my $oldxml;
if ($record_type eq 'biblio') {
- my ($count, $oldbiblio) = GetBiblio($recordid);
+ my $oldbiblio = GetBiblio($recordid);
$oldxml = GetXmlBiblio($recordid);
# remove item fields so that they don't get
sub BatchRevertRecords {
my $batch_id = shift;
+ $logger->trace("C4::ImportBatch::BatchRevertRecords( $batch_id )");
+
my $record_type;
my $num_deleted = 0;
my $num_errors = 0;
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);
+ my $oldbiblio = GetBiblio($biblionumber);
+
+ $logger->info("C4::ImportBatch::BatchRevertRecords: Biblio record $biblionumber does not exist, restoration of this record was skipped") unless $oldbiblio;
+ next unless $oldbiblio; # Record has since been deleted. Deleted records should stay deleted.
+
$num_items_deleted += BatchRevertItems($rowref->{'import_record_id'}, $rowref->{'matched_biblionumber'});
ModBiblio($old_record, $biblionumber, $oldbiblio->{'frameworkcode'});
} else {
my $dbh = C4::Context->dbh;
my $query = "SELECT * FROM import_biblios WHERE import_record_id = ?";
- my $sth = $dbh->prepare_cached($query);
- $sth->execute($import_record_id);
- my $results = $sth->fetchall_arrayref({});
- $sth->finish();
- return $results;
+ return $dbh->selectall_arrayref(
+ $query,
+ { Slice => {} },
+ $import_record_id
+ );
}
=head2 GetImportRecordStatus
- my $overlay_status = GetImportRecordStatus($import_record_id);
+ my $status = GetImportRecordStatus($import_record_id);
=cut
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare("SELECT status FROM import_records WHERE import_record_id = ?");
$sth->execute($import_record_id);
- my ($overlay_status) = $sth->fetchrow_array();
+ my ($status) = $sth->fetchrow_array();
$sth->finish();
- return $overlay_status;
+ return $status;
}
=head2 SetImportRecordStatus
- SetImportRecordStatus($import_record_id, $new_overlay_status);
+ SetImportRecordStatus($import_record_id, $new_status);
=cut
sub SetImportRecordStatus {
- my ($import_record_id, $new_overlay_status) = @_;
+ my ($import_record_id, $new_status) = @_;
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare("UPDATE import_records SET status = ? WHERE import_record_id = ?");
- $sth->execute($new_overlay_status, $import_record_id);
+ $sth->execute($new_status, $import_record_id);
$sth->finish();
}