X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=opac%2Fopac-authorities-home.pl;h=3ea2719412e0d8215a8177f3303ba41e3cf36dcf;hb=refs%2Fheads%2Fkoha_ffzg;hp=acff077caf08733abf31913961b845bd9c9b4c90;hpb=aef1dd15fbe37a8a9c30ba4b38f7ecd6c1fea54d;p=koha.git diff --git a/opac/opac-authorities-home.pl b/opac/opac-authorities-home.pl index acff077caf..3ea2719412 100755 --- a/opac/opac-authorities-home.pl +++ b/opac/opac-authorities-home.pl @@ -5,76 +5,70 @@ # # 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 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. +# 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. +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . -use strict; -use warnings; +use Modern::Perl; -use CGI; +use CGI qw ( -utf8 ); +use URI::Escape; use C4::Auth; use C4::Context; use C4::Auth; use C4::Output; use C4::AuthoritiesMarc; -use C4::Koha; # XXX subfield_is_koha_internal_p +use C4::Koha; +use C4::Search::History; + +use Koha::Authority::Types; +use Koha::SearchEngine::Search; +use Koha::SearchEngine::QueryBuilder; my $query = new CGI; my $op = $query->param('op') || ''; my $authtypecode = $query->param('authtypecode') || ''; my $dbh = C4::Context->dbh; -my $startfrom = $query->param('startfrom'); +my $startfrom = $query->param('startfrom') || 1; +my $resultsperpage = $query->param('resultsperpage') || 20; my $authid = $query->param('authid'); -$startfrom = 0 if ( !defined $startfrom ); my ( $template, $loggedinuser, $cookie ); -my $resultsperpage; - -my $authtypes = getauthtypes(); -my @authtypesloop = (); -foreach my $thisauthtype ( - sort { - $authtypes->{$a}->{'authtypetext'} - cmp $authtypes->{$b}->{'authtypetext'} - } - keys %{$authtypes} - ) { - push @authtypesloop, - { value => $thisauthtype, - selected => $thisauthtype eq $authtypecode, - authtypetext => $authtypes->{$thisauthtype}->{'authtypetext'}, - }; -} + +my $authority_types = Koha::Authority::Types->search({}, { order_by => ['authtypetext']}); if ( $op eq "do_search" ) { - my @marclist = ($query->param('marclista'),$query->param('marclistb'),$query->param('marclistc')); - my @and_or = ($query->param('and_ora'),$query->param('and_orb'),$query->param('and_orc')); - my @excluding = ($query->param('excludinga'),$query->param('excludingb'),$query->param('excludingc'),); - my @operator = ($query->param('operatora'),$query->param('operatorb'),$query->param('operatorc')); + my @marclist = $query->multi_param('marclist'); + my @and_or = $query->multi_param('and_or'); + my @excluding = $query->multi_param('excluding'); + my @operator = $query->multi_param('operator'); my $orderby = $query->param('orderby'); - my @value = ($query->param('valuea') || "",$query->param('valueb') || "",$query->param('valuec') || "",); + my @value = $query->multi_param('value'); + $value[0] ||= q||; - $resultsperpage = $query->param('resultsperpage'); - $resultsperpage = 20 if ( !defined $resultsperpage ); my @tags; - my ( $results, $total, @fields ) = - SearchAuthorities( \@marclist, \@and_or, \@excluding, \@operator, - \@value, $startfrom * $resultsperpage, - $resultsperpage, $authtypecode, $orderby ); + my $builder = Koha::SearchEngine::QueryBuilder->new( + { index => $Koha::SearchEngine::AUTHORITIES_INDEX } ); + my $searcher = Koha::SearchEngine::Search->new( + { index => $Koha::SearchEngine::AUTHORITIES_INDEX } ); + my $search_query = $builder->build_authorities_query_compat( \@marclist, \@and_or, + \@excluding, \@operator, \@value, $authtypecode, $orderby ); + my $offset = ( $startfrom - 1 ) * $resultsperpage + 1; + my ( $results, $total ) = + $searcher->search_auth_compat( $search_query, $offset, $resultsperpage ); ( $template, $loggedinuser, $cookie ) = get_template_and_user( { - template_name => "opac-authoritiessearchresultlist.tmpl", + template_name => "opac-authoritiessearchresultlist.tt", query => $query, type => 'opac', authnotrequired => 1, @@ -83,67 +77,88 @@ if ( $op eq "do_search" ) { ); # multi page display gestion - my $displaynext = 0; - my $displayprev = $startfrom; - $total ||= 0; - if ( ( $total - ( ( $startfrom + 1 ) * ($resultsperpage) ) ) > 0 ) { - $displaynext = 1; + my $value_url = uri_escape_utf8($value[0]); + my $base_url = "opac-authorities-home.pl?" + ."marclist=$marclist[0]" + ."&and_or=$and_or[0]" + ."&excluding=$excluding[0]" + ."&operator=$operator[0]" + ."&value=$value_url" + ."&resultsperpage=$resultsperpage" + ."&type=opac" + ."&op=do_search" + ."&authtypecode=$authtypecode" + ."&orderby=$orderby"; + + my $from = ( $startfrom - 1 ) * $resultsperpage + 1; + my $to; + if ( !defined $total ) { + $total = 0; } - my @field_data = (); + if ( $total < $startfrom * $resultsperpage ) { + $to = $total; + } + else { + $to = $startfrom * $resultsperpage; + } + + $template->param( result => $results ) if $results; - foreach my $letter (qw/a b c/){ - push @field_data, { term => "marclist$letter" , val => $query->param("marclist$letter") || ''}; - push @field_data, { term => "and_or$letter" , val => $query->param("and_or$letter") || ''}; - push @field_data, { term => "excluding$letter" , val => $query->param("excluding$letter") || ''}; - push @field_data, { term => "operator$letter" , val => $query->param("operator$letter") || ''}; - push @field_data, { term => "value$letter" , val => $query->param("value$letter") || ''}; + $template->param( + pagination_bar => pagination_bar( + $base_url, int( $total / $resultsperpage ) + 1, + $startfrom, 'startfrom' + ), + total => $total, + from => $from, + to => $to, + ); + + unless (C4::Context->preference('OPACShowUnusedAuthorities')) { +# TODO implement usage counts +# my @usedauths = grep { $_->{used} > 0 } @$results; +# $results = \@usedauths; } - my @numbers = (); - - if ( $total > $resultsperpage ) { - for ( my $i = 1 ; $i < $total / $resultsperpage + 1 ; $i++ ) { - if ( $i < 16 ) { - my $highlight = 0; - ( $startfrom == ( $i - 1 ) ) && ( $highlight = 1 ); - push @numbers, - { - number => $i, - highlight => $highlight, - searchdata => \@field_data, - startfrom => ( $i - 1 ) - }; + # Opac search history + if (C4::Context->preference('EnableOpacSearchHistory')) { + if ( $startfrom == 1) { + my $path_info = $query->url(-path_info=>1); + my $query_cgi_history = $query->url(-query=>1); + $query_cgi_history =~ s/^$path_info\?//; + $query_cgi_history =~ s/;/&/g; + + unless ( $loggedinuser ) { + my $new_search = C4::Search::History::add_to_session({ + cgi => $query, + query_desc => $value[0], + query_cgi => $query_cgi_history, + total => $total, + type => "authority", + }); + } else { + # To the session (the user is logged in) + C4::Search::History::add({ + userid => $loggedinuser, + sessionid => $query->cookie("CGISESSID"), + query_desc => $value[0], + query_cgi => $query_cgi_history, + total => $total, + type => "authority", + }); } } } - my $from = $startfrom * $resultsperpage + 1; - my $to; - - if ( $total < ( ( $startfrom + 1 ) * $resultsperpage ) ) { - $to = $total; - } - else { - $to = ( ( $startfrom + 1 ) * $resultsperpage ); - } - $template->param( result => $results ) if $results; - $template->param( FIELDS => \@fields ); $template->param( orderby => $orderby ); $template->param( startfrom => $startfrom, - displaynext => $displaynext, - displayprev => $displayprev, resultsperpage => $resultsperpage, - startfromnext => $startfrom + 1, - startfromprev => $startfrom - 1, - searchdata => \@field_data, - total => $total, - from => $from, - to => $to, - numbers => \@numbers, + countfuzzy => !(C4::Context->preference('OPACShowUnusedAuthorities')), + resultcount => scalar @$results, authtypecode => $authtypecode, - authtypetext => $authtypes->{$authtypecode}{'authtypetext'}, + authtypetext => $authority_types->find($authtypecode)->authtypetext, isEDITORS => $authtypecode eq 'EDITORS', ); @@ -151,7 +166,7 @@ if ( $op eq "do_search" ) { else { ( $template, $loggedinuser, $cookie ) = get_template_and_user( { - template_name => "opac-authorities-home.tmpl", + template_name => "opac-authorities-home.tt", query => $query, type => 'opac', authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), @@ -161,7 +176,10 @@ else { } -$template->param( authtypesloop => \@authtypesloop ); +$template->param( + authority_types => $authority_types, + authtypecode => $authtypecode, +); # Print the page output_html_with_http_headers $query, $cookie, $template->output;