/** * Responds to the two main List verbs, includes resumption and limiting. * * @param string $verb OAI-PMH verb for the request * @param string $metadataPrefix Metadata prefix * @param int $cursor Offset in response to begin output at * @param mixed $set Optional set argument * @param string $from Optional from date argument * @param string $until Optional until date argument * @uses createResumptionToken() */ private function listResponse($verb, $metadataPrefix, $cursor, $set, $from, $until) { $listLimit = 30; $itemTable = new OaiFinds(); $items = $itemTable->getRecords($cursor, $set, $from, $until); $totals = $itemTable->getCountAllFinds($set, $from, $until); $rows = $totals['0']['c']; if (count($items) == 0) { $this->throwError(self::OAI_ERR_NO_RECORDS_MATCH, 'No records match the given criteria'); } else { if ($verb == 'ListIdentifiers') { $method = 'appendHeader'; } else { if ($verb == 'ListRecords') { $method = 'appendRecord'; } } $verbElement = $this->document->createElement($verb); $this->document->documentElement->appendChild($verbElement); foreach ($items as $item) { $record = new $this->metadataFormats[$metadataPrefix]($item, $verbElement); $record->{$method}(); } $total = $cursor + $listLimit; if ($rows > $total) { $token = $this->createResumptionToken($verb, $metadataPrefix, $cursor, $set, $from, $until); $tokenElement = $this->document->createElement('resumptionToken', $token->id); $tokenElement->setAttribute('expirationDate', self::dbToUtc($token->expiration)); $tokenElement->setAttribute('completeListSize', $rows); $tokenElement->setAttribute('cursor', $cursor + $listLimit); $verbElement->appendChild($tokenElement); } else { if ($cursor != 0) { $tokenElement = $this->document->createElement('resumptionToken'); $verbElement->appendChild($tokenElement); } } } }