diff --git a/conditional_fields.api.inc b/conditional_fields.api.inc index b429289..b3399af 100644 --- a/conditional_fields.api.inc +++ b/conditional_fields.api.inc @@ -43,6 +43,9 @@ function conditional_fields_states_handlers() { '#type' => 'select', '#multiple' => TRUE, ], + 'conditional_fields_states_handler_radio' => [ + '#type' => 'radios', + ], 'conditional_fields_states_handler_checkbox' => [ '#type' => 'checkbox', ], @@ -88,7 +91,6 @@ function conditional_fields_form_after_build($form, FormStateInterface &$form_st $effects = []; $state_handlers = conditional_fields_states_handlers(); - // Cycle all dependents. foreach ($form['#conditional_fields'] as $dependent => $dependent_info) { $states = array(); diff --git a/conditional_fields.states.inc b/conditional_fields.states.inc index b9ceaf6..7986590 100644 --- a/conditional_fields.states.inc +++ b/conditional_fields.states.inc @@ -40,6 +40,43 @@ function conditional_fields_states_handler_select_multiple($field, $field_info, } /** + * States handler for radios. + * + * For radio buttons and select lists a 'value' condition must be used. + */ +function conditional_fields_states_handler_radio($field, $field_info, $options, &$state) { + switch ($options['values_set']) { + case CONDITIONAL_FIELDS_DEPENDENCY_VALUES_WIDGET: + $state[$options['state']][$options['selector']] = ['value' => $options['value']]; + break; + case CONDITIONAL_FIELDS_DEPENDENCY_VALUES_AND: + $state[$options['state']][$options['selector']] = ['value' => $options['values']]; + break; + + case CONDITIONAL_FIELDS_DEPENDENCY_VALUES_REGEX: + // This just works. + break; + + case CONDITIONAL_FIELDS_DEPENDENCY_VALUES_XOR: + $select_states[$options['state']][] = 'xor'; + case CONDITIONAL_FIELDS_DEPENDENCY_VALUES_NOT: + case CONDITIONAL_FIELDS_DEPENDENCY_VALUES_OR: + $select_states = []; + $values_array = explode("\r\n", $options['values']); + foreach ($values_array as $value) { + $select_states[$options['state']][] = [ + $options['selector'] => [ + $options['condition'] => $value, + ], + ]; + } + + $state = $select_states; + break; + } +} + +/** * States handler for single on/off checkbox. */ function conditional_fields_states_handler_checkbox($field, $field_info, $options, &$state) { @@ -265,4 +302,4 @@ function conditional_fields_field_selector($field) { } return FALSE; -} \ No newline at end of file +} diff --git a/src/Form/ConditionalFieldEditForm.php b/src/Form/ConditionalFieldEditForm.php index bf89fa3..98647ba 100644 --- a/src/Form/ConditionalFieldEditForm.php +++ b/src/Form/ConditionalFieldEditForm.php @@ -285,10 +285,15 @@ class ConditionalFieldEditForm extends FormBase { 'element_view_roles', ]; + $dependee = $field['third_party_settings']['conditional_fields'][$uuid]['dependee']; + foreach ($values as $key => $value) { if (in_array($key, $exclude_fields) || empty($value)) { continue; } + elseif($key==$dependee){ + $settings['value'] = $value[0]['target_id']; + } else { $settings[$key] = $value; }