示例#1
0
 /**
  * Validates resumption token.
  *
  * @param  string  $oaiResumptionToken The resumption token to validate.
  * @return boolean
  */
 private function _validateResumptionToken($oaiResumptionToken)
 {
     $tokenWorker = new Oai_Model_Resumptiontokens();
     try {
         $tokenWorker->setResumptionPath($this->_resumptionPath);
     } catch (Exception $e) {
         // FIXME: should a configuration error hidden like in this case?
         $this->setErrorCode(Oai_Model_Error::BADRESUMPTIONTOKEN);
         $this->setErrorMessage('Directory for resumption tokens not valid. Error reason: ' . $e->getMessage());
         return false;
     }
     $result = $tokenWorker->validateResumptionToken($oaiResumptionToken);
     if (false === $result) {
         $this->setErrorCode(Oai_Model_Error::BADRESUMPTIONTOKEN);
         $this->setErrorMessage('The resumptionToken "' . $oaiResumptionToken . '" does not exist or has already expired.');
     }
     return $result;
 }
 /**
  * Helper method for handling lists.
  *
  * @param array &$oaiRequest
  * @param mixed $maxRecords
  * @return void
  */
 private function _handlingOfLists(array &$oaiRequest, $maxRecords)
 {
     if (true === empty($maxRecords)) {
         $maxRecords = 100;
     }
     $repIdentifier = $this->_configuration->getRepositoryIdentifier();
     $tempPath = $this->_configuration->getResumptionTokenPath();
     $this->_proc->setParameter('', 'repIdentifier', $repIdentifier);
     $this->_xml->appendChild($this->_xml->createElement('Documents'));
     // do some initialisation
     $cursor = 0;
     $totalIds = 0;
     $start = $maxRecords + 1;
     $reldocIds = array();
     $metadataPrefix = null;
     if (true === array_key_exists('metadataPrefix', $oaiRequest)) {
         $metadataPrefix = $oaiRequest['metadataPrefix'];
     }
     $tokenWorker = new Oai_Model_Resumptiontokens();
     $tokenWorker->setResumptionPath($tempPath);
     // parameter resumptionToken is given
     if (false === empty($oaiRequest['resumptionToken'])) {
         $resParam = $oaiRequest['resumptionToken'];
         $token = $tokenWorker->getResumptionToken($resParam);
         if (true === is_null($token)) {
             throw new Oai_Model_Exception("file could not be read.", Oai_Model_Error::BADRESUMPTIONTOKEN);
         }
         $cursor = $token->getStartPosition() - 1;
         $start = $token->getStartPosition() + $maxRecords;
         $totalIds = $token->getTotalIds();
         $reldocIds = $token->getDocumentIds();
         $metadataPrefix = $token->getMetadataPrefix();
         $this->_proc->setParameter('', 'oai_metadataPrefix', $metadataPrefix);
         // no resumptionToken is given
     } else {
         $docListModel = new Oai_Model_DocumentList();
         $docListModel->deliveringDocumentStates = $this->_deliveringDocumentStates;
         $docListModel->xMetaDissRestriction = $this->_xMetaDissRestriction;
         $reldocIds = $docListModel->query($oaiRequest);
         $totalIds = count($reldocIds);
     }
     // handling of document ids
     $restIds = $reldocIds;
     $workIds = array_splice($restIds, 0, $maxRecords);
     foreach ($workIds as $docId) {
         $document = new Opus_Document($docId);
         $this->createXmlRecord($document);
     }
     // no records returned
     if (true === empty($workIds)) {
         throw new Oai_Model_Exception("The combination of the given values results in an empty list.", Oai_Model_Error::NORECORDSMATCH);
     }
     // store the further Ids in a resumption-file
     $countRestIds = count($restIds);
     if ($countRestIds > 0) {
         $token = new Oai_Model_Resumptiontoken();
         $token->setStartPosition($start);
         $token->setTotalIds($totalIds);
         $token->setDocumentIds($restIds);
         $token->setMetadataPrefix($metadataPrefix);
         $tokenWorker->storeResumptionToken($token);
         // set parameters for the resumptionToken-node
         $res = $token->getResumptionId();
         $this->setParamResumption($res, $cursor, $totalIds);
     }
 }