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:
parent
8b24a09917
commit
ff807bc244
2 changed files with 22 additions and 10 deletions
|
@ -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';
|
||||
|
|
31
opac/oai.pl
31
opac/oai.pl
|
@ -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 ) = @_;
|
||||
|
||||
|
|
Loading…
Reference in a new issue