@@ -, +, @@ --- C4/Biblio.pm | 60 +++++++++++++++++++++++++++++++++++++++++++++++++ opac/opac-showmarc.pl | 4 ++- 2 files changed, 63 insertions(+), 1 deletions(-) --- a/C4/Biblio.pm +++ a/C4/Biblio.pm @@ -90,12 +90,15 @@ BEGIN { &GetMarcFromKohaField &GetFrameworkCode &TransformKohaToMarc + &TransformMarcToXml &PrepHostMarcField &CountItemsIssued &CountBiblioInOrders &GetSubscriptionsId &GetHolds + + &GetMarcBiblioWithoutHiddenFields ); # To modify something @@ -2011,6 +2014,20 @@ sub TransformKohaToMarc { return $record; } +=head TransformMarcToXml + + $marcxml = TransformMarcToKoha( $record ); + + Accepts a Marc::Record and returns record converted to marc xml. + +=cut + +sub TransformMarcToXml { + my ( $record ) = @_; + + return MARC::File::XML::header() . MARC::File::XML::record( $record ) . MARC::File::XML::footer(); +} + =head2 PrepHostMarcField $hostfield = PrepHostMarcField ( $hostbiblionumber,$hostitemnumber,$marcflavour ) @@ -3654,6 +3671,49 @@ sub GetHolds { return ($holds); } +=head2 GetMarcBiblioWithoutHiddenFields + + $record = GetMarcBiblioWithoutHiddenFields( $biblionumber ); + + Returns a marc record where all fields marked as hidden + have been removed. + +=cut + +sub GetMarcBiblioWithoutHiddenFields { + my ( $biblionumber ) = @_; + + return unless $biblionumber; + + my $itemtype = GetFrameworkCode( $biblionumber ); + my $tagslib = GetMarcStructure( 0, $itemtype ); + my $record = GetMarcBiblio($biblionumber); + + foreach my $field_name ( keys %$tagslib ) { + my $field = $tagslib->{$field_name}; + + foreach my $subfield_name ( keys %$field ) { + next if ( $subfield_name eq 'lib' + || $subfield_name eq 'repeatable' + || $subfield_name eq 'mandatory' + || $subfield_name eq 'tab' ); + + my $subfield = $tagslib->{ $field_name }->{ $subfield_name }; + + if ( $tagslib->{ $field_name }->{ $subfield_name }->{'hidden'} ) { + my @fields = $record->field( $field_name ); + foreach my $field ( @fields ) { + $field->delete_subfield( code => $subfield_name ); + + $record->delete_field( $field ) unless ( $field->subfields() ); + } + } + } + } + + return $record; +} + =head2 prepare_host_field $marcfield = prepare_host_field( $hostbiblioitem, $marcflavour ); --- a/opac/opac-showmarc.pl +++ a/opac/opac-showmarc.pl @@ -66,7 +66,9 @@ if ($importid) { } if ($view eq 'card' || $view eq 'html') { - $xmlrecord = GetXmlBiblio($biblionumber) unless $xmlrecord; + $record = GetMarcBiblioWithoutHiddenFields($biblionumber) unless $record; + $xmlrecord = TransformMarcToXml( $record ); + my $xslfile; my $themelang = '/' . C4::Context->preference("opacthemes") . '/' . C4::Templates::_current_language(); --