90.0)){ // Invalid latitude http_response_code(400); // Bad request $error = $error . ERR_LOCATION . '(Lat: $lat)'; error_log($error); exit(-5); } if (strlen($lon) != 0 && ($lon < -180.0 || $lon > 180.0)){ // Invalid longitude http_response_code(400); // Bad request $error = $error . ERR_LOCATION . '(Lon: $lat)'; error_log($error); exit(-6); } // Discern action switch ($action){ case ACTION_START: // Insert mysqli_query($con, "INSERT INTO location (lat, lon, action, user) VALUES ($lat, $lon, 'S', $uid);"); break; case ACTION_REFRESH: // Look for start node. $q = mysqli_query($con, "SELECT id, start, action FROM location WHERE user = $uid AND dtime > NOW() - INTERVAL 30 MINUTE ORDER BY dtime DESC LIMIT 1;"); if (mysqli_num_rows($q) == 0){ // No recent reports. Start anew. mysqli_query($con, "INSERT INTO location (lat, lon, action, user) VALUES ($lat, $lon, 'S', $uid);"); } else{ $r = mysqli_fetch_array($q); if ($r['action'] == 'F'){ // Previous track was stoped. Start anew. mysqli_query($con, "INSERT INTO location (lat, lon, action, user) VALUES ($lat, $lon, 'S', $uid);"); } else{ // Continue track. $s = $r['id']; mysqli_query($con, "INSERT INTO location (lat, lon, action, user, start) VALUES ($lat, $lon, 'R', $uid, $s);"); } } break; case ACTION_STOP: // Look for start node. $q = mysqli_query($con, "SELECT id, start FROM location WHERE user = $uid AND dtime > NOW() - INTERVAL 30 MINUTE ORDER BY dtime DESC LIMIT 1;"); if (mysqli_num_rows($q) > 0){ $r = mysqli_fetch_array($q); if ($r['action'] != 'F'){ // Finish track. $s = $r['start']; if (strlen($lat) > 0 && strlen($lon) > 0){ mysqli_query($con, "INSERT INTO location (lat, lon, action, user, start) VALUES ($lat, $lon, 'F', $uid, $s);"); } else{ mysqli_query($con, "INSERT INTO location (action, user, start) VALUES ('F', $uid, $s);"); } } } break; } http_response_code(204); // No content. ?>