From 3f47a3e9acadfd7cccbc4267629b775848bf1add Mon Sep 17 00:00:00 2001 From: elvill <elias.villiger@uzh.ch> Date: Thu, 8 Feb 2018 09:11:05 +0100 Subject: [PATCH] Feature #5064 - Throw user form exception on invalid date. --- extension/qfq/qfq/Constants.php | 1 + extension/qfq/qfq/store/FillStoreForm.php | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/extension/qfq/qfq/Constants.php b/extension/qfq/qfq/Constants.php index 5c1af9171..397e7dc73 100644 --- a/extension/qfq/qfq/Constants.php +++ b/extension/qfq/qfq/Constants.php @@ -187,6 +187,7 @@ const ERROR_MAX_FILE_SIZE_TOO_BIG = 1082; const ERROR_SMALLER_THAN_MIN = 1083; const ERROR_LARGER_THAN_MAX = 1084; const ERROR_INVALID_DECIMAL_FORMAT = 1085; +const ERROR_INVALID_DATE = 1086; // Subrecord const ERROR_SUBRECORD_MISSING_COLUMN_ID = 1100; diff --git a/extension/qfq/qfq/store/FillStoreForm.php b/extension/qfq/qfq/store/FillStoreForm.php index a4a6c9f4f..bd36ddc28 100644 --- a/extension/qfq/qfq/store/FillStoreForm.php +++ b/extension/qfq/qfq/store/FillStoreForm.php @@ -319,9 +319,17 @@ class FillStoreForm { throw new UserFormException("DateTime format not recognized: $placeholder / $value ", ERROR_DATE_TIME_FORMAT_NOT_RECOGNISED); } - $showTime = $formElement[FE_TYPE] == 'date' ? '0' : '1'; + $showTime = $formElement[FE_TYPE] == FE_TYPE_DATE ? '0' : '1'; $value = Support::convertDateTime($value, FORMAT_DATE_INTERNATIONAL, '1', $showTime, $formElement[FE_SHOW_SECONDS]); + if ($formElement[FE_TYPE] !== FE_TYPE_TIME) { + // Validate date (e.g. 2010-02-31) + $dateValue = explode(' ', $value)[0]; + $dateParts = explode('-', $dateValue); + if (!checkdate($dateParts[1], $dateParts[2], $dateParts[0])) + throw new UserFormException("$dateValue is not a valid date.", ERROR_INVALID_DATE); + } + return $value; } } \ No newline at end of file -- GitLab