diff --git a/core/modules/datetime_range/config/schema/datetime_range.schema.yml b/core/modules/datetime_range/config/schema/datetime_range.schema.yml index f0f93259d3..c2349ef9cb 100644 --- a/core/modules/datetime_range/config/schema/datetime_range.schema.yml +++ b/core/modules/datetime_range/config/schema/datetime_range.schema.yml @@ -53,6 +53,12 @@ field.formatter.settings.daterange_custom: type: label label: 'Separator' translation context: 'Date range separator' + display_start_date: + type: boolean + label: 'Display start date' + display_end_date: + type: boolean + label: 'Display end date' field.widget.settings.daterange_datelist: type: mapping diff --git a/core/modules/datetime_range/src/Plugin/Field/FieldFormatter/DateRangeCustomFormatter.php b/core/modules/datetime_range/src/Plugin/Field/FieldFormatter/DateRangeCustomFormatter.php index 78aa8aafe2..bf0f8e5336 100644 --- a/core/modules/datetime_range/src/Plugin/Field/FieldFormatter/DateRangeCustomFormatter.php +++ b/core/modules/datetime_range/src/Plugin/Field/FieldFormatter/DateRangeCustomFormatter.php @@ -31,6 +31,8 @@ class DateRangeCustomFormatter extends DateTimeCustomFormatter { public static function defaultSettings() { return [ 'separator' => '-', + 'display_start_date' => TRUE, + 'display_end_date' => TRUE, ] + parent::defaultSettings(); } @@ -43,6 +45,8 @@ public function viewElements(FieldItemListInterface $items, $langcode) { // markup in the base class implementation can be used instead. $elements = []; $separator = $this->getSetting('separator'); + $display_start_date = $this->getSetting('display_start_date'); + $display_end_date = $this->getSetting('display_end_date'); foreach ($items as $delta => $item) { if (!empty($item->start_date) && !empty($item->end_date)) { @@ -52,11 +56,16 @@ public function viewElements(FieldItemListInterface $items, $langcode) { $end_date = $item->end_date; if ($start_date->getTimestamp() !== $end_date->getTimestamp()) { - $elements[$delta] = [ - 'start_date' => $this->buildDate($start_date), - 'separator' => ['#plain_text' => ' ' . $separator . ' '], - 'end_date' => $this->buildDate($end_date), - ]; + $elements[$delta] = []; + if ($display_start_date) { + $elements[$delta]['start_date'] = $this->buildDate($start_date); + } + if ($display_start_date && $display_end_date) { + $elements[$delta]['separator'] = ['#plain_text' => ' ' . $separator . ' ']; + } + if ($display_end_date) { + $elements[$delta]['end_date'] = $this->buildDate($end_date); + } } else { $elements[$delta] = $this->buildDate($start_date); @@ -80,6 +89,17 @@ public function settingsForm(array $form, FormStateInterface $form_state) { '#default_value' => $this->getSetting('separator'), ]; + $form['display_start_date'] = [ + '#type' => 'checkbox', + '#title' => $this->t('Display start date'), + '#default_value' => $this->getSetting('display_start_date'), + ]; + $form['display_end_date'] = [ + '#type' => 'checkbox', + '#title' => $this->t('Display end date'), + '#default_value' => $this->getSetting('display_end_date'), + ]; + return $form; }