Koha/opac/svc/suggestion
Jared Camins-Esakov 8471158160 Bug 8209: "Did you mean?" from authorities
One of the ideas behind authority records is that users who search for
one term should have related terms (according to the authority file)
suggested to them. At the moment, Koha doesn't do that. Adding an
authority searching step to regular searches and displaying any
suggestions in a "Did you mean" bar at the top of the results would be
very useful.

This commit adds a Koha::SuggestionEngine class which is in charge of
getting suggestions from individual suggestion engine plugins, which
much be in the Koha::SuggestionEngine::Plugin::* namespace, and extend
Koha::SuggestionEngine::Base. Suggestions are loaded asynchronously
using AJAX, and a link to a page with suggestions is provided for users
with Javascript turned off.

The AuthorityFile suggestion engine plugin looks up the specified search
terms in the authority file and then suggests searches for records using
matching authorities.

Signed-off-by: Jared Camins-Esakov <jcamins@cpbibliography.com>
Rebased 2 August 2012 and incorporated QA feedback

Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de>

Test plan:
- Verified database update added system preference correctly,
  pref defaults to OFF
- Verified search results and detail pages in OPAC and staff
  still worked the same as before
  * for no results
  * with results
- Activated system preference and tested various searches
  * Searches from simple search
  * Searches from advanced search
  * Search links in records
- Deactivated Javascript - verified fallback works correctly

Notes:

- Suggested terms can include autorities with no linked records.
- When combining more than one search option using advanced search
  this results in "no suggestions" more often. Feature works best
  from simple search.

Overall great feature making use of authorities in a user friendly way!

Signed-off-by: Jared Camins-Esakov <jcamins@cpbibliography.com>
Rebased on latest master 2012-09-10
Signed-off-by: wajasu <matted-34813@mypacks.net>
2012-09-13 11:34:28 +02:00

101 lines
2.5 KiB
Perl
Executable file

#!/usr/bin/perl
# Copyright 2012 C & P Bibliography Services
#
# 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 2 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, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
=head1 NAME
opac-suggestion.pl : script to render suggestions for the OPAC
=head1 SYNOPSIS
=cut
=head1 DESCRIPTION
This script produces suggestions for the OPAC given a search string.
It takes the following parameters:
=over 8
=item I<q>
Required. Query string.
=item I<render>
If set to 'stub' render a stub HTML page suitable for inclusion into a
div via AJAX. If set to 'standalone', return a full page instead of the stub.
If not set, return JSON.
=item I<count>
Number of suggestions to display. Defaults to 4 in stub mode, 20 otherwise.
=back
=cut
use strict;
use warnings;
use C4::Auth;
use C4::Context;
use C4::Output;
use CGI;
use JSON;
use Koha::SuggestionEngine;
my $query = new CGI;
my $dbh = C4::Context->dbh;
my $search = $query->param('q') || '';
my $render = $query->param('render') || '';
my $count = $query->param('count') || ( $render eq 'stub' ? 4 : 20 );
# open template
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
{
template_name => "svc/suggestion.tt",
query => $query,
type => "opac",
authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ),
debug => 1,
}
);
unless ( C4::Context->preference('DidYouMeanFromAuthorities') ) {
print $query->header;
exit;
}
my $suggestor = Koha::SuggestionEngine->new( { plugins => ('AuthorityFile') } );
my $suggestions =
$suggestor->get_suggestions( { search => $search, count => $count } );
if ($render) {
$template->{VARS}->{render} = $render;
$template->{VARS}->{suggestions} = $suggestions if $suggestions;
output_html_with_http_headers $query, $cookie, $template->output;
}
else {
print $query->header;
print to_json($suggestions);
}