OAI package handle correctly unicode content
Signed-off-by: Joshua Ferraro <jmf@liblime.com>
This commit is contained in:
parent
6546a1506a
commit
4022ca8dd2
|
|
@ -103,7 +103,6 @@ and the I<cursor> keys set.
|
|||
|
||||
package C4::OAI::DC;
|
||||
|
||||
use Encode;
|
||||
use C4::OAI::DP;
|
||||
use vars ('@ISA');
|
||||
@ISA = ("C4::OAI::DP");
|
||||
|
|
@ -161,7 +160,7 @@ sub Archive_FormatRecord
|
|||
my $footer = "</oaidc:dc>\n";
|
||||
my $metadata = '';
|
||||
|
||||
$metadata = $header . encode("utf8", decode( "iso-8859-1",$self->{'utility'}->FormatXML($dc))) . $footer if( $dc );
|
||||
$metadata = $header . $self->{'utility'}->FormatXML($dc) . $footer if( $dc );
|
||||
|
||||
$self->FormatRecord ($hashref->Identifier()->[0] ,
|
||||
$hashref->DateStamp(),
|
||||
|
|
|
|||
|
|
@ -10,6 +10,15 @@
|
|||
# -----------------------------------------+-------------+-------------
|
||||
# Virginia Polytechnic Institute and State University | www.vt.edu
|
||||
# -------------------------------------------------------+-------------
|
||||
# January 2008
|
||||
# ------------------+--------------------------------------------------
|
||||
# Ph. Jaillon |
|
||||
# ------------------+----------------------+---------------------------
|
||||
# Department of Computer Science |
|
||||
# -----------------------------------------+-------------+-------------
|
||||
# Ecole Nationale Superieure des Mines de St-Etienne | www.emse.fr
|
||||
# -------------------------------------------------------+-------------
|
||||
|
||||
|
||||
$VERSION = '1.0.0';
|
||||
|
||||
|
|
@ -41,6 +50,8 @@ use POSIX;
|
|||
use CGI;
|
||||
use C4::OAI::Utility;
|
||||
|
||||
# setting binmode to utf8 (any characters printed on STDOUT are utf8 encoded)
|
||||
binmode(STDOUT, ":utf8");
|
||||
|
||||
# constructor
|
||||
sub new
|
||||
|
|
@ -498,16 +509,27 @@ sub Identify
|
|||
},
|
||||
{
|
||||
'title' => 'VTOAI Perl Data Provider',
|
||||
'author' => {
|
||||
'name' => 'Hussein Suleman',
|
||||
'email' => 'hussein@vt.edu',
|
||||
'institution' => 'Virginia Tech',
|
||||
'mdorder' => [ qw ( name email institution ) ],
|
||||
},
|
||||
'author' => [
|
||||
{
|
||||
'name' => 'Hussein Suleman',
|
||||
'email' => 'hussein@vt.edu',
|
||||
'institution' => 'Virginia Tech',
|
||||
'mdorder' => [ qw ( name email institution ) ],
|
||||
},
|
||||
{
|
||||
'name' => 'Philippe Jaillon',
|
||||
'email' => 'jaillon@emse.fr',
|
||||
'institution' => 'École Nationale Supérieure des Mines de Saint-Étienne',
|
||||
'mdorder' => [ qw ( name email institution ) ],
|
||||
}
|
||||
],
|
||||
'version' => '3.05',
|
||||
'URL' => 'http://www.dlib.vt.edu/projects/OAI/',
|
||||
'URL' => [
|
||||
'http://www.dlib.vt.edu/projects/OAI/',
|
||||
'http://oai-pmh.emse.fr/'
|
||||
],
|
||||
'mdorder' => [ qw ( title author version URL ) ]
|
||||
}
|
||||
},
|
||||
]]
|
||||
};
|
||||
push (@{$identity->{'description'}}, $desc);
|
||||
|
|
|
|||
37
opac/oai.pl
37
opac/oai.pl
|
|
@ -30,7 +30,8 @@ use MARC::File::USMARC;
|
|||
|
||||
sub new { # Get a MAR::Record as parameter and bless it as MARC::Record::KOHADC
|
||||
shift;
|
||||
bless shift;
|
||||
my $marc = shift;
|
||||
bless $marc if( ref( $marc ) );
|
||||
}
|
||||
|
||||
sub subfield {
|
||||
|
|
@ -61,6 +62,15 @@ my @result = ();
|
|||
\@result;
|
||||
}
|
||||
|
||||
sub XMLescape {
|
||||
my ($t) = shift;
|
||||
|
||||
foreach (@$t ) {
|
||||
s/\&/\&/g; s/</</g;
|
||||
}
|
||||
$t;
|
||||
}
|
||||
|
||||
sub Status {
|
||||
my $self = shift;
|
||||
undef;
|
||||
|
|
@ -68,17 +78,17 @@ sub Status {
|
|||
|
||||
sub Title {
|
||||
my $self = shift;
|
||||
$self->getfields('biblio.title');
|
||||
&XMLescape( $self->getfields('biblio.title') );
|
||||
}
|
||||
|
||||
sub Creator {
|
||||
my $self = shift;
|
||||
$self->getfields('biblio.author');
|
||||
&XMLescape( $self->getfields('biblio.author') );
|
||||
}
|
||||
|
||||
sub Subject {
|
||||
my $self = shift;
|
||||
$self->getfields('bibliosubject.subject');
|
||||
&XMLescape( $self->getfields('bibliosubject.subject') );
|
||||
}
|
||||
|
||||
sub DateStamp {
|
||||
|
|
@ -125,12 +135,12 @@ sub Language {
|
|||
|
||||
sub Type {
|
||||
my $self = shift;
|
||||
$self->getfields('biblioitems.itemtype');
|
||||
&XMLescape( $self->getfields('biblioitems.itemtype') );
|
||||
}
|
||||
|
||||
sub Publisher {
|
||||
my $self = shift;
|
||||
$self->getfields('biblioitems.publishercode');
|
||||
&XMLescape( $self->getfields('biblioitems.publishercode') );
|
||||
}
|
||||
|
||||
sub Set {
|
||||
|
|
@ -285,8 +295,13 @@ sub Archive_GetRecord
|
|||
|
||||
if( my $r = $sth->fetchrow_hashref() ) {
|
||||
my $marc = new MARC::Record::KOHADC( ::GetMarcBiblio( $identifier ) );
|
||||
$marc->{'biblio.timestamp'} = $r->{'timestamp'};
|
||||
return $marc ;
|
||||
if( $marc ) {
|
||||
$marc->{'biblio.timestamp'} = $r->{'timestamp'};
|
||||
return $marc ;
|
||||
}
|
||||
else {
|
||||
warn("Archive_GetRecord : no MARC record for " . C4::Context->preference("OAI-PMH:archiveID") . ":" . $identifier);
|
||||
}
|
||||
}
|
||||
|
||||
$self->AddError ('idDoesNotExist', 'The value of the identifier argument is unknown or illegal in this repository');
|
||||
|
|
@ -316,11 +331,15 @@ sub Archive_ListRecords
|
|||
|
||||
($metadataPrefix, $offset, $from, $until ) = &parseResumptionToken($from, $until, $metadataPrefix, $resumptionToken);
|
||||
|
||||
warn( "Archive_ListRecords : $set, $from, $until, $metadataPrefix, $resumptionToken\n");
|
||||
#warn( "Archive_ListRecords : $set, $from, $until, $metadataPrefix, $resumptionToken\n");
|
||||
$sth->execute( $from,$until,$self->{'MaxCount'}?$self->{'MaxCount'}:100000, $offset );
|
||||
|
||||
while( my $r = $sth->fetchrow_hashref() ) {
|
||||
my $marc = new MARC::Record::KOHADC( ::GetMarcBiblio( $r->{'biblionumber'} ) );
|
||||
unless( $marc ) { # somme time there is problems within koha, and we can't get valid marc record
|
||||
warn("Archive_ListRecords : no MARC record for " . C4::Context->preference("OAI-PMH:archiveID") .":" . $r->{'biblionumber'} );
|
||||
next;
|
||||
}
|
||||
$marc->{'biblio.timestamp'} = $r->{'timestamp'};
|
||||
push( @allrows, $marc );
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue