[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