Skip to content

Commit 23da438

Browse files
committed
fixup! fix: update dateMin and dateMax to accept string or integer formats and enhance validation logic
Signed-off-by: Christian Hartmann <chris-hartmann@gmx.de>
1 parent 76215a3 commit 23da438

2 files changed

Lines changed: 12 additions & 12 deletions

File tree

lib/Service/FormsService.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -867,8 +867,8 @@ public function areExtraSettingsValid(array $extraSettings, string $questionType
867867

868868
// Validate dateMin format
869869
if (isset($extraSettings['dateMin'])) {
870-
if (is_int($extraSettings['dateMin'])) {
871-
$dateMinDate = (new \DateTime())->setTimestamp($extraSettings['dateMin'])->setTime(0, 0, 0);
870+
if (is_numeric($extraSettings['dateMin'])) {
871+
$dateMinDate = (new \DateTime())->setTimestamp((int) $extraSettings['dateMin'])->setTime(0, 0, 0);
872872
} else {
873873
$dateMinString = $extraSettings['dateMin'];
874874
$dateMinDate = \DateTime::createFromFormat('!' . $format, $dateMinString);
@@ -880,8 +880,8 @@ public function areExtraSettingsValid(array $extraSettings, string $questionType
880880

881881
// Validate dateMax format
882882
if (isset($extraSettings['dateMax'])) {
883-
if (is_int($extraSettings['dateMax'])) {
884-
$dateMaxDate = (new \DateTime())->setTimestamp($extraSettings['dateMax'])->setTime(0, 0, 0);
883+
if (is_numeric($extraSettings['dateMax'])) {
884+
$dateMaxDate = (new \DateTime())->setTimestamp((int) $extraSettings['dateMax'])->setTime(0, 0, 0);
885885
} else {
886886
$dateMaxString = $extraSettings['dateMax'];
887887
$dateMaxDate = \DateTime::createFromFormat('!' . $format, $dateMaxString);

lib/Service/SubmissionService.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -753,13 +753,13 @@ private function validateDateTime(array $answers, string $format, ?string $text
753753

754754
if ($extraSettings) {
755755
$dateMin = isset($extraSettings['dateMin'])
756-
? (is_int($extraSettings['dateMin'])
757-
? (new DateTime())->setTimestamp($extraSettings['dateMin'])->setTime(0, 0, 0)
756+
? (is_numeric($extraSettings['dateMin'])
757+
? (new DateTime())->setTimestamp((int) $extraSettings['dateMin'])->setTime(0, 0, 0)
758758
: DateTime::createFromFormat('!' . $format, $extraSettings['dateMin']))
759759
: null;
760760
$dateMax = isset($extraSettings['dateMax'])
761-
? (is_int($extraSettings['dateMax'])
762-
? (new DateTime())->setTimestamp($extraSettings['dateMax'])->setTime(0, 0, 0)
761+
? (is_numeric($extraSettings['dateMax'])
762+
? (new DateTime())->setTimestamp((int) $extraSettings['dateMax'])->setTime(0, 0, 0)
763763
: DateTime::createFromFormat('!' . $format, $extraSettings['dateMax']))
764764
: null;
765765
$timeMin = isset($extraSettings['timeMin'])
@@ -773,10 +773,10 @@ private function validateDateTime(array $answers, string $format, ?string $text
773773
? (DateTime::createFromFormat('!' . $format, $dateStr) ?: $d)
774774
: $d;
775775

776-
if (($dateMin !== null && $compareDate < $dateMin)
777-
|| ($dateMax !== null && $compareDate > $dateMax)
778-
|| ($timeMin !== null && $d < $timeMin)
779-
|| ($timeMax !== null && $d > $timeMax)
776+
if (($dateMin instanceof \DateTimeInterface && $compareDate < $dateMin)
777+
|| ($dateMax instanceof \DateTimeInterface && $compareDate > $dateMax)
778+
|| ($timeMin instanceof \DateTimeInterface && $d < $timeMin)
779+
|| ($timeMax instanceof \DateTimeInterface && $d > $timeMax)
780780
) {
781781
throw new \InvalidArgumentException(sprintf('Date/time is not in the allowed range for question "%s".', $text));
782782
}

0 commit comments

Comments
 (0)