1 package Koha::BackgroundJob::BatchDeleteAuthority;
5 use C4::AuthoritiesMarc;
7 use Koha::SearchEngine;
8 use Koha::SearchEngine::Indexer;
10 use base 'Koha::BackgroundJob';
13 return 'batch_authority_record_deletion';
17 my ( $self, $args ) = @_;
19 if ( $self->status eq 'cancelled' ) {
23 # FIXME If the job has already been started, but started again (worker has been restart for instance)
24 # Then we will start from scratch and so double delete the same records
28 my $mmtid = $args->{mmtid};
29 my @record_ids = @{ $args->{record_ids} };
32 total_records => scalar @record_ids,
36 my $schema = Koha::Database->new->schema;
37 RECORD_IDS: for my $record_id ( sort { $a <=> $b } @record_ids ) {
39 last if $self->get_from_storage->status eq 'cancelled';
41 next unless $record_id;
43 $schema->storage->txn_begin;
45 my $authid = $record_id;
47 C4::AuthoritiesMarc::DelAuthority(
48 { authid => $authid, skip_record_index => 1 } );
53 code => 'authority_not_deleted',
57 $schema->storage->txn_rollback;
62 code => 'authority_deleted',
65 $report->{total_success}++;
66 $schema->storage->txn_commit;
73 map { $_->{code} eq 'authority_deleted' ? $_->{authid} : () }
76 if ( @deleted_authids ) {
77 my $indexer = Koha::SearchEngine::Indexer->new({ index => $Koha::SearchEngine::AUTHORITIES_INDEX });
78 $indexer->index_records( \@deleted_authids, "recordDelete", "authorityserver" );
81 my $data = $self->decoded_data;
82 $data->{messages} = \@messages;
83 $data->{report} = $report;
85 $self->finish( $data );
89 my ( $self, $args) = @_;
91 # TODO Raise exception instead
92 return unless exists $args->{record_ids};
94 my @record_ids = @{ $args->{record_ids} };
96 $self->SUPER::enqueue({
97 job_size => scalar @record_ids,
98 job_args => {record_ids => \@record_ids,},
99 job_queue => 'long_tasks',