X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=authorities%2Fauthorities-home.pl;h=89142f22d6c9250f1f41b9b02dd941528d14222b;hb=d9ce37ff3e7f351bdf3506e925b1333217743cea;hp=f67f5c9c40e17f68e36ab6f9353c15ffd9c1ddda;hpb=81ee945a580189e79a268f60d9e7638e92e85f26;p=koha.git diff --git a/authorities/authorities-home.pl b/authorities/authorities-home.pl index f67f5c9c40..89142f22d6 100755 --- a/authorities/authorities-home.pl +++ b/authorities/authorities-home.pl @@ -4,23 +4,23 @@ # # 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 URI::Escape; use C4::Auth; @@ -29,8 +29,14 @@ use C4::Auth; use C4::Output; use C4::AuthoritiesMarc; use C4::Acquisition; -use C4::Koha; # XXX subfield_is_koha_internal_p +use C4::Koha; use C4::Biblio; +use C4::Search::History; + +use Koha::Authority::Types; +use Koha::SearchEngine::Search; +use Koha::SearchEngine::QueryBuilder; +use Koha::Token; my $query = new CGI; my $dbh = C4::Context->dbh; @@ -40,27 +46,12 @@ my $authid = $query->param('authid') || ''; my ( $template, $loggedinuser, $cookie ); -my $authtypes = getauthtypes; -my @authtypesloop; -foreach my $thisauthtype ( - sort { - $authtypes->{$a}{'authtypetext'} cmp $authtypes->{$b}{'authtypetext'} - } - keys %$authtypes - ) -{ - my %row = ( - value => $thisauthtype, - selected => $thisauthtype eq $authtypecode, - authtypetext => $authtypes->{$thisauthtype}{'authtypetext'}, - ); - push @authtypesloop, \%row; -} +my $authority_types = Koha::Authority::Types->search( {}, { order_by => ['authtypetext'] } ); if ( $op eq "delete" ) { ( $template, $loggedinuser, $cookie ) = get_template_and_user( { - template_name => "authorities/authorities-home.tmpl", + template_name => "authorities/authorities-home.tt", query => $query, type => 'intranet', authnotrequired => 0, @@ -68,7 +59,13 @@ if ( $op eq "delete" ) { debug => 1, } ); - &DelAuthority( $authid, 1 ); + + die "Wrong CSRF token" unless Koha::Token->new->check_csrf({ + session_id => scalar $query->cookie('CGISESSID'), + token => scalar $query->param('csrf_token'), + }); + + DelAuthority({ authid => $authid }); if ( $query->param('operator') ) { # query contains search params so perform search @@ -89,17 +86,30 @@ if ( $op eq "do_search" ) { my $startfrom = $query->param('startfrom') || 1; my $resultsperpage = $query->param('resultsperpage') || 20; - my ( $results, $total ) = SearchAuthorities( - [$marclist], [$and_or], - [$excluding], [$operator], - [$value], ( $startfrom - 1 ) * $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 ); + #my ( $results, $total ) = SearchAuthorities( + # [$marclist], [$and_or], + # [$excluding], [$operator], + # [$value], ( $startfrom - 1 ) * $resultsperpage, + # $resultsperpage, $authtypecode, + # $orderby + #); + ( $template, $loggedinuser, $cookie ) = get_template_and_user( { - template_name => "authorities/searchresultlist.tmpl", + template_name => "authorities/searchresultlist.tt", query => $query, type => 'intranet', authnotrequired => 0, @@ -108,6 +118,31 @@ if ( $op eq "do_search" ) { } ); + $template->param( + csrf_token => Koha::Token->new->generate_csrf({ + session_id => scalar $query->cookie('CGISESSID'), + }), + ); + + # search history + if (C4::Context->preference('EnableSearchHistory')) { + 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; + + C4::Search::History::add({ + userid => $loggedinuser, + sessionid => $query->cookie("CGISESSID"), + query_desc => $value, + query_cgi => $query_cgi_history, + total => $total, + type => "authority", + }); + } + } + $template->param( marclist => $marclist, and_or => $and_or, @@ -125,7 +160,7 @@ if ( $op eq "do_search" ) { # next/previous would not work anymore # construction of the url of each page - my $value_url = uri_escape($value); + my $value_url = uri_escape_utf8($value); my $base_url = "authorities-home.pl?" ."marclist=$marclist" ."&and_or=$and_or" @@ -168,7 +203,7 @@ if ( $op eq "do_search" ) { if ( $op eq '' ) { ( $template, $loggedinuser, $cookie ) = get_template_and_user( { - template_name => "authorities/authorities-home.tmpl", + template_name => "authorities/authorities-home.tt", query => $query, type => 'intranet', authnotrequired => 0, @@ -179,8 +214,20 @@ if ( $op eq '' ) { } +my $schema = Koha::Database->new()->schema(); +my $servers = $schema->resultset('Z3950server')->search( + { + recordtype => 'authority', + servertype => ['zed', 'sru'], + }, + { result_class => 'DBIx::Class::ResultClass::HashRefInflator', + order_by => ['rank', 'servername'], + }, +); + $template->param( - authtypesloop => \@authtypesloop, + servers => $servers, + authority_types => $authority_types, op => $op, );