You are here

function flexiform_conditional_fields_configure_form_submit in Flexiform 7

Form submit to edit conditional fields.

File

flexiform_conditional_fields/flexiform_conditional_fields.admin.inc, line 561
Admin UI for flexiform_conditional_fields.

Code

function flexiform_conditional_fields_configure_form_submit($form, &$form_state) {
  $dependent = $form['#flexiform_element']
    ->getElementNamespace();
  $dependee = $form['#flexiform_dependee']
    ->getElementNamespace();
  $dependency_key = $form['#dependency_key'];
  if ($form['#flexiform_dependee'] instanceof FlexiformElementFieldAPIInterface) {
    $dependee_field = $form['#flexiform_dependee']
      ->getField();
    $widget_type = $form_state['field'][$dependee_field['field_name']][LANGUAGE_NONE]['instance']['widget']['type'];
  }

  // TODO: validate values against allowed values.
  // TODO: unify 'value' and 'values' fields.
  $options = array(
    'state' => $form_state['values']['state'],
    'condition' => $form_state['values']['condition'],
    'grouping' => $form_state['values']['grouping'],
    'effect' => isset($form_state['values']['effect']) ? $form_state['values']['effect'] : FALSE,
    'effect_options' => isset($form_state['values']['effect'], $form_state['values']['effect_options'][$form_state['values']['effect']]) ? $form_state['values']['effect_options'][$form_state['values']['effect']] : array(),
    'element_edit' => $form_state['values']['element_edit'],
    'element_edit_per_role' => $form_state['values']['element_edit_per_role'],
    'element_edit_roles' => $form_state['values']['element_edit_roles'],
    'selector' => $form_state['values']['selector'],
  );

  // Store values only if the condition requires them.
  if ($dependee_field && $form_state['values']['condition'] == 'value') {
    $options += array(
      'values_set' => $form_state['values']['values_set'],
      // Raw user input is needed to build actual value conditions in the
      // #states array, so we store it in 'value_form'.
      'value_form' => $form_state['input']['value']['field'][$dependee_field['field_name']][LANGUAGE_NONE],
    );
    if ($options['values_set'] == CONDITIONAL_FIELDS_DEPENDENCY_VALUES_WIDGET) {
      $value = array();
      field_default_extract_form_values(NULL, NULL, array(
        'field_name' => $dependee_field['field_name'],
      ), NULL, LANGUAGE_NONE, $value, $form['value']['field'], $form_state);
      $options['value'] = $value;
    }
    elseif ($options['values_set'] == CONDITIONAL_FIELDS_DEPENDENCY_VALUES_REGEX) {

      // The regular expression is inserted in an associative array, so it will
      // be converted to a Javascript object.
      // In states_enhancements.js we will then use the "RegExp" key to
      // distinguish the object and evaluate it as a regular expression.
      $options['value'] = array(
        'RegExp' => $form_state['values']['regex'],
      );
    }
    else {
      $values = explode("\n", $form_state['values']['values']);
      $values = array_map('trim', $values);
      $values = array_filter($values, 'strlen');
      $options['values'] = $values;
    }
  }
  $options += conditional_fields_dependency_default_options();
  $form['#flexiform']->elements[$dependent]['conditional_fields'][$dependency_key] = $options;
  $form['#flexiform']
    ->save();
  drupal_set_message(t('Saved dependency configuration.'));
}