@@ -, +, @@ --- Koha/Plugins/Handler.pm | 30 +++++++++++++++++++++++++ Koha/SearchEngine/Elasticsearch/QueryBuilder.pm | 30 +++++++++++++++++++++++++ 2 files changed, 60 insertions(+) --- a/Koha/Plugins/Handler.pm +++ a/Koha/Plugins/Handler.pm @@ -24,6 +24,7 @@ use File::Path qw(remove_tree); use Module::Load::Conditional qw(can_load); use C4::Context; +use Koha::Plugins; BEGIN { my $pluginsdir = C4::Context->config("pluginsdir"); @@ -73,6 +74,35 @@ sub run { } } +=item run_matching + +Run all plugins in sequence matching plugin_method + +=cut + +sub run_matching { + my ( $class, $args ) = @_; + my $params = $args->{'params'}; + return $params unless ( C4::Context->config("enable_plugins") || $args->{'enable_plugins'} ); + + my $plugin_method = $args->{'method'}; + my @plugins = Koha::Plugins->new()->GetPlugins({ + method => $plugin_method + }); + + foreach my $plugin (@plugins) { + $params = Koha::Plugins::Handler->run( + { + class => $plugin->{'class'}, + method => $plugin_method, + params => $params + } + ); + } + + return $params; +} + =item delete Deletes a plugin --- a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm +++ a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm @@ -45,6 +45,7 @@ use JSON; use List::MoreUtils qw/ each_array /; use Modern::Perl; use URI::Escape; +use Koha::Plugins::Handler; use C4::Context; use Data::Dumper; # TODO remove @@ -200,6 +201,35 @@ sub build_query_compat { $lang, $params ) = @_; + + my $plugin_result = Koha::Plugins::Handler->run_matching( + { + method => 'build_query_before', + params => { + operators => $operators, + operands => $operands, + indexes => $indexes, + orig_limits => $orig_limits, + sort_by => $sort_by, + scan => $scan, + lang => $lang, + params => $params + }, + engine => 'elasticsearch' + } + ); + + ($operators, $operands, $indexes, $orig_limits, $sort_by, $scan, $lang, $params) = ( + $plugin_result->{'operators'}, + $plugin_result->{'operands'}, + $plugin_result->{'indexes'}, + $plugin_result->{'orig_limits'}, + $plugin_result->{'sort_by'}, + $plugin_result->{'scan'}, + $plugin_result->{'lang'}, + $plugin_result->{'params'}, + ); + #die Dumper ( $self, $operators, $operands, $indexes, $orig_limits, $sort_by, $scan, $lang ); my @sort_params = $self->_convert_sort_fields(@$sort_by); my @index_params = $self->_convert_index_fields(@$indexes); --