X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;ds=sidebyside;f=authorities%2Fauthorities-home.pl;h=2be064c1c21b26cb94c197836488bd48066e8004;hb=6b137e75b98b7a91c8900322d3fa062d48ff2fe5;hp=d499508eebbe294a7b2b03d48b1c50560e3468ac;hpb=afd2418d7387dc2a50835128e24840686600ef4b;p=koha-ffzg.git diff --git a/authorities/authorities-home.pl b/authorities/authorities-home.pl index d499508eeb..2be064c1c2 100755 --- a/authorities/authorities-home.pl +++ b/authorities/authorities-home.pl @@ -4,36 +4,40 @@ # # 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 URI::Escape; -use C4::Auth; +use CGI qw ( -utf8 ); +use URI::Escape qw( uri_escape_utf8 ); +use POSIX qw( ceil ); use C4::Context; -use C4::Auth; -use C4::Output; -use C4::AuthoritiesMarc; -use C4::Acquisition; -use C4::Koha; # XXX subfield_is_koha_internal_p -use C4::Biblio; +use C4::Auth qw( get_template_and_user ); +use C4::Output qw( output_and_exit pagination_bar output_html_with_http_headers ); +use C4::AuthoritiesMarc qw( DelAuthority ); use C4::Search::History; +use C4::Languages; -my $query = new CGI; +use Koha::Authority::Types; +use Koha::SearchEngine::Search; +use Koha::SearchEngine::QueryBuilder; +use Koha::Token; +use Koha::XSLT::Base; +use Koha::Z3950Servers; + +my $query = CGI->new; my $dbh = C4::Context->dbh; my $op = $query->param('op') || ''; my $authtypecode = $query->param('authtypecode') || ''; @@ -41,22 +45,7 @@ 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( @@ -64,12 +53,17 @@ if ( $op eq "delete" ) { template_name => "authorities/authorities-home.tt", query => $query, type => 'intranet', - authnotrequired => 0, flagsrequired => { catalogue => 1 }, - debug => 1, } ); - &DelAuthority( $authid, 1 ); + + output_and_exit( $query, $cookie, $template, '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,27 +83,36 @@ 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 $offset = ( $startfrom - 1 ) * $resultsperpage + 1; + + 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 ( $results, $total ) = $searcher->search_auth_compat( + $search_query, $offset, $resultsperpage ); - ( $template, $loggedinuser, $cookie ) = get_template_and_user( { template_name => "authorities/searchresultlist.tt", query => $query, type => 'intranet', - authnotrequired => 0, flagsrequired => { catalogue => 1 }, - debug => 1, } ); + $template->param( search_query => $search_query ) if C4::Context->preference('DumpSearchQueryTemplate'); + $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) { @@ -146,7 +149,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" @@ -172,17 +175,44 @@ if ( $op eq "do_search" ) { $to = $startfrom * $resultsperpage; } + my $AuthorityXSLTResultsDisplay = C4::Context->preference('AuthorityXSLTResultsDisplay'); + if ($results && $AuthorityXSLTResultsDisplay) { + my $lang = C4::Languages::getlanguage(); + foreach my $result (@$results) { + my $authority = Koha::Authorities->find($result->{authid}); + next unless $authority; + + my $authtypecode = $authority->authtypecode; + my $xsl = $AuthorityXSLTResultsDisplay; + $xsl =~ s/\{langcode\}/$lang/g; + $xsl =~ s/\{authtypecode\}/$authtypecode/g; + + my $xslt_engine = Koha::XSLT::Base->new; + my $output = $xslt_engine->transform({ xml => $authority->marcxml, file => $xsl }); + if ($xslt_engine->err) { + warn "XSL transformation failed ($xsl): " . $xslt_engine->err; + next; + } + + $result->{html} = $output; + } + } + $template->param( result => $results ) if $results; + my $max_result_window = $searcher->max_result_window; + my $hits_to_paginate = ($max_result_window && $max_result_window < $total) ? $max_result_window : $total; + $template->param( pagination_bar => pagination_bar( - $base_url, int( $total / $resultsperpage ) + 1, + $base_url, ceil( $hits_to_paginate / $resultsperpage ), $startfrom, 'startfrom' ), - total => $total, - from => $from, - to => $to, - isEDITORS => $authtypecode eq 'EDITORS', + total => $total, + hits_to_paginate => $hits_to_paginate, + from => $from, + to => $to, + isEDITORS => $authtypecode eq 'EDITORS', ); } @@ -192,16 +222,22 @@ if ( $op eq '' ) { template_name => "authorities/authorities-home.tt", query => $query, type => 'intranet', - authnotrequired => 0, flagsrequired => { catalogue => 1 }, - debug => 1, } ); } +my $servers = Koha::Z3950Servers->search( + { + recordtype => 'authority', + servertype => ['zed', 'sru'], + }, +); + $template->param( - authtypesloop => \@authtypesloop, + servers => $servers, + authority_types => $authority_types, op => $op, );