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