# Copyright Tamil s.a.r.l. 2008-2015 # Copyright Biblibre 2008-2015 # Copyright The National Library of Finland, University of Helsinki 2016-2021 # # This file is part of Koha. # # Koha is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # Koha is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Koha; if not, see . package Koha::OAI::Server::ResumptionToken; use Modern::Perl; use HTTP::OAI; use base ("HTTP::OAI::ResumptionToken"); # Extends HTTP::OAI::ResumptionToken # A token is identified by: # - metadataPrefix # - from # - until # - cursor # - deleted # - deleted count (not used anymore, but preserved for back-compatibility) # - nextId sub new { my ($class, %args) = @_; my $self = $class->SUPER::new(%args); my ($metadata_prefix, $cursor, $from, $until, $set, $deleted, $next_id); if ( $args{ resumptionToken } ) { # Note: undef in place of deleted record count for back-compatibility ($metadata_prefix, $cursor, $from, $until, $set, $deleted, undef, $next_id) = split( '/', $args{resumptionToken} ); $next_id = 0 unless $next_id; } else { $metadata_prefix = $args{ metadataPrefix }; $from = $args{ from } || ''; $until = $args{ until } || ''; # Add times to the arguments, when necessary, so they correctly match against the DB timestamps $from .= 'T00:00:00Z' if length($from) == 10; $until .= 'T23:59:59Z' if length($until) == 10; $cursor = $args{ cursor } // 0; $set = $args{ set } || ''; $deleted = defined $args{ deleted } ? $args{ deleted } : 1; $next_id = $args{ next_id } // 0; } # metadata_prefix can be undef (e.g. listSets) $metadata_prefix //= ''; $self->{ metadata_prefix } = $metadata_prefix; $self->{ cursor } = $cursor; $self->{ from } = $from; $self->{ until } = $until; $self->{ set } = $set; $self->{ from_arg } = _strip_UTC_designators($from); $self->{ until_arg } = _strip_UTC_designators($until); $self->{ deleted } = $deleted; $self->{ next_id } = $next_id; # Note: put zero where deleted record count used to be for back-compatibility $self->resumptionToken( join( '/', $metadata_prefix, $cursor, $from, $until, $set, $deleted, 0, $next_id ) ); $self->cursor( $cursor ); return $self; } sub _strip_UTC_designators { my ( $timestamp ) = @_; $timestamp =~ s/T/ /g; $timestamp =~ s/Z//g; return $timestamp; } 1;