From 4978f3d562a6eae2c4aa032bca7089e0a4ac8770 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 Signed-off-by: Katrin Fischer Signed-off-by: Fridolin Somers --- 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 9a4cdbf72f..d6c978edc1 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:
  • Put a path to define a xslt file
  • Put an URL for an external specific stylesheet.
{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 e5de11f17c..466b54779c 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist.tt @@ -57,7 +57,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.39.5