function uc_ajax_process_form in Ubercart 7.3
Form process callback to allow multiple Ajax callbacks on form elements.
2 string references to 'uc_ajax_process_form'
- uc_cart_checkout_form in uc_cart/
uc_cart.pages.inc - The checkout form built up from the enabled checkout panes.
- uc_order_edit_form in uc_order/
uc_order.admin.inc - Displays the order edit screen, constructed via hook_uc_order_pane().
File
- uc_store/
includes/ uc_ajax_attach.inc, line 73 - Contains logic to aid in attaching multiple ajax behaviors to form elements on the checkout and order-edit forms.
Code
function uc_ajax_process_form($form, &$form_state) {
// When processing the top level form, add any variable-defined pane wrappers.
if (isset($form['#form_id'])) {
switch ($form['#form_id']) {
case 'uc_cart_checkout_form':
$config = variable_get('uc_ajax_checkout', _uc_ajax_defaults('checkout'));
foreach ($config as $key => $panes) {
foreach (array_keys($panes) as $pane) {
$config[$key][$pane] = 'uc_ajax_replace_checkout_pane';
}
}
$form_state['uc_ajax']['uc_ajax'] = $config;
break;
}
}
if (!isset($form_state['uc_ajax'])) {
return $form;
}
// We have to operate on the children rather than on the element itself, as
// #process functions are called *after* form_handle_input_elements(),
// which is where the triggering element is determined. If we haven't added
// an '#ajax' key by that time, Drupal won't be able to determine which
// callback to invoke.
foreach (element_children($form) as $child) {
$element =& $form[$child];
// Add this process function recursively to the children.
if (empty($element['#process']) && !empty($element['#type'])) {
// We want to be sure the default process functions for the element type are called.
$info = element_info($element['#type']);
if (!empty($info['#process'])) {
$element['#process'] = $info['#process'];
}
}
$element['#process'][] = 'uc_ajax_process_form';
// Multiplex any Ajax calls for this element.
$parents = $form['#array_parents'];
array_push($parents, $child);
$key = implode('][', $parents);
$callbacks = array();
foreach ($form_state['uc_ajax'] as $module => $fields) {
if (!empty($fields[$key])) {
if (is_array($fields[$key])) {
$callbacks = array_merge($callbacks, $fields[$key]);
}
else {
$callbacks[] = $fields[$key];
}
}
}
if (!empty($callbacks)) {
if (empty($element['#ajax'])) {
$element['#ajax'] = array();
}
elseif (!empty($element['#ajax']['callback'])) {
if (!empty($element['#ajax']['wrapper'])) {
$callbacks[$element['#ajax']['wrapper']] = $element['#ajax']['callback'];
}
else {
array_unshift($callbacks, $element['#ajax']['callback']);
}
}
$element['#ajax'] = array_merge($element['#ajax'], array(
'callback' => 'uc_ajax_multiplex',
'list' => $callbacks,
));
}
}
return $form;
}