You are here

function _unique_field_ajax_process in Unique field ajax 8

Same name and namespace in other branches
  1. 2.x unique_field_ajax.module \_unique_field_ajax_process()

Attach ajax to unique field.

Parameters

$element:

\Drupal\Core\Form\FormStateInterface $form_state:

$form:

Return value

mixed

1 string reference to '_unique_field_ajax_process'
unique_field_ajax_field_widget_form_alter in ./unique_field_ajax.module
Attaching data to unique fields.

File

./unique_field_ajax.module, line 160
Unique value for cck fields check module.

Code

function _unique_field_ajax_process($element, FormStateInterface &$form_state, &$form) {
  $field_name = $element['value']['#unique_field_ajax_settings']['field_name'];
  $field_definition = $element['value']['#unique_field_ajax_settings']['field_definition'];
  $field_label = $field_definition
    ->label();
  $wrapper = 'unique-' . $field_name;
  if (!empty($form['#attached']['library']) && !in_array('unique_field_ajax/unique_event', $form['#attached']['library'])) {
    $form['#attached']['library'][] = 'unique_field_ajax/unique_event';
  }
  $settings = array(
    'id' => '#' . $wrapper . ' input',
  );
  $form['#attached']['drupalSettings']['unique_field_ajax'][] = $settings;
  $element['value']['#ajax'] = [
    'callback' => '_unique_field_ajax',
    'event' => 'finishedinput',
    'wrapper' => $wrapper,
    'progress' => array(
      'type' => 'throbber',
      'message' => t('Verifying @field_label...', array(
        '@field_label' => $field_label,
      )),
    ),
  ];
  $element['value']['#prefix'] = '<div id="' . $wrapper . '">';
  $element['value']['#suffix'] = '</div>';
  $value = $form_state
    ->getValue($field_name);
  $value = !empty($value) ? $value[0]['value'] : NULL;
  $entity = $form_state
    ->getFormObject()
    ->getEntity();
  $entity_type = $entity
    ->getEntityTypeId();
  $langcode = !empty($form_state
    ->getValues()['langcode'][0]['value']) ? $form_state
    ->getValues()['langcode'][0]['value'] : '0';
  $valid = unique_field_ajax_is_unique($entity_type, $langcode, $field_name, $value, $entity
    ->bundle(), $element['value']['#unique_field_ajax_settings']['per_lang'], $entity);
  $message = $field_definition
    ->getThirdPartySetting('unique_field_ajax', 'message');
  if (empty($message)) {
    $message = t('This field has to be unique.');
  }
  if (!$valid) {
    $element['value']['#attributes']['class'][] = 'error';
    $element['value']['#attributes']['aria-invalid'] = 'true';
    $element['value']['#suffix'] = '<div class="error">' . $message . '</div>' . $element['value']['#suffix'];
  }
  return $element;
}