✨
Omeka SのOAI-PMHリポジトリのresumptionTokenの不具合への対応
概要
Omeka SのOAI-PMHリポジトリのresumptionTokenにおいて、有効期限内にもかかわらず、以下のように、[badResumptionToken]が出力される事例に遭遇しました。
この不具合への対処方法についてメモします。
対応
以下のファイルについて、$currentTime
と$expirationTime
を比較する処理を加えたところ、有効期限内のtokenが残るようになりました。
OaiPmhRepository/src/OaiPmh/ResponseGenerator.php
...
private function resumeListResponse($token): void
{
$api = $this->serviceLocator->get('ControllerPluginManager')->get('api');
$expiredTokens = $api->search('oaipmh_repository_tokens', [
'expired' => true,
])->getContent();
foreach ($expiredTokens as $expiredToken) {
$currentTime = new \DateTime(); // 追加
$expirationTime = $expiredToken->expiration(); // 追加
if (!$expiredToken || $currentTime > $expirationTime) { // 追加
$api->delete('oaipmh_repository_tokens', $expiredToken->id());
} // 追加
}
上記のような対応をしなくてもうまくいくケースがあったので、PHPのバージョン等による違いがあるのかもしれません。
参考
参考までに、OAI-PMHリポジトリモジュールによって作成されるテーブルの中身を確認しました。
mysql> DESCRIBE oaipmhrepository_token;
+-----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| verb | varchar(15) | NO | | NULL | |
| metadata_prefix | varchar(190) | NO | | NULL | |
| cursor | int | NO | | NULL | |
| from | datetime | YES | | NULL | |
| until | datetime | YES | | NULL | |
| set | varchar(190) | YES | | NULL | |
| expiration | datetime | NO | MUL | NULL | |
+-----------------+--------------+------+-----+---------+----------------+
8 rows in set (0.01 sec)
mysql> SELECT * FROM oaipmhrepository_token LIMIT 10;
+----+-------------+-----------------+--------+------+-------+------+---------------------+
| id | verb | metadata_prefix | cursor | from | until | set | expiration |
+----+-------------+-----------------+--------+------+-------+------+---------------------+
| 8 | ListRecords | oai_dc | 50 | NULL | NULL | NULL | 2024-10-10 07:07:40 |
| 9 | ListRecords | oai_dc | 50 | NULL | NULL | NULL | 2024-10-10 07:07:44 |
| 10 | ListRecords | oai_dc | 100 | NULL | NULL | NULL | 2024-10-10 07:07:49 |
| 11 | ListRecords | oai_dc | 150 | NULL | NULL | NULL | 2024-10-10 07:07:54 |
| 12 | ListRecords | oai_dc | 50 | NULL | NULL | NULL | 2024-10-10 08:16:31 |
| 13 | ListRecords | oai_dc | 100 | NULL | NULL | NULL | 2024-10-10 08:16:36 |
| 14 | ListRecords | oai_dc | 150 | NULL | NULL | NULL | 2024-10-10 08:16:41 |
| 15 | ListRecords | oai_dc | 200 | NULL | NULL | NULL | 2024-10-10 08:16:44 |
+----+-------------+-----------------+--------+------+-------+------+---------------------+
まとめ
不完全な点があるかと思いますが、参考になりましたら幸いです。
Discussion