View | Details | Raw Unified | Return to bug 13568
Collapse All | Expand All

(-)a/opac/oai.pl (-29 / +36 lines)
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
- 

Return to bug 13568