Lines 71-77
my $repository = C4::OAI::Repository->new();
Link Here
|
71 |
# - from |
71 |
# - from |
72 |
# - until |
72 |
# - until |
73 |
# - offset |
73 |
# - offset |
74 |
# |
74 |
# |
75 |
package C4::OAI::ResumptionToken; |
75 |
package C4::OAI::ResumptionToken; |
76 |
|
76 |
|
77 |
use strict; |
77 |
use strict; |
Lines 314-319
sub new {
Link Here
|
314 |
if(defined $token->{'set'}) { |
314 |
if(defined $token->{'set'}) { |
315 |
$set = GetOAISetBySpec($token->{'set'}); |
315 |
$set = GetOAISetBySpec($token->{'set'}); |
316 |
} |
316 |
} |
|
|
317 |
my $max = $repository->{koha_max_count}; |
317 |
my $sql = " |
318 |
my $sql = " |
318 |
SELECT biblioitems.biblionumber, biblioitems.timestamp |
319 |
SELECT biblioitems.biblionumber, biblioitems.timestamp |
319 |
FROM biblioitems |
320 |
FROM biblioitems |
Lines 322-353
sub new {
Link Here
|
322 |
$sql .= " WHERE DATE(timestamp) >= ? AND DATE(timestamp) <= ? "; |
323 |
$sql .= " WHERE DATE(timestamp) >= ? AND DATE(timestamp) <= ? "; |
323 |
$sql .= " AND oai_sets_biblios.set_id = ? " if defined $set; |
324 |
$sql .= " AND oai_sets_biblios.set_id = ? " if defined $set; |
324 |
$sql .= " |
325 |
$sql .= " |
325 |
LIMIT $repository->{'koha_max_count'} |
326 |
LIMIT " . ($max+1) . " |
326 |
OFFSET $token->{'offset'} |
327 |
OFFSET $token->{offset} |
327 |
"; |
328 |
"; |
328 |
my $sth = $dbh->prepare( $sql ); |
329 |
my $sth = $dbh->prepare( $sql ); |
329 |
my @bind_params = ($token->{'from'}, $token->{'until'}); |
330 |
my @bind_params = ($token->{'from'}, $token->{'until'}); |
330 |
push @bind_params, $set->{'id'} if defined $set; |
331 |
push @bind_params, $set->{'id'} if defined $set; |
331 |
$sth->execute( @bind_params ); |
332 |
$sth->execute( @bind_params ); |
332 |
|
333 |
|
333 |
my $pos = $token->{offset}; |
334 |
my $count = 0; |
334 |
while ( my ($biblionumber, $timestamp) = $sth->fetchrow ) { |
335 |
while ( my ($biblionumber, $timestamp) = $sth->fetchrow ) { |
|
|
336 |
$count++; |
337 |
if ( $count > $max ) { |
338 |
$self->resumptionToken( |
339 |
new C4::OAI::ResumptionToken( |
340 |
metadataPrefix => $token->{metadata_prefix}, |
341 |
from => $token->{from}, |
342 |
until => $token->{until}, |
343 |
offset => $token->{offset} + $max, |
344 |
set => $token->{set} |
345 |
) |
346 |
); |
347 |
last; |
348 |
} |
335 |
$timestamp =~ s/ /T/, $timestamp .= 'Z'; |
349 |
$timestamp =~ s/ /T/, $timestamp .= 'Z'; |
336 |
$self->identifier( new HTTP::OAI::Header( |
350 |
$self->identifier( new HTTP::OAI::Header( |
337 |
identifier => $repository->{ koha_identifier} . ':' . $biblionumber, |
351 |
identifier => $repository->{ koha_identifier} . ':' . $biblionumber, |
338 |
datestamp => $timestamp, |
352 |
datestamp => $timestamp, |
339 |
) ); |
353 |
) ); |
340 |
$pos++; |
|
|
341 |
} |
354 |
} |
342 |
$self->resumptionToken( |
|
|
343 |
new C4::OAI::ResumptionToken( |
344 |
metadataPrefix => $token->{metadata_prefix}, |
345 |
from => $token->{from}, |
346 |
until => $token->{until}, |
347 |
offset => $pos, |
348 |
set => $token->{set} |
349 |
) |
350 |
) if ($pos > $token->{offset}); |
351 |
|
355 |
|
352 |
return $self; |
356 |
return $self; |
353 |
} |
357 |
} |
Lines 467-472
sub new {
Link Here
|
467 |
if(defined $token->{'set'}) { |
471 |
if(defined $token->{'set'}) { |
468 |
$set = GetOAISetBySpec($token->{'set'}); |
472 |
$set = GetOAISetBySpec($token->{'set'}); |
469 |
} |
473 |
} |
|
|
474 |
my $max = $repository->{koha_max_count}; |
470 |
my $sql = " |
475 |
my $sql = " |
471 |
SELECT biblioitems.biblionumber, biblioitems.marcxml, biblioitems.timestamp |
476 |
SELECT biblioitems.biblionumber, biblioitems.marcxml, biblioitems.timestamp |
472 |
FROM biblioitems |
477 |
FROM biblioitems |
Lines 475-482
sub new {
Link Here
|
475 |
$sql .= " WHERE DATE(timestamp) >= ? AND DATE(timestamp) <= ? "; |
480 |
$sql .= " WHERE DATE(timestamp) >= ? AND DATE(timestamp) <= ? "; |
476 |
$sql .= " AND oai_sets_biblios.set_id = ? " if defined $set; |
481 |
$sql .= " AND oai_sets_biblios.set_id = ? " if defined $set; |
477 |
$sql .= " |
482 |
$sql .= " |
478 |
LIMIT $repository->{'koha_max_count'} |
483 |
LIMIT " . ($max + 1) . " |
479 |
OFFSET $token->{'offset'} |
484 |
OFFSET $token->{offset} |
480 |
"; |
485 |
"; |
481 |
|
486 |
|
482 |
my $sth = $dbh->prepare( $sql ); |
487 |
my $sth = $dbh->prepare( $sql ); |
Lines 484-491
sub new {
Link Here
|
484 |
push @bind_params, $set->{'id'} if defined $set; |
489 |
push @bind_params, $set->{'id'} if defined $set; |
485 |
$sth->execute( @bind_params ); |
490 |
$sth->execute( @bind_params ); |
486 |
|
491 |
|
487 |
my $pos = $token->{offset}; |
492 |
my $count = 0; |
488 |
while ( my ($biblionumber, $marcxml, $timestamp) = $sth->fetchrow ) { |
493 |
while ( my ($biblionumber, $marcxml, $timestamp) = $sth->fetchrow ) { |
|
|
494 |
$count++; |
495 |
if ( $count > $max ) { |
496 |
$self->resumptionToken( |
497 |
new C4::OAI::ResumptionToken( |
498 |
metadataPrefix => $token->{metadata_prefix}, |
499 |
from => $token->{from}, |
500 |
until => $token->{until}, |
501 |
offset => $token->{offset} + $max, |
502 |
set => $token->{set} |
503 |
) |
504 |
); |
505 |
last; |
506 |
} |
489 |
my $oai_sets = GetOAISetsBiblio($biblionumber); |
507 |
my $oai_sets = GetOAISetsBiblio($biblionumber); |
490 |
my @setSpecs; |
508 |
my @setSpecs; |
491 |
foreach (@$oai_sets) { |
509 |
foreach (@$oai_sets) { |
Lines 496-512
sub new {
Link Here
|
496 |
identifier => $repository->{ koha_identifier } . ':' . $biblionumber, |
514 |
identifier => $repository->{ koha_identifier } . ':' . $biblionumber, |
497 |
metadataPrefix => $token->{metadata_prefix} |
515 |
metadataPrefix => $token->{metadata_prefix} |
498 |
) ); |
516 |
) ); |
499 |
$pos++; |
|
|
500 |
} |
517 |
} |
501 |
$self->resumptionToken( |
|
|
502 |
new C4::OAI::ResumptionToken( |
503 |
metadataPrefix => $token->{metadata_prefix}, |
504 |
from => $token->{from}, |
505 |
until => $token->{until}, |
506 |
offset => $pos, |
507 |
set => $token->{set} |
508 |
) |
509 |
) if ($pos > $token->{offset}); |
510 |
|
518 |
|
511 |
return $self; |
519 |
return $self; |
512 |
} |
520 |
} |
Lines 639-645
C4::OAI::Repository - Handles OAI-PMH requests for a Koha database.
Link Here
|
639 |
This object extend HTTP::OAI::Repository object. |
647 |
This object extend HTTP::OAI::Repository object. |
640 |
It accepts OAI-PMH HTTP requests and returns result. |
648 |
It accepts OAI-PMH HTTP requests and returns result. |
641 |
|
649 |
|
642 |
This OAI-PMH server can operate in a simple mode and extended one. |
650 |
This OAI-PMH server can operate in a simple mode and extended one. |
643 |
|
651 |
|
644 |
In simple mode, repository configuration comes entirely from Koha system |
652 |
In simple mode, repository configuration comes entirely from Koha system |
645 |
preferences (OAI-PMH:archiveID and OAI-PMH:MaxCount) and the server returns |
653 |
preferences (OAI-PMH:archiveID and OAI-PMH:MaxCount) and the server returns |
646 |
- |
|
|