Пример #1
0
 /**
  * Pull records and build the XML
  *
  * @return  void
  */
 public function displayTask()
 {
     // Incoming
     $metadata = Request::getVar('metadataPrefix', 'oai_dc');
     $from = Request::getVar('from');
     if ($from) {
         $from = Date::of($from)->toSql();
     }
     $until = Request::getVar('until');
     if ($until) {
         $until = Date::of($until)->toSql();
     }
     $set = Request::getVar('set');
     $resumption = Request::getVar('resumptionToken');
     $igran = "YYYY-MM-DD";
     $igran .= $this->config->get('gran', 'c') == 'c' ? "Thh:mm:ssZ" : '';
     $hubname = rtrim($this->config->get('base_url', str_replace('https', 'http', \Request::base())), '/');
     $edate = $this->config->get('edate');
     $edate = $edate ? strtotime($edate) : time();
     $service = new Service($metadata, rtrim(Request::getSchemeAndHttpHost(), '/') . Route::url('index.php?option=' . $this->_option . '&task=stylesheet&metadataPrefix=' . $metadata));
     $service->set('metadataPrefix', $metadata)->set('repositoryName', $this->config->get('repository_name', \Config::get('sitename')))->set('baseURL', $hubname)->set('protocolVersion', '2.0')->set('adminEmail', $this->config->get('email', \Config::get('mailfrom')))->set('earliestDatestamp', gmdate('Y-m-d\\Th:i:s\\Z', $edate))->set('deletedRecord', $this->config->get('del'))->set('granularity', $igran)->set('max', $this->config->get('max', 500))->set('limit', $this->config->get('limig', 50))->set('allow_ore', $this->config->get('allow_ore', 0))->set('gran', $this->config->get('gran', 'c'))->set('resumption', $resumption);
     $verb = Request::getVar('verb');
     switch ($verb) {
         case 'GetRecord':
             $service->record(Request::getVar('identifier'));
             break;
         case 'Identify':
             $service->identify();
             break;
         case 'ListMetadataFormats':
             $service->formats();
             break;
         case 'ListIdentifiers':
             $service->identifiers($from, $until, $set);
             break;
         case 'ListRecords':
             $sessionTokenResumptionTemp = Session::get($resumption);
             if (!empty($resumption) && empty($sessionTokenResumptionTemp)) {
                 $service->error($service::ERROR_BAD_RESUMPTION_TOKEN);
             }
             $service->records($from, $until, $set);
             break;
         case 'ListSets':
             $sessionTokenResumptionTemp = Session::get($resumption);
             if (!empty($resumption) && empty($sessionTokenResumptionTemp)) {
                 $service->error($service::ERROR_BAD_RESUMPTION_TOKEN);
             }
             $service->sets();
             break;
         default:
             $service->error($service::ERROR_BAD_VERB, Lang::txt('COM_OAIPMH_ILLEGAL_VERB'));
             break;
     }
     Document::setType('xml');
     echo $service;
 }
Пример #2
0
 /**
  * Pull records and build the XML
  *
  * @return  void
  */
 public function displayTask()
 {
     // Incoming
     $metadata = Request::getVar('metadataPrefix');
     $from = Request::getVar('from');
     if ($from) {
         $from = Date::of($from)->toSql();
     }
     $until = Request::getVar('until');
     if ($until) {
         $until = Date::of($until)->toSql();
     }
     $set = Request::getVar('set');
     $resumption = urldecode(Request::getVar('resumptionToken'));
     $identifier = urldecode(Request::getVar('identifier'));
     $igran = "YYYY-MM-DD";
     $igran .= $this->config->get('gran', 'c') == 'c' ? "Thh:mm:ssZ" : '';
     $hubname = rtrim($this->config->get('base_url', str_replace('https', 'http', Request::base())), '/');
     $edate = $this->config->get('edate');
     $edate = $edate ? strtotime($edate) : time();
     Document::setType('xml');
     $service = new Service(rtrim(Request::getSchemeAndHttpHost(), '/') . Route::url('index.php?option=' . $this->_option . '&task=stylesheet&metadataPrefix=' . $metadata));
     $service->set('metadataPrefix', $metadata)->set('repositoryName', $this->config->get('repository_name', \Config::get('sitename')))->set('baseURL', $hubname)->set('protocolVersion', '2.0')->set('adminEmail', $this->config->get('email', \Config::get('mailfrom')))->set('earliestDatestamp', gmdate('Y-m-d\\Th:i:s\\Z', $edate))->set('deletedRecord', $this->config->get('del'))->set('granularity', $igran)->set('limit', $this->config->get('limit', 50))->set('start', 0)->set('allow_ore', $this->config->get('allow_ore', 0))->set('gran', $this->config->get('gran', 'c'))->set('resumption', $resumption);
     $verb = Request::getVar('verb');
     switch ($verb) {
         case 'Identify':
             if (!$service->getError() && $identifier) {
                 $service->error($service::ERROR_BAD_ARGUMENT, Lang::txt('COM_OAIPMH_ILLEGAL_ARGUMENT', 'identifier'), $verb);
             }
             if (!$service->getError() && $set) {
                 $service->error($service::ERROR_BAD_ARGUMENT, Lang::txt('COM_OAIPMH_ILLEGAL_ARGUMENT', 'set'), $verb);
             }
             if (!$service->getError() && $from) {
                 $service->error($service::ERROR_BAD_ARGUMENT, Lang::txt('COM_OAIPMH_ILLEGAL_ARGUMENT', 'from'), $verb);
             }
             if (!$service->getError() && $until) {
                 $service->error($service::ERROR_BAD_ARGUMENT, Lang::txt('COM_OAIPMH_ILLEGAL_ARGUMENT', 'until'), $verb);
             }
             if (!$service->getError() && $resumption) {
                 $service->error($service::ERROR_BAD_ARGUMENT, Lang::txt('COM_OAIPMH_ILLEGAL_ARGUMENT', 'resumptionToken'), $verb);
             }
             if (!$service->getError()) {
                 $service->identify();
             }
             break;
         case 'ListMetadataFormats':
             if (!$service->getError() && $set) {
                 $service->error($service::ERROR_BAD_ARGUMENT, Lang::txt('COM_OAIPMH_ILLEGAL_ARGUMENT', 'set'), $verb);
             }
             if (!$service->getError() && $from) {
                 $service->error($service::ERROR_BAD_ARGUMENT, Lang::txt('COM_OAIPMH_ILLEGAL_ARGUMENT', 'from'), $verb);
             }
             if (!$service->getError() && $until) {
                 $service->error($service::ERROR_BAD_ARGUMENT, Lang::txt('COM_OAIPMH_ILLEGAL_ARGUMENT', 'until'), $verb);
             }
             if (!$service->getError() && $resumption) {
                 $service->error($service::ERROR_BAD_ARGUMENT, Lang::txt('COM_OAIPMH_ILLEGAL_ARGUMENT', 'resumptionToken'), $verb);
             }
             if (!$service->getError()) {
                 $service->formats();
             }
             break;
         case 'ListSets':
             if (!empty($resumption)) {
                 try {
                     $data = $service->decodeToken($resumption);
                 } catch (\Exception $e) {
                     $service->error($service::ERROR_BAD_RESUMPTION_TOKEN, null, $verb);
                 }
                 if (!$service->getError()) {
                     if (!$data || !is_array($data)) {
                         $service->error($service::ERROR_BAD_RESUMPTION_TOKEN, null, $verb);
                     } else {
                         $service->set('limit', isset($data['limit']) ? $data['limit'] : $service->get('limit'));
                         $service->set('start', isset($data['start']) ? $data['start'] + $service->get('limit') : $service->get('start'));
                         $from = isset($data['from']) ? $data['from'] : $from;
                         $until = isset($data['until']) ? $data['until'] : $until;
                         $set = isset($data['set']) ? $data['set'] : $set;
                         $metadata = isset($data['prefix']) ? $data['prefix'] : $metadata;
                         $service->set('metadataPrefix', $metadata);
                     }
                 }
             }
             if ($metadata) {
                 $service->setSchema($metadata);
             }
             if (!$service->getError() && $identifier) {
                 $service->error($service::ERROR_BAD_ARGUMENT, Lang::txt('COM_OAIPMH_ILLEGAL_ARGUMENT', 'identifier'), $verb);
             }
             if (!$service->getError() && $set) {
                 $service->error($service::ERROR_BAD_ARGUMENT, Lang::txt('COM_OAIPMH_ILLEGAL_ARGUMENT', 'set'), $verb);
             }
             if (!$service->getError() && $from) {
                 $service->error($service::ERROR_BAD_ARGUMENT, Lang::txt('COM_OAIPMH_ILLEGAL_ARGUMENT', 'from'), $verb);
             }
             if (!$service->getError() && $until) {
                 $service->error($service::ERROR_BAD_ARGUMENT, Lang::txt('COM_OAIPMH_ILLEGAL_ARGUMENT', 'until'), $verb);
             }
             if (!$service->getError()) {
                 $service->sets();
             }
             break;
         case 'ListIdentifiers':
             if (!empty($resumption)) {
                 try {
                     $data = $service->decodeToken($resumption);
                 } catch (\Exception $e) {
                     $service->error($service::ERROR_BAD_RESUMPTION_TOKEN, null, $verb);
                 }
                 if (!$service->getError()) {
                     if (!$data || !is_array($data)) {
                         $service->error($service::ERROR_BAD_RESUMPTION_TOKEN, null, $verb);
                     } else {
                         $service->set('limit', isset($data['limit']) ? $data['limit'] : $service->get('limit'));
                         $service->set('start', isset($data['start']) ? $data['start'] + $service->get('limit') : $service->get('start'));
                         $from = isset($data['from']) ? $data['from'] : $from;
                         $until = isset($data['until']) ? $data['until'] : $until;
                         $set = isset($data['set']) ? $data['set'] : $set;
                         $metadata = isset($data['prefix']) ? $data['prefix'] : $metadata;
                         $service->set('metadataPrefix', $metadata);
                     }
                 }
             }
             if (!$service->getError() && !$metadata) {
                 $service->error($service::ERROR_BAD_ARGUMENT, Lang::txt('COM_OAIPMH_ILLEGAL_ARGUMENT', 'metadataPrefix'), $verb);
             }
             if (!$service->getError()) {
                 $service->setSchema($metadata);
             }
             if (!$service->getError() && $identifier) {
                 $service->error($service::ERROR_BAD_ARGUMENT, Lang::txt('COM_OAIPMH_ILLEGAL_ARGUMENT', 'identifier'), $verb);
             }
             if (!$service->getError()) {
                 $service->identifiers($from, $until, $set);
             }
             break;
         case 'ListRecords':
             if (!empty($resumption)) {
                 try {
                     $data = $service->decodeToken($resumption);
                 } catch (\Exception $e) {
                     $service->error($service::ERROR_BAD_RESUMPTION_TOKEN, null, $verb);
                 }
                 if (!$service->getError()) {
                     if (!$data || !is_array($data)) {
                         $service->error($service::ERROR_BAD_RESUMPTION_TOKEN, null, $verb);
                     } else {
                         $service->set('limit', isset($data['limit']) ? $data['limit'] : $service->get('limit'));
                         $service->set('start', isset($data['start']) ? $data['start'] + $service->get('limit') : $service->get('start'));
                         $from = isset($data['from']) ? $data['from'] : $from;
                         $until = isset($data['until']) ? $data['until'] : $until;
                         $set = isset($data['set']) ? $data['set'] : $set;
                         $metadata = isset($data['prefix']) ? $data['prefix'] : $metadata;
                         $service->set('metadataPrefix', $metadata);
                     }
                 }
             }
             if (!$service->getError() && !$metadata) {
                 $service->error($service::ERROR_BAD_ARGUMENT, Lang::txt('COM_OAIPMH_ILLEGAL_ARGUMENT', 'metadataPrefix'), $verb);
             }
             if (!$service->getError()) {
                 $service->setSchema($metadata);
             }
             if (!$service->getError() && $identifier) {
                 $service->error($service::ERROR_BAD_ARGUMENT, Lang::txt('COM_OAIPMH_ILLEGAL_ARGUMENT', 'identifier'), $verb);
             }
             if (!$service->getError()) {
                 $service->records($from, $until, $set);
             }
             break;
         case 'GetRecord':
             if (!$metadata) {
                 $service->error($service::ERROR_BAD_ARGUMENT, Lang::txt('COM_OAIPMH_ILLEGAL_ARGUMENT', 'metadataPrefix'), $verb);
             }
             if (!$service->getError()) {
                 $service->setSchema($metadata);
             }
             if (!$service->getError() && $set) {
                 $service->error($service::ERROR_BAD_ARGUMENT, Lang::txt('COM_OAIPMH_ILLEGAL_ARGUMENT', 'set'), $verb);
             }
             if (!$service->getError() && $from) {
                 $service->error($service::ERROR_BAD_ARGUMENT, Lang::txt('COM_OAIPMH_ILLEGAL_ARGUMENT', 'from'), $verb);
             }
             if (!$service->getError() && $until) {
                 $service->error($service::ERROR_BAD_ARGUMENT, Lang::txt('COM_OAIPMH_ILLEGAL_ARGUMENT', 'until'), $verb);
             }
             if (!$service->getError() && $resumption) {
                 $service->error($service::ERROR_BAD_ARGUMENT, Lang::txt('COM_OAIPMH_ILLEGAL_ARGUMENT', 'resumptionToken'), $verb);
             }
             if (!$service->getError()) {
                 if (!$identifier) {
                     $service->error($service::ERROR_BAD_ID);
                 } else {
                     $service->record($identifier);
                 }
             }
             break;
         default:
             $service->error($service::ERROR_BAD_VERB, Lang::txt('COM_OAIPMH_ILLEGAL_VERB'));
             break;
     }
     echo $service;
 }