You are here

function field_conditional_state_element_status in Field Conditional States 7

@todo. check the element status when form is being validated, add

@condition array $condition Description goes here.

Parameters

description:

array $element: Description goes here.

array $input: Description goes here.

2 calls to field_conditional_state_element_status()
field_conditional_state_element_validate in ./field_conditional_state.module
@todo. set empty value for invisible field and requirements to false
field_conditional_state_set_requirements in ./field_conditional_state.module
@todo. if field is not visible or disabled set requirements to false

File

./field_conditional_state.module, line 342
Main functions for field_conditional_state

Code

function field_conditional_state_element_status(&$element, $input, $condition) {
  $lang = $element['#language'];
  $field_name = isset($element['#field_name']) ? $element['#field_name'] : $element[$lang]['#field_name'];
  $element_parents = isset($element['#field_parents']) ? $element['#field_parents'] : $element[$lang]['#field_parents'];
  $field_info = field_info_field($field_name);
  if ($element_parents) {
    $input = drupal_array_get_nested_value($input, $element_parents);
  }
  $control_field_name = $condition['control_field'];

  // if checkbox is not checked.
  if (!isset($input[$control_field_name])) {
    if ($condition['state'] == 'visible' || $condition['state'] == 'enabled') {
      return 'not_available';
    }
  }
  else {
    $trigger_value_exist = field_conditional_state_trigger_value_in_field_value($input[$control_field_name][$lang], $condition['trigger_values'], $condition['condition_type']);
    if (($condition['state'] == 'visible' || $condition['state'] == 'enabled') && !$trigger_value_exist || ($condition['state'] == 'invisible' || $condition['state'] == 'disabled') && $trigger_value_exist) {
      return 'not_available';
    }
    elseif ($condition['state'] == 'required' && $trigger_value_exist) {
      $value = isset($element['fid']['#value']) ? $element['fid']['#value'] : $element['#value'];

      // Single value - simple check, if value is empty return required.
      if ($field_info['cardinality'] == 1) {

        // Support for date field.
        if ($element['#type'] == 'date_combo') {
          $granularity = $field_info['settings']['granularity'];
          $empty_date = field_conditional_state_check_date_value($granularity, $element['#value']['value']);
          if ($empty_date) {
            $element['value']['#required'] = TRUE;
          }
        }
        if (empty($value) || $value == '_none') {
          return 'required';
        }
      }
      elseif ($field_info['cardinality'] > 1) {
        if (is_array($value)) {
          if (array_key_exists('_none', $value)) {
            unset($element['#value']['_none']);
          }
          if (empty($value) && $element['#type'] != 'date_combo') {
            return 'required';
          }
        }
        elseif (empty($value)) {
          static $values;
          $values[$element['#field_name']][] = $value;
          if ($field_info['cardinality'] == count($values[$element['#field_name']]) && empty($value)) {
            foreach ($values[$element['#field_name']] as $value) {
              if ($value) {
                return FALSE;
              }
            }
            return 'required';
          }
          elseif (empty($value) && isset($element['#value']['_weight']) && $element['#value']['_weight'] == 0) {
            return 'required';
          }
        }
      }
      if (isset($element['#type']) && $element['#type'] == 'date_combo') {
        static $values;
        $granularity = $field_info['settings']['granularity'];
        $values[$element['#field_name']][] = field_conditional_state_check_date_value($granularity, $element['#value']['value']);
        if ($field_info['cardinality'] == count($values[$element['#field_name']])) {
          foreach ($values[$element['#field_name']] as $empty_value) {
            if (!$empty_value) {
              return FALSE;
            }
          }
          $element['value']['#required'] = TRUE;
        }
      }
    }
  }
  return FALSE;
}