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