X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=authorities%2Fauth_finder.pl;h=e78a7d8d4126c10c77ef75fe9d99fe1396065d9f;hb=a7df1f9f8eb9ed16246964d94dd8a69b756b6551;hp=932886b2e02d5468981d60bb204957161acc8280;hpb=ba6c8485ca7afdaaace20d021591ac532de55b3a;p=koha.git diff --git a/authorities/auth_finder.pl b/authorities/auth_finder.pl index 932886b2e0..e78a7d8d41 100755 --- a/authorities/auth_finder.pl +++ b/authorities/auth_finder.pl @@ -5,85 +5,84 @@ # # 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 CGI; +use CGI qw ( -utf8 ); use C4::Output; use C4::Auth; use C4::Context; -use C4::AuthoritiesMarc; use C4::Acquisition; -use C4::Koha; # XXX subfield_is_koha_internal_p +use C4::Koha; +use Koha::SearchEngine::Search; +use Koha::SearchEngine::QueryBuilder; -my $query = new CGI; -my $op = $query->param('op'); -my $authtypecode = $query->param('authtypecode'); -my $index = $query->param('index'); -my $tagid = $query->param('tagid'); -my $resultstring = $query->param('result'); -my $dbh = C4::Context->dbh; - -my $startfrom = $query->param('startfrom'); -$startfrom = 0 if ( !defined $startfrom ); -my ( $template, $loggedinuser, $cookie ); -my $resultsperpage; - -my $authtypes = getauthtypes; -my @authtypesloop; -foreach my $thisauthtype ( keys %$authtypes ) { - my %row = ( - value => $thisauthtype, - selected => ($thisauthtype eq $authtypecode), - authtypetext => $authtypes->{$thisauthtype}{'authtypetext'}, - index => $index, - ); - push @authtypesloop, \%row; -} +use Koha::Authority::Types; -$op ||= q{}; -if ( $op eq "do_search" ) { - my @marclist = $query->param('marclist'); - my @and_or = $query->param('and_or'); - my @excluding = $query->param('excluding'); - my @operator = $query->param('operator'); - my @value = ($query->param('value_mainstr')||undef, $query->param('value_main')||undef, $query->param('value_any')||undef, $query->param('value_match')||undef); - my $orderby = $query->param('orderby'); +my $query = new CGI; +my $op = $query->param('op') || ''; +my $authtypecode = $query->param('authtypecode') || ''; +my $index = $query->param('index') || ''; +my $tagid = $query->param('tagid') || ''; +my $source = $query->param('source') || ''; +my $relationship = $query->param('relationship') || ''; + +my ( $template, $loggedinuser, $cookie ) = get_template_and_user( + { + template_name => ( $op eq 'do_search' ) + ? 'authorities/searchresultlist-auth.tt' + : 'authorities/auth_finder.tt', + query => $query, + type => 'intranet', + authnotrequired => 0, + flagsrequired => { catalogue => 1 }, + } +); - $resultsperpage = $query->param('resultsperpage'); - $resultsperpage = 20 if ( !defined $resultsperpage ); +my $authority_types = Koha::Authority::Types->search( {}, { order_by => ['authtypetext'] } ); +# If search form posted +if ( $op eq "do_search" ) { + 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 @value = ( + $query->param('value_mainstr') || undef, + $query->param('value_main') || undef, + $query->param('value_match') || undef, + $query->param('value_any') || undef, + ); + my $orderby = $query->param('orderby') || ''; + my $startfrom = $query->param('startfrom') || 0; + my $resultsperpage = $query->param('resultsperpage') || 20; + + 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 * $resultsperpage; my ( $results, $total ) = - SearchAuthorities( \@marclist, \@and_or, \@excluding, \@operator, \@value, - $startfrom * $resultsperpage, - $resultsperpage, $authtypecode, $orderby); - - # If an authority heading is repeated, add an arrayref to those repetions - # First heading -- Second heading - for my $heading ( @$results ) { - my @repets = split / -- /, $heading->{summary}; - if ( @repets > 1 ) { - my @repets_loop; - for (my $i = 0; $i < @repets; $i++) { - push @repets_loop, - { index => $index, repet => $i+1, value => $repets[$i] }; - } - $heading->{repets} = \@repets_loop; - } - } + $searcher->search_auth_compat( $search_query, $offset, + $resultsperpage ); + # multi page display gestion my $displaynext = 0; my $displayprev = $startfrom; @@ -93,9 +92,8 @@ if ( $op eq "do_search" ) { my @field_data = (); - my @marclist_ini = - $query->param('marclist') - ; # get marclist again, as the previous one has been modified by catalogsearch (mainentry replaced by field name +# get marclist again, as the previous one has been modified by catalogsearch (mainentry replaced by field name) + my @marclist_ini = $query->multi_param('marclist'); for ( my $i = 0 ; $i <= $#marclist ; $i++ ) { push @field_data, { term => "marclist", val => $marclist_ini[$i] }; push @field_data, { term => "and_or", val => $and_or[$i] }; @@ -103,13 +101,16 @@ if ( $op eq "do_search" ) { push @field_data, { term => "operator", val => $operator[$i] }; } - push @field_data, { term => "value_mainstr", val => $query->param('value_mainstr') || "" }; - push @field_data, { term => "value_main", val => $query->param('value_main') || "" }; - push @field_data, { term => "value_any", val => $query->param('value_any') || ""}; - push @field_data, { term => "value_match", val => $query->param('value_match') || ""}; + push @field_data, + { term => "value_mainstr", val => scalar $query->param('value_mainstr') || "" }; + push @field_data, + { term => "value_main", val => scalar $query->param('value_main') || "" }; + push @field_data, + { term => "value_any", val => scalar $query->param('value_any') || "" }; + push @field_data, + { term => "value_match", val => scalar $query->param('value_match') || "" }; my @numbers = (); - if ( $total > $resultsperpage ) { for ( my $i = 1 ; $i < $total / $resultsperpage + 1 ; $i++ ) { if ( $i < 16 ) { @@ -128,68 +129,54 @@ if ( $op eq "do_search" ) { my $from = $startfrom * $resultsperpage + 1; my $to; - if ( $total < ( ( $startfrom + 1 ) * $resultsperpage ) ) { $to = $total; } else { $to = ( ( $startfrom + 1 ) * $resultsperpage ); } - ( $template, $loggedinuser, $cookie ) = get_template_and_user( - { - template_name => "authorities/searchresultlist-auth.tmpl", - query => $query, - type => 'intranet', - authnotrequired => 0, - flagsrequired => { catalogue => 1 }, - } - ); $template->param( result => $results ) if $results; $template->param( - orderby => $orderby, - 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, - authtypecode => $authtypecode, - value_mainstr => $query->param('value_mainstr') || "", - value_main => $query->param('value_main') || "", - value_any => $query->param('value_any') || "", - value_match => $query->param('value_match') || "", - ); -} else { - ( $template, $loggedinuser, $cookie ) = get_template_and_user( - { - template_name => "authorities/auth_finder.tmpl", - query => $query, - type => 'intranet', - authnotrequired => 0, - flagsrequired => { catalogue => 1 }, - } + orderby => $orderby, + 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, + operator_mainstr => ( @operator > 0 && $operator[0] ) + ? $operator[0] + : '', + operator_main => ( @operator > 1 && $operator[1] ) ? $operator[1] : '', + operator_any => ( @operator > 2 && $operator[2] ) ? $operator[2] : '', + operator_match => ( @operator > 3 && $operator[3] ) ? $operator[3] : '', ); +} +else { - $template->param( - resultstring => $resultstring, - ); + # special case for UNIMARC field 210c builder + my $resultstring = $query->param('result') || ''; + $template->param( resultstring => $resultstring, ); } $template->param( - value_mainstr => $query->param('value_mainstr') || "", - value_main => $query->param('value_main') || "", - value_any => $query->param('value_any') || "", - value_match => $query->param('value_match') || "", + op => $op, + value_mainstr => scalar $query->param('value_mainstr') || '', + value_main => scalar $query->param('value_main') || '', + value_any => scalar $query->param('value_any') || '', + value_match => scalar $query->param('value_match') || '', tagid => $tagid, index => $index, - authtypesloop => \@authtypesloop, + authority_types => $authority_types, authtypecode => $authtypecode, + source => $source, + relationship => $relationship, ); # Print the page