You are here

public function DoubleField::massageFormValues in Double Field 8.3

Massages the form values into the format expected for field values.

Parameters

array $values: The submitted form values produced by the widget.

  • If the widget does not manage multiple values itself, the array holds the values generated by the multiple copies of the $element generated by the formElement() method, keyed by delta.
  • If the widget manages multiple values, the array holds the values of the form element generated by the formElement() method.

array $form: The form structure where field elements are attached to. This might be a full form structure, or a sub-element of a larger form.

\Drupal\Core\Form\FormStateInterface $form_state: The form state.

Return value

array An array of field values, keyed by delta.

Overrides WidgetBase::massageFormValues

File

src/Plugin/Field/FieldWidget/DoubleField.php, line 403

Class

DoubleField
Plugin implementation of the 'double_field' widget.

Namespace

Drupal\double_field\Plugin\Field\FieldWidget

Code

public function massageFormValues(array $values, array $form, FormStateInterface $form_state) {
  $storage_settings = $this
    ->getFieldSetting('storage');
  foreach ($values as $delta => $value) {
    foreach ([
      'first',
      'second',
    ] as $subfield) {
      if ($value[$subfield] === '') {
        $values[$delta][$subfield] = NULL;
      }
      elseif ($value[$subfield] instanceof DrupalDateTime) {
        $date = $value[$subfield];
        $storage_format = $storage_settings[$subfield]['datetime_type'] == 'datetime' ? DoubleFieldItem::DATETIME_DATETIME_STORAGE_FORMAT : DoubleFieldItem::DATETIME_DATE_STORAGE_FORMAT;

        // Before it can be saved, the time entered by the user must be
        // converted to the storage time zone.
        $storage_timezone = new \DateTimezone(DoubleFieldItem::DATETIME_STORAGE_TIMEZONE);
        $values[$delta][$subfield] = $date
          ->setTimezone($storage_timezone)
          ->format($storage_format);
      }
    }
  }
  return $values;
}