diff --git a/Koha/OAI/Server/GetRecord.pm b/Koha/OAI/Server/GetRecord.pm index aabfb3eb46..a6c17287c1 100644 --- a/Koha/OAI/Server/GetRecord.pm +++ b/Koha/OAI/Server/GetRecord.pm @@ -98,14 +98,16 @@ sub new { push @setSpecs, $_->{spec}; } - if ($deleted) { + #NOTE: Show a deleted record if there is no metadata + # We fetch it using this method, rather than the database directly, + # so it'll include the item data + my ( $marcxml, $marcxml_error ) = + $deleted ? undef : $repository->get_biblio_marcxml( $biblionumber, $args{metadataPrefix} ); + if ( !$marcxml ) { $self->record( Koha::OAI::Server::DeletedRecord->new($timestamp, \@setSpecs, %args) ); } else { - # We fetch it using this method, rather than the database directly, - # so it'll include the item data - my ( $marcxml, $marcxml_error ) = $repository->get_biblio_marcxml( $biblionumber, $args{metadataPrefix} ); $args{about} = [$marcxml_error] if $marcxml_error; $self->record( Koha::OAI::Server::Record->new($repository, $marcxml, $timestamp, \@setSpecs, %args) diff --git a/Koha/OAI/Server/ListBase.pm b/Koha/OAI/Server/ListBase.pm index 0c4f3a8545..4705bca227 100644 --- a/Koha/OAI/Server/ListBase.pm +++ b/Koha/OAI/Server/ListBase.pm @@ -187,12 +187,20 @@ sub GetRecords { ); } } else { + #NOTE: Show a deleted record if there is no metadata + my $deleted_status = ($deleted) ? 'deleted' : undef; + if ( !$deleted_status ) { + my ( $marcxml, $marcxml_error ) = $repository->get_biblio_marcxml( $biblionumber, $format ); + if ( !$marcxml ) { + $deleted_status = 'deleted'; + } + } $timestamp =~ s/ /T/; $timestamp .= 'Z'; $self->identifier( HTTP::OAI::Header->new( identifier => $repository->{ koha_identifier} . ':' . $biblionumber, datestamp => $timestamp, - status => $deleted ? 'deleted' : undef, + status => $deleted_status, ) ); } } diff --git a/Koha/OAI/Server/Repository.pm b/Koha/OAI/Server/Repository.pm index 4ec02811ab..7db7f874b6 100644 --- a/Koha/OAI/Server/Repository.pm +++ b/Koha/OAI/Server/Repository.pm @@ -193,6 +193,19 @@ sub get_biblio_marcxml { $decoding_error = "INVALID_METADATA"; $record = $biblio->metadata->record_strip_nonxml( { embed_items => $with_items, opac => 1 } ); } + if ($record) { + + #FIXME: Syspref this? + my $hide_record = 1; + if ($hide_record) { + my $rules = C4::Context->yaml_preference('OpacHiddenItems') // {}; + if ( $biblio->hidden_in_opac( { rules => $rules } ) ) { + return; + } + + #TODO: Also hide record if OpacSuppression is in use + } + } if ( $record && $expanded_avs ) { my $frameworkcode = GetFrameworkCode($biblionumber) || ''; my $record_processor = Koha::RecordProcessor->new(