uc_cart_complete_sale
- 5 – 6
uc_cart_complete_sale($order, $login = FALSE)
Complete a sale, including adjusting order status and creating user account.
Parameters
$order
The order object that has just been completed.
$login
Whether or not to login a new user when this function is called.
Return value
The HTML text of the default order completion page.
Code
contributions/ubercart/uc_cart/uc_cart.module, line 1189
<?php
function uc_cart_complete_sale($order, $login = FALSE) {
global $user;
if ($order->uid == 0) {
$result = db_query("SELECT uid FROM {users} WHERE mail = '%s'", $order->primary_email);
if ($account = db_fetch_object($result)) {
$order->uid = $account->uid;
$account = user_load($account->uid);
db_query("UPDATE {uc_orders} SET uid = %d WHERE order_id = %d", $order->uid, $order->order_id);
$message_type = 'existing_user';
}
else {
if (empty($order->data['new_user']['name'])) {
$name = uc_store_email_to_username($order->primary_email);
}
else {
$name = $order->data['new_user']['name'];
}
$fields = array(
'name' => $name,
'mail' => $order->primary_email,
'init' => $order->primary_email,
'pass' => empty($order->data['new_user']['pass']) ? user_password(variable_get('uc_pwd_length', 6)) : $order->data['new_user']['pass'],
'roles' => array(),
'status' => variable_get('uc_new_customer_status_active', TRUE) ? 1 : 0,
);
$account = user_save('', $fields);
if (variable_get('uc_new_customer_email', TRUE)) {
$account->password = $fields['pass'];
drupal_mail('user', 'register_no_approval_required', $order->primary_email, NULL, array('account' => $account), uc_store_email_from());
}
$_SESSION['new_user'] = array('name' => $fields['name'], 'pass' => $fields['pass']);
$order->uid = $account->uid;
unset($order->data['new_user']['pass']);
db_query("UPDATE {uc_orders} SET uid = %d, data = '%s' WHERE order_id = %d", $order->uid, serialize($order->data), $order->order_id);
if ($login) {
$form_state = array('values' => $fields);
drupal_execute('user_login', $form_state);
}
$message_type = 'new_user';
}
}
else {
if ($order->uid == $user->uid) {
$message_type = 'logged_in';
$account = clone $user;
}
else {
$message_type = 'existing_user';
$account = user_load($order->uid);
}
}
$output = '<p>'. check_markup(variable_get('uc_msg_order_submit', uc_get_message('completion_message')),
variable_get('uc_msg_order_submit_format', FILTER_FORMAT_DEFAULT), FALSE) .'</p>';
$show_message = check_markup(variable_get('uc_msg_order_'. $message_type, uc_get_message('completion_'. $message_type)), variable_get('uc_msg_order_'. $message_type .'_format', FILTER_FORMAT_DEFAULT), FALSE);
if ($show_message != '') {
$variables['!new_username'] = check_plain($_SESSION['new_user']['name']);
$variables['!new_password'] = check_plain($_SESSION['new_user']['pass']);
$output .= '<p>'. strtr($show_message, $variables) .'</p>';
}
$output .= '<p>'. check_markup(variable_get('uc_msg_continue_shopping', uc_get_message('continue_shopping')),
variable_get('uc_msg_continue_shopping_format', FILTER_FORMAT_DEFAULT),
FALSE) .'</p>';
$output_message = token_replace_multiple($output, array('global' => NULL, 'order' => $order));
$themed_output = theme('uc_cart_complete_sale', $output_message);
$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') {
uc_order_update_status($order->order_id, uc_order_state_default('post_checkout'));
}
uc_cart_empty(uc_cart_get_id());
unset($_SESSION['cart_order'], $_SESSION['do_complete'], $_SESSION['new_user']);
module_invoke_all('uc_checkout_complete', $order, $account);
ca_pull_trigger('uc_checkout_complete', $order, $account);
return $themed_output;
}
?>