diff --git a/core/modules/datetime/config/schema/datetime.schema.yml b/core/modules/datetime/config/schema/datetime.schema.yml index aade88f..e627ce0 100644 --- a/core/modules/datetime/config/schema/datetime.schema.yml +++ b/core/modules/datetime/config/schema/datetime.schema.yml @@ -92,7 +92,7 @@ field.storage_settings.daterange: type: mapping label: 'Daterange settings' mapping: - datetime_type: + daterange_type: type: string label: 'Date type' diff --git a/core/modules/datetime/src/DateTimeComputed.php b/core/modules/datetime/src/DateTimeComputed.php index 6939994..49f0512 100644 --- a/core/modules/datetime/src/DateTimeComputed.php +++ b/core/modules/datetime/src/DateTimeComputed.php @@ -40,10 +40,12 @@ public function getValue($langcode = NULL) { return $this->date; } + /** @var \Drupal\Core\Field\FieldItemBase $item */ $item = $this->getParent(); $value = $item->{($this->definition->getSetting('date source'))}; + $type = $item->getFieldDefinition()->getType(); - $storage_format = $item->getFieldDefinition()->getSetting('datetime_type') == 'date' ? DATETIME_DATE_STORAGE_FORMAT : DATETIME_DATETIME_STORAGE_FORMAT; + $storage_format = $item->getFieldDefinition()->getSetting($type . '_type') == 'date' ? DATETIME_DATE_STORAGE_FORMAT : DATETIME_DATETIME_STORAGE_FORMAT; try { $date = DrupalDateTime::createFromFormat($storage_format, $value, DATETIME_STORAGE_TIMEZONE); if ($date instanceof DrupalDateTime && !$date->hasErrors()) { diff --git a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangeCustomFormatter.php b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangeCustomFormatter.php index 3586fb7..a0c107f 100644 --- a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangeCustomFormatter.php +++ b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangeCustomFormatter.php @@ -23,9 +23,9 @@ class DateRangeCustomFormatter extends DateRangeFormatterBase { * {@inheritdoc} */ public static function defaultSettings() { - return array( + return [ 'date_format' => DATETIME_DATETIME_STORAGE_FORMAT, - ) + parent::defaultSettings(); + ] + parent::defaultSettings(); } /** @@ -80,12 +80,12 @@ protected function formatDate($date) { public function settingsForm(array $form, FormStateInterface $form_state) { $form = parent::settingsForm($form, $form_state); - $form['date_format'] = array( + $form['date_format'] = [ '#type' => 'textfield', '#title' => $this->t('Date/time format'), '#description' => $this->t('See the documentation for PHP date formats.'), '#default_value' => $this->getSetting('date_format'), - ); + ]; return $form; } @@ -98,7 +98,7 @@ public function settingsSummary() { $date = DrupalDateTime::createFromTimestamp(REQUEST_TIME); $this->setTimeZone($date); - $summary[] = $this->t('Format: @display', array('@display' => $this->formatDate($date))); + $summary[] = $this->t('Format: @display', ['@display' => $this->formatDate($date)]); return $summary; } diff --git a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangeDefaultFormatter.php b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangeDefaultFormatter.php index e239936..dd0a19d 100644 --- a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangeDefaultFormatter.php +++ b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangeDefaultFormatter.php @@ -23,9 +23,9 @@ class DateRangeDefaultFormatter extends DateRangeFormatterBase { * {@inheritdoc} */ public static function defaultSettings() { - return array( + return [ 'format_type' => 'medium', - ) + parent::defaultSettings(); + ] + parent::defaultSettings(); } /** @@ -114,13 +114,13 @@ public function settingsForm(array $form, FormStateInterface $form_state) { $options[$type] = $type_info->label() . ' (' . $format . ')'; } - $form['format_type'] = array( + $form['format_type'] = [ '#type' => 'select', '#title' => t('Date format'), '#description' => $this->t('Choose a format for displaying the dates. Be sure to set a format appropriate for the field, i.e. omitting time for a field that only has a date.'), '#options' => $options, '#default_value' => $this->getSetting('format_type'), - ); + ]; return $form; } @@ -133,7 +133,7 @@ public function settingsSummary() { $date = DrupalDateTime::createFromTimestamp(REQUEST_TIME); $this->setTimeZone($date); - $summary[] = $this->t('Format: @display', array('@display' => $this->formatDate($date))); + $summary[] = $this->t('Format: @display', ['@display' => $this->formatDate($date)]); return $summary; } diff --git a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangeFormatterBase.php b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangeFormatterBase.php index f0b6b04..9db9053 100644 --- a/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangeFormatterBase.php +++ b/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateRangeFormatterBase.php @@ -81,10 +81,10 @@ public static function create(ContainerInterface $container, array $configuratio * {@inheritdoc} */ public static function defaultSettings() { - return array( + return [ 'separator' => '-', 'timezone_override' => '', - ) + parent::defaultSettings(); + ] + parent::defaultSettings(); } /** @@ -93,20 +93,20 @@ public static function defaultSettings() { public function settingsForm(array $form, FormStateInterface $form_state) { $form = parent::settingsForm($form, $form_state); - $form['separator'] = array( + $form['separator'] = [ '#type' => 'textfield', '#title' => $this->t('Date separator'), '#description' => $this->t('The string to separate the start and end dates'), '#default_value' => $this->getSetting('separator'), - ); + ]; - $form['timezone_override'] = array( + $form['timezone_override'] = [ '#type' => 'select', '#title' => $this->t('Time zone override'), '#description' => $this->t('The time zone selected here will always be used'), '#options' => system_time_zones(TRUE), '#default_value' => $this->getSetting('timezone_override'), - ); + ]; return $form; } @@ -118,11 +118,11 @@ public function settingsSummary() { $summary = parent::settingsSummary(); if ($separator = $this->getSetting('separator')) { - $summary[] = $this->t('Separator: %separator', array('%separator' => $separator)); + $summary[] = $this->t('Separator: %separator', ['%separator' => $separator]); } if ($override = $this->getSetting('timezone_override')) { - $summary[] = $this->t('Time zone: @timezone', array('@timezone' => $override)); + $summary[] = $this->t('Time zone: @timezone', ['@timezone' => $override]); } return $summary; diff --git a/core/modules/datetime/src/Plugin/Field/FieldType/DateRangeFieldItemList.php b/core/modules/datetime/src/Plugin/Field/FieldType/DateRangeFieldItemList.php index 1f9c6bb..2fedb5a 100644 --- a/core/modules/datetime/src/Plugin/Field/FieldType/DateRangeFieldItemList.php +++ b/core/modules/datetime/src/Plugin/Field/FieldType/DateRangeFieldItemList.php @@ -30,31 +30,31 @@ public function defaultValuesForm(array &$form, FormStateInterface $form_state) if (empty($this->getFieldDefinition()->getDefaultValueCallback())) { $default_value = $this->getFieldDefinition()->getDefaultValueLiteral(); - $element = array( - '#parents' => array('default_value_input'), - 'default_date_type' => array( + $element = [ + '#parents' => ['default_value_input'], + 'default_date_type' => [ '#type' => 'select', '#title' => t('Default dates'), '#description' => t('Set a default value for these dates.'), '#default_value' => isset($default_value[0]['default_date_type']) ? $default_value[0]['default_date_type'] : '', - '#options' => array( + '#options' => [ static::DEFAULT_VALUE_NOW => t('Current date'), static::DEFAULT_VALUE_CUSTOM => t('Relative date'), - ), + ], '#empty_value' => '', - ), - 'default_date' => array( + ], + 'default_date' => [ '#type' => 'textfield', '#title' => t('Relative default value'), '#description' => t("Describe a time by reference to the current day, like '+90 days' (90 days from the day the field is created) or '+1 Saturday' (the next Saturday). See strtotime for more details."), '#default_value' => (isset($default_value[0]['default_date_type']) && $default_value[0]['default_date_type'] == static::DEFAULT_VALUE_CUSTOM) ? $default_value[0]['default_date'] : '', - '#states' => array( - 'visible' => array( - ':input[id="edit-default-value-input-default-date-type"]' => array('value' => static::DEFAULT_VALUE_CUSTOM), - ) - ) - ) - ); + '#states' => [ + 'visible' => [ + ':input[id="edit-default-value-input-default-date-type"]' => ['value' => static::DEFAULT_VALUE_CUSTOM], + ], + ], + ], + ]; return $element; } @@ -65,7 +65,7 @@ public function defaultValuesForm(array &$form, FormStateInterface $form_state) */ public function defaultValuesFormValidate(array $element, array &$form, FormStateInterface $form_state) { if ($form_state->getValue(['default_value_input', 'default_date_type']) == static::DEFAULT_VALUE_CUSTOM) { - $is_strtotime = @strtotime($form_state->getValue(array('default_value_input', 'default_date'))); + $is_strtotime = @strtotime($form_state->getValue(['default_value_input', 'default_date'])); if (!$is_strtotime) { $form_state->setErrorByName('default_value_input][default_date', t('The relative date value entered is invalid.')); } @@ -76,13 +76,13 @@ public function defaultValuesFormValidate(array $element, array &$form, FormStat * {@inheritdoc} */ public function defaultValuesFormSubmit(array $element, array &$form, FormStateInterface $form_state) { - if ($form_state->getValue(array('default_value_input', 'default_date_type'))) { - if ($form_state->getValue(array('default_value_input', 'default_date_type')) == static::DEFAULT_VALUE_NOW) { + if ($form_state->getValue(['default_value_input', 'default_date_type'])) { + if ($form_state->getValue(['default_value_input', 'default_date_type']) == static::DEFAULT_VALUE_NOW) { $form_state->setValueForElement($element['default_date'], static::DEFAULT_VALUE_NOW); } - return array($form_state->getValue('default_value_input')); + return [$form_state->getValue('default_value_input')]; } - return array(); + return []; } /** @@ -100,14 +100,14 @@ public static function processDefaultValue($default_value, FieldableEntityInterf // We only provide a default value for the first item, as do all fields. // Otherwise, there is no way to clear out unwanted values on multiple // value fields. - $default_value = array( - array( + $default_value = [ + [ 'start_value' => $value, 'start_date' => $date, 'end_value' => $value, 'end_date' => $date, - ) - ); + ], + ]; } return $default_value; } diff --git a/core/modules/datetime/src/Plugin/Field/FieldType/DateRangeItem.php b/core/modules/datetime/src/Plugin/Field/FieldType/DateRangeItem.php index 6aca3b2..3e8aafa 100644 --- a/core/modules/datetime/src/Plugin/Field/FieldType/DateRangeItem.php +++ b/core/modules/datetime/src/Plugin/Field/FieldType/DateRangeItem.php @@ -26,9 +26,9 @@ class DateRangeItem extends FieldItemBase { * {@inheritdoc} */ public static function defaultStorageSettings() { - return array( - 'daterange_type' => 'daterange', - ) + parent::defaultStorageSettings(); + return [ + 'daterange_type' => 'datetime', + ] + parent::defaultStorageSettings(); } /** @@ -74,43 +74,43 @@ public static function propertyDefinitions(FieldStorageDefinitionInterface $fiel * {@inheritdoc} */ public static function schema(FieldStorageDefinitionInterface $field_definition) { - return array( - 'columns' => array( - 'start_value' => array( + return [ + 'columns' => [ + 'start_value' => [ 'description' => 'The start date value.', 'type' => 'varchar', 'length' => 20, - ), - 'end_value' => array( + ], + 'end_value' => [ 'description' => 'The end date value.', 'type' => 'varchar', 'length' => 20, - ), - ), - 'indexes' => array( - 'start_value' => array('start_value'), - 'end_value' => array('end_value'), - ), - ); + ], + ], + 'indexes' => [ + 'start_value' => ['start_value'], + 'end_value' => ['end_value'], + ], + ]; } /** * {@inheritdoc} */ public function storageSettingsForm(array &$form, FormStateInterface $form_state, $has_data) { - $element = array(); + $element = []; - $element['datetime_type'] = array( + $element['daterange_type'] = [ '#type' => 'select', '#title' => $this->t('Date type'), '#description' => $this->t('Choose the type of date to create.'), - '#default_value' => $this->getSetting('datetime_type'), - '#options' => array( + '#default_value' => $this->getSetting('daterange_type'), + '#options' => [ static::DATERANGE_TYPE_DATETIME => t('Date and time'), static::DATERANGE_TYPE_DATE => t('Date only'), - ), + ], '#disabled' => $has_data, - ); + ]; return $element; } diff --git a/core/modules/datetime/src/Plugin/Field/FieldWidget/DateRangeDatelistWidget.php b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateRangeDatelistWidget.php index ffc54f5..4dea3e7 100644 --- a/core/modules/datetime/src/Plugin/Field/FieldWidget/DateRangeDatelistWidget.php +++ b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateRangeDatelistWidget.php @@ -48,6 +48,7 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen // Set up the date part order array. switch ($date_order) { + default: case 'YMD': $date_part_order = array('year', 'month', 'day'); break; @@ -61,29 +62,30 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen break; } switch ($time_type) { - case '24': - $date_part_order = array_merge($date_part_order, array('hour', 'minute')); - break; + default: + case '24': + $date_part_order = array_merge($date_part_order, array('hour', 'minute')); + break; - case '12': - $date_part_order = array_merge($date_part_order, array('hour', 'minute', 'ampm')); - break; + case '12': + $date_part_order = array_merge($date_part_order, array('hour', 'minute', 'ampm')); + break; - case 'none': - break; + case 'none': + break; } - $element['start_value'] = array( + $element['start_value'] = [ '#type' => 'datelist', '#date_increment' => $increment, '#date_part_order' => $date_part_order, - ) + $element['start_value']; + ] + $element['start_value']; - $element['end_value'] = array( - '#type' => 'datelist', - '#date_increment' => $increment, - '#date_part_order' => $date_part_order, - ) + $element['end_value']; + $element['end_value'] = [ + '#type' => 'datelist', + '#date_increment' => $increment, + '#date_part_order' => $date_part_order, + ] + $element['end_value']; return $element; } diff --git a/core/modules/datetime/src/Plugin/Field/FieldWidget/DateRangeDefaultWidget.php b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateRangeDefaultWidget.php index e304b1f..20228a6 100644 --- a/core/modules/datetime/src/Plugin/Field/FieldWidget/DateRangeDefaultWidget.php +++ b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateRangeDefaultWidget.php @@ -59,8 +59,6 @@ public static function create(ContainerInterface $container, array $configuratio public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) { $element = parent::formElement($items, $delta, $element, $form, $form_state); - debug([$this->getSettings()]); - // Identify the type of date and time elements to use. switch ($this->getFieldSetting('daterange_type')) { case DateRangeItem::DATERANGE_TYPE_DATE: diff --git a/core/modules/datetime/src/Plugin/Field/FieldWidget/DateRangeWidgetBase.php b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateRangeWidgetBase.php index 28c7e12..d694c28 100644 --- a/core/modules/datetime/src/Plugin/Field/FieldWidget/DateRangeWidgetBase.php +++ b/core/modules/datetime/src/Plugin/Field/FieldWidget/DateRangeWidgetBase.php @@ -56,20 +56,20 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen } $start_date->setTimezone(new \DateTimeZone($element['start_value']['#date_timezone'])); $element['start_value']['#default_value'] = $start_date; + } - if ($items[$delta]->end_date) { - /** @var \Drupal\Core\Datetime\DrupalDateTime $start_date */ - $end_date = $items[$delta]->end_date; - // The date was created and verified during field_load(), so it is safe to - // use without further inspection. - if ($this->getFieldSetting('daterange_type') == DateRangeItem::DATERANGE_TYPE_DATE) { - // A date without time will pick up the current time, use the default - // time. - datetime_date_default_time($end_date); - } - $end_date->setTimezone(new \DateTimeZone($element['end_value']['#date_timezone'])); - $element['end_value']['#default_value'] = $end_date; + if ($items[$delta]->end_date) { + /** @var \Drupal\Core\Datetime\DrupalDateTime $start_date */ + $end_date = $items[$delta]->end_date; + // The date was created and verified during field_load(), so it is safe to + // use without further inspection. + if ($this->getFieldSetting('daterange_type') == DateRangeItem::DATERANGE_TYPE_DATE) { + // A date without time will pick up the current time, use the default + // time. + datetime_date_default_time($end_date); } + $end_date->setTimezone(new \DateTimeZone($element['end_value']['#date_timezone'])); + $element['end_value']['#default_value'] = $end_date; } return $element; @@ -101,16 +101,29 @@ public function massageFormValues(array $values, array $form, FormStateInterface // Adjust the date for storage. $start_date->setTimezone(new \DateTimezone(DATETIME_STORAGE_TIMEZONE)); $item['start_value'] = $start_date->format($format); + } + + if (!empty($item['end_value']) && $item['end_value'] instanceof DrupalDateTime) { + /** @var \Drupal\Core\Datetime\DrupalDateTime $end_date */ + $end_date = $item['end_value']; + switch ($this->getFieldSetting('daterange_type')) { + case DateRangeItem::DATERANGE_TYPE_DATE: + // If this is a date-only field, set it to the default time so the + // timezone conversion can be reversed. + datetime_date_default_time($end_date); + $format = DATETIME_DATE_STORAGE_FORMAT; + break; - if (!empty($item['end_value']) && $item['end_value'] instanceof DrupalDateTime) { - /** @var \Drupal\Core\Datetime\DrupalDateTime $end_date */ - $end_date = $item['end_value']; - // Adjust the date for storage. - $end_date->setTimezone(new \DateTimezone(DATETIME_STORAGE_TIMEZONE)); - $item['end_value'] = $end_date->format($format); + default: + $format = DATETIME_DATETIME_STORAGE_FORMAT; + break; } + // Adjust the date for storage. + $end_date->setTimezone(new \DateTimezone(DATETIME_STORAGE_TIMEZONE)); + $item['end_value'] = $end_date->format($format); } } + return $values; }