Actuellement, pour mes emails j'utilise la contribution send_order_html_v54 qui fonctionne très bien.
Mais voilà, pour expédier mes colis, je travaille avec plus de 2 transporteurs.
Pour colisimo, c'est impeccable. Mon lien fonctionne parfaitement.. pour les autres, j'aimerais bien pouvoir informer mes clients du suivi de leur livraison via le tracking correspondant.
J'ai donc trouvé la contribution "Package tracking with email notification mods".
J'aimerais donc fusionner ces deux contributions.
Mon gros soucis concerne le fichier admin/orders.php
Côté admin, ça fonctionne. les champs apparaissent bien.
Par contre, côté email client, c'est la cata, je ne sais pas comment m'y prendre pour que les numéros soient envoyés au client.
Quelqu'un pourrait il me filer un petit coup de pouce? d'autant plus que je ne dois pas être la seule à avoir ce besoin
Voici mon fichier orders.php à moitié modifié... C'est la première partie qui me pose problème :
CODE
<?php
/*
$Id: orders.php,v 1.112 2003/06/29 22:50:52 hpdl Exp $
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');
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']);
/* #CHAVEIRO3# Tracking begin*/
$track_num = tep_db_prepare_input($HTTP_POST_VARS['track_num']);
$track_num2 = tep_db_prepare_input($HTTP_POST_VARS['track_num2']);
/* #CHAVEIRO3# Tracking end*/
$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 . "'");
$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";
}
// ################## modifications html ####################"
$VARSTYLE = ''.VARSTYLE.'';
$BODY = ''.BODY.'';
//$EMAIL_TEXT_TITLE = ''.EMAIL_TEXT_TITLE.'';
$EMAIL_TEXT_DEAR = ''.EMAIL_TEXT_DEAR.'';
$EMAIL_IMAGE_VARLOGO = ''.EMAIL_IMAGE_VARLOGO.'';
$EMAIL_TEXT_DATE_SHIPPING = ''.EMAIL_TEXT_DATE_SHIPPING.'';
$EMAIL_TEXT_DATE = date('d/m/Y');
$EMAIL_TEXT_INTRO_CUSTOMERS_SERVICE = ''.EMAIL_TEXT_INTRO_CUSTOMERS_SERVICE.'';
//$EMAIL_TEXT_FOLLOW_ORDER = ''.EMAIL_TEXT_FOLLOW_ORDER.'';
//$EMAIL_TEXT_DATE_ORDERED = ''.EMAIL_TEXT_DATE_ORDERED.'';
//$EMAIL_TEXT_DATE_ORDER = tep_date_long($check_status['date_purchased']);
$EMAIL_TEXT_ORDER_NUMBER = ''.EMAIL_TEXT_ORDER_NUMBER.'';
if ($status==1) {
$EMAIL_IMAGE_ARGO =''.EMAIL_IMAGE_ARGO.'';
$EMAIL_TEXT_INTRO_CUSTOMERS = ''.EMAIL_TEXT_INTRO_CUSTOMERS.'';
$EMAIL_TEXT_POST = ''.EMAIL_TEXT_POST.'';
$EMAIL_IMAGE_POSTE = ''.EMAIL_IMAGE_POSTE.'';
$EMAIL_TEXT_DELAY = ''.EMAIL_TEXT_DELAY.'';
$EMAIL_TEXT_DELAY_CONTENT = ''.EMAIL_TEXT_DELAY_CONTENT.'';
$EMAIL_TEXT_WARNING = ''.EMAIL_TEXT_WARNING.'';
$EMAIL_TEXT_WARNING_CONTENT = ''.EMAIL_TEXT_WARNING_CONTENT.'';
$EMAIL_TEXT_COMPOSE = ''.EMAIL_TEXT_COMPOSE.'';
}
else
{
if ($status==2) {
$EMAIL_IMAGE_ARGO =''.EMAIL_IMAGE_ARGO1.'';
$EMAIL_TEXT_INTRO_CUSTOMERS = ''.EMAIL_TEXT_INTRO_CUSTOMERS1.'';
$EMAIL_TEXT_POST = ''.EMAIL_TEXT_POST1.'';
$EMAIL_IMAGE_POSTE = ''.EMAIL_IMAGE_POSTE1 .'';
$EMAIL_TEXT_DELAY = ''.EMAIL_TEXT_DELAY1.'';
$EMAIL_TEXT_DELAY_CONTENT = ''.EMAIL_TEXT_DELAY_CONTENT1.'';
}
else
{
if ($status==3)
$EMAIL_IMAGE_ARGO =''.EMAIL_IMAGE_ARGO2.'';
$EMAIL_TEXT_INTRO_CUSTOMERS = ''.EMAIL_TEXT_INTRO_CUSTOMERS2.'';
$EMAIL_TEXT_POST = ''.EMAIL_TEXT_POST2.'';
$EMAIL_IMAGE_POSTE = ''.EMAIL_IMAGE_POSTE2.'';
$EMAIL_TEXT_DELAY = ''.EMAIL_TEXT_DELAY2.'';
$EMAIL_TEXT_DELAY_CONTENT = ''.EMAIL_TEXT_DELAY_CONTENT2.'';
//$EMAIL_TEXT_WARNING = ''.EMAIL_TEXT_WARNING2.'';
//$EMAIL_TEXT_WARNING_CONTENT = ''.EMAIL_TEXT_WARNING_CONTENT2.'';
//$EMAIL_TEXT_COMPOSE = ''.EMAIL_TEXT_COMPOSE2.'';
$EMAIL_TEXT_NOTE1 = ''.EMAIL_TEXT_NOTE1.'';
}
}
//$EMAIL_IMAGE_COMMANDE = ''.EMAIL_IMAGE_COMMANDE.'';
$EMAIL_IMAGE_SVC = ''.EMAIL_IMAGE_SVC.'';
//$EMAIL_TEXT_STATUT = ''.EMAIL_TEXT_STATUT.'';
//$EMAIL_TEXT_STATUS_UPDATE1= ''. sprintf(EMAIL_TEXT_STATUS_UPDATE, $orders_status_array[$status]).'';
$EMAIL_TEXT_CONTACT_SERVICE_CLIENT = ''.EMAIL_TEXT_CONTACT_SERVICE_CLIENT.'';
$EMAIL_TEXT_CONTACT_SERVICE_CLIENT_SHEET2 = ''.EMAIL_TEXT_CONTACT_SERVICE_CLIENT_SHEET2.'';
$EMAIL_TEXT_CONTACT_SERVICE_CLIENT_SHEET_CONTENT2 = ''.EMAIL_TEXT_CONTACT_SERVICE_CLIENT_SHEET_CONTENT2.'';
//$EMAIL_TEXT_CONTACT_SERVICE_CLIENT_SHEET3 = ''.EMAIL_TEXT_CONTACT_SERVICE_CLIENT_SHEET3.'';
//$EMAIL_TEXT_CONTACT_SERVICE_CLIENT_SHEET_CONTENT3 = ''.EMAIL_TEXT_CONTACT_SERVICE_CLIENT_SHEET_CONTENT3.'';
$EMAIL_TEXT_CONTACT = ''.EMAIL_TEXT_CONTACT.'';
$EMAIL_TEXT_CONTACT_CONTENT = ''.EMAIL_TEXT_CONTACT_CONTENT.'';
$EMAIL_TEXT_NOTE = ''.EMAIL_TEXT_NOTE.'';
//$EMAIL_TEXT_END = ''.EMAIL_TEXT_END.'';
$EMAIL_TEXT_NOHTML = ''.EMAIL_TEXT_NOHTML.'';
require(DIR_WS_MODULES . 'email/html_orders.php');
$email = $html_orders;
if (EMAIL_USE_HTML == 'true') {
$email = $html_orders;
}
else
{
/* #CHAVEIRO3# Tracking contribution begin*/
if ((isset($HTTP_POST_VARS['notify_tracking']) &&
($HTTP_POST_VARS['notify_tracking'] == 'on')) & (tep_not_null($track_num) ||
tep_not_null($track_num2))) {
$notify_tracking = sprintf(EMAIL_TEXT_TRACKING_NUMBER) . "\n" . URL_TO_TRACK1 .
$track_num. "\n\n";
}
if ((isset($HTTP_POST_VARS['notify_tracking']) && ($HTTP_POST_VARS['notify_tracking'] == 'on')) & (tep_not_null($track_num))) {
$notify_tracking = sprintf(EMAIL_TEXT_TRACKING_NUMBER) . "\n" . URL_TO_TRACK1 . $track_num. "\n\n";
}
if ((isset($HTTP_POST_VARS['notify_tracking']) && ($HTTP_POST_VARS['notify_tracking'] == 'on')) & (tep_not_null($track_num2))) {
$notify_tracking = sprintf(EMAIL_TEXT_TRACKING_NUMBER) . "\n" . URL_TO_TRACK2 . $track_num2. "\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_tracking . $notify_comments . sprintf(EMAIL_TEXT_STATUS_UPDATE, $orders_status_array[$status]);
/* #CHAVEIRO3# Tracking contribution end*/
}
// ################## end modification #################
// ligne a tester
tep_mail($check_status['customers_name'], $check_status['customers_email_address'], EMAIL_TEXT_SUBJECT, $email, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
$customer_notified = '1';
}
/* #CHAVEIRO3# Tracking begin*/
tep_db_query("insert into " . TABLE_ORDERS_STATUS_HISTORY . " (orders_id, orders_status_id, date_added, customer_notified,track_num, track_num2, comments) values ('" . (int)$oID . "', '" . tep_db_input($status) . "', now(), '" . tep_db_input($customer_notified) . "', '" . tep_db_input($comments) . "', '" . tep_db_input($track_num) . "', '" . tep_db_input($track_num2) . "')");
/* #CHAVEIRO3# Tracking end*/
$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');
?>
/*
$Id: orders.php,v 1.112 2003/06/29 22:50:52 hpdl Exp $
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');
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']);
/* #CHAVEIRO3# Tracking begin*/
$track_num = tep_db_prepare_input($HTTP_POST_VARS['track_num']);
$track_num2 = tep_db_prepare_input($HTTP_POST_VARS['track_num2']);
/* #CHAVEIRO3# Tracking end*/
$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 . "'");
$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";
}
// ################## modifications html ####################"
$VARSTYLE = ''.VARSTYLE.'';
$BODY = ''.BODY.'';
//$EMAIL_TEXT_TITLE = ''.EMAIL_TEXT_TITLE.'';
$EMAIL_TEXT_DEAR = ''.EMAIL_TEXT_DEAR.'';
$EMAIL_IMAGE_VARLOGO = ''.EMAIL_IMAGE_VARLOGO.'';
$EMAIL_TEXT_DATE_SHIPPING = ''.EMAIL_TEXT_DATE_SHIPPING.'';
$EMAIL_TEXT_DATE = date('d/m/Y');
$EMAIL_TEXT_INTRO_CUSTOMERS_SERVICE = ''.EMAIL_TEXT_INTRO_CUSTOMERS_SERVICE.'';
//$EMAIL_TEXT_FOLLOW_ORDER = ''.EMAIL_TEXT_FOLLOW_ORDER.'';
//$EMAIL_TEXT_DATE_ORDERED = ''.EMAIL_TEXT_DATE_ORDERED.'';
//$EMAIL_TEXT_DATE_ORDER = tep_date_long($check_status['date_purchased']);
$EMAIL_TEXT_ORDER_NUMBER = ''.EMAIL_TEXT_ORDER_NUMBER.'';
if ($status==1) {
$EMAIL_IMAGE_ARGO =''.EMAIL_IMAGE_ARGO.'';
$EMAIL_TEXT_INTRO_CUSTOMERS = ''.EMAIL_TEXT_INTRO_CUSTOMERS.'';
$EMAIL_TEXT_POST = ''.EMAIL_TEXT_POST.'';
$EMAIL_IMAGE_POSTE = ''.EMAIL_IMAGE_POSTE.'';
$EMAIL_TEXT_DELAY = ''.EMAIL_TEXT_DELAY.'';
$EMAIL_TEXT_DELAY_CONTENT = ''.EMAIL_TEXT_DELAY_CONTENT.'';
$EMAIL_TEXT_WARNING = ''.EMAIL_TEXT_WARNING.'';
$EMAIL_TEXT_WARNING_CONTENT = ''.EMAIL_TEXT_WARNING_CONTENT.'';
$EMAIL_TEXT_COMPOSE = ''.EMAIL_TEXT_COMPOSE.'';
}
else
{
if ($status==2) {
$EMAIL_IMAGE_ARGO =''.EMAIL_IMAGE_ARGO1.'';
$EMAIL_TEXT_INTRO_CUSTOMERS = ''.EMAIL_TEXT_INTRO_CUSTOMERS1.'';
$EMAIL_TEXT_POST = ''.EMAIL_TEXT_POST1.'';
$EMAIL_IMAGE_POSTE = ''.EMAIL_IMAGE_POSTE1 .'';
$EMAIL_TEXT_DELAY = ''.EMAIL_TEXT_DELAY1.'';
$EMAIL_TEXT_DELAY_CONTENT = ''.EMAIL_TEXT_DELAY_CONTENT1.'';
}
else
{
if ($status==3)
$EMAIL_IMAGE_ARGO =''.EMAIL_IMAGE_ARGO2.'';
$EMAIL_TEXT_INTRO_CUSTOMERS = ''.EMAIL_TEXT_INTRO_CUSTOMERS2.'';
$EMAIL_TEXT_POST = ''.EMAIL_TEXT_POST2.'';
$EMAIL_IMAGE_POSTE = ''.EMAIL_IMAGE_POSTE2.'';
$EMAIL_TEXT_DELAY = ''.EMAIL_TEXT_DELAY2.'';
$EMAIL_TEXT_DELAY_CONTENT = ''.EMAIL_TEXT_DELAY_CONTENT2.'';
//$EMAIL_TEXT_WARNING = ''.EMAIL_TEXT_WARNING2.'';
//$EMAIL_TEXT_WARNING_CONTENT = ''.EMAIL_TEXT_WARNING_CONTENT2.'';
//$EMAIL_TEXT_COMPOSE = ''.EMAIL_TEXT_COMPOSE2.'';
$EMAIL_TEXT_NOTE1 = ''.EMAIL_TEXT_NOTE1.'';
}
}
//$EMAIL_IMAGE_COMMANDE = ''.EMAIL_IMAGE_COMMANDE.'';
$EMAIL_IMAGE_SVC = ''.EMAIL_IMAGE_SVC.'';
//$EMAIL_TEXT_STATUT = ''.EMAIL_TEXT_STATUT.'';
//$EMAIL_TEXT_STATUS_UPDATE1= ''. sprintf(EMAIL_TEXT_STATUS_UPDATE, $orders_status_array[$status]).'';
$EMAIL_TEXT_CONTACT_SERVICE_CLIENT = ''.EMAIL_TEXT_CONTACT_SERVICE_CLIENT.'';
$EMAIL_TEXT_CONTACT_SERVICE_CLIENT_SHEET2 = ''.EMAIL_TEXT_CONTACT_SERVICE_CLIENT_SHEET2.'';
$EMAIL_TEXT_CONTACT_SERVICE_CLIENT_SHEET_CONTENT2 = ''.EMAIL_TEXT_CONTACT_SERVICE_CLIENT_SHEET_CONTENT2.'';
//$EMAIL_TEXT_CONTACT_SERVICE_CLIENT_SHEET3 = ''.EMAIL_TEXT_CONTACT_SERVICE_CLIENT_SHEET3.'';
//$EMAIL_TEXT_CONTACT_SERVICE_CLIENT_SHEET_CONTENT3 = ''.EMAIL_TEXT_CONTACT_SERVICE_CLIENT_SHEET_CONTENT3.'';
$EMAIL_TEXT_CONTACT = ''.EMAIL_TEXT_CONTACT.'';
$EMAIL_TEXT_CONTACT_CONTENT = ''.EMAIL_TEXT_CONTACT_CONTENT.'';
$EMAIL_TEXT_NOTE = ''.EMAIL_TEXT_NOTE.'';
//$EMAIL_TEXT_END = ''.EMAIL_TEXT_END.'';
$EMAIL_TEXT_NOHTML = ''.EMAIL_TEXT_NOHTML.'';
require(DIR_WS_MODULES . 'email/html_orders.php');
$email = $html_orders;
if (EMAIL_USE_HTML == 'true') {
$email = $html_orders;
}
else
{
/* #CHAVEIRO3# Tracking contribution begin*/
if ((isset($HTTP_POST_VARS['notify_tracking']) &&
($HTTP_POST_VARS['notify_tracking'] == 'on')) & (tep_not_null($track_num) ||
tep_not_null($track_num2))) {
$notify_tracking = sprintf(EMAIL_TEXT_TRACKING_NUMBER) . "\n" . URL_TO_TRACK1 .
$track_num. "\n\n";
}
if ((isset($HTTP_POST_VARS['notify_tracking']) && ($HTTP_POST_VARS['notify_tracking'] == 'on')) & (tep_not_null($track_num))) {
$notify_tracking = sprintf(EMAIL_TEXT_TRACKING_NUMBER) . "\n" . URL_TO_TRACK1 . $track_num. "\n\n";
}
if ((isset($HTTP_POST_VARS['notify_tracking']) && ($HTTP_POST_VARS['notify_tracking'] == 'on')) & (tep_not_null($track_num2))) {
$notify_tracking = sprintf(EMAIL_TEXT_TRACKING_NUMBER) . "\n" . URL_TO_TRACK2 . $track_num2. "\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_tracking . $notify_comments . sprintf(EMAIL_TEXT_STATUS_UPDATE, $orders_status_array[$status]);
/* #CHAVEIRO3# Tracking contribution end*/
}
// ################## end modification #################
// ligne a tester
tep_mail($check_status['customers_name'], $check_status['customers_email_address'], EMAIL_TEXT_SUBJECT, $email, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
$customer_notified = '1';
}
/* #CHAVEIRO3# Tracking begin*/
tep_db_query("insert into " . TABLE_ORDERS_STATUS_HISTORY . " (orders_id, orders_status_id, date_added, customer_notified,track_num, track_num2, comments) values ('" . (int)$oID . "', '" . tep_db_input($status) . "', now(), '" . tep_db_input($customer_notified) . "', '" . tep_db_input($comments) . "', '" . tep_db_input($track_num) . "', '" . tep_db_input($track_num2) . "')");
/* #CHAVEIRO3# Tracking end*/
$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');
?>
et le bout de code de la contribution "Package tracking"
CODE
catalog/admin/orders.php
Find this:
$customer_notified = '0';
if ($HTTP_POST_VARS['notify'] == 'on') {
$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" . sprintf(EMAIL_TEXT_STATUS_UPDATE, $orders_status_array[$status]);
tep_mail($check_status['customers_name'], $check_status['customers_email_address'], EMAIL_TEXT_SUBJECT, nl2br($email), STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
$customer_notified = '1';
}
And replace it with this:
//Tracking contribution begin
$customer_notified = '0';
if ($HTTP_POST_VARS['notify'] == 'on' & ($ups_track_num == '' & $fedex_track_num == '' & $usps_track_num == '' & $fedex_freight_track_num == '' & $dhl_track_num == '' ) ) {
$notify_comments = '';
if ($HTTP_POST_VARS['notify_comments'] == 'on') {
$notify_comments = sprintf(EMAIL_TEXT_COMMENTS_UPDATE, $comments) . "\n";
if ($comments == null)
$notify_comments = '';
}
$email = 'Dear ' . $check_status['customers_name'] . ',' . "\n\n" . STORE_NAME . "\n" . EMAIL_SEPARATOR . "\n" . EMAIL_TEXT_ORDER_NUMBER . ' ' . (int)$oID . "\n" . EMAIL_TEXT_INVOICE_URL . ' ' . "<a HREF='" . tep_catalog_href_link(FILENAME_CATALOG_ACCOUNT_HISTORY_INFO, 'order_id=' . (int)$oID, 'SSL') . "'>" . 'order_id=' . (int)$oID . "</a>\n" . EMAIL_TEXT_DATE_ORDERED . ' ' . tep_date_long($check_status['date_purchased']) . "\n" . EMAIL_SEPARATOR . "\n\n\n" . $notify_comments . sprintf(EMAIL_TEXT_STATUS_UPDATE, $orders_status_array[$status]);
tep_mail($check_status['customers_name'], $check_status['customers_email_address'], STORE_NAME . ' ' . EMAIL_TEXT_SUBJECT_1. (int)$oID . EMAIL_TEXT_SUBJECT_2 . $orders_status_array[$status], $email, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
$customer_notified = '1';
}else if ($HTTP_POST_VARS['notify'] == 'on' & ($ups_track_num == '' or $fedex_track_num == '' or $usps_track_num == '' or $fedex_freight_track_num == '' or $dhl_track_num == '' ) ) {
$notify_comments = '';
if ($HTTP_POST_VARS['notify_comments'] == 'on') {
$notify_comments = sprintf(EMAIL_TEXT_COMMENTS_UPDATE, $comments) . "\n";
if ($comments == null)
$notify_comments = '';
}
if ($ups_track_num == null) {
$ups_text = '';
}else{
$ups_text = 'UPS: ';
$ups_track_num_noblanks = str_replace(' ', '', $ups_track_num);
$ups_link = 'http://wwwapps.ups.com/etracking/tracking.cgi?InquiryNumber1=' . $ups_track_num_noblanks . '&InquiryNumber2=&InquiryNumber3=&InquiryNumber4=&InquiryNumber5=&TypeOfInquiryNumber=T&UPS_HTML_Version=3.0&IATA=us&Lang=en&submit=Track+Package ';
$ups_track = '<a target="_blank" href="' . $ups_link . '">' . $ups_track_num . '</a>' . "\n";
}
if ($usps_track_num == null) {
$usps_text = '';
}else{
$usps_text = 'USPS: ';
$usps_track_num_noblanks = str_replace(' ', '', $usps_track_num);
$usps_link = 'http://trkcnfrm1.smi.usps.com/PTSInternetWeb/InterLabelInquiry.do?origTrackNum=' . $usps_track_num_noblanks . "\n";
$usps_track = '<a target="_blank" href="' . $usps_link . '">' . $usps_track_num . '</a>' . "\n";
}
if ($fedex_track_num == null) {
$fedex_text = '';
}else{
$fedex_text = 'Fedex: ';
$fedex_track_num_noblanks = str_replace(' ', '', $fedex_track_num);
$fedex_link = 'http://www.fedex.com/Tracking?tracknumbers=' . $fedex_track_num_noblanks . '&action=track&language=english&cntry_code=us';
$fedex_track = '<a target="_blank" href="' . $fedex_link . '">' . $fedex_track_num . '</a>' . "\n";
}
if ($fedex_freight_track_num == null) {
$fedex_freight_text = '';
}else{
$fedex_freight_text = 'FedEx Freight: ';
$fedex_freight_track_num_noblanks = str_replace(' ', '', $fedex_freight_track_num);
$fedex_freight_link = 'http://www.fedex.com/Tracking?tracknumbers=' . $fedex_freight_track_num_noblanks . '&action=track&language=english&cntry_code=us';
$fedex_freight_track = '<a target="_blank" href="' . $fedex_freight_link . '">' . $fedex_freight_track_num . '</a>' . "\n";
}
if ($dhl_track_num == null) {
$dhl_text = '';
}else{
$dhl_text = 'DHL: ';
$dhl_track_num_noblanks = str_replace(' ', '', $dhl_track_num);
$dhl_link = 'http://track.dhl-usa.com/atrknav.asp?ShipmentNumber=' . $dhl_track_num_noblanks . '&action=track&language=english&cntry_code=us';
$dhl_track = '<a target="_blank" href="' . $dhl_link . '">' . $dhl_track_num . '</a>' . "\n";
}
$email = 'Dear ' . $check_status['customers_name'] . ',' . "\n\n" . STORE_NAME . "\n" . EMAIL_SEPARATOR . "\n" . EMAIL_TEXT_ORDER_NUMBER . ' ' . (int)$oID . "\n" . EMAIL_TEXT_INVOICE_URL . ' ' . "<a HREF='" . tep_catalog_href_link(FILENAME_CATALOG_ACCOUNT_HISTORY_INFO, 'order_id=' . (int)$oID, 'SSL') . "'>" . 'order_id=' . (int)$oID . "</a>\n" . EMAIL_TEXT_DATE_ORDERED . ' ' . tep_date_long($check_status['date_purchased']) . "\n\n\n" . EMAIL_SEPARATOR . "\n" . EMAIL_TEXT_TRACKING_NUMBER . "\n" . $usps_text . $usps_track . $ups_text . $ups_track . $fedex_text . $fedex_track . $fedex_freight_text . $fedex_freight_track . $dhl_text . $dhl_track . "\n\n<br><br>" . $notify_comments . sprintf(EMAIL_TEXT_STATUS_UPDATE, $orders_status_array[$status]);
tep_mail($check_status['customers_name'], $check_status['customers_email_address'], STORE_NAME . ' ' . EMAIL_TEXT_SUBJECT_1. (int)$oID . EMAIL_TEXT_SUBJECT_2 . $orders_status_array[$status], $email, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
$customer_notified = '1';
}else if ($HTTP_POST_VARS['notify'] == 'on' & (tep_not_null($ups_track_num) & tep_not_null($fedex_track_num) & tep_not_null($usps_track_num) & tep_not_null($fedex_freight_track_num) & tep_not_null($dhl_track_num) ) ) {
$notify_comments = '';
$ups_text = 'UPS: ';
$ups_track_num_noblanks = str_replace(' ', '', $ups_track_num);
$ups_link = 'http://wwwapps.ups.com/etracking/tracking.cgi?InquiryNumber1=' . $ups_track_num_noblanks . '&InquiryNumber2=&InquiryNumber3=&InquiryNumber4=&InquiryNumber5=&TypeOfInquiryNumber=T&UPS_HTML_Version=3.0&IATA=us&Lang=en&submit=Track+Package ';
$ups_track = '<a target="_blank" href="' . $ups_link . '">' . $ups_track_num . '</a>' . "\n";
$usps_text = 'USPS: ';
$usps_track_num_noblanks = str_replace(' ', '', $usps_track_num);
$usps_link = 'http://trkcnfrm1.smi.usps.com/PTSInternetWeb/InterLabelInquiry.do?origTrackNum=' . $usps_track_num_noblanks . "\n";
$usps_track = '<a target="_blank" href="' . $usps_link . '">' . $usps_track_num . '</a>' . "\n";
$fedex_text = 'Fedex: ';
$fedex_track_num_noblanks = str_replace(' ', '', $fedex_track_num);
$fedex_link = 'http://www.fedex.com/Tracking?tracknumbers=' . $fedex_track_num_noblanks . '&action=track&language=english&cntry_code=us';
$fedex_track = '<a target="_blank" href="' . $fedex_link . '">' . $fedex_track_num . '</a>' . "\n";
$fedex_freight_text = 'FedEx Freight: ';
$fedex_freight_track_num_noblanks = str_replace(' ', '', $fedex_freight_track_num);
$fedex_freight_link = 'http://www.fedex.com/Tracking?tracknumbers=' . $fedex_freight_track_num_noblanks . '&action=track&language=english&cntry_code=us';
$fedex_freight_track = '<a target="_blank" href="' . $fedex_freight_link . '">' . $fedex_freight_track_num . '</a>' . "\n";
$dhl_text = 'DHL: ';
$dhl_track_num_noblanks = str_replace(' ', '', $dhl_track_num);
$dhl_link = 'http://track.dhl-usa.com/atrknav.asp?ShipmentNumber=' . $dhl_track_num_noblanks . '&action=track&language=english&cntry_code=us';
$dhl_track = '<a target="_blank" href="' . $dhl_link . '">' . $dhl_track_num . '</a>' . "\n";
if ($HTTP_POST_VARS['notify_comments'] == 'on') {
$notify_comments = sprintf(EMAIL_TEXT_COMMENTS_UPDATE, $comments) . "\n";
if ($comments == null)
$notify_comments = '';
}
$email = 'Dear ' . $check_status['customers_name'] . ',' . "\n\n" . STORE_NAME . "\n" . EMAIL_SEPARATOR . "\n" . EMAIL_TEXT_ORDER_NUMBER . ' ' . (int)$oID . "\n" . EMAIL_TEXT_INVOICE_URL . ' ' . "<a HREF='" . tep_catalog_href_link(FILENAME_CATALOG_ACCOUNT_HISTORY_INFO, 'order_id=' . (int)$oID, 'SSL') . "'>" . 'order_id=' . (int)$oID . "</a>\n" . EMAIL_TEXT_DATE_ORDERED . ' ' . tep_date_long($check_status['date_purchased']) . "\n\n\n" . EMAIL_SEPARATOR . "\n" . EMAIL_TEXT_TRACKING_NUMBER . "\n" . $usps_text . $usps_track . $ups_text . $ups_track . $fedex_text . $fedex_track . $fedex_freight_text . $fedex_freight_track . $dhl_text . $dhl_track . "\n\n<br><br>" . $notify_comments . sprintf(EMAIL_TEXT_STATUS_UPDATE, $orders_status_array[$status]);
tep_mail($check_status['customers_name'], $check_status['customers_email_address'], STORE_NAME . ' ' . EMAIL_TEXT_SUBJECT_1 . (int)$oID . EMAIL_TEXT_SUBJECT_2 . $orders_status_array[$status], $email, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
$customer_notified = '1';
}
//Tracking contribution end
Find this:
$customer_notified = '0';
if ($HTTP_POST_VARS['notify'] == 'on') {
$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" . sprintf(EMAIL_TEXT_STATUS_UPDATE, $orders_status_array[$status]);
tep_mail($check_status['customers_name'], $check_status['customers_email_address'], EMAIL_TEXT_SUBJECT, nl2br($email), STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
$customer_notified = '1';
}
And replace it with this:
//Tracking contribution begin
$customer_notified = '0';
if ($HTTP_POST_VARS['notify'] == 'on' & ($ups_track_num == '' & $fedex_track_num == '' & $usps_track_num == '' & $fedex_freight_track_num == '' & $dhl_track_num == '' ) ) {
$notify_comments = '';
if ($HTTP_POST_VARS['notify_comments'] == 'on') {
$notify_comments = sprintf(EMAIL_TEXT_COMMENTS_UPDATE, $comments) . "\n";
if ($comments == null)
$notify_comments = '';
}
$email = 'Dear ' . $check_status['customers_name'] . ',' . "\n\n" . STORE_NAME . "\n" . EMAIL_SEPARATOR . "\n" . EMAIL_TEXT_ORDER_NUMBER . ' ' . (int)$oID . "\n" . EMAIL_TEXT_INVOICE_URL . ' ' . "<a HREF='" . tep_catalog_href_link(FILENAME_CATALOG_ACCOUNT_HISTORY_INFO, 'order_id=' . (int)$oID, 'SSL') . "'>" . 'order_id=' . (int)$oID . "</a>\n" . EMAIL_TEXT_DATE_ORDERED . ' ' . tep_date_long($check_status['date_purchased']) . "\n" . EMAIL_SEPARATOR . "\n\n\n" . $notify_comments . sprintf(EMAIL_TEXT_STATUS_UPDATE, $orders_status_array[$status]);
tep_mail($check_status['customers_name'], $check_status['customers_email_address'], STORE_NAME . ' ' . EMAIL_TEXT_SUBJECT_1. (int)$oID . EMAIL_TEXT_SUBJECT_2 . $orders_status_array[$status], $email, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
$customer_notified = '1';
}else if ($HTTP_POST_VARS['notify'] == 'on' & ($ups_track_num == '' or $fedex_track_num == '' or $usps_track_num == '' or $fedex_freight_track_num == '' or $dhl_track_num == '' ) ) {
$notify_comments = '';
if ($HTTP_POST_VARS['notify_comments'] == 'on') {
$notify_comments = sprintf(EMAIL_TEXT_COMMENTS_UPDATE, $comments) . "\n";
if ($comments == null)
$notify_comments = '';
}
if ($ups_track_num == null) {
$ups_text = '';
}else{
$ups_text = 'UPS: ';
$ups_track_num_noblanks = str_replace(' ', '', $ups_track_num);
$ups_link = 'http://wwwapps.ups.com/etracking/tracking.cgi?InquiryNumber1=' . $ups_track_num_noblanks . '&InquiryNumber2=&InquiryNumber3=&InquiryNumber4=&InquiryNumber5=&TypeOfInquiryNumber=T&UPS_HTML_Version=3.0&IATA=us&Lang=en&submit=Track+Package ';
$ups_track = '<a target="_blank" href="' . $ups_link . '">' . $ups_track_num . '</a>' . "\n";
}
if ($usps_track_num == null) {
$usps_text = '';
}else{
$usps_text = 'USPS: ';
$usps_track_num_noblanks = str_replace(' ', '', $usps_track_num);
$usps_link = 'http://trkcnfrm1.smi.usps.com/PTSInternetWeb/InterLabelInquiry.do?origTrackNum=' . $usps_track_num_noblanks . "\n";
$usps_track = '<a target="_blank" href="' . $usps_link . '">' . $usps_track_num . '</a>' . "\n";
}
if ($fedex_track_num == null) {
$fedex_text = '';
}else{
$fedex_text = 'Fedex: ';
$fedex_track_num_noblanks = str_replace(' ', '', $fedex_track_num);
$fedex_link = 'http://www.fedex.com/Tracking?tracknumbers=' . $fedex_track_num_noblanks . '&action=track&language=english&cntry_code=us';
$fedex_track = '<a target="_blank" href="' . $fedex_link . '">' . $fedex_track_num . '</a>' . "\n";
}
if ($fedex_freight_track_num == null) {
$fedex_freight_text = '';
}else{
$fedex_freight_text = 'FedEx Freight: ';
$fedex_freight_track_num_noblanks = str_replace(' ', '', $fedex_freight_track_num);
$fedex_freight_link = 'http://www.fedex.com/Tracking?tracknumbers=' . $fedex_freight_track_num_noblanks . '&action=track&language=english&cntry_code=us';
$fedex_freight_track = '<a target="_blank" href="' . $fedex_freight_link . '">' . $fedex_freight_track_num . '</a>' . "\n";
}
if ($dhl_track_num == null) {
$dhl_text = '';
}else{
$dhl_text = 'DHL: ';
$dhl_track_num_noblanks = str_replace(' ', '', $dhl_track_num);
$dhl_link = 'http://track.dhl-usa.com/atrknav.asp?ShipmentNumber=' . $dhl_track_num_noblanks . '&action=track&language=english&cntry_code=us';
$dhl_track = '<a target="_blank" href="' . $dhl_link . '">' . $dhl_track_num . '</a>' . "\n";
}
$email = 'Dear ' . $check_status['customers_name'] . ',' . "\n\n" . STORE_NAME . "\n" . EMAIL_SEPARATOR . "\n" . EMAIL_TEXT_ORDER_NUMBER . ' ' . (int)$oID . "\n" . EMAIL_TEXT_INVOICE_URL . ' ' . "<a HREF='" . tep_catalog_href_link(FILENAME_CATALOG_ACCOUNT_HISTORY_INFO, 'order_id=' . (int)$oID, 'SSL') . "'>" . 'order_id=' . (int)$oID . "</a>\n" . EMAIL_TEXT_DATE_ORDERED . ' ' . tep_date_long($check_status['date_purchased']) . "\n\n\n" . EMAIL_SEPARATOR . "\n" . EMAIL_TEXT_TRACKING_NUMBER . "\n" . $usps_text . $usps_track . $ups_text . $ups_track . $fedex_text . $fedex_track . $fedex_freight_text . $fedex_freight_track . $dhl_text . $dhl_track . "\n\n<br><br>" . $notify_comments . sprintf(EMAIL_TEXT_STATUS_UPDATE, $orders_status_array[$status]);
tep_mail($check_status['customers_name'], $check_status['customers_email_address'], STORE_NAME . ' ' . EMAIL_TEXT_SUBJECT_1. (int)$oID . EMAIL_TEXT_SUBJECT_2 . $orders_status_array[$status], $email, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
$customer_notified = '1';
}else if ($HTTP_POST_VARS['notify'] == 'on' & (tep_not_null($ups_track_num) & tep_not_null($fedex_track_num) & tep_not_null($usps_track_num) & tep_not_null($fedex_freight_track_num) & tep_not_null($dhl_track_num) ) ) {
$notify_comments = '';
$ups_text = 'UPS: ';
$ups_track_num_noblanks = str_replace(' ', '', $ups_track_num);
$ups_link = 'http://wwwapps.ups.com/etracking/tracking.cgi?InquiryNumber1=' . $ups_track_num_noblanks . '&InquiryNumber2=&InquiryNumber3=&InquiryNumber4=&InquiryNumber5=&TypeOfInquiryNumber=T&UPS_HTML_Version=3.0&IATA=us&Lang=en&submit=Track+Package ';
$ups_track = '<a target="_blank" href="' . $ups_link . '">' . $ups_track_num . '</a>' . "\n";
$usps_text = 'USPS: ';
$usps_track_num_noblanks = str_replace(' ', '', $usps_track_num);
$usps_link = 'http://trkcnfrm1.smi.usps.com/PTSInternetWeb/InterLabelInquiry.do?origTrackNum=' . $usps_track_num_noblanks . "\n";
$usps_track = '<a target="_blank" href="' . $usps_link . '">' . $usps_track_num . '</a>' . "\n";
$fedex_text = 'Fedex: ';
$fedex_track_num_noblanks = str_replace(' ', '', $fedex_track_num);
$fedex_link = 'http://www.fedex.com/Tracking?tracknumbers=' . $fedex_track_num_noblanks . '&action=track&language=english&cntry_code=us';
$fedex_track = '<a target="_blank" href="' . $fedex_link . '">' . $fedex_track_num . '</a>' . "\n";
$fedex_freight_text = 'FedEx Freight: ';
$fedex_freight_track_num_noblanks = str_replace(' ', '', $fedex_freight_track_num);
$fedex_freight_link = 'http://www.fedex.com/Tracking?tracknumbers=' . $fedex_freight_track_num_noblanks . '&action=track&language=english&cntry_code=us';
$fedex_freight_track = '<a target="_blank" href="' . $fedex_freight_link . '">' . $fedex_freight_track_num . '</a>' . "\n";
$dhl_text = 'DHL: ';
$dhl_track_num_noblanks = str_replace(' ', '', $dhl_track_num);
$dhl_link = 'http://track.dhl-usa.com/atrknav.asp?ShipmentNumber=' . $dhl_track_num_noblanks . '&action=track&language=english&cntry_code=us';
$dhl_track = '<a target="_blank" href="' . $dhl_link . '">' . $dhl_track_num . '</a>' . "\n";
if ($HTTP_POST_VARS['notify_comments'] == 'on') {
$notify_comments = sprintf(EMAIL_TEXT_COMMENTS_UPDATE, $comments) . "\n";
if ($comments == null)
$notify_comments = '';
}
$email = 'Dear ' . $check_status['customers_name'] . ',' . "\n\n" . STORE_NAME . "\n" . EMAIL_SEPARATOR . "\n" . EMAIL_TEXT_ORDER_NUMBER . ' ' . (int)$oID . "\n" . EMAIL_TEXT_INVOICE_URL . ' ' . "<a HREF='" . tep_catalog_href_link(FILENAME_CATALOG_ACCOUNT_HISTORY_INFO, 'order_id=' . (int)$oID, 'SSL') . "'>" . 'order_id=' . (int)$oID . "</a>\n" . EMAIL_TEXT_DATE_ORDERED . ' ' . tep_date_long($check_status['date_purchased']) . "\n\n\n" . EMAIL_SEPARATOR . "\n" . EMAIL_TEXT_TRACKING_NUMBER . "\n" . $usps_text . $usps_track . $ups_text . $ups_track . $fedex_text . $fedex_track . $fedex_freight_text . $fedex_freight_track . $dhl_text . $dhl_track . "\n\n<br><br>" . $notify_comments . sprintf(EMAIL_TEXT_STATUS_UPDATE, $orders_status_array[$status]);
tep_mail($check_status['customers_name'], $check_status['customers_email_address'], STORE_NAME . ' ' . EMAIL_TEXT_SUBJECT_1 . (int)$oID . EMAIL_TEXT_SUBJECT_2 . $orders_status_array[$status], $email, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
$customer_notified = '1';
}
//Tracking contribution end
Merci d'avance ^^