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;
}