1 package Koha
::SuggestionEngine
;
3 # Copyright 2012 C & P Bibliography Services
5 # This file is part of Koha.
7 # Koha is free software; you can redistribute it and/or modify it under the
8 # terms of the GNU General Public License as published by the Free Software
9 # Foundation; either version 2 of the License, or (at your option) any later
12 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License along
17 # with Koha; if not, write to the Free Software Foundation, Inc.,
18 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22 Koha::SuggestionEngine - Dispatcher class for suggestion engines
26 use Koha::SuggestionEngine;
27 my $suggestor = Koha::SuggestionEngine->new(%params);
28 $suggestor->get_suggestions($search)
32 Dispatcher class for retrieving suggestions. SuggestionEngines must
33 extend Koha::SuggestionEngine::Base, be in the Koha::SuggestionEngine::Plugin
34 namespace, and provide the following methods:
36 B<get_suggestions ($search)> - get suggestions from the plugin for the
39 These methods may be overriden:
41 B<initialize (%params)> - initialize the plugin
43 B<destroy ()> - destroy the plugin
45 These methods should not be overridden unless you are very sure of what
48 B<new ()> - create a new plugin object
56 use Module
::Load
::Conditional
qw(can_load);
57 use Module
::Pluggable
::Object
;
59 use base
qw(Class::Accessor);
61 __PACKAGE__
->mk_accessors(qw( schema plugins options record ));
65 my $suggestor = Koha::SuggestionEngine->new(%params);
67 Create a new suggestor class. Available parameters are:
73 What plugin(s) to use. This must be an arrayref to a list of plugins. Plugins
74 can be specified either with a complete class path, or, if they are in the
75 Koha::SuggestionEngine::Plugin namespace, as only the plugin name, and
76 "Koha::SuggestionEngine::Plugin" will be prepended to it before the plugin
87 my $options = $param->{options
} || '';
90 foreach my $plugin ( $param->{plugins
} ) {
95 : "Koha::SuggestionEngine::Plugin::${plugin}";
96 if ( can_load
( modules
=> { $plugin_module => undef } ) ) {
97 my $object = $plugin_module->new();
98 $plugin_module->initialize($param);
99 push @plugins, $object;
103 my $self = $class->SUPER::new
(
105 plugins
=> \
@plugins,
113 =head2 get_suggestions
115 my $suggestions = $suggester->get_suggestions(\%params)
117 Get a list of suggestions based on the search passed in. Available parameters
124 Required. The search for which suggestions are desired.
128 Optional. The number of suggestions to retrieve. Defaults to 10.
134 sub get_suggestions
{
138 return unless $param->{'search'};
140 my $number = $param->{'count'} || 10;
144 foreach my $pluginobj ( @
{ $self->plugins } ) {
145 next unless $pluginobj;
146 my $pluginres = $pluginobj->get_suggestions($param);
147 foreach my $suggestion (@
$pluginres) {
148 $suggestions{ $suggestion->{'search'} }->{'relevance'} +=
149 $suggestion->{'relevance'};
150 $suggestions{ $suggestion->{'search'} }->{'label'} |=
151 $suggestion->{'label'};
158 $suggestions{$b}->{'relevance'} <=> $suggestions{$a}->{'relevance'}
162 last if ( $#results == $number - 1 );
166 relevance
=> $suggestions{$_}->{'relevance'},
167 label
=> $suggestions{$_}->{'label'}
177 foreach my $pluginobj ( @
{ $self->plugins } ) {
178 $pluginobj->destroy();
182 =head2 AvailablePlugins
184 my @available_plugins = Koha::SuggestionEngine::AvailablePlugins();
186 Get a list of available plugins.
190 sub AvailablePlugins
{
191 my $path = 'Koha::SuggestionEngine::Plugin';
192 my $finder = Module
::Pluggable
::Object
->new( search_path
=> $path );
193 return $finder->plugins;