You are here

function subform_set_triggering_element in Subform 7

Helper function to manually set the triggering element of a subform.

This function can be used on to manually set the triggering element of a subform. This might be useful when #subform_default_triggering_element or #subform_triggering_element are not sufficient.

Example:

function example_parent_form_process($form, &$form_state) {
  $subform_element = $form['my']['subform']['element'];
  $subform = $subform_element['#subform'];
  $subform_state =& subform_get_state($subform_element['#name'], $form_state);

  // Something conditional
  if ($form_state['values']['foo'] == 'bar') {
    $action = 'do_something_special';
  }
  else {
    $action = 'default';
  }
  subform_set_triggering_element($subform['actions'][$action], $subform_state);
}

Contains code that is duplicated here.

Parameters

$element: Element to set as the triggering element.

$form_state: Form state of the subform where $element belongs to.

See also

form_builder()

1 call to subform_set_triggering_element()
subform_parent_after_build in ./subform.module
After-build callback for form elements containing subform elements.

File

./subform.module, line 780
Defines a subform element type.

Code

function subform_set_triggering_element($element, &$form_state) {
  $form_state['triggering_element'] = $element;

  // If the triggering element specifies "button-level" validation and submit
  // handlers to run instead of the default form-level ones, then add those to
  // the form state.
  foreach (array(
    'validate',
    'submit',
  ) as $type) {
    if (isset($form_state['triggering_element']['#' . $type])) {
      $form_state[$type . '_handlers'] = $form_state['triggering_element']['#' . $type];
    }
  }

  // If the triggering element executes submit handlers, then set the form
  // state key that's needed for those handlers to run.
  if (!empty($form_state['triggering_element']['#executes_submit_callback'])) {
    $form_state['submitted'] = TRUE;
  }

  // Special processing if the triggering element is a button.
  if (isset($form_state['triggering_element']['#button_type'])) {
    $form_state['values'][$form_state['triggering_element']['#name']] = $form_state['triggering_element']['#value'];
    $form_state['clicked_button'] = $form_state['triggering_element'];
  }
}