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:
parent
e1d6974bff
commit
1e39ecc7f1
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue