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: <?xml version='1.0' encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:marc="http://www.loc.gov/MARC21/slim" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes"/> <xsl:template match="marc:record"> <xsl:element name="div"> <xsl:attribute name="class"> <xsl:text>authority-summary</xsl:text> </xsl:attribute> <xsl:value-of select="marc:datafield[@tag='151']/marc:subfield[@code='a']"/> </xsl:element> </xsl:template> </xsl:stylesheet> Signed-off-by: David Nind <david@davidnind.com> Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de> Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
This commit is contained in:
parent
cd762ddcd2
commit
4978f3d562
5 changed files with 47 additions and 1 deletions
|
@ -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;
|
||||
|
|
|
@ -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');
|
||||
}
|
|
@ -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'),
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
Staff interface:
|
||||
Appearance:
|
||||
-
|
||||
- 'Display authority results in the staff interface using XSLT stylesheet at: '
|
||||
- pref: AuthorityXSLTResultsDisplay
|
||||
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 language selector on "
|
||||
- pref: StaffLangSelectorMode
|
||||
|
|
|
@ -57,7 +57,13 @@
|
|||
</tr>
|
||||
[% FOREACH resul IN result %]
|
||||
<tr data-authid="[% resul.authid | html %]">
|
||||
<td>[% PROCESS authresult summary=resul.summary authid=resul.authid %]</td>
|
||||
<td>
|
||||
[% IF resul.html %]
|
||||
[% resul.html | $raw %]
|
||||
[% ELSE %]
|
||||
[% PROCESS authresult summary=resul.summary authid=resul.authid %]
|
||||
[% END %]
|
||||
</td>
|
||||
<td>[% resul.authtype | html %]</td>
|
||||
[% UNLESS ( resul.isEDITORS ) %]
|
||||
<td>
|
||||
|
|
Loading…
Reference in a new issue