Bug 30921: Replace C4::XSLT::transformMARCXML4XSLT with RecordProcessor
This patch removes the last remaining uses of transformMARCXML4XSLT and replaced them with the equivilent RecordProcessor usage. Signed-off-by: David Nind <david@davidnind.com> Signed-off-by: Joonas Kylmälä <joonas.kylmala@iki.fi> Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
parent
c757abd675
commit
daf2e4b3c2
3 changed files with 32 additions and 92 deletions
91
C4/XSLT.pm
91
C4/XSLT.pm
|
@ -28,22 +28,18 @@ use C4::Koha qw( xml_escape );
|
|||
use C4::Biblio qw( GetAuthorisedValueDesc GetFrameworkCode GetMarcStructure );
|
||||
use Koha::AuthorisedValues;
|
||||
use Koha::ItemTypes;
|
||||
use Koha::RecordProcessor;
|
||||
use Koha::XSLT::Base;
|
||||
use Koha::Libraries;
|
||||
use Koha::Recalls;
|
||||
|
||||
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...
|
||||
|
||||
our (@ISA, @EXPORT_OK);
|
||||
BEGIN {
|
||||
require Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT_OK = qw(
|
||||
transformMARCXML4XSLT
|
||||
getAuthorisedValues4MARCSubfields
|
||||
buildKohaItemsNamespace
|
||||
XSLTParse4Display
|
||||
);
|
||||
|
@ -56,75 +52,6 @@ C4::XSLT - Functions for displaying XSLT-generated content
|
|||
|
||||
=head1 FUNCTIONS
|
||||
|
||||
=head2 transformMARCXML4XSLT
|
||||
|
||||
Replaces codes with authorized values in a MARC::Record object
|
||||
|
||||
=cut
|
||||
|
||||
sub transformMARCXML4XSLT {
|
||||
my ($biblionumber, $record, $opac) = @_;
|
||||
my $frameworkcode = GetFrameworkCode($biblionumber) || '';
|
||||
my $tagslib = &GetMarcStructure(1, $frameworkcode, { unsafe => 1 });
|
||||
my @fields;
|
||||
# FIXME: wish there was a better way to handle exceptions
|
||||
eval {
|
||||
@fields = $record->fields();
|
||||
};
|
||||
if ($@) { warn "PROBLEM WITH RECORD"; next; }
|
||||
my $marcflavour = C4::Context->preference('marcflavour');
|
||||
my $av = getAuthorisedValues4MARCSubfields($frameworkcode);
|
||||
foreach my $tag ( keys %$av ) {
|
||||
foreach my $field ( $record->field( $tag ) ) {
|
||||
if ( $av->{ $tag } ) {
|
||||
my @new_subfields = ();
|
||||
for my $subfield ( $field->subfields() ) {
|
||||
my ( $letter, $value ) = @$subfield;
|
||||
# Replace the field value with the authorised value *except* for MARC21 field 942$n (suppression in opac)
|
||||
if ( !( $tag eq '942' && $subfield->[0] eq 'n' ) || $marcflavour eq 'UNIMARC' ) {
|
||||
$value = GetAuthorisedValueDesc( $tag, $letter, $value, '', $tagslib, undef, $opac )
|
||||
if $av->{ $tag }->{ $letter };
|
||||
}
|
||||
push( @new_subfields, $letter, $value );
|
||||
}
|
||||
$field ->replace_with( MARC::Field->new(
|
||||
$tag,
|
||||
$field->indicator(1),
|
||||
$field->indicator(2),
|
||||
@new_subfields
|
||||
) );
|
||||
}
|
||||
}
|
||||
}
|
||||
return $record;
|
||||
}
|
||||
|
||||
=head2 getAuthorisedValues4MARCSubfields
|
||||
|
||||
Returns a ref of hash of ref of hash for tag -> letter controlled by authorised values
|
||||
Is only used in this module currently.
|
||||
|
||||
=cut
|
||||
|
||||
sub getAuthorisedValues4MARCSubfields {
|
||||
my ($frameworkcode) = @_;
|
||||
unless ( $authval_per_framework{ $frameworkcode } ) {
|
||||
my $dbh = C4::Context->dbh;
|
||||
my $sth = $dbh->prepare("SELECT DISTINCT tagfield, tagsubfield
|
||||
FROM marc_subfield_structure
|
||||
WHERE authorised_value IS NOT NULL
|
||||
AND authorised_value!=''
|
||||
AND frameworkcode=?");
|
||||
$sth->execute( $frameworkcode );
|
||||
my $av = { };
|
||||
while ( my ( $tag, $letter ) = $sth->fetchrow() ) {
|
||||
$av->{ $tag }->{ $letter } = 1;
|
||||
}
|
||||
$authval_per_framework{ $frameworkcode } = $av;
|
||||
}
|
||||
return $authval_per_framework{ $frameworkcode };
|
||||
}
|
||||
|
||||
=head2 XSLTParse4Display
|
||||
|
||||
Returns xml for biblionumber and requested XSLT transformation.
|
||||
|
@ -245,8 +172,9 @@ sub XSLTParse4Display {
|
|||
my ( $params ) = @_;
|
||||
|
||||
my $biblionumber = $params->{biblionumber};
|
||||
my $orig_record = $params->{record};
|
||||
my $record = $params->{record};
|
||||
my $xslsyspref = $params->{xsl_syspref};
|
||||
my $interface = ( $xslsyspref =~ /OPAC/ ) ? 'opac' : 'intranet' ;
|
||||
my $fixamps = $params->{fix_amps};
|
||||
my $hidden_items = $params->{hidden_items} || [];
|
||||
my $variables = $params->{xslt_variables};
|
||||
|
@ -257,8 +185,19 @@ sub XSLTParse4Display {
|
|||
|
||||
my $xslfilename = get_xsl_filename( $xslsyspref);
|
||||
|
||||
my $frameworkcode = GetFrameworkCode($biblionumber) || '';
|
||||
my $record_processor = Koha::RecordProcessor->new(
|
||||
{
|
||||
filters => [ 'ExpandCodedFields' ],
|
||||
options => {
|
||||
interface => $interface,
|
||||
frameworkcode => $frameworkcode
|
||||
}
|
||||
}
|
||||
);
|
||||
$record_processor->process($record);
|
||||
|
||||
# grab the XML, run it through our stylesheet, push it out to the browser
|
||||
my $record = transformMARCXML4XSLT($biblionumber, $orig_record);
|
||||
my $itemsxml;
|
||||
if ( $xslsyspref eq "OPACXSLTDetailsDisplay" || $xslsyspref eq "XSLTDetailsDisplay" || $xslsyspref eq "XSLTResultsDisplay" ) {
|
||||
$itemsxml = ""; #We don't use XSLT for items display on these pages
|
||||
|
|
|
@ -25,6 +25,7 @@ use HTTP::OAI::Repository qw( validate_request );
|
|||
|
||||
use base ("HTTP::OAI::Repository");
|
||||
|
||||
use Koha::RecordProcessor;
|
||||
use Koha::OAI::Server::Identify;
|
||||
use Koha::OAI::Server::ListSets;
|
||||
use Koha::OAI::Server::ListMetadataFormats;
|
||||
|
@ -35,7 +36,7 @@ use XML::SAX::Writer;
|
|||
use YAML::XS;
|
||||
use CGI qw/:standard -oldstyle_urls/;
|
||||
use C4::Context;
|
||||
use C4::XSLT qw( transformMARCXML4XSLT );
|
||||
use C4::Biblio qw( GetFrameworkCode );
|
||||
use Koha::XSLT::Base;
|
||||
use Koha::Biblios;
|
||||
|
||||
|
@ -178,8 +179,19 @@ sub get_biblio_marcxml {
|
|||
|
||||
my $biblio = Koha::Biblios->find($biblionumber);
|
||||
my $record = $biblio->metadata->record({ embed_items => $with_items, opac => 1 });
|
||||
$record = transformMARCXML4XSLT( $biblionumber, $record )
|
||||
if $expanded_avs;
|
||||
if ( $expanded_avs ) {
|
||||
my $frameworkcode = GetFrameworkCode($biblionumber) || '';
|
||||
my $record_processor = Koha::RecordProcessor->new(
|
||||
{
|
||||
filters => [ 'ExpandCodedFields' ],
|
||||
options => {
|
||||
interface => 'opac',
|
||||
frameworkcode => $frameworkcode
|
||||
}
|
||||
}
|
||||
);
|
||||
$record_processor->process($record) if $expanded_avs;
|
||||
}
|
||||
|
||||
return $record ? $record->as_xml_record() : undef;
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
use Modern::Perl;
|
||||
|
||||
use MARC::Record;
|
||||
use Test::More tests => 4;
|
||||
use Test::More tests => 3;
|
||||
use Test::Warn;
|
||||
use t::lib::TestBuilder;
|
||||
use t::lib::Mocks;
|
||||
|
@ -28,7 +28,7 @@ use Koha::Libraries;
|
|||
use Koha::ItemTypes;
|
||||
|
||||
BEGIN {
|
||||
use_ok('C4::XSLT', qw( transformMARCXML4XSLT getAuthorisedValues4MARCSubfields buildKohaItemsNamespace ));
|
||||
use_ok('C4::XSLT', qw( buildKohaItemsNamespace ));
|
||||
}
|
||||
|
||||
my $schema = Koha::Database->new->schema;
|
||||
|
@ -36,17 +36,6 @@ my $builder = t::lib::TestBuilder->new;
|
|||
|
||||
$schema->storage->txn_begin;
|
||||
|
||||
subtest 'transformMARCXML4XSLT tests' => sub {
|
||||
plan tests => 1;
|
||||
my $mock_xslt = Test::MockModule->new("C4::XSLT");
|
||||
$mock_xslt->mock( getAuthorisedValues4MARCSubfields => sub { return { 942 => { 'n' => 1 } } } );
|
||||
$mock_xslt->mock( GetAuthorisedValueDesc => sub { warn "called"; });
|
||||
my $record = MARC::Record->new();
|
||||
my $suppress_field = MARC::Field->new( 942, ' ', ' ', n => '1' );
|
||||
$record->append_fields($suppress_field);
|
||||
warning_is { C4::XSLT::transformMARCXML4XSLT( 3,$record ) } undef, "942n auth value not translated";
|
||||
};
|
||||
|
||||
subtest 'buildKohaItemsNamespace status tests' => sub {
|
||||
plan tests => 17;
|
||||
|
||||
|
|
Loading…
Reference in a new issue