Bug 30036: Allow XSLT for authority results view in OPAC

This patch adds a syspref to allow customizing the authority results
view at OPAC with XSLT

Test plan:
1. For testing make sure to have at least one or more authorities
   defined
2. OPAC: Home > Authority search(Submit) > Authority search results
   Notice the normal view of results
3. Apply patch
4. INTRA: Home > Administration > System preferences ->find
   "AuthorityXSLTOpacResultsDisplay"
5. Write the path where your file is. You can use the one for intranet:
   .../koha/koha-tmpl/intranet-tmpl/prog/en/XSLT/UNIMARCauthResults.xsl
6. Save changes
7. Repeat step 2 and notice the xslt view of results

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
jeremy breuillard 2022-02-07 12:34:52 +01:00 committed by Tomas Cohen Arazi
parent 0ec29e5d4e
commit c593ffd8fb
No known key found for this signature in database
GPG Key ID: 0A272EA1B2F3C15F
5 changed files with 51 additions and 1 deletions

View File

@ -0,0 +1,15 @@
use Modern::Perl;
return {
bug_number => '30036',
description => 'Add syspref AuthorityXSLTOpacResultsDisplay',
up => sub {
my ($args) = @_;
my ($dbh, $out) = @$args{qw(dbh out)};
$dbh->do(q{
INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`)
VALUES ('AuthorityXSLTOpacResultsDisplay','','','Enable XSL stylesheet control over authority results page display on opac','Free')
});
},
};

View File

@ -70,6 +70,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `
('AuthorityMergeLimit','50',NULL,'Maximum number of biblio records updated immediately when an authority record has been modified.','integer'),
('AuthorityMergeMode','loose','loose|strict','Authority merge mode','Choice'),
('AuthoritySeparator','--','10','Used to separate a list of authorities in a display. Usually --','free'),
('AuthorityXSLTOpacResultsDisplay','','','Enable XSL stylesheet control over authority results page display on opac','Free'),
('AuthorityXSLTResultsDisplay','','','Enable XSL stylesheet control over authority results page display on intranet','Free'),
('AuthSuccessLog','0',NULL,'If enabled, log successful authentications','YesNo'),
('autoBarcode','OFF','incremental|annual|hbyymmincr|EAN13|OFF','Used to autogenerate a barcode: incremental will be of the form 1, 2, 3; annual of the form 2007-0001, 2007-0002; hbyymmincr of the form HB08010001 where HB=Home Branch','Choice'),

View File

@ -1,5 +1,10 @@
Staff interface:
Appearance:
-
- 'Display authority results in the opac interface using XSLT stylesheet at: '
- pref: AuthorityXSLTOpacResultsDisplay
class: file
- '<br />Options:<ul><li>Put a path to define a xslt file</li><li>Put an URL for an external specific stylesheet.</li></ul>{langcode} will be replaced with current interface language and {authtypecode} will be replaced by the authority type code'
-
- 'Display authority results in the staff interface using XSLT stylesheet at: '
- pref: AuthorityXSLTResultsDisplay

View File

@ -106,7 +106,13 @@
<tbody>
[% FOREACH resul IN result %]
<tr>
<td>[% PROCESS authresult summary=resul.summary %]</td>
<td>
[% IF resul.html %]
[% resul.html | $raw %]
[% ELSE %]
[% PROCESS authresult summary=resul.summary authid=resul.authid %]
[% END %]
</td>
<td><a href="/cgi-bin/koha/opac-authoritiesdetail.pl?authid=[% resul.authid | uri %]">Details</a>
<td>[% resul.authtype | html %]</td>
[% UNLESS ( resul.isEDITORS ) %]

View File

@ -28,6 +28,8 @@ use C4::Context;
use C4::Output qw( pagination_bar output_html_with_http_headers );
use C4::Koha;
use C4::Search::History;
use C4::Languages;
use Koha::XSLT::Base;
use Koha::Authority::Types;
use Koha::SearchEngine::Search;
@ -100,6 +102,27 @@ if ( $op eq "do_search" ) {
$to = $startfrom * $resultsperpage;
}
my $AuthorityXSLTOpacResultsDisplay = C4::Context->preference('AuthorityXSLTOpacResultsDisplay');
if ($results && $AuthorityXSLTOpacResultsDisplay) {
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 = $AuthorityXSLTOpacResultsDisplay;
$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(