From d67e0f75fb2b02a0fb060570c4a3b560b518dbab Mon Sep 17 00:00:00 2001 From: Robin Sheat Date: Wed, 14 May 2014 14:39:03 +1200 Subject: [PATCH] Bug 12252 - OAI-PMH result includes item data GetRecord for OAI-PMH was pulling the MARCXML directly from the database. Now it uses GetMarcBiblio and includes the item data with it, making it more generally useful. Test plan: * Run an OAI-PMH query, for example: http://koha/cgi-bin/koha/oai.pl?verb=GetRecord&identifier=KOHA-OAI-TEST:52&metadataPrefix=marcxml to fetch biblionumber 52 * Note that it doesn't include the 952 data * Apply the patch * Do the same thing, but this time see that the 952 data is at the bottom of the MARCXML. Note: * This patch also includes a small tidy-up in C4::Biblios to group things semantically a bit better, so I don't spend ages looking for a function that was staring me in the face all along again. Signed-off-by: David Cook Works as described. Simple yet useful patch. Signed-off-by: Jonathan Druart Signed-off-by: Frederic Demians 952/995 item fields are back in response to GetRecord OAI verb. --- C4/Biblio.pm | 16 ++++++++-------- opac/oai.pl | 12 +++++++++--- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/C4/Biblio.pm b/C4/Biblio.pm index 8bdb25f..e7abd7b 100644 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -57,13 +57,14 @@ BEGIN { # to get something push @EXPORT, qw( - &GetBiblio - &GetBiblioData - &GetBiblioItemData - &GetBiblioItemInfosOf - &GetBiblioItemByBiblioNumber - &GetBiblioFromItemNumber - &GetBiblionumberFromItemnumber + GetBiblio + GetBiblioData + GetMarcBiblio + GetBiblioItemData + GetBiblioItemInfosOf + GetBiblioItemByBiblioNumber + GetBiblioFromItemNumber + GetBiblionumberFromItemnumber &GetRecordValue &GetFieldMapping @@ -77,7 +78,6 @@ BEGIN { &GetMarcISBN &GetMarcISSN &GetMarcSubjects - &GetMarcBiblio &GetMarcAuthors &GetMarcSeries &GetMarcHosts diff --git a/opac/oai.pl b/opac/oai.pl index b453408..b580a27 100755 --- a/opac/oai.pl +++ b/opac/oai.pl @@ -247,7 +247,9 @@ package C4::OAI::GetRecord; use strict; use warnings; use HTTP::OAI; +use C4::Biblio; use C4::OAI::Sets; +use MARC::File::XML; use base ("HTTP::OAI::GetRecord"); @@ -259,14 +261,14 @@ sub new { my $dbh = C4::Context->dbh; my $sth = $dbh->prepare(" - SELECT marcxml, timestamp + SELECT timestamp FROM biblioitems WHERE biblionumber=? " ); my $prefix = $repository->{koha_identifier} . ':'; my ($biblionumber) = $args{identifier} =~ /^$prefix(.*)/; $sth->execute( $biblionumber ); - my ($marcxml, $timestamp); - unless ( ($marcxml, $timestamp) = $sth->fetchrow ) { + my ($timestamp); + unless ( ($timestamp) = $sth->fetchrow ) { return HTTP::OAI::Response->new( requestURL => $repository->self_url(), errors => [ new HTTP::OAI::Error( @@ -276,6 +278,10 @@ sub new { ); } + # We fetch it using this method, rather than the database directly, + # so it'll include the item data + my $record = GetMarcBiblio($biblionumber, 1); + my $marcxml = $record->as_xml(); my $oai_sets = GetOAISetsBiblio($biblionumber); my @setSpecs; foreach (@$oai_sets) { -- 2.1.2