You are here

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(),
      )));
    }
  }
}