From faf903ffdb2789909d69c28424bc065470ccef89 Mon Sep 17 00:00:00 2001 From: David Gustafsson Date: Wed, 21 Sep 2022 17:43:32 +0200 Subject: [PATCH] Bug 29440: defer biblio autolinking until records are indexed --- C4/Biblio.pm | 17 +++++++++++++---- misc/migration_tools/bulkmarcimport.pl | 9 ++++++++- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/C4/Biblio.pm b/C4/Biblio.pm index 5421024fae..6e89479999 100644 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -188,9 +188,17 @@ The C<$options> argument is a hashref with additional parameters: =over 4 -=item B: used when ModBiblioMarc is handled by the caller +=item B +Used when ModBiblioMarc is handled by the caller -=item B: used when the indexing scheduling will be handled by the caller +=item B +Used when the indexing scheduling will be handled by the caller + +=item C + +Unless C is passed AddBiblio will link record headings +to authorities based on settings in the system preferences. This flag allows +us to not link records when the authority linker is saving modifications. =back @@ -203,8 +211,8 @@ sub AddBiblio { $mod_biblio_marc_options = { skip_record_index => $options->{'skip_record_index'} // 0 }; - my $defer_marc_save = $options->{defer_marc_save} // 0; + my $disable_autolink = $options->{disable_autolink}} // 0; if (!$record) { carp('AddBiblio called with undefined record'); @@ -285,7 +293,7 @@ sub AddBiblio { # update MARC subfield that stores biblioitems.cn_sort _koha_marc_update_biblioitem_cn_sort( $record, $olddata, $frameworkcode ); - if (C4::Context->preference('AutoLinkBiblios')) { + if (!$disable_autolink && C4::Context->preference('BiblioAddsAuthorities')) { BiblioAutoLink( $record, $frameworkcode ); } @@ -570,6 +578,7 @@ sub BiblioAutoLink { my $record = shift; my $frameworkcode = shift; my $verbose = shift; + if (!$record) { carp('Undefined record passed to BiblioAutoLink'); return 0; diff --git a/misc/migration_tools/bulkmarcimport.pl b/misc/migration_tools/bulkmarcimport.pl index b9e961c911..dc2374c6a7 100755 --- a/misc/migration_tools/bulkmarcimport.pl +++ b/misc/migration_tools/bulkmarcimport.pl @@ -19,6 +19,7 @@ use C4::Biblio qw( ModBiblioMarc GetFrameworkCode GetMarcBiblio + BiblioAutoLink ); use C4::Koha; use C4::Charset qw( MarcToUTF8Record SetUTF8Flag ); @@ -125,6 +126,7 @@ if ($all) { my $using_elastic_search = (C4::Context->preference('SearchEngine') eq 'Elasticsearch'); my $modify_biblio_marc_options = { + disable_autolink => $using_elastic_search, defer_search_engine_indexing => $using_elastic_search, overlay_context => { source => 'bulkmarcimport' } }; @@ -541,7 +543,7 @@ RECORD: foreach my $record (@{$marc_records}) { } } elsif ($insert) { - eval { ($record_id, $biblioitemnumber) = AddBiblio($record, $framework, { defer_marc_save => 1 }) }; + eval { ($record_id, $biblioitemnumber) = AddBiblio($record, $framework, { disable_autolink => 1, defer_marc_save => 1 }) }; if ($@) { warn "ERROR: Insert biblio $originalid failed: $@\n"; printlog( { id => $originalid, op => "insert", status => "ERROR" } ) if ($logfile); @@ -645,6 +647,11 @@ RECORD: foreach my $record (@{$marc_records}) { $schema->txn_begin; if ($indexer) { $indexer->update_index(\@search_engine_record_ids, \@search_engine_records); + if (C4::Context->preference('BiblioAddsAuthorities')) { + foreach my $record (@search_engine_records) { + BiblioAutoLink($record, $framework); + } + } @search_engine_record_ids = (); @search_engine_records = (); } -- 2.35.1