use C4::Output;
use C4::AuthoritiesMarc;
use C4::Biblio;
+use Koha::Virtualshelves;
+
+use Koha::Authorities;
+use Koha::Biblios;
+use Koha::Items;
my $input = new CGI;
-my $dbh = C4::Context->dbh;
my $op = $input->param('op') // q|form|;
my $recordtype = $input->param('recordtype') // 'biblio';
flagsrequired => { tools => 'records_batchdel' },
});
+$template->param( lists => scalar Koha::Virtualshelves->search([{ category => 1, owner => $loggedinuser }, { category => 2 }]) );
+
my @records;
my @messages;
if ( $op eq 'form' ) {
$recordtype = 'biblio';
} elsif ( my $uploadfile = $input->param('uploadfile') ) {
# A file of id is given
+ binmode $uploadfile, ':encoding(UTF-8)';
while ( my $content = <$uploadfile> ) {
next unless $content;
$content =~ s/[\r\n]*$//;
push @record_ids, $content if $content;
}
+ } elsif ( my $shelf_number = $input->param('shelf_number') ) {
+ my $shelf = Koha::Virtualshelves->find($shelf_number);
+ my $contents = $shelf->get_contents;
+ while ( my $content = $contents->next ) {
+ my $biblionumber = $content->biblionumber;
+ push @record_ids, $biblionumber;
+ }
} else {
# The user enters manually the list of id
push @record_ids, split( /\s\n/, $input->param('recordnumber_list') );
for my $record_id ( uniq @record_ids ) {
if ( $recordtype eq 'biblio' ) {
# Retrieve biblio information
- my $biblio = C4::Biblio::GetBiblio( $record_id );
+ my $biblio = Koha::Biblios->find( $record_id );
unless ( $biblio ) {
push @messages, {
type => 'warning',
};
next;
}
- my $record = &GetMarcBiblio( $record_id );
+ my $holds_count = $biblio->holds->count;
+ $biblio = $biblio->unblessed;
+ my $record = &GetMarcBiblio({ biblionumber => $record_id });
$biblio->{subtitle} = GetRecordValue( 'subtitle', $record, GetFrameworkCode( $record_id ) );
- $biblio->{itemnumbers} = C4::Items::GetItemnumbersForBiblio( $record_id );
- $biblio->{reserves} = C4::Reserves::GetReservesFromBiblionumber({ biblionumber => $record_id });
+ $biblio->{itemnumbers} = [Koha::Items->search({ biblionumber => $record_id })->get_column('itemnumber')];
+ $biblio->{holds_count} = $holds_count;
$biblio->{issues_count} = C4::Biblio::CountItemsIssued( $record_id );
push @records, $biblio;
} else {
$authority = {
authid => $record_id,
summary => C4::AuthoritiesMarc::BuildSummary( $authority, $record_id ),
- count_usage => C4::AuthoritiesMarc::CountUsage( $record_id ),
+ count_usage => Koha::Authorities->get_usage_count({ authid => $record_id }),
};
push @records, $authority;
}
} elsif ( $op eq 'delete' ) {
# We want to delete selected records!
my @record_ids = $input->multi_param('record_id');
- my $dbh = C4::Context->dbh;
- $dbh->{AutoCommit} = 0;
- $dbh->{RaiseError} = 1;
+ my $schema = Koha::Database->new->schema;
my $error;
my $report = {
RECORD_IDS: for my $record_id ( sort { $a <=> $b } @record_ids ) {
$report->{total_records}++;
next unless $record_id;
+ $schema->storage->txn_begin;
+
if ( $recordtype eq 'biblio' ) {
# Biblios
my $biblionumber = $record_id;
# First, checking if issues exist.
# If yes, nothing to do
+ my $biblio = Koha::Biblios->find( $biblionumber );
+
+ # TODO Replace with $biblio->get_issues->count
if ( C4::Biblio::CountItemsIssued( $biblionumber ) ) {
push @messages, {
type => 'warning',
code => 'item_issued',
biblionumber => $biblionumber,
};
- $dbh->rollback;
+ $schema->storage->txn_rollback;
next;
}
# Cancel reserves
- my $reserves = C4::Reserves::GetReservesFromBiblionumber({ biblionumber => $biblionumber });
- for my $reserve ( @$reserves ) {
+ my $holds = $biblio->holds;
+ while ( my $hold = $holds->next ) {
eval{
- C4::Reserves::CancelReserve( { reserve_id => $reserve->{reserve_id} } );
+ $hold->cancel;
};
if ( $@ ) {
push @messages, {
type => 'error',
code => 'reserve_not_cancelled',
biblionumber => $biblionumber,
- reserve_id => $reserve->{reserve_id},
+ reserve_id => $hold->reserve_id,
error => $@,
};
- $dbh->rollback;
+ $schema->storage->txn_rollback;
next RECORD_IDS;
}
}
# Delete items
- my @itemnumbers = @{ C4::Items::GetItemnumbersForBiblio( $biblionumber ) };
+ my @itemnumbers = Koha::Items->search({ biblionumber => $biblionumber })->get_column('itemnumber');
ITEMNUMBER: for my $itemnumber ( @itemnumbers ) {
my $error = eval { C4::Items::DelItemCheck( $biblionumber, $itemnumber ) };
if ( $error != 1 or $@ ) {
itemnumber => $itemnumber,
error => ($@ ? $@ : $error),
};
- $dbh->rollback;
+ $schema->storage->txn_rollback;
next RECORD_IDS;
}
}
biblionumber => $biblionumber,
error => ($@ ? $@ : $error),
};
- $dbh->rollback;
+ $schema->storage->txn_rollback;
next;
}
biblionumber => $biblionumber,
};
$report->{total_success}++;
- $dbh->commit;
+ $schema->storage->txn_commit;
} else {
# Authorities
my $authid = $record_id;
- eval { C4::AuthoritiesMarc::DelAuthority( $authid ) };
+ eval { C4::AuthoritiesMarc::DelAuthority({ authid => $authid }) };
if ( $@ ) {
push @messages, {
type => 'error',
authid => $authid,
error => ($@ ? $@ : 0),
};
- $dbh->rollback;
+ $schema->storage->txn_rollback;
next;
} else {
push @messages, {
authid => $authid,
};
$report->{total_success}++;
- $dbh->commit;
+ $schema->storage->txn_commit;
}
}
}