Bug 11650: multiplicated authorities after link_bibs_to_authorities.pl
authorJanusz Kaczmarek <januszop@gmail.com>
Fri, 31 Jan 2014 14:09:07 +0000 (15:09 +0100)
committerTomas Cohen Arazi <tomascohen@gmail.com>
Mon, 7 Jul 2014 15:40:25 +0000 (12:40 -0300)
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.

Signed-off-by: Chris Cormack <chris@bigballofwax.co.nz>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
Works as described.

C4/Biblio.pm
C4/Linker.pm
C4/Linker/Default.pm
C4/Linker/FirstMatch.pm
C4/Linker/LastMatch.pm

index 0ee661b..b0c7ad7 100644 (file)
@@ -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() }++;
                 }
             }
index a3c04f7..2708859 100644 (file)
@@ -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.
 
index 445b408..2610085 100644 (file)
@@ -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;
index ed03d73..ff05070 100644 (file)
@@ -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;
index 9357e95..480bb31 100644 (file)
@@ -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;