View | Details | Raw Unified | Return to bug 13262
Collapse All | Expand All

(-)a/Koha/XSLT_Handler.pm (-3 / +13 lines)
Lines 132-139 __PACKAGE__->mk_accessors(qw( do_not_return_source print_warns )); Link Here
132
132
133
    my $output= $xslt_engine->transform( $xml, $xsltfilename );
133
    my $output= $xslt_engine->transform( $xml, $xsltfilename );
134
    #Alternatively:
134
    #Alternatively:
135
    #$output = $xslt_engine->transform({ xml => $xml, file => $file });
135
    #$output = $xslt_engine->transform({ xml => $xml, file => $file, [parameters => $parameters] });
136
    #$output = $xslt_engine->transform({ xml => $xml, code => $code });
136
    #$output = $xslt_engine->transform({ xml => $xml, code => $code, [parameters => $parameters] });
137
    if( $xslt_engine->err ) {
137
    if( $xslt_engine->err ) {
138
        #decide what to do on failure..
138
        #decide what to do on failure..
139
    }
139
    }
Lines 156-165 sub transform { Link Here
156
    #  old style: $xml, $filename
156
    #  old style: $xml, $filename
157
    #  new style: $hashref
157
    #  new style: $hashref
158
    my ( $xml, $filename, $xsltcode );
158
    my ( $xml, $filename, $xsltcode );
159
    my $parameters = {};
159
    if( ref $_[0] eq 'HASH' ) {
160
    if( ref $_[0] eq 'HASH' ) {
160
        $xml = $_[0]->{xml};
161
        $xml = $_[0]->{xml};
161
        $xsltcode = $_[0]->{code};
162
        $xsltcode = $_[0]->{code};
162
        $filename = $_[0]->{file} if !$xsltcode; #xsltcode gets priority
163
        $filename = $_[0]->{file} if !$xsltcode; #xsltcode gets priority
164
        $parameters = $_[0]->{parameters} if ref $_[0]->{parameters} eq 'HASH';
163
    } else {
165
    } else {
164
        ( $xml, $filename ) = @_;
166
        ( $xml, $filename ) = @_;
165
    }
167
    }
Lines 192-198 sub transform { Link Here
192
        return $retval;
194
        return $retval;
193
    }
195
    }
194
    my $str = eval {
196
    my $str = eval {
195
        my $result = $stsh->transform($source);
197
        #$parameters is an optional hashref that contains
198
        #key-value pairs to be sent to the XSLT.
199
        #Numbers may be bare but strings must be double quoted
200
        #(e.g. "'string'" or '"string"'). See XML::LibXSLT for
201
        #more details.
202
203
        #NOTE: Parameters are not cached. They are provided for
204
        #each different transform.
205
        my $result = $stsh->transform($source, %$parameters);
196
        $stsh->output_as_chars($result);
206
        $stsh->output_as_chars($result);
197
    };
207
    };
198
    if ($@) {
208
    if ($@) {
(-)a/t/db_dependent/XSLT_Handler.t (-1 / +24 lines)
Lines 21-27 use Modern::Perl; Link Here
21
21
22
use FindBin;
22
use FindBin;
23
use File::Slurp;
23
use File::Slurp;
24
use Test::More tests => 37;
24
use Test::More tests => 40;
25
use Test::Warn;
25
use Test::Warn;
26
26
27
use Koha::XSLT_Handler;
27
use Koha::XSLT_Handler;
Lines 156-159 $output= $engine->transform( $xml_2, $xsltfile_3 ); Link Here
156
is( $engine->err, undef, 'Unexpected error on transform with third xsl' );
156
is( $engine->err, undef, 'Unexpected error on transform with third xsl' );
157
is( $engine->refresh, 3, 'Final test on clearing cache' );
157
is( $engine->refresh, 3, 'Final test on clearing cache' );
158
158
159
my $xsltfile_4 = 'test04.xsl';
160
is( -e $path.$xsltfile_4, 1, "Found my test stylesheet $xsltfile_4" );
161
exit if !-e $path.$xsltfile_4;
162
$xsltfile_4 = $path.$xsltfile_4;
163
164
my $parameters = { injected_variable => "'this is a test'",};
165
$output = $engine->transform({
166
            xml => $xml_1,
167
            file => $xsltfile_4,
168
            parameters => $parameters,
169
        });
170
require XML::LibXML;
171
my $dom = XML::LibXML->load_xml(string => $output);
172
my $result = $dom->find( '/just_a_tagname' );
173
is ( $result->to_literal(), 'this is a test', "Successfully injected string into XSLT parameter/variable");
174
175
$output = $engine->transform({
176
            xml => $xml_1,
177
            file => $xsltfile_4,
178
        });
179
my $dom = XML::LibXML->load_xml(string => $output);
180
my $result = $dom->find( '/just_a_tagname' );
181
is ( $result->to_literal(), '', "As expected, no XSLT parameters/variables were added");
159
#End of tests
182
#End of tests
(-)a/t/db_dependent/XSLT_Handler/test04.xsl (-1 / +18 lines)
Line 0 Link Here
0
- 
1
<xsl:stylesheet version="1.0"
2
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3
    xmlns:marc="http://www.loc.gov/MARC21/slim"
4
>
5
  <xsl:output method="xml" encoding="UTF-8" version="1.0" indent="yes"/>
6
  <xsl:param name="injected_variable" />
7
8
  <xsl:template match="/">
9
      <xsl:apply-templates/>
10
  </xsl:template>
11
12
  <xsl:template match="node()">
13
    <xsl:copy>
14
   <xsl:value-of select="$injected_variable"/>
15
    </xsl:copy>
16
  </xsl:template>
17
18
</xsl:stylesheet>

Return to bug 13262