From cec6da37f654f23f5b5a451b95e0dc55e77b6360 Mon Sep 17 00:00:00 2001 From: Julian Maurice Date: Wed, 2 Jun 2021 14:20:34 +0200 Subject: [PATCH] Bug 11083: Add ability to generate authority summary using XSLT This patch only affects authority search results in the staff interface. It adds a new system preference AuthorityXSLTResultsDisplay. If set, each authority search result MARCXML will be transformed using the XSLT at the given filename or URL. The output will be displayed in place of the default summary. If errors occur, the XSLT is ignored and the default summary is displayed. The syspref value can contain {langcode} and {authtypecode} which will be replaced by the appropriate value (resp. current language and authority type code) Test plan: 1. Apply patch and run updatedatabase 2. Verify that authority search results are not affected yet. 3. Create an XSLT file (for instance in /home/koha/xslt/en/GEOGR_NAME.xsl) 4. Set AuthorityXSLTResultsDisplay syspref value to /home/koha/xslt/{langcode}/{authtypecode}.xsl 5. Do an authority search that returns GEOGR_NAME results. Verify that the summary matches what you expect from your XSLT 6. Do an authority search that returns authorities of other types. Verify that the default summary is displayed. Example of a minimal XSLT: authority-summary Signed-off-by: David Nind --- authorities/authorities-home.pl | 25 +++++++++++++++++++ ...d-syspref-AuthorityXSLTResultsDisplay.perl | 9 +++++++ installer/data/mysql/mandatory/sysprefs.sql | 1 + .../admin/preferences/staff_interface.pref | 5 ++++ .../modules/authorities/searchresultlist.tt | 8 +++++- 5 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 installer/data/mysql/atomicupdate/add-syspref-AuthorityXSLTResultsDisplay.perl diff --git a/authorities/authorities-home.pl b/authorities/authorities-home.pl index d46f68d79a..2be064c1c2 100755 --- a/authorities/authorities-home.pl +++ b/authorities/authorities-home.pl @@ -28,11 +28,13 @@ 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; 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; @@ -173,6 +175,29 @@ 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; diff --git a/installer/data/mysql/atomicupdate/add-syspref-AuthorityXSLTResultsDisplay.perl b/installer/data/mysql/atomicupdate/add-syspref-AuthorityXSLTResultsDisplay.perl new file mode 100644 index 0000000000..728aee12af --- /dev/null +++ b/installer/data/mysql/atomicupdate/add-syspref-AuthorityXSLTResultsDisplay.perl @@ -0,0 +1,9 @@ +$DBversion = 'XXX'; +if (CheckVersion($DBversion)) { + $dbh->do(q{ + INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`) VALUES + ('AuthorityXSLTResultsDisplay','','','Enable XSL stylesheet control over authority results page display on intranet','Free') + }); + + NewVersion($DBversion, '11083', 'Add syspref AuthorityXSLTResultsDisplay'); +} diff --git a/installer/data/mysql/mandatory/sysprefs.sql b/installer/data/mysql/mandatory/sysprefs.sql index dd83a00fd8..68c253b3f6 100644 --- a/installer/data/mysql/mandatory/sysprefs.sql +++ b/installer/data/mysql/mandatory/sysprefs.sql @@ -69,6 +69,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'), +('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'), ('AutoCreateAuthorities','0',NULL,'Automatically create authorities that do not exist when cataloging records.','YesNo'), diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/staff_interface.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/staff_interface.pref index 10c41c581d..d840cfaa16 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/staff_interface.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/staff_interface.pref @@ -1,5 +1,10 @@ Staff interface: Appearance: + - + - 'Display authority results in the staff interface using XSLT stylesheet at: ' + - pref: AuthorityXSLTResultsDisplay + class: file + - '
Options:{langcode} will be replaced with current interface language and {authtypecode} will be replaced by the authority type code' - - "Display language selector on " - pref: StaffLangSelectorMode diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist.tt index 3baec6db23..60092cff9d 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist.tt @@ -55,7 +55,13 @@ [% FOREACH resul IN result %] - [% PROCESS authresult summary=resul.summary authid=resul.authid %] + + [% IF resul.html %] + [% resul.html | $raw %] + [% ELSE %] + [% PROCESS authresult summary=resul.summary authid=resul.authid %] + [% END %] + [% resul.authtype | html %] [% UNLESS ( resul.isEDITORS ) %] -- 2.30.2