Index: uc_cart/uc_cart.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/ubercart/uc_cart/uc_cart.module,v
retrieving revision 1.15.2.33
diff -u -p -r1.15.2.33 uc_cart.module
--- uc_cart/uc_cart.module	17 May 2010 13:35:16 -0000	1.15.2.33
+++ uc_cart/uc_cart.module	16 Jun 2010 19:54:36 -0000
@@ -1184,10 +1184,15 @@ function uc_cart_continue_shopping_url($
  *   The order object that has just been completed.
  * @param $login
  *   Whether or not to login a new user when this function is called.
+ * @param $force_complete
+ *   Whether to complete the sale if the order already has the completed status.
  * @return
  *   The HTML text of the default order completion page.
  */
-function uc_cart_complete_sale($order, $login = FALSE) {
+function uc_cart_complete_sale($order, $login = FALSE, $force_complete = FALSE) {
+  if ($order->status == 'completed' && !$force_complete) {
+    return uc_cart_complete_sale_message($order);
+  }
   global $user;
 
   // Logic to create new user if necessary:
@@ -1259,23 +1264,7 @@ function uc_cart_complete_sale($order, $
     }
   }
 
-  $messages['uc_msg_order_submit_format'] = variable_get('uc_msg_order_submit', uc_get_message('completion_message'));
-  $message = variable_get('uc_msg_order_'.$message_type, uc_get_message('completion_'.$message_type));
-  if ($message != '') {
-    $variables['!new_username'] = check_plain($_SESSION['new_user']['name']);
-    $variables['!new_password'] = check_plain($_SESSION['new_user']['pass']);
-    $messages['uc_msg_order_'.$message_type.'_format'] = strtr($message, $variables);
-  }
-  $messages['uc_msg_continue_shopping_format'] = variable_get('uc_msg_continue_shopping', uc_get_message('continue_shopping'));
-
-  $output_message = '';
-  foreach ($messages as $format => $message) {
-    $message = token_replace_multiple($message, array('global' => NULL, 'order' => $order));
-    $message = check_markup($message, variable_get($format, FILTER_FORMAT_DEFAULT), FALSE);
-    $output_message .= $message;
-  }
-  $themed_output = theme('uc_cart_complete_sale', $output_message);
-
+  $themed_output = uc_cart_complete_sale_message($order);
   // Move an order's status from "In Checkout" to "Pending"
   $status = db_result(db_query("SELECT order_status FROM {uc_orders} WHERE order_id = %d", $order->order_id));
   if (uc_order_status_data($status, 'state') == 'in_checkout') {
@@ -1294,6 +1283,25 @@ function uc_cart_complete_sale($order, $
   return $themed_output;
 }
 
+function uc_cart_complete_sale_message($order) {
+  $messages['uc_msg_order_submit_format'] = variable_get('uc_msg_order_submit', uc_get_message('completion_message'));
+  $message = variable_get('uc_msg_order_'.$message_type, uc_get_message('completion_'.$message_type));
+  if ($message != '') {
+    $variables['!new_username'] = check_plain($_SESSION['new_user']['name']);
+    $variables['!new_password'] = check_plain($_SESSION['new_user']['pass']);
+    $messages['uc_msg_order_'.$message_type.'_format'] = strtr($message, $variables);
+  }
+  $messages['uc_msg_continue_shopping_format'] = variable_get('uc_msg_continue_shopping', uc_get_message('continue_shopping'));
+
+  $output_message = '';
+  foreach ($messages as $format => $message) {
+    $message = token_replace_multiple($message, array('global' => NULL, 'order' => $order));
+    $message = check_markup($message, variable_get($format, FILTER_FORMAT_DEFAULT), FALSE);
+    $output_message .= $message;
+  }
+  $themed_output = theme('uc_cart_complete_sale', $output_message);
+  return $themed_output;
+}
 /**
  * Theme the sale completion page.
  *
