function DateRangeDatelistWidget::formElement

Same name and namespace in other branches
  1. 9 core/modules/datetime_range/src/Plugin/Field/FieldWidget/DateRangeDatelistWidget.php \Drupal\datetime_range\Plugin\Field\FieldWidget\DateRangeDatelistWidget::formElement()
  2. 8.9.x core/modules/datetime_range/src/Plugin/Field/FieldWidget/DateRangeDatelistWidget.php \Drupal\datetime_range\Plugin\Field\FieldWidget\DateRangeDatelistWidget::formElement()
  3. 10 core/modules/datetime_range/src/Plugin/Field/FieldWidget/DateRangeDatelistWidget.php \Drupal\datetime_range\Plugin\Field\FieldWidget\DateRangeDatelistWidget::formElement()

Overrides DateRangeWidgetBase::formElement

File

core/modules/datetime_range/src/Plugin/Field/FieldWidget/DateRangeDatelistWidget.php, line 35

Class

DateRangeDatelistWidget
Plugin implementation of the 'daterange_datelist' widget.

Namespace

Drupal\datetime_range\Plugin\Field\FieldWidget

Code

public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
    $element = parent::formElement($items, $delta, $element, $form, $form_state);
    $date_order = $this->getSetting('date_order');
    if ($this->getFieldSetting('datetime_type') == DateRangeItem::DATETIME_TYPE_DATETIME) {
        $time_type = $this->getSetting('time_type');
        $increment = $this->getSetting('increment');
    }
    else {
        $time_type = '';
        $increment = '';
    }
    // Set up the date part order array.
    switch ($date_order) {
        default:
        case 'YMD':
            $date_part_order = [
                'year',
                'month',
                'day',
            ];
            break;
        case 'MDY':
            $date_part_order = [
                'month',
                'day',
                'year',
            ];
            break;
        case 'DMY':
            $date_part_order = [
                'day',
                'month',
                'year',
            ];
            break;
    }
    switch ($time_type) {
        case '24':
            $date_part_order = array_merge($date_part_order, [
                'hour',
                'minute',
            ]);
            break;
        case '12':
            $date_part_order = array_merge($date_part_order, [
                'hour',
                'minute',
                'ampm',
            ]);
            break;
        case 'none':
            break;
    }
    $element['value'] = [
        '#type' => 'datelist',
        '#date_increment' => $increment,
        '#date_part_order' => $date_part_order,
    ] + $element['value'];
    $element['end_value'] = [
        '#type' => 'datelist',
        '#date_increment' => $increment,
        '#date_part_order' => $date_part_order,
    ] + $element['end_value'];
    return $element;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.