Koha-clms/Koha/SearchEngine/Solr/Config.pm

116 lines
2.8 KiB
Perl

package Koha::SearchEngine::Solr::Config;
use Modern::Perl;
use Moose::Role;
use YAML;
with 'Koha::SearchEngine::ConfigRole';
has index_config => (
is => 'rw',
lazy => 1,
builder => '_load_index_config_file',
);
has solr_config => (
is => 'rw',
lazy => 1,
builder => '_load_solr_config_file',
);
has index_filename => (
is => 'rw',
lazy => 1,
default => C4::Context->config("installdir") . qq{/etc/searchengine/solr/indexes.yaml},
);
has solr_filename => (
is => 'rw',
lazy => 1,
default => C4::Context->config("installdir") . qq{/etc/searchengine/solr/config.yaml},
);
sub _load_index_config_file {
my ( $self, $filename ) = @_;
$self->index_filename( $filename ) if defined $filename;
die "The config index file (" . $self->index_filename . ") for Solr is not exist" if not -e $self->index_filename;
return YAML::LoadFile($self->index_filename);
}
sub _load_solr_config_file {
my ( $self ) = @_;
die "The solr config index file (" . $self->solr_filename . ") for Solr is not exist" if not -e $self->solr_filename;
return YAML::LoadFile($self->solr_filename);
}
sub set_config_filename {
my ( $self, $filename ) = @_;
$self->index_config( $self->_load_index_config_file( $filename ) );
}
sub SolrAPI {
my ( $self ) = @_;
return $self->solr_config->{SolrAPI};
}
sub indexes { # FIXME Return index list if param not an hashref (string ressource_type)
my ( $self, $indexes ) = @_;
return $self->write( { indexes => $indexes } ) if defined $indexes;
return $self->index_config->{indexes};
}
sub index {
my ( $self, $code ) = @_;
my @index = map { ( $_->{code} eq $code ) ? $_ : () } @{$self->index_config->{indexes}};
return $index[0];
}
sub ressource_types {
my ( $self ) = @_;
my $config = $self->index_config;
return $config->{ressource_types};
}
sub sortable_indexes {
my ( $self ) = @_;
my @sortable_indexes = map { $_->{sortable} ? $_ : () } @{ $self->index_config->{indexes} };
return \@sortable_indexes;
}
sub facetable_indexes {
my ( $self ) = @_;
my @facetable_indexes = map { $_->{facetable} ? $_ : () } @{ $self->index_config->{indexes} };
return \@facetable_indexes;
}
sub reload {
my ( $self ) = @_;
$self->index_config( $self->_load_index_config_file );
}
sub write {
my ( $self, $values ) = @_;
my $r;
while ( my ( $k, $v ) = each %$values ) {
$r->{$k} = $v;
}
if ( not grep /^ressource_type$/, keys %$values ) {
$r->{ressource_types} = $self->ressource_types;
}
if ( not grep /^indexes$/, keys %$values ) {
$r->{indexes} = $self->indexes;
}
eval {
YAML::DumpFile( $self->index_filename, $r );
};
if ( $@ ) {
die "Failed to dump the index config into the specified file ($@)";
}
$self->reload;
}
1;