Bug 21957: Add a flag to ModBiblio to avoid linking auths if called from linker
To test: 1 - prove -v t/db_dependent/Biblio.t 2 - Set BiblioAddsAuthoorities and AutoCreateAuthorities 3 - Modify a biblio to add a heading with no existing auth record 4 - Ensure the record was created on saving 5 - Ensure that editing works as normal otherwise 6 - Run link_bibs_to_authorities 7 - Ensure results are as expected Signed-off-by: Michal Denar <black23@gmail.com> Signed-off-by: Josef Moravec <josef.moravec@gmail.com> Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
This commit is contained in:
parent
d9cefbdd19
commit
e600ae6c4b
12
C4/Biblio.pm
12
C4/Biblio.pm
|
|
@ -240,7 +240,7 @@ sub AddBiblio {
|
|||
|
||||
=head2 ModBiblio
|
||||
|
||||
ModBiblio( $record,$biblionumber,$frameworkcode);
|
||||
ModBiblio( $record,$biblionumber,$frameworkcode, $disable_autolink);
|
||||
|
||||
Replace an existing bib record identified by C<$biblionumber>
|
||||
with one supplied by the MARC::Record object C<$record>. The embedded
|
||||
|
|
@ -256,12 +256,16 @@ in the C<biblio> and C<biblioitems> tables, as well as
|
|||
which fields are used to store embedded item, biblioitem,
|
||||
and biblionumber data for indexing.
|
||||
|
||||
Unless C<$disable_autolink> is passed ModBiblio will relink record headings
|
||||
to authorities based on settings in the system preferences. This flag allows
|
||||
us to not relink records when the authority linker is saving modifications.
|
||||
|
||||
Returns 1 on success 0 on failure
|
||||
|
||||
=cut
|
||||
|
||||
sub ModBiblio {
|
||||
my ( $record, $biblionumber, $frameworkcode ) = @_;
|
||||
my ( $record, $biblionumber, $frameworkcode, $disable_autolink ) = @_;
|
||||
if (!$record) {
|
||||
carp 'No record passed to ModBiblio';
|
||||
return 0;
|
||||
|
|
@ -272,7 +276,7 @@ sub ModBiblio {
|
|||
logaction( "CATALOGUING", "MODIFY", $biblionumber, "biblio BEFORE=>" . $newrecord->as_formatted );
|
||||
}
|
||||
|
||||
if (C4::Context->preference('BiblioAddsAuthorities')) {
|
||||
if ( !$disable_autolink && C4::Context->preference('BiblioAddsAuthorities') ) {
|
||||
BiblioAutoLink( $record, $frameworkcode );
|
||||
}
|
||||
|
||||
|
|
@ -624,12 +628,10 @@ safest place.
|
|||
|
||||
sub _check_valid_auth_link {
|
||||
my ( $authid, $field ) = @_;
|
||||
|
||||
require C4::AuthoritiesMarc;
|
||||
|
||||
my $authorized_heading =
|
||||
C4::AuthoritiesMarc::GetAuthorizedHeading( { 'authid' => $authid } ) || '';
|
||||
|
||||
return ($field->as_string('abcdefghijklmnopqrstuvwxyz') eq $authorized_heading);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -221,7 +221,8 @@ sub process_bib {
|
|||
);
|
||||
}
|
||||
if ( not $test_only ) {
|
||||
ModBiblio( $bib, $biblionumber, $frameworkcode );
|
||||
ModBiblio( $bib, $biblionumber, $frameworkcode, 1 );
|
||||
#Last param is to note ModBiblio was called from linking script and bib should not be linked again
|
||||
$num_bibs_modified++;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
|
||||
use Modern::Perl;
|
||||
|
||||
use Test::More tests => 11;
|
||||
use Test::More tests => 12;
|
||||
use Test::MockModule;
|
||||
use List::MoreUtils qw( uniq );
|
||||
use MARC::Record;
|
||||
|
|
@ -570,6 +570,23 @@ subtest 'MarcFieldForCreatorAndModifier' => sub {
|
|||
is($record->subfield('998', 'd'), 'Jane Doe', '998$d = Jane Doe');
|
||||
};
|
||||
|
||||
subtest 'ModBiblio called from linker test' => sub {
|
||||
plan tests => 2;
|
||||
my $called = 0;
|
||||
t::lib::Mocks::mock_preference('BiblioAddsAuthorities', 1);
|
||||
my $biblio_mod = Test::MockModule->new( 'C4::Biblio' );
|
||||
$biblio_mod->mock( 'LinkBibHeadingsToAuthorities', sub {
|
||||
$called = 1;
|
||||
});
|
||||
my $record = MARC::Record->new();
|
||||
my ($biblionumber) = C4::Biblio::AddBiblio($record,'');
|
||||
C4::Biblio::ModBiblio($record,$biblionumber,'');
|
||||
is($called,1,"We called to link bibs because not from linker");
|
||||
$called = 0;
|
||||
C4::Biblio::ModBiblio($record,$biblionumber,'',1);
|
||||
is($called,0,"We didn't call to link bibs because from linker");
|
||||
};
|
||||
|
||||
# Cleanup
|
||||
Koha::Caches->get_instance->clear_from_cache( "MarcSubfieldStructure-" );
|
||||
$schema->storage->txn_rollback;
|
||||
|
|
|
|||
Loading…
Reference in New Issue