@@ -, +, @@ --- Koha/OAI/Server/Record.pm | 20 ++++++++++++++------ Koha/OAI/Server/Repository.pm | 31 ++++++++++--------------------- 2 files changed, 24 insertions(+), 27 deletions(-) --- a/Koha/OAI/Server/Record.pm +++ a/Koha/OAI/Server/Record.pm @@ -21,6 +21,7 @@ package Koha::OAI::Server::Record; use Modern::Perl; use HTTP::OAI; use HTTP::OAI::Metadata::OAI_DC; +use XML::LibXML; use base ("HTTP::OAI::Record"); @@ -40,14 +41,21 @@ sub new { $self->header->setSpec($setSpec); } - my $parser = XML::LibXML->new(); - my $record_dom = $parser->parse_string( $marcxml ); - my $format = $args{metadataPrefix}; + my $format = $args{metadataPrefix}; + my $record_dom; if ( $format ne 'marcxml' ) { - my %args = ( + my $args = { OPACBaseURL => "'" . C4::Context->preference('OPACBaseURL') . "'" - ); - $record_dom = $repository->stylesheet($format)->transform($record_dom, %args); + }; + # call Koha::XSLT_Handler now + $record_dom = $repository->{xslt_engine}->transform({ + xml => $marcxml, + file => $repository->stylesheet($format), + parameters => $args, + format => 'xmldoc', + }); + } else { + $record_dom = XML::LibXML->new->parse_string( $marcxml ); } $self->metadata( HTTP::OAI::Metadata->new( dom => $record_dom ) ); --- a/Koha/OAI/Server/Repository.pm +++ a/Koha/OAI/Server/Repository.pm @@ -31,13 +31,11 @@ use Koha::OAI::Server::GetRecord; use Koha::OAI::Server::ListRecords; use Koha::OAI::Server::ListIdentifiers; use XML::SAX::Writer; -use XML::LibXML; -use XML::LibXSLT; use YAML::Syck qw( LoadFile ); use CGI qw/:standard -oldstyle_urls/; use C4::Context; use C4::Biblio; - +use Koha::XSLT_Handler; =head1 NAME @@ -100,7 +98,7 @@ sub new { $self->{ koha_identifier } = C4::Context->preference("OAI-PMH:archiveID"); $self->{ koha_max_count } = C4::Context->preference("OAI-PMH:MaxCount"); $self->{ koha_metadata_format } = ['oai_dc', 'marcxml']; - $self->{ koha_stylesheet } = { }; # Build when needed + $self->{ xslt_engine } = Koha::XSLT_Handler->new; # Load configuration file if defined in OAI-PMH:ConfFile syspref if ( my $file = C4::Context->preference("OAI-PMH:ConfFile") ) { @@ -157,23 +155,14 @@ sub get_biblio_marcxml { sub stylesheet { my ( $self, $format ) = @_; - - my $stylesheet = $self->{ koha_stylesheet }->{ $format }; - unless ( $stylesheet ) { - my $xsl_file = $self->{ conf } - ? $self->{ conf }->{ format }->{ $format }->{ xsl_file } - : ( C4::Context->config('intrahtdocs') . - '/prog/en/xslt/' . - C4::Context->preference('marcflavour') . - 'slim2OAIDC.xsl' ); - my $parser = XML::LibXML->new(); - my $xslt = XML::LibXSLT->new(); - my $style_doc = $parser->parse_file( $xsl_file ); - $stylesheet = $xslt->parse_stylesheet( $style_doc ); - $self->{ koha_stylesheet }->{ $format } = $stylesheet; - } - - return $stylesheet; + my $xsl_file = $self->{ conf } + ? $self->{ conf }->{ format }->{ $format }->{ xsl_file } + : ( C4::Context->config('intrahtdocs') . + '/prog/en/xslt/' . + C4::Context->preference('marcflavour') . + 'slim2OAIDC.xsl' + ); + return $xsl_file; } 1; --