Bug 16708: Fix authority reindex for ElasticSearch

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>
This commit is contained in:
Jonathan Druart 2016-06-10 14:23:08 +01:00 committed by Kyle M Hall
parent e1d6974bff
commit 1e39ecc7f1
3 changed files with 57 additions and 56 deletions

View 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;

View 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;

View File

@ -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();
}