From c4e9ada93af5abcf203bca60f25b48c5a6bd2ed3 Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Sun, 12 Feb 2023 01:22:22 -0700 Subject: [PATCH] Add INFO tracking event type behind optional version flag --- endpoints/logistics.tracking.php | 29 +++++++++++++++++++++++++++-- lib/TrackingStatus.lib.php | 27 ++++++++++++++++++--------- 2 files changed, 45 insertions(+), 11 deletions(-) diff --git a/endpoints/logistics.tracking.php b/endpoints/logistics.tracking.php index 206a8e2..5b82158 100644 --- a/endpoints/logistics.tracking.php +++ b/endpoints/logistics.tracking.php @@ -2,16 +2,41 @@ $trackinginfo; +$revision = 1; +if (!empty($VARS["revision"]) && preg_match("/[0-9]/", $VARS["revision"])) { + $revision = $VARS["revision"]; +} + $code = urldecode($VARS["code"]); $carrier = ""; if (!empty($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 { $cacheresp = $memcache->get("logistics.tracking.$code.$carrier"); if ($cacheresp !== false && empty($VARS["nocache"])) { - exitWithJson(json_decode($cacheresp, true)); + exitWithJson(downgradeResponseVersion(json_decode($cacheresp, true), $revision)); } $trackinginfo = Tracking::track($code, $carrier); @@ -24,7 +49,7 @@ try { "msg" => $ex->getMessage() ]; $memcache->set("logistics.tracking.$code.$carrier", json_encode($output), 60 * 10); - exitWithJson($output); + exitWithJson(downgradeResponseVersion($output, $revision)); } if (is_null($trackinginfo)) { diff --git a/lib/TrackingStatus.lib.php b/lib/TrackingStatus.lib.php index a209b8e..dae2326 100644 --- a/lib/TrackingStatus.lib.php +++ b/lib/TrackingStatus.lib.php @@ -8,6 +8,7 @@ class TrackingStatus { public const TRACKING_STATUS_DELIVERED = 3; public const TRACKING_STATUS_RETURNED = 4; public const TRACKING_STATUS_FAILURE = 5; + public const TRACKING_STATUS_INFO = 6; /** * Convert a status string API response to a constant integer. @@ -25,8 +26,10 @@ class TrackingStatus { case "OUT_FOR_DELIVERY": return TrackingStatus::TRACKING_STATUS_TRANSIT; case "DELIVERED": - case "AVAILABLE_FOR_PICKUP": return TrackingStatus::TRACKING_STATUS_DELIVERED; + case "AVAILABLE_FOR_PICKUP": + case "CANCELLED": + return TrackingStatus::TRACKING_STATUS_INFO; case "RETURNED": case "RETURN_TO_SENDER": return TrackingStatus::TRACKING_STATUS_RETURNED; @@ -34,7 +37,6 @@ class TrackingStatus { case "DELIVERY ATTEMPT": case "ALERT": case "ERROR": - case "CANCELLED": return TrackingStatus::TRACKING_STATUS_FAILURE; default: return TrackingStatus::TRACKING_STATUS_UNKNOWN; @@ -58,6 +60,8 @@ class TrackingStatus { return "RETURNED"; case TrackingStatus::TRACKING_STATUS_FAILURE: return "FAILURE"; + case TrackingStatus::TRACKING_STATUS_INFO: + return "INFO"; default: return "UNKNOWN"; } @@ -175,19 +179,21 @@ class TrackingStatus { case "VR": case "WX": case "AP": - case "CI": // stuck in customs case "AT": // departed a transfer airport (int'l) case "A0": // "Acceptance" from foreign country case "CO": // "Inbound Out of Customs" 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 "MF": // "Processed through Facility" (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 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 "13": case "17": @@ -201,7 +207,6 @@ class TrackingStatus { case "85": case "86": case "87": - case "LD": // letter estimated to be delivered today case "I0": // International something or other return TrackingStatus::TRACKING_STATUS_DELIVERED; case "04": @@ -247,8 +252,9 @@ class TrackingStatus { switch ($eventcode) { case "M": case "MV": - case "ZA": // UPS My Choice redirect return TrackingStatus::TRACKING_STATUS_PRE_TRANSIT; + case "ZA": // UPS My Choice redirect + return TrackingStatus::TRACKING_STATUS_INFO; case "I": case "P": case "O": @@ -319,9 +325,12 @@ class TrackingStatus { case "IP": case "DO": // dropped off 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 "DL": // Delivered - case "HP": // Ready for pickup return TrackingStatus::TRACKING_STATUS_DELIVERED; case "RS": return TrackingStatus::TRACKING_STATUS_RETURNED;