#
# 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 <http://www.gnu.org/licenses>.
-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') || '';
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.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
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) {
# 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"
$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',
);
}
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,
);