@@ -, +, @@ --- Koha/XSLT_Handler.pm | 14 +++++++++++--- t/db_dependent/XSLT_Handler.t | 13 ++++++++++++- t/db_dependent/XSLT_Handler/test04.xsl | 18 ++++++++++++++++++ 3 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 t/db_dependent/XSLT_Handler/test04.xsl --- a/Koha/XSLT_Handler.pm +++ a/Koha/XSLT_Handler.pm @@ -128,7 +128,7 @@ __PACKAGE__->mk_accessors(qw( do_not_return_source print_warns )); =head2 transform - my $output= $xslt_engine->transform( $xml, $xsltfilename ); + my $output= $xslt_engine->transform( $xml, $xsltfilename, [$parameters] ); if( $xslt_engine->err ) { #decide what to do on failure.. } @@ -144,7 +144,7 @@ __PACKAGE__->mk_accessors(qw( do_not_return_source print_warns )); =cut sub transform { - my ( $self, $orgxml, $file ) = @_; + my ( $self, $orgxml, $file, $parameters ) = @_; #Initialized yet? if ( !$self->{xslt_hash} ) { @@ -182,7 +182,15 @@ sub transform { return $retval; } my $str = eval { - my $result = $stsh->transform($source); + #$parameters is an optional hashref that contains + #key-value pairs to be sent to the XSLT. + #Numbers may be bare but strings must be double quoted + #(e.g. "'string'" or '"string"'). See XML::LibXSLT for + #more details. + + #NOTE: Parameters are not cached. They are provided for + #each different transform. + my $result = $stsh->transform($source, %$parameters); $stsh->output_as_chars($result); }; if ($@) { --- a/t/db_dependent/XSLT_Handler.t +++ a/t/db_dependent/XSLT_Handler.t @@ -20,7 +20,7 @@ use Modern::Perl; use FindBin; -use Test::More tests => 24; +use Test::More tests => 26; use Koha::XSLT_Handler; @@ -116,4 +116,15 @@ $output= $engine->transform( $xml_2, $xsltfile_3 ); is( $engine->err, undef, 'Unexpected error on transform with third xsl' ); is( $engine->refresh, 2, 'Final test on clearing cache' ); +my $xsltfile_4 = 'test04.xsl'; +is( -e $path.$xsltfile_4, 1, "Found my test stylesheet $xsltfile_4" ); +exit if !-e $path.$xsltfile_4; +$xsltfile_4 = $path.$xsltfile_4; +my $parameters = { injected_variable => "'this is a test'",}; +$output = $engine->transform($xml_1, $xsltfile_4, $parameters); +require XML::LibXML; +my $dom = XML::LibXML->load_xml(string => $output); +my $result = $dom->find( '/just_a_tagname' ); +is ( $result, 'this is a test', "Successfully injected string into XSLT parameter/variable"); + #End of tests --- a/t/db_dependent/XSLT_Handler/test04.xsl +++ a/t/db_dependent/XSLT_Handler/test04.xsl @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + --