"; $remoteDBisActive = false; if (BWV2_checkEmpRemoteDBAccess($useRemoteDB, $emp_id)) : $remoteDBisActive = BWV2_setRemoteDBAccessParameter(); endif; // ****************************************************** /* FLOW: - General definitions - Get courier-id from http-request - Search MSISDN from courier-id - Generate request - Send request - Parse response - Search x,y-coordinates in cells to be valid - Compute longitude and latitude (transformation) - Get zipcode from coordinates - Update zipcode of the courier - Write to log-file|log-db (employee, datetime, courier-id, msisdn, [zipcode, x_y_of_cell]) - Output zipcode */ // *********************** // * General definitions * // *********************** // Proxy und Port fuer HTTPS $proxy = ""; // $port = ":9883"; // D2 LBS-Testsystem $port = ":705"; // D2 LBS-Live $constPort = getParameterValue("0", "LOCATING_LBS_PORT", "0"); if ($constPort != "") : $port = $constPort; endif; // $server = "213.148.156.83"; // D2 LBS-Testsystem $server = "139.7.25.166"; // D2 LBS-Live $constServer = getParameterValue("0", "LOCATING_LBS_SERVER", "0"); if ($constServer != "") : $server = $constServer; endif; // Access to a special remote file // $file = "ats/receiver"; // D2 LBS-Testsystem $file = "LocationQueryService"; // D2 LBS-Live // Request id // $requestID = "1"; $requestID = rand(1,30000); // User and password $vaspID = "mi2ju GmbH"; // D2 Live $constVaspID = getParameterValue("0", "LOCATING_LBS_VASP_ID", "0"); if ($constVaspID != "") : $vaspID = $constVaspID; endif; $password = "mi2ju03#"; // D2 Live $constPassword = getParameterValue("0", "LOCATING_LBS_PASSWORD", "0"); if ($constPassword != "") : $password = $constPassword; endif; // Service ID // $serviceId = "mi2juTest"; // D2 Testsystem $serviceId = "mi2ju"; // D2 Live $constServiceId = getParameterValue("0", "LOCATING_LBS_SERVICE_ID", "0"); if ($constServiceId != "") : $serviceId = $constServiceId; endif; // Maximum of age of locating info $maxAgeOfLocatingInfoInSeconds = "300"; // Minimum of the granularity $minOfGranularityInMeter = "99999"; // Client Certificate and Private Key $clientcertkey = '-cert cacert.pem -key privkey.pem'; // Path to openssl $openssl = 'openssl'; // Port of openssl $opensslPort = "9213"; // Only for output $status_message = ""; // Logging enabled $loggingEnabled = TRUE; $logFile = "../log/COM_LOG"; // Echo enabled $echoEnabled = FALSE; // ************* // * Functions * // ************* function writeLocatingLog($file, $value) { global $loggingEnabled; if ($loggingEnabled) : writeToFile($file, $value); endif; } function connectD2($completeReq) { global $server, $port; $response = ""; $errno = ""; $errstr = ""; $fp = fsockopen ($server, substr($port, 1), $errno, $errstr, 10); if (!$fp) { $response = "$errstr ($errno)
\n"; } else { fputs ($fp, $completeReq); if (fflush($fp)) : // Read header $httpHeader = ""; $httpBodyLength = 0; if (!feof($fp)) : $line = trim(fgets ($fp,1024)); $httpHeader .= trim($line); while (!feof($fp) && $line != "") { $line = trim(fgets ($fp,1024)); $httpHeader .= $line; if (!(strpos($line, "Content-Length: ") === FALSE)) : $httpBodyLength = trim(substr($line, 16)); endif; } endif; // writeLocatingLog($logFile, "::: " . $httpHeader . "\r\n"); // writeLocatingLog($logFile, "::: " . $httpBodyLength . "\r\n"); /* // while (!feof($fp) && $line != "") { while (!feof($fp) && strlen($response) < ($httpBodyLength - 7)) { $line = trim(fgets ($fp,1024)); $response .= $line; } */ $count = 0; while (!feof($fp) && $count < $httpBodyLength) { $line = trim(fgets ($fp,2)); $response .= $line; $count++; } // writeLocatingLog($logFile, ":# Loops: " . $count . "\r\n"); else : $response = "ERR: " . $errno . " " . $errstr; endif; fclose ($fp); } return $response; } // ********************************* // * Search MSISDN from courier-id * // ********************************* // Get courier-id from the courier-sid (e.g. SIDs: 1013, 1019, etc.) $cr_id = getFieldValueFromId("courier","cr_sid",$f_cr_sid,"cr_id"); $msisdn = getFieldValueFromId("courier","cr_id",$cr_id,"cr_mobile_pda"); $imei = getFieldValueFromId("courier","cr_id",$cr_id,"cr_imei"); $serialno = getFieldValueFromId("courier","cr_id",$cr_id,"cr_serialno"); // Remove blanks in MSISDN and check beginning with "49" // (IMPORTANT: No check for other chars because checked in javascript !!!) $msisdn = ereg_replace (" ", "", $msisdn); $msisdn = str_replace("+", "", $msisdn); if (!ereg("^" . COUNTRY_FON_PREFIX, $msisdn)) : if (ereg("^0", $msisdn)) : $msisdn = substr($msisdn, 1); endif; $msisdn = COUNTRY_FON_PREFIX . $msisdn; endif; // Check necessity of new locating process $locatingStateArray = checkLocatingState($cr_id); //echo $locatingStateArray[0] . "\n"; // ******************************************************** // * Generate request if broker service will be contacted * // ******************************************************** /* if ($locatingStateArray[0] == "1") : writeLocatingLog($logFile, json_encode($locatingStateArray) . "\r\n"); // Define header request $requestheaderOrg = "POST /" . $file . " HTTP/1.1\r\n" . "Host: $server$port\r\n" . "Content-Type: application/x-www-form-urlencoded\r\n" . "Content-Length: LENGTH\r\n\r\n"; // Connection request $requestContext = "$vaspID$password$serviceId"; $requestMethod = "SLIR"; $requestBody = "" . $msisdn . ""; $requestContext = urlencode($requestContext); $requestBody = urlencode($requestBody); // Merge "Context", "Method" and "Body" $requestContext = "Context=" . $requestContext . "&Method=" . $requestMethod . "&Body=" . $requestBody; $laenge = strlen($requestContext); $requestheader = $requestheaderOrg; $requestheader = str_replace ("LENGTH", $laenge, $requestheader); if ($echoEnabled) : echo $requestheader . $requestContext . "\n\n\n"; endif; writeLocatingLog($logFile, $requestheader . $requestContext . "\r\n"); $currentTime = getDateTime("0"); writeLocatingLog($logFile, "Time begin: " . $currentTime . "\r\n"); // $response = connectD2($requestheader.$requestContext."\r\n"); $response = "dummy"; $currentTime = getDateTime("0"); writeLocatingLog($logFile, "Time end: " . $currentTime . "\r\n"); if ($echoEnabled) : echo $response . "\n\n\n"; endif; writeLocatingLog($logFile, $response . "\r\n"); else : */ $longitude = $locatingStateArray[1]; $latitude = $locatingStateArray[2]; $gpsTime = $locatingStateArray[4]; // Generate a faked response to be parsed correctly $response = ""; $response .= ""; $response .= " "; $response .= " " . $locatingStateArray[2] . ""; $response .= " " . $locatingStateArray[1] . ""; $response .= " "; $response .= ""; $response .= "XXXX"; //endif; // Evaluation of the response if ($response == "") : // Error occurred, response is empty ... $status_message = "Es wurde keine Antwort geliefert!"; else : if ((FALSE && !(strpos($response, "") === FALSE)) || ($longitude == 0 && $latitude == 0)) : // Error occurred, ... $status_message = "Die Nummer konnte nicht geortet werden!"; else : if ((strpos($response, "") === FALSE)) : $status_message = "Die Lokalisierung war nicht möglich!"; else : // GET LOCATING INFOS OF THE RESPONSE // Get latitude /* $beginPos = strpos($response, "") + 5; $endPos = strpos($response, ""); $latitude = substr($response, $beginPos, $endPos - $beginPos); $latitude = substr($latitude, 0, -4) . "." . substr($latitude, -4); // Insert char "." */ // Get longitude /* $beginPos = strpos($response, "") + 6; $endPos = strpos($response, ""); $longitude = substr($response, $beginPos, $endPos - $beginPos); $longitude = substr($longitude, 0, -4) . "." . substr($longitude, -4); // Insert char "." */ /* 491736281211 523011.999 132424.001 293 +0200 OK AAADswAAARIkPfYcZByzGh+MVoO8Dt2Uevwx */ /* // GET LOCATING INFOS OF THE RESPONSE // If no request has to be send to the server the current longitude and latitude are defined if ($locatingStateArray[0] == "1") : // Get latitude from connection request $beginPos = strpos($response, "") + 5; $endPos = strpos($response, ""); $latitudeRaw = substr($response, $beginPos, $endPos - $beginPos); if ($echoEnabled) : echo "CoordPair: " . $coordPair . "
"; endif; // Get longitude from connection request $beginPos = strpos($response, "") + 6; $endPos = strpos($response, ""); $longitudeRaw = substr($response, $beginPos, $endPos - $beginPos); if ($echoEnabled) : echo "CoordPair: " . $coordPair . "
"; endif; // Get radius from connection request $beginPos = strpos($response, "") + 5; $endPos = strpos($response, ""); $radius = substr($response, $beginPos, $endPos - $beginPos); if ($echoEnabled) : echo "CoordPair: " . $coordPair . "
"; endif; // Transform data // Example: $coordPair = "555555,133333" // $coordPairArray[0] = "555555" | $coordPairArray[0] = "133333" // $x_coord_array[0] = "55" (Stellen 0 und 1) | $x_coord_array[1] = "55" (Stellen 2 und 3) | $x_coord_array[2] = "55" (Stellen 4 und 5) // $y_coord_array[0] = "13" (Stellen 0 und 1) | $y_coord_array[1] = "33" (Stellen 2 und 3) | $y_coord_array[2] = "33" (Stellen 4 und 5) $latitudeRawArray = array(); $tmpPos = strpos($latitudeRaw, "."); if (!($tmpPos === FALSE)) : $latitudeRawArray[0] = substr($latitudeRaw, 0, $tmpPos); $latitudeRawArray[1] = substr($latitudeRaw, $tmpPos); else : $latitudeRawArray[0] = $latitudeRaw; $latitudeRawArray[1] = "0"; endif; $longitudeRawArray = array(); $tmpPos = strpos($longitudeRaw, "."); if (!($tmpPos === FALSE)) : $longitudeRawArray[0] = substr($longitudeRaw, 0, $tmpPos); $longitudeRawArray[1] = substr($longitudeRaw, $tmpPos); else : $longitudeRawArray[0] = $longitudeRaw; $longitudeRawArray[1] = "0"; endif; $latitudeRawArray[0] = pad($latitudeRawArray[0], 6, "0"); // if less than 6 chars $longitudeRawArray[0] = pad($longitudeRawArray[0], 6, "0"); // if less than 6 chars if ($latitudeRawArray[1] == "") : $latitudeRawArray[1] = "0"; endif; if ($longitudeRawArray[1] == "") : $longitudeRawArray[1] = "0"; endif; $x_coord_array[0] = substr($latitudeRawArray[0], 0, 2); $x_coord_array[1] = substr($latitudeRawArray[0], 2, 2); $x_coord_array[2] = substr($latitudeRawArray[0], 4); $y_coord_array[0] = substr($longitudeRawArray[0], 0, 2); $y_coord_array[1] = substr($longitudeRawArray[0], 2, 2); $y_coord_array[2] = substr($longitudeRawArray[0], 4); // *************************************************** // * Compute longitude and latitude (transformation) * // *************************************************** $longitude = $y_coord_array[0] + $y_coord_array[1] / 60 + ($y_coord_array[2] + $longitudeRawArray[1]) / 3600; $latitude = $x_coord_array[0] + $x_coord_array[1] / 60 + ($x_coord_array[2] + $latitudeRawArray[1]) / 3600; writeLocatingLog($logFile, "-->" . $latitude . " " . $longitude . "<-- \r\n"); endif; */ // ******************************** // * Get zipcode from coordinates * // ******************************** $constLocatingMode = LOCATING_MODE; if ($constLocatingMode == "0") : $zipcode = findZipcodeArea($longitude, $latitude); if (trim($zipcode) == "") : $constLocatingMode = "1"; endif; endif; if ($constLocatingMode == "1") : // Get nearest coordinates $sqlquery = "SELECT srvp.srvp_id, srvp.srvp_plz, srvp.srvp_latitude, srvp.srvp_longitude, " . "SQRT(POW(ABS(srvp.srvp_latitude - $latitude),2) + POW(ABS(srvp.srvp_longitude - $longitude),2)) AS nb" . " FROM serviceplz AS srvp" . " ORDER BY nb" . " LIMIT 0,1"; $result = $db->query($sqlquery); if (DB::isError($result)) die ("$PHP_SELF: " . $result->getMessage()); // all defined db-fields an titles shall become content of the following arrays while ($row = $result->fetch_assoc()): $f_srvp_plz = $row["srvp_plz"]; // Zipcode to be displayed endwhile; $result->free(); $zipcode = $f_srvp_plz; endif; $status_message = "Letzte erfolgreiche Ortung: " . $zipcode . "

" . "(" . $longitude . " / " . $latitude . " um " . formatOutput($gpsTime,"datetime","4") . " " . formatOutput($gpsTime,"datetime","10") . ")

" . "[Kartendarstellung]


"; // ********************************* // * Update zipcode of the courier * // ********************************* $updateRankingTime = TRUE; // Get current zipcode of the courier out of the table "courier" (cr_locationzipcode) to compare with locating zipcode $crLocationZipcode = getFieldValueFromId("courier","cr_id",$cr_id,"cr_locationzipcode"); $status_message .= "(Freimeldung des Kuriers: " . $crLocationZipcode . ")

"; if ($zipcode != "" && $crLocationZipcode != "" && is_numeric($crLocationZipcode)) : // Check current zipcode with locating zipcode if ($zipcode == $crLocationZipcode) : $updateRankingTime = FALSE; else : // Check locating zipcode is in neighbourhood // If true then ok => do not update ranking time // Get the general mediation mode for the headquarter $mediationMode = MODE_INTERMEDIATION; if ($mediationMode == "") : $mediationMode = getFieldValueFromId("headquarters", "hq_id", "$hq_id", "hq_invmode"); endif; // Get all neighbours for the current zipcode(area) if ($mediationMode == "1") : $zicodeArray = getCourierByRanking($crLocationZipcode, "0000010000", "", ""); $zicodeArray = $zicodeArray[5]; else : $areaIdArray = getCourierByRanking($crLocationZipcode, "0000010000", "", ""); $areaIdArray = $areaIdArray[5]; // Add ID of the main mediation area $srvpIdZipcode = getFieldValueFromId("serviceplz","srvp_plz",$crLocationZipcode,"srvp_id"); // $srvpaIdMain = getFieldValueFromId("serviceplzareamapping","srvp_id",$srvpIdZipcode,"srvpa_id"); $srvpaIdMain = $db->getOne("SELECT srvpam.srvpa_id FROM serviceplzarea AS srvpa, serviceplzareamapping AS srvpam" . " WHERE srvpam.srvp_id = '" . $srvpIdZipcode . "' AND srvpa.srvpa_id = srvpam.srvpa_id AND srvpa.hq_id = '" . $hq_id . "'"); if ($areaIdArray == "") : $areaIdArray = array(); endif; array_push($areaIdArray, $srvpaIdMain); $areaIdArrayLen = count($areaIdArray); $outputOfAllValidMainZipcodes = "GÜLTIGE BEREICHE:
"; $outputOfAllValidMainZipcodes .= "_________________

"; $outputOfAllValidMainZipcodes .= "Hauptbereich:
"; $outputOfAllValidNeighbourZipcodes = ""; $zicodeArray = array(); for ($i = 0; $i < $areaIdArrayLen; $i++) : if ($i < $areaIdArrayLen - 1) : $outputOfAllValidNeighbourZipcodes .= "Nachbarbereich " . ($i + 1) . "
"; endif; $sqlquery = "SELECT srvp.srvp_plz" . " FROM serviceplzareamapping AS srvpam, serviceplz AS srvp" . " WHERE srvpam.srvp_id = srvp.srvp_id AND srvpam.srvpa_id = '" . $areaIdArray[$i] . "'"; $result = $db->query($sqlquery); if (DB::isError($result)) die ("$PHP_SELF: " . $result->getMessage()); while ($row = $result->fetch_assoc()): $zicodeArray[] = $row[srvp_plz]; if ($i < $areaIdArrayLen - 1) : $outputOfAllValidNeighbourZipcodes .= $row[srvp_plz] . "
"; else : $outputOfAllValidMainZipcodes .= $row[srvp_plz] . "
"; endif; endwhile; $result->free(); if ($i < $areaIdArrayLen - 1) : $outputOfAllValidNeighbourZipcodes .= "-----------------

"; else : $outputOfAllValidMainZipcodes .= "-----------------

"; endif; endfor; $outputOfAllValidZipcodes = $outputOfAllValidMainZipcodes . $outputOfAllValidNeighbourZipcodes; endif; $zicodeArrayLen = count($zicodeArray); for ($i = 0; $i < $zicodeArrayLen; $i++) : if ($zipcode == $zicodeArray[$i]) : $updateRankingTime = FALSE; endif; endfor; endif; $currentTime = getDateTime("0"); if ($updateRankingTime) : if (locatingIsPlausible($cr_id, $locatingStateArray[1], $locatingStateArray[2], $locatingStateArray[3], $locatingStateArray[4], $locatingStateArray[5]) && $locatingStateArray[0] == "0") : updateStmt("courier", "cr_id", $cr_id, array("cr_locationzipcode", $zipcode, "cr_availabletime", $currentTime)); $status_message .= "Die Rankingposition ging verloren!

"; else: $status_message .= "Die Rankingposition bleibt erhalten!

"; $updateRankingTime = false; // wg. Logging s.u. endif; else : // updateStmt("courier", "cr_id", $cr_id, array("cr_locationzipcode", $zipcode)); $status_message .= "Die Rankingposition bleibt erhalten!

"; endif; if ($locatingStateArray[0] == "1"): $status_message .= "Diese Positionsangabe ist veraltet, es sind keine aktuellen Ortungsdaten verfügbar.

"; endif; else : $currentTime = getDateTime("0"); // 07.06.2024 CA: Kein Update wenn $locatingStateArray[0] != "0" if ($zipcode != "" && $locatingStateArray[0] == "0") : updateStmt("courier", "cr_id", $cr_id, array("cr_locationzipcode", $zipcode, "cr_availabletime", $currentTime)); endif; endif; // Update current position to courier with timestamp /* if ($longitude != "" && $latitude != "" && substr($longitude , 0, 1) != "0" && substr($latitude , 0, 1) != "0" && is_numeric($longitude) && is_numeric($latitude)) : // updateStmt("courier", "cr_id", $cr_id, array("cr_gps_long", $longitude, "cr_gps_lat", $latitude, "cr_gps_time", $currentTime)); // Changed because of "cr_modify" has not to be changed by update and "cr_gps_type" has to be set! if ($locatingStateArray[0] == "1") : $sqlStmt = "UPDATE courier SET cr_gps_long = '" . $longitude . "', cr_gps_lat = '" . $latitude . "', cr_gps_time = '" . $currentTime . "', cr_gps_type = '1', cr_modify = cr_modify WHERE cr_id = '" . $cr_id . "'"; $res = $db->query($sqlStmt); if (DB::isError($res)) die ("$PHP_SELF:
$sqlStmt
" . $res->getMessage()); endif; endif; */ // *********** // * LOGGING * // *********** // Get usr_id of the current employee (session) $currentSessionUsrId = getFieldValueFromId("employee", "emp_id", $emp_id, "usr_id"); // Loose Ranking yes/no $looseRanking = "NO"; // 07.06.2024 CA: Kein "Ranking verloren" wen alte PLZ leer war!" if ($updateRankingTime && $crLocationZipcode != "" && is_numeric($crLocationZipcode)) : $looseRanking = "YES"; endif; // Write logdata into log database writeToLogDB("27",$hq_id,"0",$currentSessionUsrId,$cr_id,$f_cr_sid,"","LONG=".$longitude."|LAT=".$latitude."|ZIP_REAL=".$zipcode."|ZIP_FREE=".$crLocationZipcode."|NO=".$msisdn."|LRANK=".$looseRanking."|LMODE=".$constLocatingMode."|LOCOLD=".($locatingStateArray[0] == "0" ? "NO" : "YES")); // ******************** // * Close connection * // ******************** $requestID++; $requestConnectionRelease = ""; $laenge = strlen($requestConnectionRelease); $requestheader = $requestheaderOrg; $requestheader = str_replace ("LENGTH", $laenge, $requestheader); if ($echoEnabled) : echo $requestheader.$requestConnectionRelease . "


"; endif; // Connect Release // $response = connectD2($requestheader.$requestConnectionRelease."\r\n"); endif; endif; endif; ?> ORTUNG

Kurier:





" : "") ?>