X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=opac%2Funapi;h=fb5ce0fcbdf7b0e96ab0da6337f40a9a9d91f49d;hb=6d3136c7e893011bd7cdfd0b6415d20929b6a66b;hp=912e5bdfa64b8c48c2eb2d1476d963ff1b1097cc;hpb=2fa1584940c64f5c1a7a66599152e7702e8c35e2;p=koha.git diff --git a/opac/unapi b/opac/unapi index 912e5bdfa6..fb5ce0fcbd 100755 --- a/opac/unapi +++ b/opac/unapi @@ -17,8 +17,7 @@ # You should have received a copy of the GNU General Public License # along with Koha; if not, see . -use strict; -use warnings; +use Modern::Perl; =head1 NAME @@ -40,8 +39,7 @@ an XML format such as OAI DC, RSS2, MARCXML, or MODS. use CGI qw ( -utf8 ); use C4::Context; use C4::Biblio; -use XML::LibXML; -use XML::LibXSLT; +use Koha::XSLT_Handler; my $cgi = CGI->new(); binmode(STDOUT, ":encoding(UTF-8)"); #output as utf8 @@ -130,26 +128,27 @@ if (not defined $format) { my $biblionumber = $1; my $content; - eval { - my $marcxml = GetXmlBiblio($biblionumber); - unless (defined $marcxml) { - # no bib, so 404 - print $cgi->header( -status => '404 record not found'); - exit 0; - } - - my $transformer = get_transformer($format, $format_to_stylesheet_map, $format_info); - unless (defined $transformer) { - print $cgi->header( -status => '406 invalid format requested' ); - exit 0; - } - my $parser = XML::LibXML->new(); - my $record_dom = $parser->parse_string( $marcxml ); - $record_dom = $transformer->transform( $record_dom ); - $content = $transformer->output_as_chars( $record_dom ); - }; - if ($@) { - print $cgi->header( -status => '500 internal error ' . $@->code() . ": " . $@->message() ); + + my $marcxml = GetXmlBiblio($biblionumber); + unless (defined $marcxml) { + # no bib, so 404 + print $cgi->header( -status => '404 record not found'); + exit 0; + } + + my $xslt_file = get_xslt_file( $format, $format_to_stylesheet_map, $format_info ); + unless( defined $xslt_file ) { + print $cgi->header( -status => '406 invalid format requested' ); + exit 0; + } + my $xslt_engine = Koha::XSLT_Handler->new; + $content = $xslt_engine->transform({ + xml => $marcxml, + file => $xslt_file, + }); + + if( !defined $content || $xslt_engine->err ) { + print $cgi->header( -status => '500 internal error' ); exit 0; } @@ -193,7 +192,7 @@ sub emit_formats { } -sub get_transformer { +sub get_xslt_file { my ($format, $format_to_stylesheet_map, $format_info) = @_; $format = lc $format; @@ -204,12 +203,7 @@ sub get_transformer { "/prog/en/xslt/" . $format_to_stylesheet_map->{$marcflavour}->{$format}; - my $parser = XML::LibXML->new(); - my $xslt = XML::LibXSLT->new(); - my $style_doc = $parser->parse_file( $xslt_file ); - my $stylesheet = $xslt->parse_stylesheet( $style_doc ); - - return $stylesheet; + return $xslt_file; } =head1 AUTHOR