You are here

public function AutocompleteTagsWidget::elementValidate in Entity reference 8

Implements Drupal\entityreference\Plugin\field\widget\DefaultAutocompleteWidget::elementValidate()

Overrides AutocompleteWidgetBase::elementValidate

File

lib/Drupal/entityreference/Plugin/field/widget/AutocompleteTagsWidget.php, line 52
Definition of Drupal\entityreference\Plugin\field\widget\AutocompleteTagsWidget.

Class

AutocompleteTagsWidget
Plugin implementation of the 'entityreference autocomplete-tags' widget.

Namespace

Drupal\entityreference\Plugin\field\widget

Code

public function elementValidate($element, &$form_state) {
  $value = array();

  // If a value was entered into the autocomplete.
  if (!empty($element['#value'])) {
    $entities = drupal_explode_tags($element['#value']);
    $value = array();
    foreach ($entities as $entity) {

      // Take "label (entity id)', match the id from parenthesis.
      if (preg_match("/.+\\((\\d+)\\)/", $entity, $matches)) {
        $value[] = array(
          'target_id' => $matches[1],
        );
      }
      else {

        // Try to get a match from the input string when the user didn't use the
        // autocomplete but filled in a value manually.
        $instance = field_info_instance($element['#entity_type'], $element['#field_name'], $element['#bundle']);
        $handler = entityreference_get_selection_handler($field, $instance);
        $value[] = array(
          'target_id' => $handler
            ->validateAutocompleteInput($entity, $element, $form_state, $form),
        );
      }
    }
  }
  form_set_value($element, $value, $form_state);
}