Bug 12252: Include item data only in extended mode
authorFrédéric Demians <f.demians@tamil.fr>
Thu, 23 Jul 2015 16:38:25 +0000 (18:38 +0200)
committerTomas Cohen Arazi <tomascohen@unc.edu.ar>
Thu, 17 Sep 2015 14:02:19 +0000 (11:02 -0300)
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>

C4/Biblio.pm
opac/oai.pl

index 191e9c7..9b83962 100644 (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';
index bb6fecb..875801b 100755 (executable)
@@ -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 ) = @_;