From 98144a2c4a8e2525d73311b88bb461474a191306 Mon Sep 17 00:00:00 2001 From: Sebastian Meyer Date: Sat, 13 May 2017 13:23:24 +0200 Subject: [PATCH] Some bugfixes inspired by @antennaio --- oai2server.php | 11 +++++------ oai2xml.php | 10 ++++++---- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/oai2server.php b/oai2server.php index 7ca7017..18c7ce4 100644 --- a/oai2server.php +++ b/oai2server.php @@ -129,7 +129,7 @@ class OAI2Server { } public function GetRecord() { - if (!isset($this->args['metadataPrefix'])) { + if (!isset($this->args['identifier']) || !isset($this->args['metadataPrefix'])) { $this->errors[] = new OAI2Exception('badArgument'); } else { $metadataFormats = call_user_func($this->listMetadataFormatsCallback); @@ -137,9 +137,6 @@ class OAI2Server { $this->errors[] = new OAI2Exception('cannotDisseminateFormat'); } } - if (!isset($this->args['identifier'])) { - $this->errors[] = new OAI2Exception('badArgument'); - } if (empty($this->errors)) { try { if ($record = call_user_func($this->getRecordCallback, $this->args['identifier'], $this->args['metadataPrefix'])) { @@ -208,7 +205,9 @@ class OAI2Server { } if (empty($this->errors)) { try { - $records_count = call_user_func($this->listRecordsCallback, $metadataPrefix, $this->formatTimestamp($from), $this->formatTimestamp($until), true); + if (!($records_count = call_user_func($this->listRecordsCallback, $metadataPrefix, $this->formatTimestamp($from), $this->formatTimestamp($until), true))) { + throw new OAI2Exception('noRecordsMatch'); + } $records = call_user_func($this->listRecordsCallback, $metadataPrefix, $this->formatTimestamp($from), $this->formatTimestamp($until), false, $deliveredRecords, $maxItems); foreach ($records as $record) { if ($this->verb == 'ListRecords') { @@ -230,7 +229,7 @@ class OAI2Server { $expirationDatetime = null; } if (isset($restoken)) { - $this->response->createResumptionToken($restoken, $expirationDatetime, $records_count, $deliveredRecords); + $this->response->createResumptionToken($restoken, $expirationDatetime, $records_count, $deliveredRecords-$maxItems); } } catch (OAI2Exception $e) { $this->errors[] = $e; diff --git a/oai2xml.php b/oai2xml.php index 2207522..8140573 100644 --- a/oai2xml.php +++ b/oai2xml.php @@ -34,13 +34,12 @@ class OAI2XMLResponse { $this->addChild($oai_node, 'responseDate', gmdate('Y-m-d\TH:i:s\Z')); $this->doc->appendChild($oai_node); $request = $this->addChild($this->doc->documentElement, 'request', $uri); - $request->setAttribute('verb', $this->verb); + if (!empty($this->verb)) { + $request->setAttribute('verb', $this->verb); + } foreach($request_args as $key => $value) { $request->setAttribute($key, $value); } - if (!empty($this->verb)) { - $this->verbNode = $this->addChild($this->doc->documentElement, $this->verb); - } } /** @@ -67,6 +66,9 @@ class OAI2XMLResponse { * @param $value Type: string. The content of appending node. */ function addToVerbNode($nodeName, $value = null) { + if (!isset($this->verbNode) && !empty($this->verb)) { + $this->verbNode = $this->addChild($this->doc->documentElement, $this->verb); + } return $this->addChild($this->verbNode, $nodeName, $value); }