<?php
/*
$Id: orders.php,v 1.112 2003/06/29 22:50:52 hpdl Exp $
$Id: orders.php,v 1.2.1 2007/09/27 22:50:52 Ropu - added Google Checkout (v1.4.5) $
osCommerce, Open Source E-Commerce Solutions
http://www.oscommerce.com
Copyright (c) 2003 osCommerce
Released under the GNU General Public License
*/
require('includes/application_top.php');
//* ** GOOGLE CHECKOUT **/
define('GC_STATE_NEW', 100);
define('GC_STATE_PROCESSING', 101);
define('GC_STATE_SHIPPED', 102);
define('GC_STATE_REFUNDED', 103);
define('GC_STATE_SHIPPED_REFUNDED', 104);
define('GC_STATE_CANCELED', 105);
function google_checkout_state_change($check_status, $status, $oID,
$cust_notify, $notify_comments) {
global $db,$messageStack, $orders_statuses;
define('API_CALLBACK_ERROR_LOG',
DIR_FS_CATALOG. "/googlecheckout/logs/response_error.log");
define('API_CALLBACK_MESSAGE_LOG',
DIR_FS_CATALOG . "/googlecheckout/logs/response_message.log");
include_once(DIR_FS_CATALOG.'/includes/modules/payment/googlecheckout.php');
include_once(DIR_FS_CATALOG.'/googlecheckout/library/googlerequest.php');
$googlepayment = new googlecheckout();
$Grequest = new GoogleRequest($googlepayment->merchantid,
$googlepayment->merchantkey,
MODULE_PAYMENT_GOOGLECHECKOUT_MODE==
'https://sandbox.google.com/checkout/'
?"sandbox":"production",
DEFAULT_CURRENCY);
$Grequest->SetLogFiles(API_CALLBACK_ERROR_LOG, API_CALLBACK_MESSAGE_LOG);
$google_answer = tep_db_fetch_array(tep_db_query("SELECT go.google_order_number, go.order_amount, o.customers_email_address, gc.buyer_id, o.customers_id
FROM " . $googlepayment->table_order . " go
inner join " . TABLE_ORDERS . " o on go.orders_id = o.orders_id
inner join " . $googlepayment->table_name . " gc on gc.customers_id = o.customers_id
WHERE go.orders_id = '" . (int)$oID ."'
group by o.customers_id order by o.orders_id desc"));
$google_order = $google_answer['google_order_number'];
$amount = $google_answer['order_amount'];
// If status update is from Google New -> Google Processing on the Admin UI
// this invokes the processing-order and charge-order commands
// 1->Google New, 2-> Google Processing
if($check_status['orders_status'] == GC_STATE_NEW
&& $status == GC_STATE_PROCESSING && $google_order != '') {
list($curl_status,) = $Grequest->SendChargeOrder($google_order, $amount);
if($curl_status != 200) {
$messageStack->add_session(GOOGLECHECKOUT_ERR_SEND_CHARGE_ORDER, 'error');
}
else {
$messageStack->add_session(GOOGLECHECKOUT_SUCCESS_SEND_CHARGE_ORDER, 'success');
}
list($curl_status,) = $Grequest->SendProcessOrder($google_order);
if($curl_status != 200) {
$messageStack->add_session(GOOGLECHECKOUT_ERR_SEND_PROCESS_ORDER, 'error');
}
else {
$messageStack->add_session(GOOGLECHECKOUT_SUCCESS_SEND_PROCESS_ORDER, 'success');
}
}
// If status update is from Google Processing or Google Refunded -> Google Shipped on the Admin UI
// this invokes the deliver-order and archive-order commands
// 2->Google Processing or Google Refunded, 3-> Google Shipped (refunded)
else if(($check_status['orders_status'] == GC_STATE_PROCESSING
|| $check_status['orders_status'] == GC_STATE_REFUNDED)
&& ($status == GC_STATE_SHIPPED || $status == GC_STATE_SHIPPED_REFUNDED )
&& $google_order != '') {
$carrier = $tracking_no = "";
// Add tracking Data
if(isset($_POST['carrier_select']) && ($_POST['carrier_select'] != 'select')
&& isset($_POST['tracking_number']) && !empty($_POST['tracking_number'])) {
$carrier = $_POST['carrier_select'];
$tracking_no = $_POST['tracking_number'];
$comments = GOOGLECHECKOUT_STATE_STRING_TRACKING ."\n" .
GOOGLECHECKOUT_STATE_STRING_TRACKING_CARRIER . $_POST['carrier_select'] ."\n" .
GOOGLECHECKOUT_STATE_STRING_TRACKING_NUMBER . $_POST['tracking_number'] . "";
tep_db_query("insert into " . TABLE_ORDERS_STATUS_HISTORY . "
(orders_id, orders_status_id, date_added, customer_notified, comments)
values ('" . (int)$oID . "',
'" . tep_db_input(($check_status['orders_status']==GC_STATE_REFUNDED
?GC_STATE_SHIPPED_REFUNDED:GC_STATE_SHIPPED)) . "',
now(),
'" . tep_db_input($cust_notify) . "',
'" . tep_db_input($comments) . "')");
}
list($curl_status,) = $Grequest->SendDeliverOrder($google_order, $carrier,
$tracking_no, ($cust_notify==1)?"true":"false");
if($curl_status != 200) {
$messageStack->add_session(GOOGLECHECKOUT_ERR_SEND_DELIVER_ORDER, 'error');
}
else {
$messageStack->add_session(GOOGLECHECKOUT_SUCCESS_SEND_DELIVER_ORDER, 'success');
}
list($curl_status,) = $Grequest->SendArchiveOrder($google_order);
if($curl_status != 200) {
$messageStack->add_session(GOOGLECHECKOUT_ERR_SEND_ARCHIVE_ORDER, 'error');
}
else {
$messageStack->add_session(GOOGLECHECKOUT_SUCCESS_SEND_ARCHIVE_ORDER, 'success');
}
}
// If status update is to Google Canceled on the Admin UI
// this invokes the cancel-order and archive-order commands
else if($check_status['orders_status'] != GC_STATE_CANCELED &&
$status == GC_STATE_CANCELED && $google_order != '') {
if($check_status['orders_status'] != GC_STATE_NEW){
list($curl_status,) = $Grequest->SendRefundOrder($google_order, 0,
GOOGLECHECKOUT_STATE_STRING_ORDER_CANCELED
);
if($curl_status != 200) {
$messageStack->add_session(GOOGLECHECKOUT_ERR_SEND_REFUND_ORDER, 'error');
}
else {
$messageStack->add_session(GOOGLECHECKOUT_SUCCESS_SEND_REFUND_ORDER, 'success');
}
}
else {
// Tell google witch is the OSC's internal order Number
list($curl_status,) = $Grequest->SendMerchantOrderNumber($google_order, $oID);
if($curl_status != 200) {
$messageStack->add_session(GOOGLECHECKOUT_ERR_SEND_MERCHANT_ORDER_NUMBER, 'error');
}
else {
$messageStack->add_session(GOOGLECHECKOUT_SUCCESS_SEND_MERCHANT_ORDER_NUMBER, 'success');
}
}
// Is the order is not archive, I do it
if($check_status['orders_status'] != GC_STATE_SHIPPED
&& $check_status['orders_status'] != GC_STATE_SHIPPED_REFUNDED){
list($curl_status,) = $Grequest->SendArchiveOrder($google_order);
if($curl_status != 200) {
$messageStack->add_session(GOOGLECHECKOUT_ERR_SEND_ARCHIVE_ORDER, 'error');
}
else {
$messageStack->add_session(GOOGLECHECKOUT_SUCCESS_SEND_ARCHIVE_ORDER, 'success');
}
}
// Cancel the order
list($curl_status,) = $Grequest->SendCancelOrder($google_order,
GOOGLECHECKOUT_STATE_STRING_ORDER_CANCELED,
$notify_comments);
if($curl_status != 200) {
$messageStack->add_session(GOOGLECHECKOUT_ERR_SEND_CANCEL_ORDER, 'error');
}
else {
$messageStack->add_session(GOOGLECHECKOUT_SUCCESS_SEND_CANCEL_ORDER, 'success');
}
}
else if($google_order != ''
&& $check_status['orders_status'] != $status){
$statuses = array();
foreach($orders_statuses as $status_array){
$statuses[$status_array['id']] = $status_array['text'];
}
$messageStack->add_session( sprintf(GOOGLECHECKOUT_ERR_INVALID_STATE_TRANSITION,
$statuses[$check_status['orders_status']],
$statuses[$status],
$statuses[$check_status['orders_status']]),
'error');
}
// Send Buyer's message
if($cust_notify==1 && isset($notify_comments) && !empty($notify_comments)) {
$cust_notify_ok = '0';
if(!((strlen(htmlentities(strip_tags($notify_comments))) > GOOGLE_MESSAGE_LENGTH)
&& MODULE_PAYMENT_GOOGLECHECKOUT_USE_CART_MESSAGING=='True')){
list($curl_status,) = $Grequest->sendBuyerMessage($google_order,
$notify_comments, "true");
if($curl_status != 200) {
$messageStack->add_session(GOOGLECHECKOUT_ERR_SEND_MESSAGE_ORDER, 'error');
$cust_notify_ok = '0';
}
else {
$messageStack->add_session(GOOGLECHECKOUT_SUCCESS_SEND_MESSAGE_ORDER, 'success');
$cust_notify_ok = '1';
}
if(strlen(htmlentities(strip_tags($notify_comments))) > GOOGLE_MESSAGE_LENGTH) {
$messageStack->add_session(
sprintf(GOOGLECHECKOUT_WARNING_CHUNK_MESSAGE, GOOGLE_MESSAGE_LENGTH), 'warning');
}
}
// Cust notified
return $cust_notify_ok;
}
// Cust notified
return '0';
}
// ** END GOOGLE CHECKOUT **
require(DIR_WS_CLASSES . 'currencies.php');
$currencies = new currencies();
$orders_statuses = array();
$orders_status_array = array();
$orders_status_query = tep_db_query("select orders_status_id, orders_status_name from " . TABLE_ORDERS_STATUS . " where language_id = '" . (int)$languages_id . "'");
while ($orders_status = tep_db_fetch_array($orders_status_query)) {
$orders_statuses[] = array('id' => $orders_status['orders_status_id'],
'text' => $orders_status['orders_status_name']);
$orders_status_array[$orders_status['orders_status_id']] = $orders_status['orders_status_name'];
}
$action = (isset($HTTP_GET_VARS['action']) ? $HTTP_GET_VARS['action'] : '');
if (tep_not_null($action)) {
switch ($action) {
case 'update_order':
$oID = tep_db_prepare_input($HTTP_GET_VARS['oID']);
$status = tep_db_prepare_input($HTTP_POST_VARS['status']);
$comments = tep_db_prepare_input($HTTP_POST_VARS['comments']);
$order_updated = false;
$check_status_query = tep_db_query("select customers_name, customers_email_address, orders_status, date_purchased from " . TABLE_ORDERS . " where orders_id = '" . (int)$oID . "'");
$check_status = tep_db_fetch_array($check_status_query);
if ( ($check_status['orders_status'] != $status) || tep_not_null($comments)) {
tep_db_query("update " . TABLE_ORDERS . " set orders_status = '" . tep_db_input($status) . "', last_modified = now() where orders_id = '" . (int)$oID . "'");
// ** GOOGLE CHECKOUT **
chdir("./..");
require_once(DIR_WS_LANGUAGES . $language . '/modules/payment/googlecheckout.php');
$payment_value= MODULE_PAYMENT_GOOGLECHECKOUT_TEXT_TITLE;
$num_rows = tep_db_num_rows(tep_db_query("select google_order_number from google_orders where orders_id= ". (int)$oID));
if($num_rows != 0) {
$customer_notified = google_checkout_state_change($check_status, $status, $oID,
(@$_POST['notify']=='on'?1:0),
(@$_POST['notify_comments']=='on'?$comments:''));
}
$customer_notified = isset($customer_notified)?$customer_notified:'0';
// ** END GOOGLE CHECKOUT **
if (isset($_POST['notify']) && ($_POST['notify'] == 'on')) {
$notify_comments = '';
if (isset($_POST['notify_comments']) && ($_POST['notify_comments'] == 'on') && tep_not_null($comments)) {
$notify_comments = EMAIL_TEXT_COMMENTS_UPDATE . $comments . "\n\n";
}
// ** GOOGLE CHECKOUT **
$force_email = false;
if($num_rows != 0 && (strlen(htmlentities(strip_tags($notify_comments))) > GOOGLE_MESSAGE_LENGTH && MODULE_PAYMENT_GOOGLECHECKOUT_USE_CART_MESSAGING == 'True')) {
$force_email = true;
$messageStack->add_session(GOOGLECHECKOUT_WARNING_SYSTEM_EMAIL_SENT, 'warning');
}
if($num_rows == 0 || $force_email) {
//send emails, not a google order or configured to use both messaging systems
$email = STORE_NAME . "\n" . EMAIL_SEPARATOR . "\n" . EMAIL_TEXT_ORDER_NUMBER . ' ' . $oID . "\n" . EMAIL_TEXT_INVOICE_URL . ' ' . tep_catalog_href_link(FILENAME_CATALOG_ACCOUNT_HISTORY_INFO, 'order_id=' . $oID, 'SSL') . "\n" . EMAIL_TEXT_DATE_ORDERED . ' ' . tep_date_long($check_status['date_purchased']) . "\n\n" . $notify_comments . sprintf(EMAIL_TEXT_STATUS_UPDATE, $orders_status_array[$status]);
tep_mail($check_status['customers_name'], $check_status['customers_email_address'], EMAIL_TEXT_SUBJECT, $email, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
$customer_notified = '1';
//send extra emails
}
}
tep_db_query("insert into " . TABLE_ORDERS_STATUS_HISTORY . " (orders_id, orders_status_id, date_added, customer_notified, comments) values ('" . (int)$oID . "', '" . tep_db_input($status) . "', now(), '" . tep_db_input($customer_notified) . "', '" . tep_db_input($comments) . "')");
$order_updated = true;
}
if ($order_updated == true) {
$messageStack->add_session(SUCCESS_ORDER_UPDATED, 'success');
} else {
$messageStack->add_session(WARNING_ORDER_NOT_UPDATED, 'warning');
}
tep_redirect(tep_href_link(FILENAME_ORDERS, tep_get_all_get_params(array('action')) . 'action=edit'));
break;
case 'deleteconfirm':
$oID = tep_db_prepare_input($HTTP_GET_VARS['oID']);
tep_remove_order($oID, $HTTP_POST_VARS['restock']);
tep_redirect(tep_href_link(FILENAME_ORDERS, tep_get_all_get_params(array('oID', 'action'))));
break;
}
}
if (($action == 'edit') && isset($HTTP_GET_VARS['oID'])) {
$oID = tep_db_prepare_input($HTTP_GET_VARS['oID']);
$orders_query = tep_db_query("select orders_id from " . TABLE_ORDERS . " where orders_id = '" . (int)$oID . "'");
$order_exists = true;
if (!tep_db_num_rows($orders_query)) {
$order_exists = false;
$messageStack->add(sprintf(ERROR_ORDER_DOES_NOT_EXIST, $oID), 'error');
}
}
include(DIR_WS_CLASSES . 'order.php');
?>
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<html <?php echo HTML_PARAMS; ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
<title><?php echo TITLE; ?></title>
<link rel="stylesheet" type="text/css" href="includes/stylesheet.css">
<script language="javascript" src="includes/general.js"></script>
</head>
<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF">
<!-- header //-->
<?php
require(DIR_WS_INCLUDES . 'header.php');
?>
<!-- header_eof //-->
<!-- body //-->
<table border="0" width="100%" cellspacing="2" cellpadding="2">
<tr>
<td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="1" cellpadding="1" class="columnLeft">
<!-- left_navigation //-->
<?php require(DIR_WS_INCLUDES . 'column_left.php'); ?>
<!-- left_navigation_eof //-->
</table></td>
<!-- body_text //-->
<td width="100%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2">
<?php
if (($action == 'edit') && ($order_exists == true)) {
$order = new order($oID);
?>
<tr>
<td width="100%"><table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td class="pageHeading"><?php echo HEADING_TITLE; ?></td>
<td class="pageHeading" align="right"><?php echo tep_draw_separator('pixel_trans.gif', 1, HEADING_IMAGE_HEIGHT); ?></td>
<td class="pageHeading" align="right"><?php echo '<a href="' . tep_href_link(FILENAME_ORDERS, tep_get_all_get_params(array('action'))) . '">' . tep_image_button('button_back.gif', IMAGE_BACK) . '</a>'; ?></td>
</tr>
</table></td>
</tr>
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr>
<td colspan="3"><?php echo tep_draw_separator(); ?></td>
</tr>
<tr>
<td valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr>
<td class="main" valign="top"><b><?php echo ENTRY_CUSTOMER; ?></b></td>
<td class="main"><?php echo tep_address_format($order->customer['format_id'], $order->customer, 1, '', '<br>'); ?></td>
</tr>
<tr>
<td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '5'); ?></td>
</tr>
<tr>
<td class="main"><b><?php echo ENTRY_TELEPHONE_NUMBER; ?></b></td>
<td class="main"><?php echo $order->customer['telephone']; ?></td>
</tr>
<tr>
<td class="main"><b><?php echo ENTRY_EMAIL_ADDRESS; ?></b></td>
<td class="main"><?php echo '<a href="mailto:' . $order->customer['email_address'] . '"><u>' . $order->customer['email_address'] . '</u></a>'; ?></td>
</tr>
</table></td>
<td valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr>
<td class="main" valign="top"><b><?php echo ENTRY_SHIPPING_ADDRESS; ?></b></td>
<td class="main"><?php echo tep_address_format($order->delivery['format_id'], $order->delivery, 1, '', '<br>'); ?></td>
</tr>
</table></td>
<td valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr>
<td class="main" valign="top"><b><?php echo ENTRY_BILLING_ADDRESS; ?></b></td>
<td class="main"><?php echo tep_address_format($order->billing['format_id'], $order->billing, 1, '', '<br>'); ?></td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
</tr>
<tr>
<td><table border="0" cellspacing="0" cellpadding="2">
<tr>
<td class="main"><b><?php echo ENTRY_PAYMENT_METHOD; ?></b></td>
<td class="main"><?php echo $order->info['payment_method']; ?></td>
</tr>
<?php
if (tep_not_null($order->info['cc_type']) || tep_not_null($order->info['cc_owner']) || tep_not_null($order->info['cc_number'])) {
?>
<tr>
<td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
</tr>
<tr>
<td class="main"><?php echo ENTRY_CREDIT_CARD_TYPE; ?></td>
<td class="main"><?php echo $order->info['cc_type']; ?></td>
</tr>
<tr>
<td class="main"><?php echo ENTRY_CREDIT_CARD_OWNER; ?></td>
<td class="main"><?php echo $order->info['cc_owner']; ?></td>
</tr>
<tr>
<td class="main"><?php echo ENTRY_CREDIT_CARD_NUMBER; ?></td>
<td class="main"><?php echo $order->info['cc_number']; ?></td>
</tr>
<tr>
<td class="main"><?php echo ENTRY_CREDIT_CARD_EXPIRES; ?></td>
<td class="main"><?php echo $order->info['cc_expires']; ?></td>
</tr>
<?php
}
?>
</table></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
</tr>
<tr>
<td><table border="0" width="100%" cellspacing="0" cellpadding="2">
<tr class="dataTableHeadingRow">
<td class="dataTableHeadingContent" colspan="2"><?php echo TABLE_HEADING_PRODUCTS; ?></td>
<td class="dataTableHeadingContent"><?php echo TABLE_HEADING_PRODUCTS_MODEL; ?></td>
<td class="dataTableHeadingContent" align="right"><?php echo TABLE_HEADING_TAX; ?></td>
<td class="dataTableHeadingContent" align="right"><?php echo TABLE_HEADING_PRICE_EXCLUDING_TAX; ?></td>
<td class="dataTableHeadingContent" align="right"><?php echo TABLE_HEADING_PRICE_INCLUDING_TAX; ?></td>
<td class="dataTableHeadingContent" align="right"><?php echo TABLE_HEADING_TOTAL_EXCLUDING_TAX; ?></td>
<td class="dataTableHeadingContent" align="right"><?php echo TABLE_HEADING_TOTAL_INCLUDING_TAX; ?></td>
</tr>
<?php
for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
echo ' <tr class="dataTableRow">' . "\n" .
' <td class="dataTableContent" valign="top" align="right">' . $order->products[$i]['qty'] . ' x</td>' . "\n" .
' <td class="dataTableContent" valign="top">' . $order->products[$i]['name'];
if (isset($order->products[$i]['attributes']) && (sizeof($order->products[$i]['attributes']) > 0)) {
for ($j = 0, $k = sizeof($order->products[$i]['attributes']); $j < $k; $j++) {
echo '<br><nobr><small> <i> - ' . $order->products[$i]['attributes'][$j]['option'] . ': ' . $order->products[$i]['attributes'][$j]['value'];
if ($order->products[$i]['attributes'][$j]['price'] != '0') echo ' (' . $order->products[$i]['attributes'][$j]['prefix'] . $currencies->format($order->products[$i]['attributes'][$j]['price'] * $order->products[$i]['qty'], true, $order->info['currency'], $order->info['currency_value']) . ')';
echo '</i></small></nobr>';
}
}
echo ' </td>' . "\n" .
' <td class="dataTableContent" valign="top">' . $order->products[$i]['model'] . '</td>' . "\n" .
' <td class="dataTableContent" align="right" valign="top">' . tep_display_tax_value($order->products[$i]['tax']) . '%</td>' . "\n" .
' <td class="dataTableContent" align="right" valign="top"><b>' . $currencies->format($order->products[$i]['final_price'], true, $order->info['currency'], $order->info['currency_value']) . '</b></td>' . "\n" .
' <td class="dataTableContent" align="right" valign="top"><b>' . $currencies->format(tep_add_tax($order->products[$i]['final_price'], $order->products[$i]['tax']), true, $order->info['currency'], $order->info['currency_value']) . '</b></td>' . "\n" .
' <td class="dataTableContent" align="right" valign="top"><b>' . $currencies->format($order->products[$i]['final_price'] * $order->products[$i]['qty'], true, $order->info['currency'], $order->info['currency_value']) . '</b></td>' . "\n" .
' <td class="dataTableContent" align="right" valign="top"><b>' . $currencies->format(tep_add_tax($order->products[$i]['final_price'], $order->products[$i]['tax']) * $order->products[$i]['qty'], true, $order->info['currency'], $order->info['currency_value']) . '</b></td>' . "\n";
echo ' </tr>' . "\n";
}
?>
<tr>
<td align="right" colspan="8"><table border="0" cellspacing="0" cellpadding="2">
<?php
for ($i = 0, $n = sizeof($order->totals); $i < $n; $i++) {
echo ' <tr>' . "\n" .
' <td align="right" class="smallText">' . $order->totals[$i]['title'] . '</td>' . "\n" .
' <td align="right" class="smallText">' . $order->totals[$i]['text'] . '</td>' . "\n" .
' </tr>' . "\n";
}
?>
</table></td>
</tr>
</table></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
</tr>
<tr>
<td class="main"><table border="1" cellspacing="0" cellpadding="5">
<tr>
<td class="smallText" align="center"><b><?php echo TABLE_HEADING_DATE_ADDED; ?></b></td>
<td class="smallText" align="center"><b><?php echo TABLE_HEADING_CUSTOMER_NOTIFIED; ?></b></td>
<td class="smallText" align="center"><b><?php echo TABLE_HEADING_STATUS; ?></b></td>
<td class="smallText" align="center"><b><?php echo TABLE_HEADING_COMMENTS; ?></b></td>
</tr>
<?php
$orders_history_query = tep_db_query("select orders_status_id, date_added, customer_notified, comments from " . TABLE_ORDERS_STATUS_HISTORY . " where orders_id = '" . tep_db_input($oID) . "' order by date_added");
if (tep_db_num_rows($orders_history_query)) {
while ($orders_history = tep_db_fetch_array($orders_history_query)) {
echo ' <tr>' . "\n" .
' <td class="smallText" align="center">' . tep_datetime_short($orders_history['date_added']) . '</td>' . "\n" .
' <td class="smallText" align="center">';
if ($orders_history['customer_notified'] == '1') {
echo tep_image(DIR_WS_ICONS . 'tick.gif', ICON_TICK) . "</td>\n";
} else {
echo tep_image(DIR_WS_ICONS . 'cross.gif', ICON_CROSS) . "</td>\n";
}
echo ' <td class="smallText">' . $orders_status_array[$orders_history['orders_status_id']] . '</td>' . "\n" .
' <td class="smallText">' . nl2br(tep_db_output($orders_history['comments'])) . ' </td>' . "\n" .
' </tr>' . "\n";
}
} else {
echo ' <tr>' . "\n" .
' <td class="smallText" colspan="5">' . TEXT_NO_ORDER_HISTORY . '</td>' . "\n" .
' </tr>' . "\n";
}
?>
</table></td>
</tr>
<tr>
<td class="main"><br><b><?php echo TABLE_HEADING_COMMENTS; ?></b></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '1', '5'); ?></td>
</tr>
<tr><?php echo tep_draw_form('status', FILENAME_ORDERS, tep_get_all_get_params(array('action')) . 'action=update_order'); ?>
<td class="main"><?php echo tep_draw_textarea_field('comments', 'soft', '60', '5'); ?></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
</tr>
<tr>
<td><table border="0" cellspacing="0" cellpadding="2">
<tr>
<td><table border="0" cellspacing="0" cellpadding="2">
<tr>
<td class="main"><b><?php echo ENTRY_STATUS; ?></b> <?php echo tep_draw_pull_down_menu('status', $orders_statuses, $order->info['orders_status']); ?></td>
</tr>
<tr>
<td class="main"><b><?php echo ENTRY_NOTIFY_CUSTOMER; ?></b> <?php echo tep_draw_checkbox_field('notify', '', true); ?></td>
<td class="main"><b><?php echo ENTRY_NOTIFY_COMMENTS; ?></b> <?php echo tep_draw_checkbox_field('notify_comments', '', true); ?></td>
</tr>
</table></td>
<td valign="top"><?php echo tep_image_submit('button_update.gif', IMAGE_UPDATE); ?></td>
<!-- googlecheckout Tracking Number -->
<?php
// orders_status == STATE_PROCESSING -> Processing before delivery
if(strpos($order->info['payment_method'], 'Google')!= -1 && $order->info['orders_status'] == GC_STATE_PROCESSING){
echo '<td><table border="0" cellpadding="3" cellspacing="0" width="100%">
<tbody>
<tr>
<td style="border-top: 2px solid rgb(255, 255, 255); border-right: 2px solid rgb(255, 255, 255);" nowrap="nowrap" colspan="2">
<b>Shipping Information</b>
</td>
</tr>
<tr>
<td nowrap="nowrap" valign="middle" width="1%">
<font size="2">
<b>Tracking:</b>
</font>
</td>
<td style="border-right: 2px solid rgb(255, 255, 255); border-bottom: 2px solid rgb(255, 255, 255);" nowrap="nowrap">
<input name="tracking_number" style="color: rgb(0, 0, 0);" id="trackingBox" size="20" type="text">
</td>
</tr>
<tr>
<td nowrap="nowrap" valign="middle" width="1%">
<font size="2">
<b>Carrier:</b>
</font>
</td>
<td style="border-right: 2px solid rgb(255, 255, 255);" nowrap="nowrap">
<select name="carrier_select" style="color: rgb(0, 0, 0);" id="carrierSelect">
<option value="select" selected="selected">
Select ...
</option>
<option value="USPS">
USPS
</option>
<option value="DHL">
DHL
</option>
<option value="UPS">
UPS
</option>
<option value="Other">
Other
</option>
<option value="FedEx">
FedEx
</option>
</select>
</td>
</tr>
</tbody>
</table></td>';
}
?>
<!-- end googlecheckout Tracking Number -->
</tr>
</table></td>
</form></tr>
<tr>
<td colspan="2" align="right"><?php echo '<a href="' . tep_href_link(FILENAME_ORDERS_INVOICE, 'oID=' . $HTTP_GET_VARS['oID']) . '" TARGET="_blank">' . tep_image_button('button_invoice.gif', IMAGE_ORDERS_INVOICE) . '</a> <a href="' . tep_href_link(FILENAME_ORDERS_PACKINGSLIP, 'oID=' . $HTTP_GET_VARS['oID']) . '" TARGET="_blank">' . tep_image_button('button_packingslip.gif', IMAGE_ORDERS_PACKINGSLIP) . '</a> <a href="' . tep_href_link(FILENAME_ORDERS, tep_get_all_get_params(array('action'))) . '">' . tep_image_button('button_back.gif', IMAGE_BACK) . '</a>'; ?></td>
</tr>
<?php
} else {
?>
<tr>
<td width="100%"><table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td class="pageHeading"><?php echo HEADING_TITLE; ?></td>
<td class="pageHeading" align="right"><?php echo tep_draw_separator('pixel_trans.gif', 1, HEADING_IMAGE_HEIGHT); ?></td>
<td align="right"><table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr><?php echo tep_draw_form('orders', FILENAME_ORDERS, '', 'get'); ?>
<td class="smallText" align="right"><?php echo HEADING_TITLE_SEARCH . ' ' . tep_draw_input_field('oID', '', 'size="12"') . tep_draw_hidden_field('action', 'edit'); ?></td>
</form></tr>
<tr><?php echo tep_draw_form('status', FILENAME_ORDERS, '', 'get'); ?>
<td class="smallText" align="right"><?php echo HEADING_TITLE_STATUS . ' ' . tep_draw_pull_down_menu('status', array_merge(array(array('id' => '', 'text' => TEXT_ALL_ORDERS)), $orders_statuses), '', 'onChange="this.form.submit();"'); ?></td>
</form></tr>
</table></td>
</tr>
</table></td>
</tr>
<tr>
<td><table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2">
<tr class="dataTableHeadingRow">
<td class="dataTableHeadingContent"><?php echo TABLE_HEADING_CUSTOMERS; ?></td>
<td class="dataTableHeadingContent" align="right"><?php echo TABLE_HEADING_ORDER_TOTAL; ?></td>
<td class="dataTableHeadingContent" align="center"><?php echo TABLE_HEADING_DATE_PURCHASED; ?></td>
<td class="dataTableHeadingContent" align="right"><?php echo TABLE_HEADING_STATUS; ?></td>
<td class="dataTableHeadingContent" align="right"><?php echo TABLE_HEADING_ACTION; ?> </td>
</tr>
<?php
if (isset($HTTP_GET_VARS['cID'])) {
$cID = tep_db_prepare_input($HTTP_GET_VARS['cID']);
$orders_query_raw = "select o.orders_id, o.customers_name, o.customers_id, o.payment_method, o.date_purchased, o.last_modified, o.currency, o.currency_value, s.orders_status_name, ot.text as order_total from " . TABLE_ORDERS . " o left join " . TABLE_ORDERS_TOTAL . " ot on (o.orders_id = ot.orders_id), " . TABLE_ORDERS_STATUS . " s where o.customers_id = '" . (int)$cID . "' and o.orders_status = s.orders_status_id and s.language_id = '" . (int)$languages_id . "' and ot.class = 'ot_total' order by orders_id DESC";
} elseif (isset($HTTP_GET_VARS['status']) && is_numeric($HTTP_GET_VARS['status']) && ($HTTP_GET_VARS['status'] > 0)) {
$status = tep_db_prepare_input($HTTP_GET_VARS['status']);
$orders_query_raw = "select o.orders_id, o.customers_name, o.payment_method, o.date_purchased, o.last_modified, o.currency, o.currency_value, s.orders_status_name, ot.text as order_total from " . TABLE_ORDERS . " o left join " . TABLE_ORDERS_TOTAL . " ot on (o.orders_id = ot.orders_id), " . TABLE_ORDERS_STATUS . " s where o.orders_status = s.orders_status_id and s.language_id = '" . (int)$languages_id . "' and s.orders_status_id = '" . (int)$status . "' and ot.class = 'ot_total' order by o.orders_id DESC";
} else {
$orders_query_raw = "select o.orders_id, o.customers_name, o.payment_method, o.date_purchased, o.last_modified, o.currency, o.currency_value, s.orders_status_name, ot.text as order_total from " . TABLE_ORDERS . " o left join " . TABLE_ORDERS_TOTAL . " ot on (o.orders_id = ot.orders_id), " . TABLE_ORDERS_STATUS . " s where o.orders_status = s.orders_status_id and s.language_id = '" . (int)$languages_id . "' and ot.class = 'ot_total' order by o.orders_id DESC";
}
$orders_split = new splitPageResults($HTTP_GET_VARS['page'], MAX_DISPLAY_SEARCH_RESULTS, $orders_query_raw, $orders_query_numrows);
$orders_query = tep_db_query($orders_query_raw);
while ($orders = tep_db_fetch_array($orders_query)) {
if ((!isset($HTTP_GET_VARS['oID']) || (isset($HTTP_GET_VARS['oID']) && ($HTTP_GET_VARS['oID'] == $orders['orders_id']))) && !isset($oInfo)) {
$oInfo = new objectInfo($orders);
}
if (isset($oInfo) && is_object($oInfo) && ($orders['orders_id'] == $oInfo->orders_id)) {
echo ' <tr id="defaultSelected" class="dataTableRowSelected" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="document.location.href=\'' . tep_href_link(FILENAME_ORDERS, tep_get_all_get_params(array('oID', 'action')) . 'oID=' . $oInfo->orders_id . '&action=edit') . '\'">' . "\n";
} else {
echo ' <tr class="dataTableRow" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="document.location.href=\'' . tep_href_link(FILENAME_ORDERS, tep_get_all_get_params(array('oID')) . 'oID=' . $orders['orders_id']) . '\'">' . "\n";
}
?>
<td class="dataTableContent"><?php echo '<a href="' . tep_href_link(FILENAME_ORDERS, tep_get_all_get_params(array('oID', 'action')) . 'oID=' . $orders['orders_id'] . '&action=edit') . '">' . tep_image(DIR_WS_ICONS . 'preview.gif', ICON_PREVIEW) . '</a> ' . $orders['customers_name']; ?></td>
<td class="dataTableContent" align="right"><?php echo strip_tags($orders['order_total']); ?></td>
<td class="dataTableContent" align="center"><?php echo tep_datetime_short($orders['date_purchased']); ?></td>
<td class="dataTableContent" align="right"><?php echo $orders['orders_status_name']; ?></td>
<td class="dataTableContent" align="right"><?php if (isset($oInfo) && is_object($oInfo) && ($orders['orders_id'] == $oInfo->orders_id)) { echo tep_image(DIR_WS_IMAGES . 'icon_arrow_right.gif', ''); } else { echo '<a href="' . tep_href_link(FILENAME_ORDERS, tep_get_all_get_params(array('oID')) . 'oID=' . $orders['orders_id']) . '">' . tep_image(DIR_WS_IMAGES . 'icon_info.gif', IMAGE_ICON_INFO) . '</a>'; } ?> </td>
</tr>
<?php
}
?>
<tr>
<td colspan="5"><table border="0" width="100%" cellspacing="0" cellpadding="2">
<tr>
<td class="smallText" valign="top"><?php echo $orders_split->display_count($orders_query_numrows, MAX_DISPLAY_SEARCH_RESULTS, $HTTP_GET_VARS['page'], TEXT_DISPLAY_NUMBER_OF_ORDERS); ?></td>
<td class="smallText" align="right"><?php echo $orders_split->display_links($orders_query_numrows, MAX_DISPLAY_SEARCH_RESULTS, MAX_DISPLAY_PAGE_LINKS, $HTTP_GET_VARS['page'], tep_get_all_get_params(array('page', 'oID', 'action'))); ?></td>
</tr>
</table></td>
</tr>
</table></td>
<?php
$heading = array();
$contents = array();
switch ($action) {
case 'delete':
$heading[] = array('text' => '<b>' . TEXT_INFO_HEADING_DELETE_ORDER . '</b>');
$contents = array('form' => tep_draw_form('orders', FILENAME_ORDERS, tep_get_all_get_params(array('oID', 'action')) . 'oID=' . $oInfo->orders_id . '&action=deleteconfirm'));
$contents[] = array('text' => TEXT_INFO_DELETE_INTRO . '<br><br><b>' . $cInfo->customers_firstname . ' ' . $cInfo->customers_lastname . '</b>');
$contents[] = array('text' => '<br>' . tep_draw_checkbox_field('restock') . ' ' . TEXT_INFO_RESTOCK_PRODUCT_QUANTITY);
$contents[] = array('align' => 'center', 'text' => '<br>' . tep_image_submit('button_delete.gif', IMAGE_DELETE) . ' <a href="' . tep_href_link(FILENAME_ORDERS, tep_get_all_get_params(array('oID', 'action')) . 'oID=' . $oInfo->orders_id) . '">' . tep_image_button('button_cancel.gif', IMAGE_CANCEL) . '</a>');
break;
default:
if (isset($oInfo) && is_object($oInfo)) {
$heading[] = array('text' => '<b>[' . $oInfo->orders_id . '] ' . tep_datetime_short($oInfo->date_purchased) . '</b>');
$contents[] = array('align' => 'center', 'text' => '<a href="' . tep_href_link(FILENAME_ORDERS, tep_get_all_get_params(array('oID', 'action')) . 'oID=' . $oInfo->orders_id . '&action=edit') . '">' . tep_image_button('button_edit.gif', IMAGE_EDIT) . '</a> <a href="' . tep_href_link(FILENAME_ORDERS, tep_get_all_get_params(array('oID', 'action')) . 'oID=' . $oInfo->orders_id . '&action=delete') . '">' . tep_image_button('button_delete.gif', IMAGE_DELETE) . '</a>');
$contents[] = array('align' => 'center', 'text' => '<a href="' . tep_href_link(FILENAME_ORDERS_INVOICE, 'oID=' . $oInfo->orders_id) . '" TARGET="_blank">' . tep_image_button('button_invoice.gif', IMAGE_ORDERS_INVOICE) . '</a> <a href="' . tep_href_link(FILENAME_ORDERS_PACKINGSLIP, 'oID=' . $oInfo->orders_id) . '" TARGET="_blank">' . tep_image_button('button_packingslip.gif', IMAGE_ORDERS_PACKINGSLIP) . '</a>');
$contents[] = array('text' => '<br>' . TEXT_DATE_ORDER_CREATED . ' ' . tep_date_short($oInfo->date_purchased));
if (tep_not_null($oInfo->last_modified)) $contents[] = array('text' => TEXT_DATE_ORDER_LAST_MODIFIED . ' ' . tep_date_short($oInfo->last_modified));
$contents[] = array('text' => '<br>' . TEXT_INFO_PAYMENT_METHOD . ' ' . $oInfo->payment_method);
}
break;
}
if ( (tep_not_null($heading)) && (tep_not_null($contents)) ) {
echo ' <td width="25%" valign="top">' . "\n";
$box = new box;
echo $box->infoBox($heading, $contents);
echo ' </td>' . "\n";
}
?>
</tr>
</table></td>
</tr>
<?php
}
?>
</table></td>
<!-- body_text_eof //-->
</tr>
</table>
<!-- body_eof //-->
<!-- footer //-->
<?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
<!-- footer_eof //-->
<br>
</body>
</html>
<?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>
Offical Google Checkout module for osCommerce Support Thread
#1041
Posted 15 October 2009, 05:58
#1042
Posted 22 October 2009, 20:46
#1043
Posted 22 October 2009, 21:45
cmjennings21, on 22 October 2009, 20:46, said:
what i recommend is to patch the order_total.php class, and change
while (list(, $value) = each($this->modules)) {
include(DIR_WS_LANGUAGES . $language . '/modules/order_total/' .
$value);
include(DIR_WS_MODULES . 'order_total/' . $value);
$class = substr($value, 0, strrpos($value, '.'));
$GLOBALS[$class] = new $class;
}
to
while (list(, $value) = each($this->modules)) {
include_once(DIR_WS_LANGUAGES . $language .
'/modules/order_total/' . $value);
include_once(DIR_WS_MODULES . 'order_total/' . $value);
$class = substr($value, 0, strrpos($value, '.'));
$GLOBALS[$class] = new $class;
}
this should avoid the error...
Thanks to Ropu
#1044
Posted 26 October 2009, 23:15
I have installed the latest official GC from their website and i have 4 problems/questions:
1. I added the account in the admin area but on the shopping cart when i click the button nothing happens although the button is active (blue)
2. I would like to have the GC in the Checkout Payment page rather than the shopping cart page
3. Is this working with Amazon payments as well?
4. Is this working with UPS XML as well?
Thank you
#1045
Posted 27 October 2009, 00:24
#1046
Posted 27 October 2009, 04:13
#1047
Posted 04 November 2009, 21:56
gift-message and buyer messages?
Quote
<gift-message to="Road Runner" from="Wile E. Coyote" max-chars="200">
Enjoy these Acme corporation gifts.
Sincerely yours,
W.E.C.
</gift-message>
<delivery-instructions max-chars="100"/>
</buyer-messages>
8 people out of 10 don't bother to read installation manuals. I can recommend: if you can't read the installation manual, don't bother to install any contribution yourself.
Before installing contribution or editing/updating/deleting any files, do the full backup, it will save to you & everyone here on the forum time to fix your issues.
Any issues with oscommerce, I am here to help you.
#1048
Posted 12 November 2009, 11:37
I would love some help clarifying Google Checkout usage for existing customers. We want to offer GC but if a user uses a company or relative's Google Checkout account for purchase, it does not record this under their existing account. Instead, it creates a new account.
I tried this first with 1.5, and it showed no new order to the logged in customer. I took it back to 1.4.5, installed that, and now it logs the customer into a newly created account under the email they used to purchase through GC.
I thought that this module should be able to record the order under the logged in customer's details? Am I wrong? I'm sure I've seen this in the 1.4.0 changelog. Please can I have some advice on this, it's imperative that this should work this way (like Paypal).
*Please Help*
In response to natashome:
Quote
You can do this by including the same Google code from the login or shopping cart page, but it would need to be below the form that contains the other payment modules and the 'continue' button.
R.
Edited by bluewebco, 12 November 2009, 11:38.
#1049
Posted 19 November 2009, 04:20
MrE03, on 27 October 2009, 00:24, said:
Sorry, I can't help you. I went to download GC and followed instructions for installations from here:
http://code.google.com/p/google-checkout-oscommerce/wiki/Installation_1_5_0#Modified_osCommerce
Using A, I managed to delete all other modules. But following B caused no problems except that I cannot see the GC added to the available modules?
Any tips?
#1050
Posted 19 November 2009, 13:02
#1051
Posted 24 November 2009, 07:41
I've got 100k+ products on the site, and the products-static file it generates is 120+mb. Where do I modify the code to get it to stop this? I can't even get into the admin side to configure the module.
#1052
Posted 25 November 2009, 19:44
Can oscommerce be setup with accepting google checkout using credit card information thats been typed in on website? I am only using google checkout now. I know this has worked on another website, but can not contact programmer. I am using v1.5_rc1.
#1053
Posted 29 November 2009, 21:07
As per the read me instructions at step 3, I entered http://domain-name/googlecheckout/responaehandler.php and enter. I get a popup window asking for password and id. This is what it ask:
Quote
Warning: This server is requesting that your username and password be sent in an insecure manner (basic authentication without a secure connection).
What is this referring to? MY admin, cpanel or what? Now I did try using info fro my google accounts. When i enter that info I get this error messaage:
Quote
This is what line 312 contains:
$navigation->add_current_page();
Any ideas?
Thanks.
Bennett
#1054
Posted 30 November 2009, 20:11
I have a bit of a problem with this module, I have it installed and working nearly correctly. I can order somthing and pay via google with no problems, the communication comes back to OSC and the order shows in admin, however if a customer orders more than one item, in orders.php I can only see the first item but the total price shows the cost of the entire order.
th search function will often help, when it dont try this in google.
site:http://forums.oscommerce.com then your search word
#1055
Posted 30 November 2009, 20:16
If so i was thinking that if checkout_confirmation.php could send me to a different page ie shopping_cart2.php then on that page i could remove the normal checkout button, and the only option would be to pay via google checkout, which would then add my calculated shipping. I could then remove googloe checkout from the normal shopping_cart.php, so that people would need to to register and checkout in the normal way, with shipping calculated, and the final step would be to pay through google checkout.
That seems pretty simple, but am i way off here??
Thanks
#1056
Posted 01 December 2009, 15:48
Quote
No instructions says to try this first before going any futher. Now my googlecheckout is in installed at admin -> module -> payment. But no settings is in there yet. So am I to bypass instructions for a bit to enter this info then do the test?
Bennett
#1057
Posted 06 December 2009, 17:32
I did emimate the the window asking for id and password. Now when I enter http://brs-giftshop.com/googlecheckout/responsehandler.php in borwser window, I get an internal server error.
Even though the full path is set in admin/htaccess.php - /home/XXXX/public_html/googlecheckout
But maybe, could it be that my admin has been renamed to XXXXX. So what file do I need to change admin to XXXXX?
Thanks.
#1058
Posted 22 December 2009, 07:25
mattm58, on 24 November 2009, 07:41, said:
I've got 100k+ products on the site, and the products-static file it generates is 120+mb. Where do I modify the code to get it to stop this? I can't even get into the admin side to configure the module.
#1059
Posted 05 January 2010, 01:19
I think this is the most complicated contribution I have ever tried to install. It took me three installs to get it working and I still have a few bugs. I was hoping someone who had Google Checkout installed correctly could check something for me. I set up the merchant calculated shipping last night and it worked great but when I try to set the default merchant calculations in the modules->payment->googlcheckout configuration, it doesn't save them. All other changes I make in the configuration area work fine except the merchant calculations default values. I looked in the database and I think I found where they are supposed to be saved to but the table was empty. I think it is supposed to save it to the MERCHANT_CALCULATED_SHIPPING in the google_configuration table. Mine is blank. Is yours? If not, what is in it?
The only other problem I have is that I don't receive notifications from OSc when a google checkout order is placed. I receive all the google emails just fine but not any emails from my store. And I have the box checked to send them in the google configuration area. I have no idea what is causing this. If I can get these two things working, everything will be fixed!
Any ideas would be appreciated! Thank you.
Brent
#1060
Posted 07 February 2010, 11:18
At the "admin/modules.php?set=payment" page I get an error that prevents the page from loading completely.
The error is "Fatal error: Cannot redeclare class googlecheckout in .../store/includes/modules/payment/googlecheckout.php on line 31"
I have looked everywhere and cannot find another googlecheckout class on the page or in any includes. I have seen similar issues in the forum but none have been resolved.
Anyone know where to look?
Thanks
Mike














