- throws an error if oai request has different granularities for the from and until parameters

This commit is contained in:
Arno Kaimbacher 2020-07-27 18:34:58 +02:00
parent 77fb177f5e
commit 9d736aa2b7

View File

@ -350,18 +350,6 @@ class RequestController extends Controller
$this->proc->setParameter('', 'oai_error_message', 'The verb provided in the request is illegal.'); $this->proc->setParameter('', 'oai_error_message', 'The verb provided in the request is illegal.');
} }
private function checkmydate($date)
{
$tempDate = explode('-', $date);
return checkdate($tempDate[1], $tempDate[2], $tempDate[0]);
}
private function validateDate($date, $format = 'Y-m-d H:i:s')
{
$d = \DateTime::createFromFormat($format, $date);
return $d && $d->format($format) == $date;
}
/** /**
* Helper method for handling lists. * Helper method for handling lists.
* *
@ -437,47 +425,52 @@ class RequestController extends Controller
} }
} }
// if (array_key_exists('from', $oaiRequest) && array_key_exists('until', $oaiRequest)) { if (array_key_exists('from', $oaiRequest) && array_key_exists('until', $oaiRequest)) {
// $from = $oaiRequest['from']; $from = $oaiRequest['from'];
// $fromDate = \Illuminate\Support\Carbon::parse($from); $until = $oaiRequest['until'];
// $until = $oaiRequest['until'];
// } if (strlen($from) != strlen($until)) {
throw new OaiModelException(
'The request has different granularities for the from and until parameters.',
OaiModelError::BADARGUMENT
);
}
}
if (array_key_exists('until', $oaiRequest)) { if (array_key_exists('until', $oaiRequest)) {
$until = $oaiRequest['until']; $until = $oaiRequest['until'];
try { try {
$untilDate = \Illuminate\Support\Carbon::parse($until); $untilDate = \Illuminate\Support\Carbon::parse($until);
// if (strtotime($untilDate) > 0) { // if (strtotime($untilDate) > 0) {
$earliestPublicationDate = Dataset::earliestPublicationDate()->server_date_published;//->format('Y-m-d\TH:i:s\Z'); $earliestPublicationDate = Dataset::earliestPublicationDate()->server_date_published;
if ($earliestPublicationDate->gt($untilDate)) { if ($earliestPublicationDate->gt($untilDate)) {
throw new OaiModelException( throw new OaiModelException(
"earliestDatestamp is greater than given until date. The given values results in an empty list.", "earliestDatestamp is greater than given until date. The given values results in an empty list.",
OaiModelError::NORECORDSMATCH OaiModelError::NORECORDSMATCH
); );
} else { } else {
$finder->where('server_date_published', '<=', $untilDate); $finder->where('server_date_published', '<=', $untilDate);
$test = $finder->toSql(); $test = $finder->toSql();
} }
} } catch (OaiModelException $e) {
catch (OaiModelException $e) {
throw new OaiModelException( throw new OaiModelException(
"earliestDatestamp is greater than given until date. The given values results in an empty list.", "earliestDatestamp is greater than given until date. The given values results in an empty list.",
OaiModelError::NORECORDSMATCH OaiModelError::NORECORDSMATCH
); );
} } catch (\Exception $e) {
catch (\Exception $e) {
throw new OaiModelException( throw new OaiModelException(
'The until date argument is not valid.', 'The until date argument is not valid.',
OaiModelError::BADARGUMENT OaiModelError::BADARGUMENT
); );
} }
} }
if (array_key_exists('from', $oaiRequest)) { if (array_key_exists('from', $oaiRequest)) {
$from = $oaiRequest['from']; $from = $oaiRequest['from'];
try { try {
$fromDate = \Illuminate\Support\Carbon::parse($from); $fromDate = \Illuminate\Support\Carbon::parse($from);
// if (strtotime($fromDate) > 0) { // if (strtotime($fromDate) > 0) {
$now = new Carbon(); $now = new Carbon();
if ($fromDate->gt($now)) { if ($fromDate->gt($now)) {
throw new OaiModelException( throw new OaiModelException(
"Given from date is greater than now. The given values results in an empty list.", "Given from date is greater than now. The given values results in an empty list.",
@ -486,20 +479,19 @@ class RequestController extends Controller
} else { } else {
$finder->where('server_date_published', '>=', $fromDate); $finder->where('server_date_published', '>=', $fromDate);
} }
} } catch (OaiModelException $e) {
catch (OaiModelException $e) {
throw new OaiModelException( throw new OaiModelException(
"Given from date is greater than now. The given values results in an empty list.", "Given from date is greater than now. The given values results in an empty list.",
OaiModelError::NORECORDSMATCH OaiModelError::NORECORDSMATCH
); );
} } catch (\Exception $e) {
catch (\Exception $e) {
throw new OaiModelException( throw new OaiModelException(
'The from date argument is not valid.', 'The from date argument is not valid.',
OaiModelError::BADARGUMENT OaiModelError::BADARGUMENT
); );
} }
} }
$totalIds = $finder->count(); $totalIds = $finder->count();
$reldocIds = $finder->orderBy('publish_id')->pluck('publish_id')->toArray(); $reldocIds = $finder->orderBy('publish_id')->pluck('publish_id')->toArray();
@ -539,6 +531,7 @@ class RequestController extends Controller
$this->setParamResumption($res, $cursor, $totalIds); $this->setParamResumption($res, $cursor, $totalIds);
} }
} }
/** /**
* Set parameters for resumptionToken-line. * Set parameters for resumptionToken-line.
* *