You are here

function unique_field_ajax_validate_unique in Unique field ajax 2.x

Same name and namespace in other branches
  1. 8 unique_field_ajax.module \unique_field_ajax_validate_unique()

Element Validate callback to validate a field.

Throws

\Drupal\Component\Plugin\Exception\PluginNotFoundException

\Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException

\Drupal\Core\Entity\EntityMalformedException

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

File

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

Code

function unique_field_ajax_validate_unique($element, FormStateInterface $form_state, array $form) {
  $field_definition = $element['#unique_field_ajax_settings']['field_definition'];
  $property = $field_definition
    ->getFieldStorageDefinition()
    ->getMainPropertyName();
  $entity = $form_state
    ->getFormObject()
    ->getEntity();

  // If !isset lang_code set it to 0.
  $langcode = !empty($form_state
    ->getValues()['langcode'][0]['value']) && $form_state
    ->getValues()['langcode'][0]['value'] ? $form_state
    ->getValues()['langcode'][0]['value'] : '0';
  $field_name = $element['#unique_field_ajax_settings']['field_name'];
  $value = $form_state
    ->getValue($field_name);
  $entity_type = $entity
    ->getEntityTypeId();
  $per_lang = $element['#unique_field_ajax_settings']['per_lang'];

  // If field is not unique set error.
  $valid = unique_field_ajax_is_unique($entity_type, $langcode, $field_name, $value[0][$property], $entity
    ->bundle(), $per_lang, $entity);
  $message = unique_field_ajax_custom_message($entity, $element, $valid, $property, FALSE);
  if ($valid !== TRUE) {
    $form_state
      ->setErrorByName($field_name, $message);
    $form_state
      ->setRebuild();
  }
}