public static function DateBase::validateDate in Webform 8.5
Same name and namespace in other branches
- 6.x src/Plugin/WebformElement/DateBase.php \Drupal\webform\Plugin\WebformElement\DateBase::validateDate()
Webform element validation handler for date elements.
Note that #required is validated by _form_validate() already.
See also
\Drupal\Core\Render\Element\Number::validateNumber
File
- src/
Plugin/ WebformElement/ DateBase.php, line 491
Class
- DateBase
- Provides a base 'date' class.
Namespace
Drupal\webform\Plugin\WebformElementCode
public static function validateDate(&$element, FormStateInterface $form_state, &$complete_form) {
$value = $element['#value'];
$name = empty($element['#title']) ? $element['#parents'][0] : $element['#title'];
$date_date_format = !empty($element['#date_date_format']) ? $element['#date_date_format'] : DateFormat::load('html_date')
->getPattern();
$date_time_format = !empty($element['#date_time_format']) ? $element['#date_time_format'] : DateFormat::load('html_time')
->getPattern();
// Convert DrupalDateTime array and object to ISO datetime.
if (is_array($value)) {
$value = $value['object'] ? $value['object']
->format(DateFormat::load('html_datetime')
->getPattern()) : '';
}
elseif ($value) {
$datetime = WebformDateHelper::createFromFormat($date_date_format, $value);
if ($datetime === FALSE || static::formatDate($date_date_format, $datetime
->getTimestamp()) !== $value) {
$form_state
->setError($element, t('%name must be a valid date.', [
'%name' => $name,
]));
$value = '';
}
else {
// Clear timestamp to date elements.
if ($element['#type'] === 'date') {
$datetime
->setTime(0, 0, 0);
$value = $datetime
->format(DateFormat::load('html_date')
->getPattern());
}
else {
$value = $datetime
->format(DateFormat::load('html_datetime')
->getPattern());
}
}
}
$form_state
->setValueForElement($element, $value);
if ($value === '') {
return;
}
$time = strtotime($value);
// Ensure that the input is greater than the #date_date_min property, if set.
if (isset($element['#date_date_min'])) {
$min = strtotime(static::formatDate('Y-m-d', strtotime($element['#date_date_min'])));
if ($time < $min) {
$form_state
->setError($element, t('%name must be on or after %min.', [
'%name' => $name,
'%min' => static::formatDate($date_date_format, $min),
]));
}
}
// Ensure that the input is less than the #date_date_max property, if set.
if (isset($element['#date_date_max'])) {
$max = strtotime(static::formatDate('Y-m-d 23:59:59', strtotime($element['#date_date_max'])));
if ($time > $max) {
$form_state
->setError($element, t('%name must be on or before %max.', [
'%name' => $name,
'%max' => static::formatDate($date_date_format, $max),
]));
}
}
// Ensure that the input is greater than the #date_min property, if set.
if (isset($element['#date_min'])) {
$min = strtotime($element['#date_min']);
if ($time < $min) {
$form_state
->setError($element, t('%name must be on or after %min.', [
'%name' => $name,
'%min' => static::formatDate($date_date_format, $min) . ' ' . static::formatDate($date_time_format, $min),
]));
}
}
// Ensure that the input is less than the #date_max property, if set.
if (isset($element['#date_max'])) {
$max = strtotime($element['#date_max']);
if ($time > $max) {
$form_state
->setError($element, t('%name must be on or before %max.', [
'%name' => $name,
'%max' => static::formatDate($date_date_format, $max) . ' ' . static::formatDate($date_time_format, $max),
]));
}
}
// Ensure that the input is a day of week.
if (!empty($element['#date_days'])) {
$days = $element['#date_days'];
$day = date('w', $time);
if (!in_array($day, $days)) {
$form_state
->setError($element, t('%name must be a %days.', [
'%name' => $name,
'%days' => WebformArrayHelper::toString(array_intersect_key(DateHelper::weekDays(TRUE), array_combine($days, $days)), t('or')),
]));
}
}
}