[Koha-patches] [PATCH] Bug 11650: multiplicated authorities after link_bibs_to_authorities.pl
Janusz Kaczmarek
januszop at gmail.com
Fri Jan 31 15:41:24 CET 2014
Under certain circumstances misc/link_bibs_to_authorities.pl creates
multiple authority with identical heading.
Test plan:
1. Have some (2-3) biblio records with some repeated headings
Have BiblioAddsAuthorities = allow, AutoCreateAuthorities = generate
Have no authority records
2. Run misc/link_bibs_to_authorities.pl script
3. You will get multiple authority records -- one for each occurence of a
heading in biblio record.
4. Apply the patch.
5. Repeat 1-3 (remember to have "fresh" biblios, without $9, and no
authorities).
6. The problem should be fixed.
---
C4/Biblio.pm | 1 +
C4/Linker.pm | 3 +++
C4/Linker/Default.pm | 12 ++++++++++++
C4/Linker/FirstMatch.pm | 7 +++++++
C4/Linker/LastMatch.pm | 7 +++++++
5 files changed, 30 insertions(+), 0 deletions(-)
diff --git a/C4/Biblio.pm b/C4/Biblio.pm
index dc40d68..380f656 100644
--- a/C4/Biblio.pm
+++ b/C4/Biblio.pm
@@ -634,6 +634,7 @@ sub LinkBibHeadingsToAuthorities {
$heading->auth_type() );
$field->add_subfields( '9', $authid );
$num_headings_changed++;
+ $linker->update_cache($heading, $authid);
$results{'added'}->{ $heading->display_form() }++;
}
}
diff --git a/C4/Linker.pm b/C4/Linker.pm
index a3c04f7..447d3b2 100644
--- a/C4/Linker.pm
+++ b/C4/Linker.pm
@@ -35,6 +35,9 @@ the match is "fuzzy" (the semantics of "fuzzy" are up to the individual plugin).
In order to handle authority limits, get_link should always end with:
return $self->SUPER::_handle_auth_limit($authid), $fuzzy;
+B<update_cache ($heading, $authid)> - updates internal linker cache for
+$heading with $authid of a new created authotiry record
+
B<flip_heading ($field)> - return a MARC::Field object with the heading flipped
to the preferred form.
diff --git a/C4/Linker/Default.pm b/C4/Linker/Default.pm
index 445b408..2610085 100644
--- a/C4/Linker/Default.pm
+++ b/C4/Linker/Default.pm
@@ -79,6 +79,18 @@ sub get_link {
return $self->SUPER::_handle_auth_limit($authid), $fuzzy;
}
+sub update_cache {
+ my $self = shift;
+ my $heading = shift;
+ my $authid = shift;
+ my $search_form = $heading->search_form();
+ my $fuzzy = 0;
+
+ $self->{'cache'}->{$search_form}->{'cached'} = 1;
+ $self->{'cache'}->{$search_form}->{'authid'} = $authid;
+ $self->{'cache'}->{$search_form}->{'fuzzy'} = $fuzzy;
+}
+
sub flip_heading {
my $self = shift;
my $heading = shift;
diff --git a/C4/Linker/FirstMatch.pm b/C4/Linker/FirstMatch.pm
index ed03d73..ff05070 100644
--- a/C4/Linker/FirstMatch.pm
+++ b/C4/Linker/FirstMatch.pm
@@ -41,6 +41,13 @@ sub get_link {
return $self->{'default_linker'}->get_link( $heading, 'first' );
}
+sub update_cache {
+ my $self = shift;
+ my $heading = shift;
+ my $authid = shift;
+ $self->{'default_linker'}->update_cache( $heading, $authid );
+}
+
sub flip_heading {
my $self = shift;
my $heading = shift;
diff --git a/C4/Linker/LastMatch.pm b/C4/Linker/LastMatch.pm
index 9357e95..048d35e 100644
--- a/C4/Linker/LastMatch.pm
+++ b/C4/Linker/LastMatch.pm
@@ -41,6 +41,13 @@ sub get_link {
return $self->{'default_linker'}->get_link( $heading, 'last' );
}
+sub update_cache {
+ my $self = shift;
+ my $heading = shift;
+ my $authid = shift;
+ $self->{'default_linker'}->update_cache( $heading, $authid );
+}
+
sub flip_heading {
my $self = shift;
my $heading = shift;
--
1.7.2.5
More information about the Koha-patches
mailing list