3 namespace Drupal\datetime\Plugin\Field\FieldWidget;
5 use Drupal\Core\Field\FieldItemListInterface;
6 use Drupal\Core\Form\FormStateInterface;
9 * Plugin implementation of the 'datetime_datelist' widget.
12 * id = "datetime_datelist",
13 * label = @Translation("Select list"),
19 class DateTimeDatelistWidget extends DateTimeWidgetBase {
24 public static function defaultSettings() {
27 'date_order' => 'YMD',
29 ] + parent::defaultSettings();
35 public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
36 $element = parent::formElement($items, $delta, $element, $form, $form_state);
38 // Wrap all of the select elements with a fieldset.
39 $element['#theme_wrappers'][] = 'fieldset';
41 $date_order = $this->getSetting('date_order');
43 if ($this->getFieldSetting('datetime_type') == 'datetime') {
44 $time_type = $this->getSetting('time_type');
45 $increment = $this->getSetting('increment');
52 // Set up the date part order array.
53 switch ($date_order) {
55 $date_part_order = ['year', 'month', 'day'];
59 $date_part_order = ['month', 'day', 'year'];
63 $date_part_order = ['day', 'month', 'year'];
68 $date_part_order = array_merge($date_part_order, ['hour', 'minute']);
72 $date_part_order = array_merge($date_part_order, ['hour', 'minute', 'ampm']);
80 '#type' => 'datelist',
81 '#date_increment' => $increment,
82 '#date_part_order' => $date_part_order,
83 ] + $element['value'];
91 public function settingsForm(array $form, FormStateInterface $form_state) {
92 $element = parent::settingsForm($form, $form_state);
94 $element['date_order'] = [
96 '#title' => t('Date part order'),
97 '#default_value' => $this->getSetting('date_order'),
98 '#options' => ['MDY' => t('Month/Day/Year'), 'DMY' => t('Day/Month/Year'), 'YMD' => t('Year/Month/Day')],
101 if ($this->getFieldSetting('datetime_type') == 'datetime') {
102 $element['time_type'] = [
104 '#title' => t('Time type'),
105 '#default_value' => $this->getSetting('time_type'),
106 '#options' => ['24' => t('24 hour time'), '12' => t('12 hour time')],
109 $element['increment'] = [
111 '#title' => t('Time increments'),
112 '#default_value' => $this->getSetting('increment'),
116 10 => t('10 minute'),
117 15 => t('15 minute'),
118 30 => t('30 minute'),
123 $element['time_type'] = [
128 $element['increment'] = [
130 '#value' => $this->getSetting('increment'),
140 public function settingsSummary() {
143 $summary[] = t('Date part order: @order', ['@order' => $this->getSetting('date_order')]);
144 if ($this->getFieldSetting('datetime_type') == 'datetime') {
145 $summary[] = t('Time type: @time_type', ['@time_type' => $this->getSetting('time_type')]);
146 $summary[] = t('Time increments: @increment', ['@increment' => $this->getSetting('increment')]);