public static function DateBase::preValidateDate in Webform 6.x
Same name and namespace in other branches
- 8.5 src/Plugin/WebformElement/DateBase.php \Drupal\webform\Plugin\WebformElement\DateBase::preValidateDate()
Webform element pre validation handler for Date elements.
File
- src/
Plugin/ WebformElement/ DateBase.php, line 476
Class
- DateBase
- Provides a base 'date' class.
Namespace
Drupal\webform\Plugin\WebformElementCode
public static function preValidateDate(&$element, FormStateInterface $form_state, &$complete_form) {
// ISSUE #2723159:
// Datetime form element cannot validate when using a
// format without seconds.
// WORKAROUND:
// Append the second format before the time element is validated.
//
// @see \Drupal\Core\Datetime\Element\Datetime::valueCallback
// @see https://www.drupal.org/node/2723159
if ($element['#type'] === 'datetime' && $element['#date_time_format'] === 'H:i' && strlen($element['#value']['time']) === 8) {
$element['#date_time_format'] = 'H:i:s';
}
// ISSUE:
// Date list in composite element is missing the date object.
//
// WORKAROUND:
// Manually set the date object.
$date_element_types = [
'datelist' => '\\Drupal\\Core\\Datetime\\Element\\Datelist',
'datetime' => '\\Drupal\\Core\\Datetime\\Element\\Datetime',
];
if (isset($date_element_types[$element['#type']])) {
$date_class = $date_element_types[$element['#type']];
$input_exists = FALSE;
$input = NestedArray::getValue($form_state
->getValues(), $element['#parents'], $input_exists);
if (!isset($input['object'])) {
// Time picker converts all submitted time values to H:i:s format.
// @see \Drupal\webform\Element\WebformTime::validateWebformTime
if (isset($element['#date_time_element']) && $element['#date_time_element'] === 'timepicker') {
$element['#date_time_format'] = 'H:i:s';
}
$input = $date_class::valueCallback($element, $input, $form_state);
$form_state
->setValueForElement($element, $input);
$element['#value'] = $input;
}
}
}