function DateTimeDatelistWidget::formElement

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

Overrides DateTimeWidgetBase::formElement

File

core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeDatelistWidget.php, line 34

Class

DateTimeDatelistWidget
Plugin implementation of the 'datetime_datelist' widget.

Namespace

Drupal\datetime\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);
    // Wrap all of the select elements with a fieldset.
    $element['#theme_wrappers'][] = 'fieldset';
    $date_order = $this->getSetting('date_order');
    if ($this->getFieldSetting('datetime_type') == 'datetime') {
        $time_type = $this->getSetting('time_type');
        $increment = $this->getSetting('increment');
    }
    else {
        $time_type = '';
        $increment = '';
    }
    // Set up the date part order array.
    $date_part_order = match ($date_order) {    'YMD' => [
            'year',
            'month',
            'day',
        ],
        'MDY' => [
            'month',
            'day',
            'year',
        ],
        'DMY' => [
            'day',
            'month',
            'year',
        ],
    
    };
    $date_part_order = match ($time_type) {    '24' => array_merge($date_part_order, [
            'hour',
            'minute',
        ]),
        '12' => array_merge($date_part_order, [
            'hour',
            'minute',
            'ampm',
        ]),
        default => $date_part_order,
    
    };
    $element['value'] = [
        '#type' => 'datelist',
        '#date_increment' => $increment,
        '#date_part_order' => $date_part_order,
    ] + $element['value'];
    return $element;
}

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