Bugzilla – Attachment 26020 Details for
Bug 11915
Extending the use of Koha/XSLT_Handler
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 11915: Using the XSLT handler in C4/XSLT module
Bug-11915-Using-the-XSLT-handler-in-C4XSLT-module.patch (text/plain), 7.54 KB, created by
Marcel de Rooy
on 2014-03-10 15:28:24 UTC
(
hide
)
Description:
Bug 11915: Using the XSLT handler in C4/XSLT module
Filename:
MIME Type:
Creator:
Marcel de Rooy
Created:
2014-03-10 15:28:24 UTC
Size:
7.54 KB
patch
obsolete
>From dc1eb795412f54e7466b571f206931f91b0b45ba Mon Sep 17 00:00:00 2001 >From: Marcel de Rooy <m.de.rooy@rijksmuseum.nl> >Date: Mon, 10 Mar 2014 10:57:33 +0100 >Subject: [PATCH] Bug 11915: Using the XSLT handler in C4/XSLT module >Content-Type: text/plain; charset=utf-8 > >Incorporate the new object into C4/XSLT module. >The handler object needed one adjustment to allow for passing URLs. >Removed the GetURI function; it is no longer needed. >Added some documentation lines. >Moved a file-level lexical upwards in the code for visibility. >Removed some tabs (on two lines). > >Note: The handler could perhaps be moved up to the Context module, or be saved >in a global ('our') variable. But I would rather not do that now, making >testing not too complex at this moment. > >Test plan: >Enable XSLT preferences for opac and intranet. >Check result and detail pages. >Check individual list display (virtual shelves). >Force an XSLT error by editing one of your xsl files. Check the >corresponding display. >Put an URL in one the XSLT prefs (could just be to your own server). >Check the display. > >Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl> >Running XSLTParse4Display in a loop showed no significant performance change. >One pass cost me around 0.012 sec (except for the first pass). >--- > C4/XSLT.pm | 99 ++++++++++++++++++++++++-------------------------- > Koha/XSLT_Handler.pm | 3 +- > 2 files changed, 50 insertions(+), 52 deletions(-) > >diff --git a/C4/XSLT.pm b/C4/XSLT.pm >index d85b048..ba255dc 100644 >--- a/C4/XSLT.pm >+++ b/C4/XSLT.pm >@@ -1,4 +1,5 @@ > package C4::XSLT; >+ > # Copyright (C) 2006 LibLime > # <jmf at liblime dot com> > # Parts Copyright Katrin Fischer 2011 >@@ -9,7 +10,7 @@ package C4::XSLT; > # > # Koha is free software; you can redistribute it and/or modify it under the > # terms of the GNU General Public License as published by the Free Software >-# Foundation; either version 2 of the License, or (at your option) any later >+# Foundation; either version 3 of the License, or (at your option) any later > # version. > # > # Koha is distributed in the hope that it will be useful, but WITHOUT ANY >@@ -30,21 +31,25 @@ use C4::Koha; > use C4::Biblio; > use C4::Circulation; > use C4::Reserves; >+use Koha::XSLT_Handler; >+ > use Encode; >-use XML::LibXML; >-use XML::LibXSLT; >-use LWP::Simple; > > use vars qw($VERSION @ISA @EXPORT); > >+my $engine; #XSLT Handler object >+my %authval_per_framework; >+ # Cache for tagfield-tagsubfield to decode per framework. >+ # Should be preferably be placed in Koha-core... >+ > BEGIN { > require Exporter; > $VERSION = 3.07.00.049; > @ISA = qw(Exporter); > @EXPORT = qw( > &XSLTParse4Display >- &GetURI > ); >+ $engine=Koha::XSLT_Handler->new( { do_not_return_source => 1 } ); > } > > =head1 NAME >@@ -53,22 +58,10 @@ C4::XSLT - Functions for displaying XSLT-generated content > > =head1 FUNCTIONS > >-=head2 GetURI >- >-GetURI file and returns the xslt as a string >- >-=cut >- >-sub GetURI { >- my ($uri) = @_; >- my $string; >- $string = get $uri ; >- return $string; >-} >- > =head2 transformMARCXML4XSLT > > Replaces codes with authorized values in a MARC::Record object >+Is only used in this module currently. > > =cut > >@@ -108,13 +101,10 @@ sub transformMARCXML4XSLT { > =head2 getAuthorisedValues4MARCSubfields > > Returns a ref of hash of ref of hash for tag -> letter controled by authorised values >+Is only used in this module currently. > > =cut > >-# Cache for tagfield-tagsubfield to decode per framework. >-# Should be preferably be placed in Koha-core... >-my %authval_per_framework; >- > sub getAuthorisedValues4MARCSubfields { > my ($frameworkcode) = @_; > unless ( $authval_per_framework{ $frameworkcode } ) { >@@ -134,7 +124,17 @@ sub getAuthorisedValues4MARCSubfields { > return $authval_per_framework{ $frameworkcode }; > } > >-my $stylesheet; >+=head2 XSLTParse4Display >+ >+Returns xml for biblionumber and requested XSLT transformation. >+Returns undef if the transform fails. >+ >+Used in OPAC results and detail, intranet results and detail, list display. >+(Depending on the settings of your XSLT preferences.) >+ >+The helper function _get_best_default_xslt_filename is used in a unit test. >+ >+=cut > > sub _get_best_default_xslt_filename { > my ($htdocs, $theme, $lang, $base_xslfile) = @_; >@@ -195,7 +195,6 @@ sub XSLTParse4Display { > > # grab the XML, run it through our stylesheet, push it out to the browser > my $record = transformMARCXML4XSLT($biblionumber, $orig_record); >- #return $record->as_formatted(); > my $itemsxml = buildKohaItemsNamespace($biblionumber, $hidden_items); > my $xmlrecord = $record->as_xml(C4::Context->preference('marcflavour')); > my $sysxml = "<sysprefs>\n"; >@@ -221,27 +220,19 @@ sub XSLTParse4Display { > $xmlrecord =~ s/\& /\&\; /; > $xmlrecord =~ s/\&\;amp\; /\&\; /; > >- my $parser = XML::LibXML->new(); >- # don't die when you find &, >, etc >- $parser->recover_silently(0); >- my $source = $parser->parse_string($xmlrecord); >- unless ( $stylesheet->{$xslfilename} ) { >- my $xslt = XML::LibXSLT->new(); >- my $style_doc; >- if ( $xslfilename =~ /^https?:\/\// ) { >- my $xsltstring = GetURI($xslfilename); >- $style_doc = $parser->parse_string($xsltstring); >- } else { >- use Cwd; >- $style_doc = $parser->parse_file($xslfilename); >- } >- $stylesheet->{$xslfilename} = $xslt->parse_stylesheet($style_doc); >- } >- my $results = $stylesheet->{$xslfilename}->transform($source); >- my $newxmlrecord = $stylesheet->{$xslfilename}->output_string($results); >- return $newxmlrecord; >+ #If the xslt should fail, we will return undef (old behavior was >+ #raw MARC) >+ #Note that we did set do_not_return_source at object construction >+ return $engine->transform($xmlrecord, $xslfilename ); #file or URL > } > >+=head2 buildKohaItemsNamespace >+ >+Returns XML for items. >+Is only used in this module currently. >+ >+=cut >+ > sub buildKohaItemsNamespace { > my ($biblionumber, $hidden_items) = @_; > >@@ -304,26 +295,32 @@ sub buildKohaItemsNamespace { > "<holdingbranch>$holdingbranch</holdingbranch>". > "<location>$location</location>". > "<ccode>$ccode</ccode>". >- "<status>$status</status>". >- "<itemcallnumber>".$itemcallnumber."</itemcallnumber>" >- . "</item>"; >- >+ "<status>$status</status>". >+ "<itemcallnumber>".$itemcallnumber."</itemcallnumber>". >+ "</item>"; > } > $xml = "<items xmlns=\"http://www.koha-community.org/items\">".$xml."</items>"; > return $xml; > } > >+=head2 engine > >+Returns reference to XSLT handler object. > >-1; >-__END__ >+=cut > >-=head1 NOTES >+sub engine { >+ return $engine; >+} > >-=cut >+1; >+ >+__END__ > > =head1 AUTHOR > > Joshua Ferraro <jmf@liblime.com> > >+Koha Development Team <http://koha-community.org/> >+ > =cut >diff --git a/Koha/XSLT_Handler.pm b/Koha/XSLT_Handler.pm >index 26f9264..c406bdf 100644 >--- a/Koha/XSLT_Handler.pm >+++ b/Koha/XSLT_Handler.pm >@@ -131,6 +131,7 @@ __PACKAGE__->mk_accessors(qw( do_not_return_source )); > my $output2= $xslt_engine->transform( $xml2 ); > > Pass a xml string and a fully qualified path of a XSLT file. >+ Instead of a filename, you may also pass a URL. > If you do not pass a filename, the last file used is assumed. > Returns the transformed string. > Check the error number in err to know if something went wrong. >@@ -240,7 +241,7 @@ sub _init { > sub _load { > my ($self, $file)= @_; > >- if( !$file || !-e $file ) { >+ if( !$file || ( $file!~ /^https?:\/\// && !-e $file ) ) { > $self->_set_error(2); > return; > } >-- >1.7.7.6
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 11915
:
26020
|
26021