From bef70a7869d3af4fa301b05124a2cef608187032 Mon Sep 17 00:00:00 2001 From: Daniel Berthereau <Daniel.github@Berthereau.net> Date: Mon, 12 Mar 2018 00:00:00 +0100 Subject: [PATCH] Returned bad resumption token when needed. --- .../Adapter/OaiPmhRepositoryTokenAdapter.php | 6 ++++++ src/OaiPmh/ResponseGenerator.php | 20 +++++++++++-------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/Api/Adapter/OaiPmhRepositoryTokenAdapter.php b/src/Api/Adapter/OaiPmhRepositoryTokenAdapter.php index efe6662..ac50230 100644 --- a/src/Api/Adapter/OaiPmhRepositoryTokenAdapter.php +++ b/src/Api/Adapter/OaiPmhRepositoryTokenAdapter.php @@ -75,6 +75,12 @@ class OaiPmhRepositoryTokenAdapter extends AbstractEntityAdapter public function buildQuery(QueryBuilder $qb, array $query) { + if (isset($query['id'])) { + $qb->andWhere($qb->expr()->eq( + $this->getEntityClass() . '.id', + $this->createNamedParameter($qb, $query['id'])) + ); + } if (isset($query['verb'])) { $qb->andWhere($qb->expr()->eq( $this->getEntityClass() . '.verb', diff --git a/src/OaiPmh/ResponseGenerator.php b/src/OaiPmh/ResponseGenerator.php index f79a459..e4a545b 100644 --- a/src/OaiPmh/ResponseGenerator.php +++ b/src/OaiPmh/ResponseGenerator.php @@ -571,7 +571,7 @@ class ResponseGenerator extends AbstractXmlGenerator */ private function resumeListResponse($token) { - $api = $this->serviceLocator->get('Omeka\ApiManager'); + $api = $this->serviceLocator->get('ControllerPluginManager')->get('api'); $expiredTokens = $api->search('oaipmh_repository_tokens', [ 'expired' => true, ])->getContent(); @@ -579,17 +579,21 @@ class ResponseGenerator extends AbstractXmlGenerator $api->delete('oaipmh_repository_tokens', $expiredToken->id()); } - $tokenObject = $api->read('oaipmh_repository_tokens', $token)->getContent(); + // TODO Purge tokens. + + $tokenObject = $api->searchOne('oaipmh_repository_tokens', ['id' => $token])->getContent(); if (!$tokenObject || ($tokenObject->verb() != $this->query['verb'])) { $this->throwError(self::OAI_ERR_BAD_RESUMPTION_TOKEN); } else { - $this->listResponse($tokenObject->verb(), - $tokenObject->metadataPrefix(), - $tokenObject->cursor(), - $tokenObject->set(), - $tokenObject->from(), - $tokenObject->until()); + $this->listResponse( + $tokenObject->verb(), + $tokenObject->metadataPrefix(), + $tokenObject->cursor(), + $tokenObject->set(), + $tokenObject->from(), + $tokenObject->until() + ); } } -- GitLab