@@ -, +, @@ --- Koha/SuggestionEngine/Plugin/LibrisSpellcheck.pm | 90 ++++++++++++++++++++ .../bug_14557_add_libriskey_syspref.sql | 1 + .../prog/en/modules/admin/didyoumean.tt | 4 +- .../en/modules/admin/preferences/searching.pref | 5 ++ opac/opac-search.pl | 17 ++-- 5 files changed, 107 insertions(+), 10 deletions(-) create mode 100644 Koha/SuggestionEngine/Plugin/LibrisSpellcheck.pm create mode 100644 installer/data/mysql/atomicupdate/bug_14557_add_libriskey_syspref.sql --- a/Koha/SuggestionEngine/Plugin/LibrisSpellcheck.pm +++ a/Koha/SuggestionEngine/Plugin/LibrisSpellcheck.pm @@ -0,0 +1,90 @@ +package Koha::SuggestionEngine::Plugin::LibrisSpellcheck; +# Copyright (C) 2015 Eivin Giske Skaaren +# +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . + +use Modern::Perl; +use LWP::UserAgent; +use XML::Simple qw(XMLin); +use C4::Context; +use base qw(Koha::SuggestionEngine::Base); + +sub NAME { + return 'LibrisSpellcheck'; +} + +sub get_suggestions { + my ($self, $query) = @_; + my $key = C4::Context->preference('LibrisKey'); + + my $search = $query->{'search'}; + my $response = LWP::UserAgent->new->get("http://api.libris.kb.se/bibspell/spell?query={$search}&key=$key"); + my $xml = XMLin($response->content, NoAttr => 1, ForceArray => qr/term/); + + my @terms; + my $label; + + if ($xml->{suggestion}->{term}) { + for (@{$xml->{suggestion}->{term}}) { + push @terms, $_; + } + $label = join(' ', @terms); + } else { + return; # No result from LIBRIS + } + + my @results; + push @results, + { + 'search' => $label, #$thissearch, + relevance => 100, + # FIXME: it'd be nice to have some empirical measure of + # "relevance" in this case, but we don't. + label => $label + }; + return \@results; +} + +1; +__END__ + +=head1 NAME + +Koha::SuggestionEngine::Plugin::LibrisSpellcheck + +=head2 FUNCTIONS + +This module provides facilities for using the LIBRIS spell checker API + +=over + +=item get_suggestions(query) + +Sends in the search query and gets an XML with a suggestion + +=back + +=cut + +=head1 NOTES + +=cut + +=head1 AUTHOR + +Eivin Giske Skaaren + +=cut --- a/installer/data/mysql/atomicupdate/bug_14557_add_libriskey_syspref.sql +++ a/installer/data/mysql/atomicupdate/bug_14557_add_libriskey_syspref.sql @@ -0,0 +1, @@ +INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('LibrisKey', '', 'This key must be obtained at http://api.libris.kb.se/. It is unique for the IP of the server.', NULL, 'Free'); --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/didyoumean.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/didyoumean.tt @@ -12,7 +12,9 @@ [% CASE 'ExplodedTerms' %] Suggest that patrons expand their searches to include broader/narrower/related terms. - [% END %] + [% CASE 'LibrisSpellcheck' %] + Use the LIBRIS spellcheck API. + [% END %] [% END %] --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref @@ -221,3 +221,8 @@ Searching: yes: "search" no: "don't search" - on all variations of the ISBN. Note that this preference has no effect if UseQueryParser is on. + API Keys: + - + - LIBRIS Spellcheking API key + - pref: LibrisKey + - "Can be obtained at http://api.libris.kb.se/bibspell." --- a/opac/opac-search.pl +++ a/opac/opac-search.pl @@ -189,14 +189,13 @@ if ($cgi->param("returntosearch")) { } if ($cgi->cookie("search_path_code")) { my $pathcode = $cgi->cookie("search_path_code"); - if ($pathcode eq '"ads"') { - $template->param('ReturnPath' => '/cgi-bin/koha/opac-search.pl?returntosearch=1'); - } - elsif ($pathcode eq '"exs"') { - $template->param('ReturnPath' => '/cgi-bin/koha/opac-search.pl?expanded_options=1&returntosearch=1'); - } - else { - warn "ReturnPath switch error"; + given ($pathcode) + { + when ('"ads"') { $template->param('ReturnPath' => '/cgi-bin/koha/opac-search.pl?returntosearch=1'); } + when ('"exs"') { + $template->param('ReturnPath' => '/cgi-bin/koha/opac-search.pl?expanded_options=1&returntosearch=1'); + } + default {warn "ReturnPath swith error";} } } @@ -579,7 +578,7 @@ if ($tag) { # This sorts the facets into alphabetical order if ($facets) { foreach my $f (@$facets) { - $f->{facets} = [ sort { uc($a->{facet_label_value}) cmp uc($b->{facet_label_value}) } @{ $f->{facets} } ]; + $f->{facets} = [ sort { uc($a->{facet_title_value}) cmp uc($b->{facet_title_value}) } @{ $f->{facets} } ]; } @$facets = sort {$a->{expand} cmp $b->{expand}} @$facets; } --