--- uc_cart/uc_cart.module.orig 2010-08-11 11:09:54.000000000 -0400 +++ uc_cart/uc_cart.module 2010-10-05 17:30:27.000000000 -0400 @@ -946,6 +946,16 @@ $description = $display_item['title']['#value'] . $display_item['description']['#value']; $form['items'][$i]['desc']['#value'] = $description; + $form['items'][$i]['remove'] = array( + '#type' => 'submit', + '#value' => t('Remove'), + '#name' => 'cart-delete-item-'. $item->cart_item_id, + ); + $form['items'][$i]['item_id'] = array( + '#value' => $item->cart_item_id, + '#type' => 'hidden', + ); + $form['items'][$i]['title']['#type'] = 'value'; $form['items'][$i]['description']['#type'] = 'value'; @@ -980,7 +990,6 @@ $form['continue_shopping'] = array( '#type' => 'submit', '#value' => $cs_text, - '#submit' => array('uc_cart_view_form_submit'), ); $form['continue_shopping_text'] = array( '#type' => 'hidden', @@ -993,13 +1002,11 @@ $form['update'] = array( '#type' => 'submit', '#value' => t('Update cart'), - '#submit' => array('uc_cart_view_form_submit'), ); if (variable_get('uc_checkout_enabled', TRUE)) { $form['checkout'] = array( '#type' => 'submit', '#value' => t('Checkout'), - '#submit' => array('uc_cart_view_form_submit'), ); } @@ -1016,17 +1023,18 @@ } // Update the items in the shopping cart based on the form values. - uc_cart_update_item_object((object)$form_state['values']); + uc_cart_update_item_object((object)$form_state['values'], (array)$form_state['clicked_button']); // Specify the appropriate redirect based on the button used to submit. - switch ($form_state['values']['op']) { + switch ($form_state['clicked_button']['#value']) { // Continue shopping button. case $form_state['values']['continue_shopping_text']: $form_state['redirect'] = uc_cart_continue_shopping_url(); break; - // Update cart button. + // Update cart or Remove button. case t('Update cart'): + case t('Remove'): // No redirect. Just display a message and preserve the last URL. drupal_set_message(t('Your cart has been updated.')); break; @@ -1594,15 +1602,14 @@ /** * Update the quantity of all the items in a cart object */ -function uc_cart_update_item_object($cart) { +function uc_cart_update_item_object($cart, $clicked_button) { if (is_object($cart)) { foreach ($cart->items as $item) { - if ($item['remove']) { - module_invoke($item['module'], 'update_cart_item', $item['nid'], unserialize($item['data']), 0); - } - else { - module_invoke($item['module'], 'update_cart_item', $item['nid'], unserialize($item['data']), $item['qty']); + if ($clicked_button['#name'] == 'cart-delete-item-'. $item['item_id']) { + $item['qty'] = 0; + drupal_set_message(t('!title removed from your cart.', array('!title' => $item['title']))); } + module_invoke($item['module'], 'update_cart_item', $item['nid'], unserialize($item['data']), $item['qty']); } // Rebuild the cached cart items.