function entityreference_view_widget_validate in Entity Reference View Widget 7.2
Same name and namespace in other branches
- 7 entityreference_view_widget.module \entityreference_view_widget_validate()
Pushes input values to form state.
1 string reference to 'entityreference_view_widget_validate'
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'],
)));
}
}
}