Bug 12252: Include item data only in extended mode

Previous patches attached to this bug have been refactored to merge bug
3206 and bug 13568 features. So OAI server must be carrefully tested to
ensure that there is no regression in this area: deleted records and
resumption token.

This last patch fixed the way items are returned. They are returned only
if OAI server operates in extended mode, and specifically for format
having the parameter include_item set to 1 (true). For example this
configuration file set via OAI-PMH:ConfFile syspref will return items:

Signed-off-by: Signed-off-by: Gaetan Boisson <gaetan.boisson@biblibre.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Tomas Cohen Arazi <tomascohen@unc.edu.ar>
This commit is contained in:
Frédéric Demians 2015-07-23 18:38:25 +02:00 committed by Tomas Cohen Arazi
parent 8b24a09917
commit ff807bc244
2 changed files with 22 additions and 10 deletions

View file

@ -1276,6 +1276,7 @@ OpacHiddenItems to be applied.
sub GetMarcBiblio {
my $biblionumber = shift;
my $embeditems = shift || 0;
my $opac = shift || 0;
if (not defined $biblionumber) {
carp 'GetMarcBiblio called with undefined biblionumber';

View file

@ -61,6 +61,9 @@ else {
binmode STDOUT, ':encoding(UTF-8)';
my $repository = C4::OAI::Repository->new();
# __END__ Main Prog
@ -103,7 +106,7 @@ sub new {
$from .= 'T00:00:00Z' if length($from) == 10;
$until .= 'T23:59:59Z' if length($until) == 10;
$offset = $args{ offset } || 0;
$set = $args{set};
$set = $args{set} || '';
}
$self->{ metadata_prefix } = $metadata_prefix;
@ -308,7 +311,7 @@ sub new {
my $prefix = $repository->{koha_identifier} . ':';
my ($biblionumber) = $args{identifier} =~ /^$prefix(.*)/;
$sth->execute( $biblionumber );
my ($timestamp);
my ($timestamp, $deleted);
unless ( ($timestamp) = $sth->fetchrow ) {
unless ( ($timestamp) = $dbh->selectrow_array(q/
SELECT timestamp
@ -331,10 +334,8 @@ sub new {
# We fetch it using this method, rather than the database directly,
# so it'll include the item data
my $marcxml;
unless ($deleted) {
my $record = GetMarcBiblio($biblionumber, 1);
$marcxml = $record->as_xml();
}
$marcxml = $repository->get_biblio_marcxml->($biblionumber, $args{metadataPrefix})
unless $deleted;
my $oai_sets = GetOAISetsBiblio($biblionumber);
my @setSpecs;
foreach (@$oai_sets) {
@ -345,7 +346,7 @@ sub new {
$self->record(
$deleted
? C4::OAI::DeletedRecord->new($timestamp, \@setSpecs, %args)
: C4::OAI::Record->new($repository, $marcxml, $timestamp, \@setSpecs, %args);
: C4::OAI::Record->new($repository, $marcxml, $timestamp, \@setSpecs, %args)
);
return $self;
}
@ -552,7 +553,7 @@ sub new {
}
my $max = $repository->{koha_max_count};
my $sql = "
SELECT biblioitems.biblionumber, biblioitems.timestamp
(SELECT biblioitems.biblionumber, biblioitems.timestamp, marcxml
FROM biblioitems
";
$sql .= " JOIN oai_sets_biblios ON biblioitems.biblionumber = oai_sets_biblios.biblionumber " if defined $set;
@ -590,8 +591,7 @@ sub new {
);
last;
}
my $record = GetMarcBiblio($biblionumber, 1, 1);
my $marcxml = $record->as_xml();
my $marcxml = $repository->get_biblio_marcxml($biblionumber, $args{metadataPrefix});
my $oai_sets = GetOAISetsBiblio($biblionumber);
my @setSpecs;
foreach (@$oai_sets) {
@ -710,6 +710,17 @@ sub new {
}
sub get_biblio_marcxml {
my ($self, $biblionumber, $format) = @_;
my $with_items = 0;
if ( my $conf = $self->{conf} ) {
$with_items = $conf->{format}->{$format}->{include_items};
}
my $record = GetMarcBiblio($biblionumber, $with_items, 1);
$record ? $record->as_xml() : undef;
}
sub stylesheet {
my ( $self, $format ) = @_;