From 60fbecfab92c08d6d4fc7fccc3a718d6afef95bc Mon Sep 17 00:00:00 2001 From: Matthias Meusburger Date: Wed, 4 Jan 2012 15:11:03 +0100 Subject: [PATCH] Bug 7400: Add auto-completion on auth_finder While typing an authority, will automatically propose authorities (similar to autocompletion for patron search if activated) Signed-off-by: Jared Camins-Esakov Tested searching for authorities with and without autocomplete. Note that this is most useful when used in the "Main entry" box instead of the "Main entry ($a only)" box. --- C4/Charset.pm | 35 +++++++ authorities/auth_finder.pl | 4 +- authorities/ysearch.pl | 71 +++++++++++++++ cataloguing/ysearch.pl | 21 +---- .../prog/en/includes/auth-finder-search.inc | 95 +++++++++++++++++--- .../prog/en/modules/authorities/auth_finder.tt | 5 + 6 files changed, 199 insertions(+), 32 deletions(-) create mode 100755 authorities/ysearch.pl diff --git a/C4/Charset.pm b/C4/Charset.pm index a4e6b71..7405550 100644 --- a/C4/Charset.pm +++ b/C4/Charset.pm @@ -39,6 +39,7 @@ BEGIN { SetUTF8Flag SetMarcUnicodeFlag StripNonXmlChars + nsb_clean ); } @@ -382,6 +383,40 @@ sub StripNonXmlChars { return $str; } + + +=head2 nsb_clean + +=over 4 + +nsb_clean($string); + +=back + +Removes Non Sorting Block characters + +=cut +sub nsb_clean { + my $NSB = '\x88' ; # NSB : begin Non Sorting Block + my $NSE = '\x89' ; # NSE : Non Sorting Block end + my $NSB2 = '\x98' ; # NSB : begin Non Sorting Block + my $NSE2 = '\x9C' ; # NSE : Non Sorting Block end + my $C2 = '\xC2' ; # What is this char ? It is sometimes left by the regexp after removing NSB / NSE + + # handles non sorting blocks + my ($string) = @_ ; + $_ = $string ; + s/$NSB//g ; + s/$NSE//g ; + s/$NSB2//g ; + s/$NSE2//g ; + s/$C2//g ; + $string = $_ ; + + return($string) ; +} + + =head1 INTERNAL FUNCTIONS =head2 _default_marc21_charconv_to_utf8 diff --git a/authorities/auth_finder.pl b/authorities/auth_finder.pl index 99ac2c1..a00d5ea 100755 --- a/authorities/auth_finder.pl +++ b/authorities/auth_finder.pl @@ -136,7 +136,7 @@ if ( $op eq "do_search" ) { } ( $template, $loggedinuser, $cookie ) = get_template_and_user( { - template_name => "authorities/searchresultlist-auth.tmpl", + template_name => "authorities/searchresultlist-auth.tt", query => $query, type => 'intranet', authnotrequired => 0, @@ -166,7 +166,7 @@ if ( $op eq "do_search" ) { } else { ( $template, $loggedinuser, $cookie ) = get_template_and_user( { - template_name => "authorities/auth_finder.tmpl", + template_name => "authorities/auth_finder.tt", query => $query, type => 'intranet', authnotrequired => 0, diff --git a/authorities/ysearch.pl b/authorities/ysearch.pl new file mode 100755 index 0000000..ff6adbb --- /dev/null +++ b/authorities/ysearch.pl @@ -0,0 +1,71 @@ +#!/usr/bin/perl + +# This software is placed under the gnu General Public License, v2 (http://www.gnu.org/licenses/gpl.html) + +# Copyright 2011 BibLibre +# +# 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 ysearch.pl + +This script allows ajax call for dynamic authorities search +(used in auth_finder.pl) + +=cut + +use CGI; +use Modern::Perl; +use C4::Context; +use C4::Charset; +use C4::AuthoritiesMarc; +use C4::Auth qw/check_cookie_auth/; + +my $query = new CGI; + +binmode STDOUT, ":utf8"; +print $query->header( -type => 'text/plain', -charset => 'UTF-8' ); + +my ( $auth_status, $sessionID ) = check_cookie_auth( $query->cookie('CGISESSID'), { } ); +if ( $auth_status ne "ok" ) { + exit 0; +} + + my $searchstr = $query->param('query'); + my $searchtype = $query->param('querytype'); + my @value; + given ($searchtype) { + when (/^marclist$/) { @value = (undef, undef, $searchstr); } + when (/^mainentry$/) { @value = (undef, $searchstr, undef); } + when (/^mainmainentry$/) { @value = ($searchstr, undef, undef); } + } + my @marclist = ($searchtype); + my $authtypecode = $query->param('authtypecode'); + my @and_or = $query->param('and_or'); + my @excluding = $query->param('excluding'); + my @operator = $query->param('operator'); + my $orderby = $query->param('orderby'); + + my $resultsperpage = 50; + my $startfrom = 0; + + my ( $results, $total ) = SearchAuthorities( \@marclist, \@and_or, \@excluding, \@operator, \@value, $startfrom * $resultsperpage, $resultsperpage, $authtypecode, $orderby ); + foreach (@$results) { + my ($value) = $_->{'summary'}; + # Removes new lines + $value =~ s/
/ /g; + $value =~ s/\n//g; + print nsb_clean($value) . "\n"; + } diff --git a/cataloguing/ysearch.pl b/cataloguing/ysearch.pl index a697ddb..77144e1 100755 --- a/cataloguing/ysearch.pl +++ b/cataloguing/ysearch.pl @@ -24,11 +24,10 @@ =cut -use strict; - -#use warnings; FIXME - Bug 2505 +use Modern::Perl; use CGI; use C4::Context; +use C4::Charset; use C4::Auth qw/check_cookie_auth/; my $input = new CGI; @@ -59,20 +58,4 @@ while ( my $rec = $sth->fetchrow_hashref ) { print nsb_clean($rec->{$field}) . "\n"; } -sub nsb_clean { - my $NSB = '\x88' ; # NSB : begin Non Sorting Block - my $NSE = '\x89' ; # NSE : Non Sorting Block end - my $NSB2 = '\x98' ; # NSB : begin Non Sorting Block - my $NSE2 = '\x9C' ; # NSE : Non Sorting Block end - # handles non sorting blocks - my ($string) = @_ ; - $_ = $string ; - s/$NSB//g ; - s/$NSE//g ; - s/$NSB2//g ; - s/$NSE2//g ; - $string = $_ ; - - return($string) ; -} diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/auth-finder-search.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/auth-finder-search.inc index 895658a..1d5ed97 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/auth-finder-search.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/auth-finder-search.inc @@ -1,3 +1,69 @@ + + + +
@@ -17,8 +83,10 @@ - + +
+
  • @@ -29,8 +97,10 @@ - + +
  • +
  • @@ -41,15 +111,18 @@ - + +
  • -
  • - - -
  • + +
  • + + +
  • Cancel
    +
    diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/auth_finder.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/auth_finder.tt index 1c004ad..4945be4 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/auth_finder.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/auth_finder.tt @@ -4,6 +4,11 @@ + + + + +
    -- 1.7.5.4