Bug 16708: Fix authority reindex for ElasticSearch
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Fri, 10 Jun 2016 13:23:08 +0000 (14:23 +0100)
committerKyle M Hall <kyle@bywatersolutions.com>
Fri, 24 Jun 2016 11:59:40 +0000 (11:59 +0000)
The changes made to Koha::Authority has not been correctly fixed.
The code of Koha::Authority has been moved bo
Koha::MetadataRecord::Authority by bug 15380.

Test plan:
  perl misc/search_tools/rebuild_elastic_search.pl -a -v
should success

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Koha/Authority.pm
Koha/MetadataRecord/Authority.pm
misc/search_tools/rebuild_elastic_search.pl

index fec63d3..b533fd7 100644 (file)
@@ -45,54 +45,4 @@ sub _type {
     return 'AuthHeader';
 }
 
-=head2 get_all_authorities_iterator
-
-    my $it = Koha::Authority->get_all_authorities_iterator();
-
-This will provide an iterator object that will, one by one, provide the
-Koha::Authority of each authority.
-
-The iterator is a Koha::MetadataIterator object.
-
-=cut
-
-sub get_all_authorities_iterator {
-    my $database = Koha::Database->new();
-    my $schema   = $database->schema();
-    my $rs =
-      $schema->resultset('AuthHeader')->search( { marcxml => { '!=', undef } },
-        { columns => [qw/ authid authtypecode marcxml /] } );
-    my $next_func = sub {
-        my $row = $rs->next();
-        return if !$row;
-        my $authid       = $row->authid;
-        my $authtypecode = $row->authtypecode;
-        my $marcxml      = $row->marcxml;
-
-        my $record = eval {
-            MARC::Record->new_from_xml(
-                StripNonXmlChars($marcxml),
-                'UTF-8',
-                (
-                    C4::Context->preference("marcflavour") eq "UNIMARC"
-                    ? "UNIMARCAUTH"
-                    : C4::Context->preference("marcflavour")
-                )
-            );
-        };
-        confess $@ if ($@);
-        $record->encoding('UTF-8');
-
-        # I'm not sure why we don't use the authtypecode from the database,
-        # but this is how the original code does it.
-        require C4::AuthoritiesMarc;
-        $authtypecode = C4::AuthoritiesMarc::GuessAuthTypeCode($record);
-
-        my $auth = __PACKAGE__->new( $record, $authid, $authtypecode );
-
-        return $auth;
-      };
-      return Koha::MetadataIterator->new($next_func);
-}
-
 1;
index da218af..9adf320 100644 (file)
@@ -52,13 +52,14 @@ Create a new Koha::MetadataRecord::Authority object based on the provided record
 =cut
 
 sub new {
-    my $class = shift;
-    my $record = shift;
+    my ( $class, $record, $params ) = @_;
 
+    $params //= {};
     my $self = $class->SUPER::new(
         {
             'record' => $record,
-            'schema' => lc C4::Context->preference("marcflavour")
+            'schema' => lc C4::Context->preference("marcflavour"),
+            %$params,
         }
     );
 
@@ -154,4 +155,54 @@ sub authorized_heading {
     return;
 }
 
+=head2 get_all_authorities_iterator
+
+    my $it = Koha::Authority->get_all_authorities_iterator();
+
+This will provide an iterator object that will, one by one, provide the
+Koha::Authority of each authority.
+
+The iterator is a Koha::MetadataIterator object.
+
+=cut
+
+sub get_all_authorities_iterator {
+    my $database = Koha::Database->new();
+    my $schema   = $database->schema();
+    my $rs =
+      $schema->resultset('AuthHeader')->search( { marcxml => { '!=', undef } },
+        { columns => [qw/ authid authtypecode marcxml /] } );
+    my $next_func = sub {
+        my $row = $rs->next();
+        return if !$row;
+        my $authid       = $row->authid;
+        my $authtypecode = $row->authtypecode;
+        my $marcxml      = $row->marcxml;
+
+        my $record = eval {
+            MARC::Record->new_from_xml(
+                StripNonXmlChars($marcxml),
+                'UTF-8',
+                (
+                    C4::Context->preference("marcflavour") eq "UNIMARC"
+                    ? "UNIMARCAUTH"
+                    : C4::Context->preference("marcflavour")
+                )
+            );
+        };
+        confess $@ if ($@);
+        $record->encoding('UTF-8');
+
+        # I'm not sure why we don't use the authtypecode from the database,
+        # but this is how the original code does it.
+        require C4::AuthoritiesMarc;
+        $authtypecode = C4::AuthoritiesMarc::GuessAuthTypeCode($record);
+
+        my $auth = __PACKAGE__->new( $record, { authid => $authid, id => $authid, authtypecode => $authtypecode } );
+
+        return $auth;
+      };
+      return Koha::MetadataIterator->new($next_func);
+}
+
 1;
index af536f0..66d0cbb 100755 (executable)
@@ -84,7 +84,7 @@ Full documentation.
 use autodie;
 use Getopt::Long;
 use C4::Context;
-use Koha::Authority;
+use Koha::MetadataRecord::Authority;
 use Koha::BiblioUtils;
 use Koha::ElasticSearch::Indexer;
 use MARC::Field;
@@ -144,11 +144,11 @@ if ($index_authorities) {
         $next = sub {
             my $r = shift @biblionumbers;
             return () unless defined $r;
-            my $a = Koha::Authority->get_from_authid($r);
+            my $a = Koha::MetadataRecord::Authority->get_from_authid($r);
             return ($r, $a->record);
         };
     } else {
-        my $records = Koha::Authority->get_all_authorities_iterator();
+        my $records = Koha::MetadataRecord::Authority->get_all_authorities_iterator();
         $next = sub {
             $records->next();
         }