You are here

function entityreference_view_widget_validate in Entity Reference View Widget 7.2

Same name and namespace in other branches
  1. 7 entityreference_view_widget.module \entityreference_view_widget_validate()

Pushes input values to form state.

1 string reference to 'entityreference_view_widget_validate'
entityreference_view_widget_field_widget_form in ./entityreference_view_widget.module
Implements hook_field_widget_form().

File

./entityreference_view_widget.module, line 304
Entityreference view widget module.

Code

function entityreference_view_widget_validate($element, &$form_state, $form) {
  $form_parents =& $element['#array_parents'];
  $form_state_parents =& $element['#parents'];

  // Remove add more button.
  array_pop($form_parents);
  array_pop($form_state_parents);

  // In case the user doesn't have access to this field, keep old values.
  if (isset($element['#access']) && !$element['#access']) {
    return;
  }
  $form_existing = drupal_array_get_nested_value($form, $form_parents);

  // Modules like entityreference_prepopulate might hide or disable the field,
  // in that case we shouldn't check for user input.
  if (!empty($form_existing['#disabled']) || isset($form_existing['#access']) && !$form_existing['#access']) {
    return;
  }

  // In case of entity_translation and we are creating a translation, default
  // current translation language values for this field are empty, but original
  // language values will be displayed. We want to use them as current
  // translation default values.
  // Let user clearing values for this current translation next.
  $field_name = reset($form_state_parents);

  // Check current field is multilingual and some values has not been defined by
  // user.
  if (isset($form[$field_name]['#multilingual']) && $form[$field_name]['#multilingual'] && empty($form_state['input'][$field_name][$form[$field_name]['#language']])) {
    $original_language = $form['#entity']->translations->original;

    // Check translation does not exist yet.
    if (!empty($form['#entity']->{$field_name}[$original_language])) {

      // Replace input values for current field form source language to current
      // translation language.
      $form_state['input'][$field_name][$form[$field_name]['#language']] = $form_state['input'][$field_name][$original_language];
      unset($form_state['input'][$field_name][$original_language]);
    }
  }
  $input = drupal_array_get_nested_value($form_state['input'], $form_state_parents);
  $settings = $element['#ervw_settings'];
  if (!empty($input)) {
    $entity_ids = array();
    foreach ($input as $value) {
      if (!empty($value[$settings['column']])) {
        $entity_ids[] = $value[$settings['column']];
        $valid = TRUE;
      }
    }
    $form_state['ervw_ids'][$settings['index']] = $entity_ids;
    $rows = entityreference_view_widget_rows($entity_ids, $settings);

    // Put back the rows in the form.
    drupal_array_set_nested_value($form, $form_parents, $form_existing + $rows);
  }
  form_set_value($element, $input, $form_state);
  if ($settings['instance']['required'] && empty($valid)) {
    if (isset($form_existing['#field_parents']) && empty($form_existing['#field_parents'])) {
      form_set_error($settings['element'], t('@f field is required.', array(
        '@f' => $settings['instance']['label'],
      )));
    }
    else {

      // Modules utilizing #field_parents like Inline Entity Form
      // requires different sort of form error.
      form_error($element, t('@f field is required.', array(
        '@f' => $settings['instance']['label'],
      )));
    }
  }
}