From b63d96612bc391dde655cda8dd7c533501a65f18 Mon Sep 17 00:00:00 2001 From: jeremy breuillard Date: Fri, 15 Apr 2022 16:51:14 +0200 Subject: [PATCH] Bug 30554: Use XSLT (if enabled) in authority search cataloguing plugin MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Test plan: 1. Set AuthorityXSLTResultsDisplay to a valid XSL file (see bug 30554 attachments, there is an example XSL file) 2. Go to the bibliographic record editor (edit an existing one or create a new one) 3. Find a field linked to authorities and open the plugin 4. Start a search and verify that the results are displayed using the XSLT output (if using the example file it should be a link saying "Authority #") Sponsored-by: Écoles nationales supérieure d'architecture (ENSA) Signed-off-by: David Nind Signed-off-by: Martin Renvoize Signed-off-by: Katrin Fischer (cherry picked from commit 01e2a6d983c272120ec0579536e23eed2b046a62) Signed-off-by: Fridolin Somers --- authorities/auth_finder.pl | 26 +++++++++++++++++++ .../authorities/searchresultlist-auth.tt | 8 +++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/authorities/auth_finder.pl b/authorities/auth_finder.pl index c4e3a74664..1603fbbc31 100755 --- a/authorities/auth_finder.pl +++ b/authorities/auth_finder.pl @@ -23,10 +23,13 @@ use CGI qw ( -utf8 ); use C4::Output qw( output_html_with_http_headers ); use C4::Auth qw( get_template_and_user ); use C4::Context; +use C4::Languages; use Koha::SearchEngine::Search; use Koha::SearchEngine::QueryBuilder; use Koha::Authority::Types; +use Koha::Authorities; +use Koha::XSLT::Base; my $query = CGI->new; my $op = $query->param('op') || ''; @@ -132,6 +135,29 @@ if ( $op eq "do_search" ) { $to = ( ( $startfrom + 1 ) * $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; $template->param( orderby => $orderby, diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist-auth.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist-auth.tt index 7987f0dbcd..3becbd9760 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist-auth.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist-auth.tt @@ -71,7 +71,13 @@ [% FOREACH resul IN result %] - [% PROCESS authresult summary=resul.summary authid=resul.authid auth_preview=1 %] + + [% IF resul.html %] + [% resul.html | $raw %] + [% ELSE %] + [% PROCESS authresult summary=resul.summary authid=resul.authid auth_preview=1 %] + [% END %] + [% resul.summary.label | html %] [% IF resul.used > 0 %] -- 2.39.5