function trackPackages($track_date = '0000-00-00', $log_id = false) { // single tracking # or date range global $db, $messageStack; // $result = array(); if ($log_id) { $shipments = $db->Execute("select id, ref_id, deliver_date, actual_date, tracking_id, notes \n\t\tfrom " . TABLE_SHIPPING_LOG . " where carrier = '{$this->code}' and id = '{$log_id}'"); } else { $start_date = $track_date; $end_date = gen_specific_date($track_date, $day_offset = 1); $shipments = $db->Execute("select id, ref_id, deliver_date, actual_date, tracking_id, notes \n\t\tfrom " . TABLE_SHIPPING_LOG . " where carrier = '{$this->code}' and ship_date >= '{$start_date}' and ship_date < '{$end_date}'"); } if ($shipments->RecordCount() == 0) { return 'No records were found!'; } $xml = "<StatusRequest>\n"; $xml .= xmlEntry('AccountID', MODULE_SHIPPING_ENDICIA_ACCOUNT_NUMBER); $xml .= xmlEntry('PassPhrase', MODULE_SHIPPING_ENDICIA_PASS_PHRASE); $xml .= xmlEntry('Test', MODULE_SHIPPING_ENDICIA_TEST_MODE == 'Test' ? 'Y' : 'N'); $xml .= xmlEntry('FullStatus', 'N'); while (!$shipments->EOF) { $xml .= " <StatusList>\n"; $xml .= xmlEntry('PICNumber', $shipments->fields['tracking_id']); $xml .= " </StatusList>\n"; $shipments->MoveNext(); } $xml .= "</StatusRequest>\n"; $client = new SoapClient(MODULE_SHIPPING_ENDICIA_ELS_URL, array('trace' => 1)); try { $response = $client->StatusRequest($xml); //echo 'Request <pre>' . htmlspecialchars($client->__getLastRequest()) . '</pre>'; //echo 'Response <pre>' . htmlspecialchars($client->__getLastResponse()) . '</pre>'; if ($response->StatusResponse->Status == 0) { if (!is_array($response->StatusResponse->StatusList)) { $response->StatusResponse->StatusList = array($response->StatusResponse->StatusList); } foreach ($response->StatusResponse->StatusList as $status) { $description = $status->PICNumber->Status; $status_code = $status->PICNumber->StatusCode; $message = sprintf(SHIPPING_ENDICIA_TRACK_STATUS, $shipments->fields['ref_id'], $shipments->fields['tracking_id'], $description); $messageStack->add($message, $status_code == 'D' ? 'success' : 'caution'); } } else { $message = TEXT_ERROR . ' (' . $response->StatusResponse->Status . ') ' . $response->StatusResponse->ErrorMsg; $messageStack->add($message, 'error'); } } catch (SoapFault $exception) { //echo 'Error Request <pre>' . htmlspecialchars($client->__getLastRequest()) . '</pre>'; //echo 'Error Response <pre>' . htmlspecialchars($client->__getLastResponse()) . '</pre>'; $message = "SOAP Error ({$exception->faultcode}) {$exception->faultstring}"; $messageStack->add($message, 'error'); } return $message; }