Bug 30554: Use XSLT (if enabled) in authority search cataloguing plugin

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 #<authid>")

Sponsored-by: Écoles nationales supérieure d'architecture (ENSA)
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
(cherry picked from commit 01e2a6d983)
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
This commit is contained in:
jeremy breuillard 2022-04-15 16:51:14 +02:00 committed by Fridolin Somers
parent 35c3ff27b7
commit b63d96612b
2 changed files with 33 additions and 1 deletions

View file

@ -23,10 +23,13 @@ use CGI qw ( -utf8 );
use C4::Output qw( output_html_with_http_headers ); use C4::Output qw( output_html_with_http_headers );
use C4::Auth qw( get_template_and_user ); use C4::Auth qw( get_template_and_user );
use C4::Context; use C4::Context;
use C4::Languages;
use Koha::SearchEngine::Search; use Koha::SearchEngine::Search;
use Koha::SearchEngine::QueryBuilder; use Koha::SearchEngine::QueryBuilder;
use Koha::Authority::Types; use Koha::Authority::Types;
use Koha::Authorities;
use Koha::XSLT::Base;
my $query = CGI->new; my $query = CGI->new;
my $op = $query->param('op') || ''; my $op = $query->param('op') || '';
@ -132,6 +135,29 @@ if ( $op eq "do_search" ) {
$to = ( ( $startfrom + 1 ) * $resultsperpage ); $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( result => $results ) if $results;
$template->param( $template->param(
orderby => $orderby, orderby => $orderby,

View file

@ -71,7 +71,13 @@
</tr> </tr>
[% FOREACH resul IN result %] [% FOREACH resul IN result %]
<tr> <tr>
<td>[% PROCESS authresult summary=resul.summary authid=resul.authid auth_preview=1 %]</td> <td>
[% IF resul.html %]
[% resul.html | $raw %]
[% ELSE %]
[% PROCESS authresult summary=resul.summary authid=resul.authid auth_preview=1 %]
[% END %]
</td>
<td>[% resul.summary.label | html %]</td> <td>[% resul.summary.label | html %]</td>
<td> <td>
[% IF resul.used > 0 %] [% IF resul.used > 0 %]