function commerce_registration_line_item_registration_delete in Commerce Registration 7.2
Submit callback for line item registration remove checkboxes.
1 string reference to 'commerce_registration_line_item_registration_delete'
File
- ./
commerce_registration.module, line 1114 - Commerce Registration module code.
Code
function commerce_registration_line_item_registration_delete($form, &$form_state) {
if (isset($form['commerce_registration']['line_item_registrations'])) {
$registrations_to_delete = array();
$order = NULL;
$update_order = FALSE;
// Did we trigger this with an ajax callback?
$triggered = FALSE;
if (!empty($form_state['triggering_element'])) {
$trigger_parents = array_reverse($form_state['triggering_element']['#array_parents']);
$triggered = (bool) ($trigger_parents[0] === 'registration_remove');
}
// Loop through the registration enabled line items and submit any related
// registration forms.
foreach (element_children($form['commerce_registration']['line_item_registrations']) as $line_item_id) {
if (isset($form['commerce_registration']['line_item_registrations'][$line_item_id]['registrations'])) {
$line_item_registrations = $form['commerce_registration']['line_item_registrations'][$line_item_id]['registrations'];
$prodkey = $line_item_registrations['#prodkey'];
$deltas = array();
// Loop through the registrations for this element/line item.
foreach (element_children($line_item_registrations) as $registration_id) {
// Mark the registrations that have been selected for deletion...
if ($line_item_registrations[$registration_id]['registration_remove']['#value']) {
// Load the order if we haven't already. No need to do it unless
// we need to.
if (!$order) {
// If the user is editing an order, load a fresh copy.
if ($form_state['commerce_order']->order_id) {
// We need to load the order uncached since a cached version may
// include unsaved field data that may be invalid and cause
// issues upon saving.
if ($loaded_orders = entity_load('commerce_order', array(
$form_state['commerce_order']->order_id,
), array(), TRUE)) {
$form_state['commerce_order'] = reset($loaded_orders);
}
}
// Merge changes into the order object in the form state so it is
// accessible by field handlers.
$order = $form_state['commerce_order'];
}
$delta = $line_item_registrations[$registration_id]['delta']['#value'];
if (isset($order->data['register_entities'][$prodkey][$delta]) && ($registration = $order->data['register_entities'][$prodkey][$delta])) {
if ($registration_id == $registration->registration_id) {
$registrations_to_delete[] = $registration_id;
$deltas[] = $delta;
}
}
}
}
if ($deltas) {
// Update the registration information in $order->data.
$order->data['register_entities'][$prodkey] = array_values(array_diff_key($order->data['register_entities'][$prodkey], array_flip($deltas)));
$update_order = TRUE;
// No need to rebuild unless we triggered removal via AJAX.
if ($triggered) {
$form_state['rebuild'] = TRUE;
}
}
}
}
// Delete all the registrations at once.
if ($registrations_to_delete) {
registration_delete_multiple($registrations_to_delete);
}
// Update an existing order.
if ($update_order && $order && $order->order_id) {
try {
commerce_order_save($order);
} catch (Exception $e) {
watchdog('commerce_registration', 'Error when trying to save an order (@order_id) after deleting registration(s).', array(
'@order_id' => $order->order_id,
), WATCHDOG_ERROR);
}
}
// We want to rebuild if this is an ajax submit.
if ($update_order && $triggered) {
$form_state['rebuild'] = TRUE;
}
}
}