--- uc_paypal.module	2010-03-30 11:30:12.046875000 +0200
+++ uc_paypal.module.patched	2010-04-28 15:14:41.234375000 +0200
@@ -83,6 +83,62 @@ function uc_paypal_ipn_access() {
 }
 
 /**
+ * Implementation of hook_menu_alter().
+ */
+function uc_paypal_menu_alter(&$items) {
+  $items['cart/checkout/complete']['page callback'] = 'uc_paypal_wps_checkout_complete';
+}
+
+// Override uc_cart_checkout_complete() when payment method is paypal_wps.
+function uc_paypal_wps_checkout_complete() {
+  if (!$_SESSION['do_complete']
+   || !($order = uc_order_load(intval($_SESSION['cart_order'])))
+   || ($order->payment_method != 'paypal_wps')
+   || ($order->uid == 0)) {
+    return uc_cart_checkout_complete();
+  }
+
+  // Build checkout_complete messages.
+  global $user;
+  if ($order->uid == $user->uid) {
+    $message_type = 'logged_in';
+    $account = clone $user;
+  }
+  else {
+    $message_type = 'existing_user';
+    $account = user_load($order->uid);
+  }
+  $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 .= '<p>'.$message.'</p>';
+  }
+  $output = theme('uc_cart_complete_sale', $output_message);
+
+  // Clear cart data.
+  uc_cart_empty(uc_cart_get_id());
+  unset($_SESSION['cart_order'], $_SESSION['do_complete'], $_SESSION['new_user']);
+
+  // Redirect to a custom page if defined.
+  $page = variable_get('uc_cart_checkout_complete_page', '');
+  if (!empty($page)) {
+    drupal_goto($page);
+  }
+
+  return $output;
+}
+
+/**
  * Implementation of hook_perm().
  */
 function uc_paypal_perm() {
