You are here

function field_conditional_state_element_process in Field Conditional States 7

@todo.

1 string reference to 'field_conditional_state_element_process'
field_conditional_state_element_info_alter in ./field_conditional_state.module
Implements hook_element_info_alter().

File

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

Code

function field_conditional_state_element_process($element, &$form_state, $form) {

  /*
   * $processed_fields is a "memory" of already processed field names.
   * Each occurence of a field name will get an index appended to the control_field name
   * so if there are multiple instances of one field (field collections) they can be handled separately
   */
  static $processed_fields = array();
  if (isset($element['#field_name']) && isset($element['#bundle']) && $form['#form_id'] != 'field_ui_field_edit_form') {
    $indexed_field_name = $element['#field_name'];
    if (!isset($processed_fields[$indexed_field_name]) || count($processed_fields[$indexed_field_name]) == 0) {
      $processed_fields[$indexed_field_name] = array(
        0,
      );
    }
    $element_field_name_index = max($processed_fields[$indexed_field_name]) + 1;
    $processed_fields[$indexed_field_name][] = $element_field_name_index;
    $indexed_field_name .= '_' . $element_field_name_index;
    $path = drupal_get_path('module', 'field_conditional_state');
    $element['#attached']['js'][] = "{$path}/js/conditional_state.js";
    $element['#attached']['js'][] = "{$path}/js/required_conditional_state.js";
    $control_field = field_conditional_state_is_control_field($element['#field_name'], $element['#bundle']);

    // Check if element is control element.
    if ($control_field) {
      $element['#prefix'] = '<div class="conditional_state_control_field_' . $indexed_field_name . '">';
      $element['#suffix'] = '</div>';
    }

    // Get element conditions.
    $element_conditions = field_conditional_state_get_field_conditions($element['#field_name'], $element['#bundle'], $element_field_name_index);
    if ($element_conditions) {
      $element_states = field_conditional_state_set_field_state($element_conditions);
      $conditional_states = field_conditional_state_module_invoke();
      $form_element = drupal_array_get_nested_value($form, (array) $element['#field_parents']);
      foreach ($element_states as $state => $condition) {
        if (isset($form_element[$element['#field_name']])) {
          $function = $conditional_states[$state]['state_handler'];
          $form_element[$element['#field_name']] = $function($state, $condition, $form_element[$element['#field_name']], $element);
          $form_element[$element['#field_name']]['#bundle'] = $element['#bundle'];
        }
      }
      foreach ($element_conditions as $key => $condition) {
        if (isset($conditional_states[$state]['validate_handler'])) {
          $validate_function = $conditional_states[$state]['validate_handler'];
          $form_element[$element['#field_name']]['#element_validate'][] = $validate_function;
          $form_element[$element['#field_name']]['#conditional_state'] = $condition;
        }
        if ($form_state['input']) {
          field_conditional_state_set_requirements($element, $form_state, $condition);
        }
      }
    }
  }
  return $element;
}