function TimestampFormatter::settingsForm

Same name and namespace in other branches
  1. 9 core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/TimestampFormatter.php \Drupal\Core\Field\Plugin\Field\FieldFormatter\TimestampFormatter::settingsForm()
  2. 8.9.x core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/TimestampFormatter.php \Drupal\Core\Field\Plugin\Field\FieldFormatter\TimestampFormatter::settingsForm()
  3. 11.x core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/TimestampFormatter.php \Drupal\Core\Field\Plugin\Field\FieldFormatter\TimestampFormatter::settingsForm()

Overrides FormatterBase::settingsForm

File

core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/TimestampFormatter.php, line 151

Class

TimestampFormatter
Plugin implementation of the 'timestamp' formatter.

Namespace

Drupal\Core\Field\Plugin\Field\FieldFormatter

Code

public function settingsForm(array $form, FormStateInterface $form_state) {
  $form = parent::settingsForm($form, $form_state);
  $date_formats = [];
  $requestTime = $this->time
    ->getRequestTime();
  foreach ($this->dateFormatStorage
    ->loadMultiple() as $machine_name => $value) {
    $date_formats[$machine_name] = $this->t('@name format: @date', [
      '@name' => $value->label(),
      '@date' => $this->dateFormatter
        ->format($requestTime, $machine_name),
    ]);
  }
  $date_formats[static::CUSTOM_DATE_FORMAT] = $this->t('Custom');
  $time_diff = $this->getSetting('time_diff');
  $form['time_diff']['#tree'] = TRUE;
  $form['time_diff']['enabled'] = [
    '#type' => 'checkbox',
    '#title' => $this->t("Display as a time difference (e.g. '6 months ago')"),
    '#default_value' => $time_diff['enabled'],
  ];
  $states = $this->buildStates([
    'time_diff',
    'enabled',
  ], [
    'checked' => TRUE,
  ]);
  $form['time_diff']['future_format'] = [
    '#type' => 'textfield',
    '#title' => $this->t('Future format'),
    '#description' => $this->t("Use the <code>@interval</code> placeholder to represent the formatted time difference interval. E.g. <code>@interval hence</code> will be displayed as <em>2 hours 5 minutes hence</em>."),
    '#default_value' => $time_diff['future_format'],
    '#states' => $states,
  ];
  $form['time_diff']['past_format'] = [
    '#type' => 'textfield',
    '#title' => $this->t('Past format'),
    '#description' => $this->t("Use the <code>@interval</code> placeholder to represent the formatted time difference interval. E.g. <code>@interval ago</code> will be displayed as <em>2 hours 5 minutes ago</em>."),
    '#default_value' => $time_diff['past_format'],
    '#states' => $states,
  ];
  $form['time_diff']['granularity'] = [
    '#type' => 'select',
    '#title' => $this->t('Time units'),
    '#description' => $this->t("How many time units will be used in formatting the time difference. For example, if '1' is selected then the displayed time difference will only contain a single time unit such as '2 years' or '5 minutes' never '2 years 3 months' or '5 minutes 8 seconds'."),
    '#default_value' => $time_diff['granularity'],
    '#options' => array_combine(range(1, 7), range(1, 7)),
    '#states' => $states,
  ];
  $form['time_diff']['refresh'] = [
    '#type' => 'select',
    '#title' => $this->t('Refresh interval'),
    '#description' => $this->t('How often to refresh the displayed time difference. The time difference is refreshed on client-side, by JavaScript, without reloading the page.'),
    '#default_value' => $time_diff['refresh'],
    '#options' => $this->getRefreshIntervals(),
    '#states' => $states,
  ];
  $form['time_diff']['description'] = [
    '#type' => 'item',
    '#title' => $this->t('Fallback configuration'),
    '#description' => $this->t('The configuration below is used as a fallback when JavaScript is not available on the page.'),
    '#states' => $states,
  ];
  $form['date_format'] = [
    '#type' => 'select',
    '#title' => $this->t('Date format'),
    '#options' => $date_formats,
    '#default_value' => $this->getSetting('date_format'),
  ];
  $form['custom_date_format'] = [
    '#type' => 'textfield',
    '#title' => $this->t('Custom date format'),
    '#description' => $this->t('See <a href="https://www.php.net/manual/datetime.format.php#refsect1-datetime.format-parameters" target="_blank">the documentation for PHP date formats</a>.'),
    '#default_value' => $this->getSetting('custom_date_format'),
    '#states' => $this->buildStates([
      'date_format',
    ], [
      'value' => static::CUSTOM_DATE_FORMAT,
    ]),
  ];
  $form['timezone'] = [
    '#type' => 'select',
    '#title' => $this->t('Time zone'),
    '#options' => [
      '' => $this->t('- Default site/user time zone -'),
    ] + TimeZoneFormHelper::getOptionsListByRegion(),
    '#default_value' => $this->getSetting('timezone'),
  ];
  $tooltip = $this->getSetting('tooltip');
  $form['tooltip']['#tree'] = TRUE;
  $form['tooltip']['date_format'] = [
    '#type' => 'select',
    '#title' => $this->t('Tooltip date format'),
    '#description' => $this->t('Select the date format to be used for the title and displayed on mouse hover.'),
    '#options' => $date_formats,
    '#default_value' => $tooltip['date_format'],
    '#empty_option' => $this->t('- No tooltip -'),
  ];
  $form['tooltip']['custom_date_format'] = [
    '#type' => 'textfield',
    '#title' => $this->t('Tooltip custom date format'),
    '#description' => $this->t('See <a href="http://php.net/manual/function.date.php" target="_blank">the documentation for PHP date formats</a>.'),
    '#default_value' => $tooltip['custom_date_format'],
    '#states' => $this->buildStates([
      'tooltip',
      'date_format',
    ], [
      'value' => static::CUSTOM_DATE_FORMAT,
    ]),
  ];
  return $form;
}

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