function flexiform_conditional_fields_required_element_validate in Flexiform 7
Validate elements that have a required dependency.
1 call to flexiform_conditional_fields_required_element_validate()
- flexiform_conditional_fields_form_validate in flexiform_conditional_fields/
flexiform_conditional_fields.module - Form Validate for flexiform conditional fields.
File
- flexiform_conditional_fields/
flexiform_conditional_fields.module, line 230 - Main module code for flexiform conditional fields integrations.
Code
function flexiform_conditional_fields_required_element_validate($element, &$form_state, $form) {
// Get the flexiform_element.
$flexiform_element = FALSE;
$array_parents = $element['#array_parents'];
if (!empty($element['#flexiform_element'])) {
$flexiform_element = $element['#flexiform_element'];
}
else {
while (array_pop($array_parents) !== FALSE) {
$el = drupal_array_get_nested_value($form, $array_parents);
if (!empty($el['#flexiform_element'])) {
$flexiform_element = $el['#flexiform_element'];
break;
}
}
}
// If we never found a flexiform_element, skip over.
if (!$flexiform_element) {
return;
}
// Get the form element that is the root of the flexiform.
while (array_pop($array_parents) !== FALSE) {
$el = drupal_array_get_nested_value($form, $array_parents);
if (!empty($el['#flexiform_builder'])) {
$flexiform_form = $el;
break;
}
}
// If the element is not empty, then we're never going to validate badly.
if (!$flexiform_element
->formIsEmpty($flexiform_form, $form_state, $element['#entity'], $element['#language'])) {
return;
}
// Now we need to work out whether any of the conditions were met.
foreach ($element['#fcfv_elements'] as $namespace => $dependency) {
$condition_met = flexiform_conditional_fields_element_condition_met($dependency['element'], $flexiform_form, $form_state, $dependency['options']);
if ($dependency['state'] == 'required' && $condition_met || !$condition_met && $dependency['state'] == '!required') {
form_error($element, t('@label is required', array(
'@label' => $flexiform_element
->label(),
)));
}
}
}