116 lines
2.8 KiB
Perl
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;
|