Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

[Contribution] Credit Card Fraud Detection Service


Recommended Posts

Newbie here, Have read a few postings. Is this ready to go or are there lots of things to tinker with to get it to work still?

 

It has worked GREAT for me and my fraud has dropped to almost nil !!!

 

The only problem I had was getting it to work with PayPal IPN payments but I have solved that. Things have been busy and to be honest I have been putting off posting my version because I wanted to also see if I can modify and post a revision that will work with the new osC3.

 

If you don't use PayPal IPN then go ahead and use the current posted verison. If you need it to work with IPN then keep checking as I will post it soon.

 

Cheers!

Link to comment
Share on other sites

  • Replies 244
  • Created
  • Last Reply

Top Posters In This Topic

  • 4 weeks later...

I just noticed on the screenshot maxmind.jpg

under customers/oders, there's 'create order'. Does that mean you can manually input orders in the admin? If so, what contribution would that be.

Thanks

Link to comment
Share on other sites

  • 1 month later...
  • 2 weeks later...

I tried to make this work with Authorize.net payment. Everything seems to work fine. However, I just dont see how the credit card number get passed to the module to calculate the risk points. It seems only work with the Credit Card module itself, but not for Authorize.net module. Anyone here has some pointers?

 

Thanks

Link to comment
Share on other sites

  • 7 months later...
  • 2 months later...
Is there an update to have this contribution working with PWA (Purchase Without Account)

 

It always shows me blanks...

 

Thanks

 

I'm going to try to get back into this to update it more, I just have to find the time with work, school, kids, wife, etc...

9 times out of 10 its a PEBCAK Error (Problem exists between chair and keyboard)

 

Replace that and you're fine...

Link to comment
Share on other sites

  • 6 months later...

I am having a problem with the query trying to detect fraud in EVERY transaction - even free items. It is using up my limit of queries very quickly.

 

I know there was a change to make it detect fraud for every transaction. It doesn't send any information for any other transaction anyway so this portion is useless to my store. I have tried to download the earlier version 1.53 but I am getting a time out error and it won't download.

 

Does anyone know what to change BACK so that it ONLY looks at Credit Card transactions? I tried commenting out the:

if (tep_not_null($sql_data_array['customers_id'])) { require(DIR_WS_MODULES . 'maxmind/maxmind.php'); }

but that resulted in the query being blank.

 

I am not an expert in code, lol. So all help is greatly appreciated!

 

Blessings,

Krisann

Link to comment
Share on other sites

I am having a problem with the query trying to detect fraud in EVERY transaction - even free items. It is using up my limit of queries very quickly.

 

I know there was a change to make it detect fraud for every transaction. It doesn't send any information for any other transaction anyway so this portion is useless to my store. I have tried to download the earlier version 1.53 but I am getting a time out error and it won't download.

 

Does anyone know what to change BACK so that it ONLY looks at Credit Card transactions? I tried commenting out the:

if (tep_not_null($sql_data_array['customers_id'])) { require(DIR_WS_MODULES . 'maxmind/maxmind.php'); }

but that resulted in the query being blank.

 

I am not an expert in code, lol. So all help is greatly appreciated!

 

Blessings,

Krisann

I fixed it by changing the 'cutomers_id' to 'cvvnumber'. Now it only does it for credit cards and nothing is broken, lol.

 

Blessings,

K

Link to comment
Share on other sites

  • 4 weeks later...

Thanks for a great mod.

 

I have one issue with this mod. Everything seems to work fine, except I do not have any information showing under the customers order. The database is being populated and I have triple checked the install.

 

v1.54

 

I am using oscmax with authorize.net

here is my order.php file

 

<?php
/*
$Id: orders.php 14 2006-07-28 17:42:07Z user $

 osCMax Power E-Commerce
 http://oscdox.com

 Copyright 2006 osCMax

 Released under the GNU General Public License
*/

 require('includes/application_top.php');

 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'] : '');

//Begin code for shipping info
 $carriers = array();
 $carriers_array = array();
 $carriers_query = tep_db_query("select carrier_id, carrier_name from " . TABLE_CARRIERS);
 while ($carrier = tep_db_fetch_array($carriers_query)) {
$carriers[] = array('id' => $carrier['carrier_id'],
					'text' => $carrier['carrier_name']);
$carriers_array[$carrier['carrier_id']] = $carrier['carrier_name'];
 }
 //End code for shipping info


 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']);
	// Begin code changes for shipping status
	$tracking_no = tep_db_prepare_input($HTTP_POST_VARS['tracking_no']);
	$ship_date= tep_db_prepare_input($HTTP_POST_VARS['ship_date']);
	$delivery_date = tep_db_prepare_input($HTTP_POST_VARS['delivery_date']);
	$carrier_id = tep_db_prepare_input($HTTP_POST_VARS['carrier']);

	$order_updated = false;
	$check_status_query = tep_db_query("select customers_name, customers_email_address, orders_status, date_purchased, ship_date, tracking_no, carrier_id, delivery_date from " . TABLE_ORDERS . " where orders_id = '" . (int)$oID . "'");
	$check_status = tep_db_fetch_array($check_status_query);

	$tmp_query = "";
	if ($check_status['tracking_no'] != $tracking_no) {
	  $tmp_query .= "tracking_no = '" . tep_db_input($tracking_no) . "', ";
	}
	if ($check_status['ship_date'] != $ship_date) {
	  $tmp_query .= "ship_date = '" . tep_db_input($ship_date) . "', ";
	}
	if ($check_status['delivery_date'] != $delivery_date) {
	  $tmp_query .= "delivery_date = '" . tep_db_input($delivery_date) . "', ";
	}
	if ($check_status['carrier_id'] != $carrier_id) {
	  $tmp_query .= "carrier_id = '" . tep_db_input($carrier_id) . "', ";
	}
	if ($check_status['orders_status'] != $status) {
	  $tmp_query .= "orders_status = '" . tep_db_input($status) . "', ";
	}
	//update the record only if there was a change
	if (strlen($tmp_query)) {
	  tep_db_query("update " . TABLE_ORDERS . " set " . $tmp_query . " last_modified = now() where orders_id = '" . (int)$oID . "'");
	}
	{
	// End code changes for shipping status


	  $customer_notified = '0';
	  if (isset($HTTP_POST_VARS['notify']) && ($HTTP_POST_VARS['notify'] == 'on')) {
		$notify_comments = '';
		if (isset($HTTP_POST_VARS['notify_comments']) && ($HTTP_POST_VARS['notify_comments'] == 'on')) {
		  $notify_comments = sprintf(EMAIL_TEXT_COMMENTS_UPDATE, $comments) . "\n\n";
		}

		$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]);

  // Begin code for shipping status
		// if status is Shipped or Delivered include carrier, tracking number and ship date in e-mail
		if ((int)$status >= 3) {
		  $email .= "\n\n" . EMAIL_TEXT_SHIP_DATE . $ship_date . "\n\n" . EMAIL_TEXT_CARRIER . $carriers_array[$carrier_id] . "\n\n" . EMAIL_TEXT_TRACKING_NO . $tracking_no;
		  if ($status == '4') {
			$email .= "\n\n" . EMAIL_TEXT_DELIVERY_DATE . $delivery_date . "\n\n" . EMAIL_TEXT_FEEDBACK;
		  }
		}
		$email .= "\n\n" . EMAIL_TEXT_QUESTIONS;
 // End code for shipping 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';
	  }

	  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');
}
 }
// BOF: MOD - Downloads Controller - Extra order info
// Look up things in orders
 $the_extra_query= tep_db_query("select * from " . TABLE_ORDERS . " where orders_id = '" . (int)$oID . "'");
 $the_extra= tep_db_fetch_array($the_extra_query);
 $the_customers_id= $the_extra['customers_id'];
// Look up things in customers
 $the_extra_query= tep_db_query("select * from " . TABLE_CUSTOMERS . " where customers_id = '" . $the_customers_id . "'");
 $the_extra= tep_db_fetch_array($the_extra_query);
 $the_customers_fax= $the_extra['customers_fax'];
// EOF: MOD - Downloads Controller - Extra order info

 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>
<?php
// BOF: MOD - PayPal IPN
if ($order->info['payment_method'] == 'paypal'  && isset($HTTP_GET_VARS['refer']) && $HTTP_GET_VARS['refer'] == 'ipn'){
?>
	   <td class="pageHeading" align="right"><?php echo '<a href="' . tep_href_link(FILENAME_PAYPAL_IPN, tep_get_all_get_params(array('action','oID','refer'))) . '">' . tep_image_button('button_back.gif', IMAGE_BACK) . '</a>'; ?></td>
<?php
} else {
?>
		<td class="pageHeading" align="right"><?php echo '<a href="' . tep_href_link(FILENAME_ORDERS_EDIT, 'oID=' . $_GET['oID']) . '">' . tep_image_button('button_edit.gif', IMAGE_EDIT) . '</a> <a href="' . tep_href_link(FILENAME_ORDERS_INVOICE, 'oID=' . $_GET['oID']) . '" TARGET="_blank">' . tep_image_button('button_invoice.gif', IMAGE_ORDERS_INVOICE) . '</a> <a href="' . tep_href_link(FILENAME_ORDERS_PACKINGSLIP, 'oID=' . $_GET['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>
<?php
}//else not paypal
// EOF: MOD - PayPal IPN
?>
	  </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>
<?php
// BOF: MOD - Downloads Controller - Extra order info
?>
		  <tr>
			<td class="main"><b><?php echo 'FAX #:'; ?></b></td>
			<td class="main"><?php echo $the_customers_fax; ?></td>
		  </tr>
<?php
// EOF: MOD - Downloads Controller - Extra order info
?>
		  <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">
<?php
// BOF: MOD - Downloads Controller - Extra order info
?>
<!-- add Order # // -->
  <tr>
	<td class="main"><b>Order # </b></td>
	<td class="main"><?php echo tep_db_input($oID); ?></td>
  </tr>
<!-- add date/time // -->
  <tr>
	<td class="main"><b>Order Date & Time</b></td>
	<td class="main"><?php echo tep_datetime_short($order->info['date_purchased']); ?></td>
  </tr>
<?php
// EOF: MOD - Downloads Controller - Extra order info
// BOF: MOD - PayPal IPN
 if (strtolower($order->info['payment_method']) == 'paypal') {
include 'paypal_ipn_order.php';
 } else {
// EOF: MOD - PayPal IPN
?>
	  <tr>
		<td class="main"><b><?php echo ENTRY_PAYMENT_METHOD; ?></b></td>
		<td class="main"><?php echo $order->info['payment_method']; ?></td>
	  </tr>
<!-- begin shipping status code -->
	  <tr>
		<td><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
	  </tr>
<?php
	  include(DIR_FS_CATALOG_LANGUAGES . $language . '/shipping_status.php');
	  include(DIR_FS_CATALOG . 'includes/shipping_status.php');
?>		  
<!-- end shipping status code -->

<?php
 }//else not paypal
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
// Addition for MaxMind CC check Noel Latsha
$check_maxmind_query = tep_db_query("select distance, country_match, country_code, free_mail, anonymous_proxy, score, bin_match, bin_country, err, proxy_score, spam_score, bin_name, cust_phone, ip_city, ip_latitude, ip_longitude, ip_region, ip_isp, ip_org, hi_risk from " . TABLE_ORDERS_MAXMIND . " where order_id = '" . (int)$oID . "'");
$maxmind_query = tep_db_fetch_array($check_maxmind_query);
$max_score = round($maxmind_query['score']);
switch ($max_score) {
case 0: $max_comment = '(Extremely Low risk)'; break;
case 1: $max_comment = '(Very Low risk)'; break;
case 2: $max_comment = '(Low risk)'; break;
case 3: $max_comment = '(Low risk)'; break;
case 4: $max_comment = '(Low-Medium risk)'; break;
case 5: $max_comment = '(Medium risk)'; break;
case 6: $max_comment = '(Medium-high risk)'; break;
case 7: $max_comment = '(High risk)'; break;
case 8: $max_comment = '(Very High risk)'; break;
case 9: $max_comment = '(Extremely High risk)'; break;
case 10: $max_comment = '(I can smell the fraud from here)'; break;
}
?>
</table>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td colspan="7" class="main"><?php echo '<br><b>' . MAXMIND_SCORE . '   <font color="red">' . $maxmind_query['score'] . '</font> ' . $max_comment . '</b>'; ?></td>
</tr>
<tr class="dataTableRow">
<td width="14%" class="dataTableContent"><?php echo MAXMIND_COUNTRY; ?></td>
<td width="18%" class="dataTableContent"><?php echo '<b>' . $maxmind_query['country_match'] . '</b>'; ?></td>
<td width="14%" class="dataTableContent"><?php echo MAXMIND_CODE; ?></td>
<td width="18%" class="dataTableContent"><?php echo '<b>' . $maxmind_query['country_code'] . '</b>'; ?></td>
<td width="14%" class="dataTableContent"><?php echo MAXMIND_HI_RISK; ?></td>
<td width="18%" class="dataTableContent"><?php echo '<b>' . $maxmind_query['hi_risk'] . '</b>'; ?></td>
</tr>
<tr>
<td width="14%" class="dataTableContent"><?php echo MAXMIND_BIN_MATCH; ?></td>
<td width="18%" class="dataTableContent"><?php echo '<b>' . $maxmind_query['bin_match'] . '</b>'; ?></td>
<td width="14%" class="dataTableContent"><?php echo MAXMIND_BIN_COUNTRY; ?></td>
<td width="18%" class="dataTableContent"><?php echo '<b>' . $maxmind_query['bin_country'] . '</b>'; ?></td>
<td width="14%" class="dataTableContent"><?php echo MAXMIND_BIN_NAME; ?></td>
<td width="18%" class="dataTableContent"><?php echo '<b>' . $maxmind_query['bin_name'] . '</b>'; ?></td>
</tr>
<tr class="dataTableRow">
<td width="14%" class="dataTableContent"><?php echo MAXMIND_IP_ISP; ?></td>
<td width="18%" class="dataTableContent"><?php echo '<b>' . $maxmind_query['ip_isp'] . '</b>'; ?></td>
<td width="14%" class="dataTableContent"><?php echo MAXMIND_IP_ISP_ORG; ?></td>
<td width="18%" class="dataTableContent"><?php echo '<b>' . $maxmind_query['ip_org'] . '</b>'; ?></td>
<td width="14%" class="dataTableContent"><?php echo MAXMIND_DISTANCE; ?></td>
<td width="18%" class="dataTableContent"><?php echo '<b>' . $maxmind_query['distance'] . '</b>'; ?></td>
</tr>
<tr>
<td width="14%" class="dataTableContent"><?php echo MAXMIND_ANONYMOUS; ?></td>
<td width="18%" class="dataTableContent"><?php echo '<b>' . $maxmind_query['anonymous_proxy'] . '</b>'; ?></td>
<td width="14%" class="dataTableContent"><?php echo MAXMIND_PROXY_SCORE; ?></td>
<td width="18%" class="dataTableContent"><?php echo '<b>' . $maxmind_query['proxy_score'] . '</b>'; ?></td>
<td width="14%" class="dataTableContent"><?php echo MAXMIND_SPAM; ?></td>
<td width="18%" class="dataTableContent"><?php echo '<b>' . $maxmind_query['spam_score'] . '</b>'; ?></td>
</tr>
<tr class="dataTableRow">
<td width="14%" class="dataTableContent"><?php echo MAXMIND_FREE_EMAIL; ?></td>
<td width="18%" class="dataTableContent"><?php echo '<b>' . $maxmind_query['free_mail'] . '</b>'; ?></td>
<td width="14%" class="dataTableContent"><?php echo MAXMIND_CUST_PHONE; ?></td>
<td width="18%" class="dataTableContent"><a href="http://www.whitepages.com/search/Reverse_Phone?phone=<?php echo $order->customer['telephone']; ?>" target="_blank"><?php echo '<b>' . $maxmind_query['cust_phone'] . '</b>'; ?></td>
<td width="14%" class="dataTableContent"><?php echo MAXMIND_ERR; ?></td>
<td width="18%" class="dataTableContent"><?php echo '<b>' . $maxmind_query['err'] . '</b>'; ?></td>
</tr>
</table>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr> </tr>
<tr>
<td colspan="4" class="dataTableContent" width="75%" align="center"><?php echo MAXMIND_DETAILS . '   ' . MAXMIND_MAXMIND; ?></td>
</tr>
<tr class="dataTableRow">
<td width="25%" class="dataTableContent"><?php echo MAXMIND_IP_CITY . '<b>' . $maxmind_query['ip_city'] . '</b>'; ?></td>
<td width="25%" class="dataTableContent"><?php echo MAXMIND_IP_REGION . '<b>' . $maxmind_query['ip_region'] . '</b>'; ?></td>
<td width="25%" class="dataTableContent"><?php echo MAXMIND_IP_LATITUDE . '<b>' . $maxmind_query['ip_latitude'] . '</b>'; ?></td>
<td width="25%" class="dataTableContent"><?php echo MAXMIND_IP_LONGITUDE . '<b>' . $maxmind_query['ip_longitude'] . '</b>'; ?></td>
</tr>
<tr>
<td colspan="4"><?php echo tep_draw_separator(); ?></td>
</tr>
<?php 
// End addition for MaxMind Noel Latsha
}
?>
	</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>
<!-- begin shipping status code -->
<?php 
  if (tep_not_null($order->shipping['tracking_no'])) {
?>
  <tr>
	<td class="main"><b><?php echo ENTRY_TRACKING_NO;?><?php echo tep_draw_input_field('tracking_no', $order->shipping['tracking_no'] ); ?></b> <?php echo tep_draw_pull_down_menu('carrier', $carriers, $order->shipping['carrier_id']); ?></b></td>
  </tr>  
<?php 
  } else { 
?> 
  <tr>
	<td class="main"><b><?php echo ENTRY_TRACKING_NO;?> <?php echo tep_draw_input_field('tracking_no'); ?>  <?php echo ENTRY_CARRIER; ?></b> <?php echo tep_draw_pull_down_menu('carrier', $carriers, $order->shipping['carrier_id']); ?></b></td>
  </tr>
<?php
  }
?>
  <tr>
  <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '11'); ?></td>
  </tr>
  <tr>
  <?php
	if (tep_not_null($order->shipping['ship_date']))  {//if 2
  ?>
	<td class="main"><b><?php echo ENTRY_SHIP_DATE;?></b><?php echo tep_draw_input_field('ship_date', $order->shipping['ship_date']); ?></td>
  <?php
	} else {
	$today = date("F d" . ', ' . "Y");
  ?>
	<td class="main"><b><?php echo ENTRY_SHIP_DATE;?></b><?php echo tep_draw_input_field('ship_date'); ?><input type="button" name="set_s_date" value="Today's Date" onClick="document.status.ship_date.value='<?php echo $today ?>'"><input type="button" name="clear_s_date" value="Clear" onClick="document.status.ship_date.value=''"></td>
  <?php
	}
  ?>
  </tr>
  <tr>
	<td><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
  </tr>
		<tr>
  <?php
	if (tep_not_null($order->shipping['delivery_date']))  {//if 2
  ?>
	<td class="main"><b><?php echo ENTRY_DELIVERY_DATE;?></b><?php echo tep_draw_input_field('delivery_date', $order->shipping['delivery_date']); ?></td>
  <?php
	} else {
   $today = date("F d" . ', ' . "Y");
  ?>
	<td class="main"><b><?php echo ENTRY_DELIVERY_DATE;?></b><?php echo tep_draw_input_field('delivery_date'); ?><input type="button" name="set_d_date" value="Today's Date" onClick="document.status.delivery_date.value='<?php echo $today ?>'" onClick="document.status.status.value='4'"><input type="button" name="clear_d_date" value="Clear" onClick="document.status.delivery_date.value=''"></td>
  <?php
	}
  ?>
  </tr>
  <tr>
	<td><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
  </tr>
<!-- end shipping status code -->

  <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>
	  </tr>
	</table></td>
  </form></tr>
  <tr>
<?php /* BOF: MOD - PayPal IPN */ ?>
<?php
if ($order->info['payment_method'] == 'paypal'  && isset($HTTP_GET_VARS['refer']) && $HTTP_GET_VARS['refer'] == 'ipn'){
?>
	   <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_PAYPAL_IPN, tep_get_all_get_params(array('action','oID','refer'))) . '">' . tep_image_button('button_back.gif', IMAGE_BACK) . '</a>'; ?></td>
<?php
} else {
?>
   <td colspan="2" align="right"><?php echo '<a href="' . tep_href_link(FILENAME_ORDERS_EDIT, 'oID=' . $_GET['oID']) . '">' . tep_image_button('button_edit.gif', IMAGE_EDIT) . '</a> <a href="' . tep_href_link(FILENAME_ORDERS_INVOICE, 'oID=' . $_GET['oID']) . '" TARGET="_blank">' . tep_image_button('button_invoice.gif', IMAGE_ORDERS_INVOICE) . '</a> <a href="' . tep_href_link(FILENAME_ORDERS_PACKINGSLIP, 'oID=' . $_GET['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>
<?php
}//else not paypal
// EOF: MOD - PayPal IPN ?>
  </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']);
//LINE CHANGED: MOD - fedex added "o.fedex_tracking"
  $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, o.fedex_tracking, 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";
// LINE CHANGED: MS2 update 501112
//  } elseif (isset($HTTP_GET_VARS['status'])) {
} 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']);
//LINE CHANGED: MOD - fedex added "o.fedex_tracking"
  $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, o.fedex_tracking, 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 {
//LINE CHANGED: MOD - fedex added "o.fedex_tracking"
  $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, o.fedex_tracking, 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>');

// BOF: MOD - FedEx 
// first determine whether this is on the test or production server to send
// in the url (there may be a better place to do this...)
$value_query = tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_SHIPPING_FEDEX1_SERVER'");
$value = tep_db_fetch_array($value_query);
$fedex_gateway = $value['configuration_value'];	

// check for a fedex tracking number in the order record
// if yes tracking number, show "fedex label," "track" and "cancel" options
$fedex_tracking = $oInfo->fedex_tracking;

// get the current order status				
$check_fedex_status_query = tep_db_query("select orders_status from " . TABLE_ORDERS . " where orders_id = '" . $oInfo->orders_id . "'");
$check_fedex_status = tep_db_fetch_array($check_fedex_status_query);

if ($fedex_tracking) {
// display the label
	  $contents[] = array('align' => 'center', 'text' => '<a href="fedex_popup.php?num=' . $fedex_tracking . '&oID=' . $oInfo->orders_id . '">' . tep_image_button('button_fedex_label.gif', IMAGE_ORDERS_FEDEX_LABEL) . '</a>');

// track the package (no gateway needs to be specified)
	  $contents[] = array('align' => 'center', 'text' => '<a href="' . tep_href_link(FILENAME_TRACK_FEDEX, 'oID=' .$oInfo->orders_id . '&num=' . $fedex_tracking) . '&fedex_gateway=track">' . tep_image_button('button_track.gif', IMAGE_ORDERS_TRACK) . '</a>');

// cancel the request				

	  $contents[] = array('align' => 'center', 'text' => '<a href="' . tep_href_link(FILENAME_SHIP_FEDEX, 'oID=' .$oInfo->orders_id . '&num=' . $fedex_tracking . '&action=cancel&fedex_gateway=' . $fedex_gateway) . '" onClick="return(window.confirm(\'Cancel shipment of order number ' . $oInfo->orders_id . '?\'));">' . tep_image_button('button_cancel_shipment.gif', IMAGE_ORDERS_CANCEL_SHIPMENT) . '</a>');
	}
// if no fedex tracking number, AND if the order has not been manually marked "delivered,"
// display the "ship" button

	elseif ((!$fedex_tracking) && (($check_fedex_status['orders_status']) != 3)) {			
	  $contents[] = array('align' => 'center', 'text' => '<a href="' . tep_href_link(FILENAME_SHIP_FEDEX, 'oID=' .$oInfo->orders_id . '&action=new&status=3') . '">' . tep_image_button('button_ship.gif', IMAGE_ORDERS_SHIP) . '</a>');
	}
// EOF: MOD - FedEx 
   $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_details.gif', IMAGE_DETAILS) . '</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> <a href="' . tep_href_link(FILENAME_ORDERS_EDIT, 'oID=' . $oInfo->orders_id) . '">' . tep_image_button('button_edit.gif', IMAGE_EDIT) . '</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'); ?>

Edited by thorazine
Link to comment
Share on other sites

  • 1 month later...

I'm trying to install MaxMind v1.54 on oscommerce-2.2rc2a following the instructions given in MaxMind v1.54/Install.html

 

Completed all the steps 1 to 6 successfully

 

On STEP 7* i can't find the following code

 

 

function before_process() {
global $HTTP_POST_VARS, $order;
if ( (defined('MODULE_PAYMENT_CC_EMAIL')) && (tep_validate_email(MODULE_PAYMENT_CC_EMAIL)) ) {
$len = strlen($HTTP_POST_VARS['cc_number']);
$this->cc_middle = substr($HTTP_POST_VARS['cc_number'], 4, ($len-8));
$order->info['cc_number'] = substr($HTTP_POST_VARS['cc_number'], 0, 4) . str_repeat('X', (strlen($HTTP_POST_VARS['cc_number']) - 8)) . substr($HTTP_POST_VARS['cc_number'], -4);
}

 

 

instead I find the following function

 

 

function before_process() {
     global $HTTP_POST_VARS, $order;

     include(DIR_WS_CLASSES . 'cc_validation.php');

     $cc_validation = new cc_validation();
     $result = $cc_validation->validate($HTTP_POST_VARS['cc_number_nh-dns'], $HTTP_POST_VARS['cc_expires_month'], $HTTP_POST_VARS['cc_expires_year']);

     $error = '';
     switch ($result) {
       case -1:
         $error = sprintf(TEXT_CCVAL_ERROR_UNKNOWN_CARD, substr($cc_validation->cc_number, 0, 4));
         break;
       case -2:
       case -3:
       case -4:
         $error = TEXT_CCVAL_ERROR_INVALID_DATE;
         break;
       case false:
         $error = TEXT_CCVAL_ERROR_INVALID_NUMBER;
         break;
     }

     if ( ($result == false) || ($result < 1) ) {
       $payment_error_return = 'payment_error=' . $this->code . '&error=' . urlencode($error) . '&cc_owner=' . urlencode($HTTP_POST_VARS['cc_owner']) . '&cc_expires_month=' . $HTTP_POST_VARS['cc_expires_month'] . '&cc_expires_year=' . $HTTP_POST_VARS['cc_expires_year'];

       tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, $payment_error_return, 'SSL', true, false));
     }

     $order->info['cc_owner'] = $HTTP_POST_VARS['cc_owner'];
     $order->info['cc_type'] = $cc_validation->cc_type;
     $order->info['cc_number'] = $HTTP_POST_VARS['cc_number_nh-dns'];
     $order->info['cc_expires'] = $HTTP_POST_VARS['cc_expires_month'] . $HTTP_POST_VARS['cc_expires_year'];

     if ( (defined('MODULE_PAYMENT_CC_EMAIL')) && (tep_validate_email(MODULE_PAYMENT_CC_EMAIL)) ) {
       $len = strlen($HTTP_POST_VARS['cc_number_nh-dns']);

       $this->cc_middle = substr($HTTP_POST_VARS['cc_number_nh-dns'], 4, ($len-8));
       $order->info['cc_number'] = substr($HTTP_POST_VARS['cc_number_nh-dns'], 0, 4) . str_repeat('X', (strlen($HTTP_POST_VARS['cc_number_nh-dns']) - 8)) . substr($HTTP_POST_VARS['cc_number_nh-dns'], -4);
     }
   }

 

Can someone suggest a solution to this problem?

Link to comment
Share on other sites

  • 4 weeks later...
  • 1 month later...

I have returned from my short hiatus.

 

I'll be looking over the thread and will make updates/help as soon as I can.

9 times out of 10 its a PEBCAK Error (Problem exists between chair and keyboard)

 

Replace that and you're fine...

Link to comment
Share on other sites

Does anybody know if $REMOTE_ADDR is depreciated?

9 times out of 10 its a PEBCAK Error (Problem exists between chair and keyboard)

 

Replace that and you're fine...

Link to comment
Share on other sites

  • 2 weeks later...

UPDATED CONTRIBUTION IS IN! - http://addons.oscommerce.com/info/2115

 

Mostly reworked - if you were having problems, try to install this, then re-state your problem on the thread! It's a little more drag and drop, and I'll continue to work on it to really make it a module...

 

MaxMindV20-1.jpg

 

MaxMindV20_small.jpg

 

I'll continue to work on this as I code other projects!

 

I'm just happy to see people still using this after all these years.

9 times out of 10 its a PEBCAK Error (Problem exists between chair and keyboard)

 

Replace that and you're fine...

Link to comment
Share on other sites

are there new install instructions for ver 2.0? I tried installing this and it is not working. I followed the instructions that came with it that were listed for v1.54. I do not see any links in my admin area to set up any settings

 

Is it giving errors? Did you run maxtest?

 

I don't have that level of integration with the admin area finished yet, but perhaps I'll put that on as my very next thing. The only settings are to change the file itself. I'm trying to get it to a point where folks can both upgrade and install fresh.

 

I forgot to update the HTML instructions to indicate 2.0, but they are 2.0 instructions. I'll install a fresh set on my development center and see where I may have made a mistake. Thanks for the update. I take any and all comments seriously and will try to integrate features into a newer release.

Edited by nrlatsha

9 times out of 10 its a PEBCAK Error (Problem exists between chair and keyboard)

 

Replace that and you're fine...

Link to comment
Share on other sites

Is it giving errors? Did you run maxtest?

 

I don't have that level of integration with the admin area finished yet, but perhaps I'll put that on as my very next thing. The only settings are to change the file itself. I'm trying to get it to a point where folks can both upgrade and install fresh.

 

I forgot to update the HTML instructions to indicate 2.0, but they are 2.0 instructions. I'll install a fresh set on my development center and see where I may have made a mistake. Thanks for the update. I take any and all comments seriously and will try to integrate features into a newer release.

 

Ok I think I may have it working, I dont have a key yet I went to the signup but it says it takes a day to get back. When I run the maxtest everything is blank the first time I ran it it said the table did not exist but it did, and now I dont get that error. I am not good with database stuff so all I did was copied the stuff in step 1 and made a file max.sql and I added it there. When i tried to import the file I got a error on the `risk` float(7); line and I changed it to `risk` float(7), So i dont know if I screwed something up in the database for it?

 

The only other thing that confused me in step 1 it says "Add a new field in products table in database thru MySQL" so is orders_maxmind suppose to be its own table or is it suppose to be under the products table? Sorry if my post is as confusing as I am lol

 

Oh one other thing I am using Super_Download_Shop_v1.1 and in the file catalog/checkout_process.php: I do not have

 if (tep_not_null($sql_data_array['customers_id'])) {

, I dont know if that was something that was removed by the super-download, So i am not sure where to add the,

require(DIR_WS_MODULES . 'maxmind/maxmind.php');

so I added it near the top of the file

Edited by crombiecrunch
Link to comment
Share on other sites

Ok I think I may have it working, I dont have a key yet I went to the signup but it says it takes a day to get back. When I run the maxtest everything is blank the first time I ran it it said the table did not exist but it did, and now I dont get that error. I am not good with database stuff so all I did was copied the stuff in step 1 and made a file max.sql and I added it there. When i tried to import the file I got a error on the `risk` float(7); line and I changed it to `risk` float(7), So i dont know if I screwed something up in the database for it?

 

The only other thing that confused me in step 1 it says "Add a new field in products table in database thru MySQL" so is orders_maxmind suppose to be its own table or is it suppose to be under the products table? Sorry if my post is as confusing as I am lol

 

Oh one other thing I am using Super_Download_Shop_v1.1 and in the file catalog/checkout_process.php: I do not have

 if (tep_not_null($sql_data_array['customers_id'])) {

, I dont know if that was something that was removed by the super-download, So i am not sure where to add the,

require(DIR_WS_MODULES . 'maxmind/maxmind.php');

so I added it near the top of the file

 

From the looks of things, it may go better after this:

 

tep_db_perform(TABLE_ORDERS, $sql_data_array);
 $insert_id = tep_db_insert_id();

 

so it looks like this:

  tep_db_perform(TABLE_ORDERS, $sql_data_array);
 $insert_id = tep_db_insert_id();

require(DIR_WS_MODULES . 'maxmind/maxmind.php');

 

I haven't tested that yet, but will as soon as I can. I'm looking to add the admin stuff soon too, as that would make my job building the module easier too. I did it for EZier new fields, but I forgot about that contribution until you mentioned the admin thing.

9 times out of 10 its a PEBCAK Error (Problem exists between chair and keyboard)

 

Replace that and you're fine...

Link to comment
Share on other sites

From the looks of things, it may go better after this:

 

tep_db_perform(TABLE_ORDERS, $sql_data_array);
 $insert_id = tep_db_insert_id();

 

so it looks like this:

  tep_db_perform(TABLE_ORDERS, $sql_data_array);
 $insert_id = tep_db_insert_id();

require(DIR_WS_MODULES . 'maxmind/maxmind.php');

 

I haven't tested that yet, but will as soon as I can. I'm looking to add the admin stuff soon too, as that would make my job building the module easier too. I did it for EZier new fields, but I forgot about that contribution until you mentioned the admin thing.

 

ok i moved that line to were you suggested. I am still waiting on my key so I am not sure if this is 100% working or not.

Link to comment
Share on other sites

ok I just had me first transaction with the new store front seems this is working correctly. I dont see though were the IP is shown in the screen how do I enable that?

 

Surprisingly I didn't add that. So I'll have to draw up a new set of instructions to add that to the database.

9 times out of 10 its a PEBCAK Error (Problem exists between chair and keyboard)

 

Replace that and you're fine...

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...