public function WidgetBase::flagErrors

Implements Drupal\field\Plugin\Type\Widget\WidgetInterface::flagErrors().

Overrides WidgetBaseInterface::flagErrors

1 method overrides WidgetBase::flagErrors()
LegacyWidget::flagErrors in drupal/core/modules/field/lib/Drupal/field/Plugin/field/widget/LegacyWidget.php
Overrides Drupal\field\Plugin\Type\Widget\WidgetBase::flagErrors().

File

drupal/core/modules/field/lib/Drupal/field/Plugin/Type/Widget/WidgetBase.php, line 367
Definition of Drupal\field\Plugin\Type\Widget\WidgetBase.

Class

WidgetBase
Base class for 'Field widget' plugin implementations.

Namespace

Drupal\field\Plugin\Type\Widget

Code

public function flagErrors(EntityInterface $entity, $langcode, array $items, array $form, array &$form_state) {
  $field_name = $this->field['field_name'];
  $field_state = field_form_get_state($form['#parents'], $field_name, $langcode, $form_state);
  if (!empty($field_state['errors'])) {

    // Locate the correct element in the the form.
    $element = drupal_array_get_nested_value($form_state['complete_form'], $field_state['array_parents']);

    // Only set errors if the element is accessible.
    if (!isset($element['#access']) || $element['#access']) {
      $definition = $this
        ->getDefinition();
      $is_multiple = $definition['multiple_values'];
      foreach ($field_state['errors'] as $delta => $delta_errors) {

        // For a multiple-value widget, pass all errors to the main widget.
        // For single-value widgets, pass errors by delta.
        if ($is_multiple) {
          $delta_element = $element;
        }
        else {
          $original_delta = $field_state['original_deltas'][$delta];
          $delta_element = $element[$original_delta];
        }
        foreach ($delta_errors as $error) {
          $error_element = $this
            ->errorElement($delta_element, $error, $form, $form_state);
          form_error($error_element, $error['message']);
        }
      }

      // Reinitialize the errors list for the next submit.
      $field_state['errors'] = array();
      field_form_set_state($form['#parents'], $field_name, $langcode, $form_state, $field_state);
    }
  }
}