Add INFO tracking event type behind optional version flag

This commit is contained in:
Skylar Ittner 2023-02-12 01:22:22 -07:00
parent 9f4aeca895
commit c4e9ada93a
2 changed files with 45 additions and 11 deletions

View File

@ -2,16 +2,41 @@
$trackinginfo; $trackinginfo;
$revision = 1;
if (!empty($VARS["revision"]) && preg_match("/[0-9]/", $VARS["revision"])) {
$revision = $VARS["revision"];
}
$code = urldecode($VARS["code"]); $code = urldecode($VARS["code"]);
$carrier = ""; $carrier = "";
if (!empty($VARS["carrier"])) { if (!empty($VARS["carrier"])) {
$carrier = $VARS["carrier"]; $carrier = $VARS["carrier"];
} }
function downgradeResponseVersion($data, int $version) {
switch ($version) {
case 2:
return $data;
case 1:
// No "INFO" status type in first version
if (!empty($data["current"]["status"]) && $data["current"]["status"] == "INFO") {
$data["current"]["status"] = "TRANSIT";
}
if (!empty($data["history"])) {
for ($i = 0; $i < count($data["history"]); $i++) {
if ($data["history"][$i]["status"] == "INFO") {
$data["history"][$i]["status"] = "TRANSIT";
}
}
}
return $data;
}
}
try { try {
$cacheresp = $memcache->get("logistics.tracking.$code.$carrier"); $cacheresp = $memcache->get("logistics.tracking.$code.$carrier");
if ($cacheresp !== false && empty($VARS["nocache"])) { if ($cacheresp !== false && empty($VARS["nocache"])) {
exitWithJson(json_decode($cacheresp, true)); exitWithJson(downgradeResponseVersion(json_decode($cacheresp, true), $revision));
} }
$trackinginfo = Tracking::track($code, $carrier); $trackinginfo = Tracking::track($code, $carrier);
@ -24,7 +49,7 @@ try {
"msg" => $ex->getMessage() "msg" => $ex->getMessage()
]; ];
$memcache->set("logistics.tracking.$code.$carrier", json_encode($output), 60 * 10); $memcache->set("logistics.tracking.$code.$carrier", json_encode($output), 60 * 10);
exitWithJson($output); exitWithJson(downgradeResponseVersion($output, $revision));
} }
if (is_null($trackinginfo)) { if (is_null($trackinginfo)) {

View File

@ -8,6 +8,7 @@ class TrackingStatus {
public const TRACKING_STATUS_DELIVERED = 3; public const TRACKING_STATUS_DELIVERED = 3;
public const TRACKING_STATUS_RETURNED = 4; public const TRACKING_STATUS_RETURNED = 4;
public const TRACKING_STATUS_FAILURE = 5; public const TRACKING_STATUS_FAILURE = 5;
public const TRACKING_STATUS_INFO = 6;
/** /**
* Convert a status string API response to a constant integer. * Convert a status string API response to a constant integer.
@ -25,8 +26,10 @@ class TrackingStatus {
case "OUT_FOR_DELIVERY": case "OUT_FOR_DELIVERY":
return TrackingStatus::TRACKING_STATUS_TRANSIT; return TrackingStatus::TRACKING_STATUS_TRANSIT;
case "DELIVERED": case "DELIVERED":
case "AVAILABLE_FOR_PICKUP":
return TrackingStatus::TRACKING_STATUS_DELIVERED; return TrackingStatus::TRACKING_STATUS_DELIVERED;
case "AVAILABLE_FOR_PICKUP":
case "CANCELLED":
return TrackingStatus::TRACKING_STATUS_INFO;
case "RETURNED": case "RETURNED":
case "RETURN_TO_SENDER": case "RETURN_TO_SENDER":
return TrackingStatus::TRACKING_STATUS_RETURNED; return TrackingStatus::TRACKING_STATUS_RETURNED;
@ -34,7 +37,6 @@ class TrackingStatus {
case "DELIVERY ATTEMPT": case "DELIVERY ATTEMPT":
case "ALERT": case "ALERT":
case "ERROR": case "ERROR":
case "CANCELLED":
return TrackingStatus::TRACKING_STATUS_FAILURE; return TrackingStatus::TRACKING_STATUS_FAILURE;
default: default:
return TrackingStatus::TRACKING_STATUS_UNKNOWN; return TrackingStatus::TRACKING_STATUS_UNKNOWN;
@ -58,6 +60,8 @@ class TrackingStatus {
return "RETURNED"; return "RETURNED";
case TrackingStatus::TRACKING_STATUS_FAILURE: case TrackingStatus::TRACKING_STATUS_FAILURE:
return "FAILURE"; return "FAILURE";
case TrackingStatus::TRACKING_STATUS_INFO:
return "INFO";
default: default:
return "UNKNOWN"; return "UNKNOWN";
} }
@ -175,19 +179,21 @@ class TrackingStatus {
case "VR": case "VR":
case "WX": case "WX":
case "AP": case "AP":
case "CI": // stuck in customs
case "AT": // departed a transfer airport (int'l) case "AT": // departed a transfer airport (int'l)
case "A0": // "Acceptance" from foreign country case "A0": // "Acceptance" from foreign country
case "CO": // "Inbound Out of Customs" case "CO": // "Inbound Out of Customs"
case "D0": // "Processed Through Facility" (int'l) case "D0": // "Processed Through Facility" (int'l)
case "E0": // "Customs Clearance" (int'l)
case "F0": // "Customs Clearance Processing Complete" (int'l)
case "G0": // "Arrival at Post Office" (int'l) case "G0": // "Arrival at Post Office" (int'l)
case "MF": // "Processed through Facility" (int'l) case "MF": // "Processed through Facility" (int'l)
case "DG": // "Out for Delivery" (int'l) case "DG": // "Out for Delivery" (int'l)
case "ME": // "Held in Customs" (int'l, isn't necessarily bad)
case "TL": // "moving within the USPS network" filler message case "TL": // "moving within the USPS network" filler message
return TrackingStatus::TRACKING_STATUS_TRANSIT; return TrackingStatus::TRACKING_STATUS_TRANSIT;
case "CI": // stuck in customs
case "ME": // "Held in Customs" (int'l, isn't necessarily bad)
case "LD": // letter estimated to be delivered today
case "E0": // "Customs Clearance" (int'l)
case "F0": // "Customs Clearance Processing Complete" (int'l)
return TrackingStatus::TRACKING_STATUS_INFO;
case "01": case "01":
case "13": case "13":
case "17": case "17":
@ -201,7 +207,6 @@ class TrackingStatus {
case "85": case "85":
case "86": case "86":
case "87": case "87":
case "LD": // letter estimated to be delivered today
case "I0": // International something or other case "I0": // International something or other
return TrackingStatus::TRACKING_STATUS_DELIVERED; return TrackingStatus::TRACKING_STATUS_DELIVERED;
case "04": case "04":
@ -247,8 +252,9 @@ class TrackingStatus {
switch ($eventcode) { switch ($eventcode) {
case "M": case "M":
case "MV": case "MV":
case "ZA": // UPS My Choice redirect
return TrackingStatus::TRACKING_STATUS_PRE_TRANSIT; return TrackingStatus::TRACKING_STATUS_PRE_TRANSIT;
case "ZA": // UPS My Choice redirect
return TrackingStatus::TRACKING_STATUS_INFO;
case "I": case "I":
case "P": case "P":
case "O": case "O":
@ -319,9 +325,12 @@ class TrackingStatus {
case "IP": case "IP":
case "DO": // dropped off case "DO": // dropped off
return TrackingStatus::TRACKING_STATUS_TRANSIT; return TrackingStatus::TRACKING_STATUS_TRANSIT;
case "AE": // Arriving early
case "AS": // Address corrected
case "HP": // Ready for pickup
return TrackingStatus::TRACKING_STATUS_INFO;
case "RC": // Recipient case "RC": // Recipient
case "DL": // Delivered case "DL": // Delivered
case "HP": // Ready for pickup
return TrackingStatus::TRACKING_STATUS_DELIVERED; return TrackingStatus::TRACKING_STATUS_DELIVERED;
case "RS": case "RS":
return TrackingStatus::TRACKING_STATUS_RETURNED; return TrackingStatus::TRACKING_STATUS_RETURNED;