Add latitude and longitude to DXCC lookup results

Enhanced the DXCC lookup in Logbook_model to include latitude and longitude in the returned array. Updated API controller to utilize these new fields when returning recent QSOs and callsign lookups, providing more detailed location data in API responses.
pull/3339/head
Peter Goodhall 2025-09-12 13:14:31 +01:00
rodzic b7c065dbdd
commit 952007467d
2 zmienionych plików z 191 dodań i 188 usunięć

Wyświetl plik

@ -1,6 +1,7 @@
<?php if (! defined('BASEPATH')) exit('No direct script access allowed');
class API extends CI_Controller {
class API extends CI_Controller
{
// Do absolutely nothing
function index()
@ -31,7 +32,8 @@ class API extends CI_Controller {
}
function edit($key) {
function edit($key)
{
$this->load->model('user_model');
// Check if users logged in
@ -52,16 +54,13 @@ class API extends CI_Controller {
$data['api_info'] = $this->api_model->key_description($key);
if ($this->form_validation->run() == FALSE)
{
if ($this->form_validation->run() == FALSE) {
$data['page_title'] = "Edit API Description";
$this->load->view('interface_assets/header', $data);
$this->load->view('api/description');
$this->load->view('interface_assets/footer');
}
else
{
} else {
// Success!
$this->api_model->update_key_description($this->input->post('api_key'), $this->input->post('api_desc'));
@ -70,10 +69,10 @@ class API extends CI_Controller {
redirect('api/help');
}
}
function generate($rights) {
function generate($rights)
{
$this->load->model('user_model');
// Check if users logged in
@ -91,7 +90,8 @@ class API extends CI_Controller {
redirect('api/help');
}
function delete($key) {
function delete($key)
{
$this->load->model('user_model');
// Check if users logged in
@ -112,7 +112,8 @@ class API extends CI_Controller {
}
// Example of authing
function auth($key) {
function auth($key)
{
$this->load->model('api_model');
header("Content-type: text/xml");
if ($this->api_model->access($key) == "No Key Found" || $this->api_model->access($key) == "Key Disabled") {
@ -127,7 +128,8 @@ class API extends CI_Controller {
}
}
function check_auth($key) {
function check_auth($key)
{
$this->load->model('api_model');
header("Content-type: text/xml");
if ($this->api_model->access($key) == "No Key Found" || $this->api_model->access($key) == "Key Disabled") {
@ -150,7 +152,8 @@ class API extends CI_Controller {
}
}
function station_info($key) {
function station_info($key)
{
$this->load->model('api_model');
$this->load->model('stations');
header("Content-type: application/json");
@ -180,7 +183,8 @@ class API extends CI_Controller {
* Function: QSO
* Task: allows passing of ADIF data to Cloudlog
*/
function qso() {
function qso()
{
header('Content-type: application/json');
$this->load->model('api_model');
@ -227,10 +231,8 @@ class API extends CI_Controller {
$this->adif_parser->feed($obj['string']);
// Create QSO Record
while($record = $this->adif_parser->get_record())
{
if(count($record) == 0)
{
while ($record = $this->adif_parser->get_record()) {
if (count($record) == 0) {
break;
};
@ -258,17 +260,15 @@ class API extends CI_Controller {
$return_msg[] = $msg;
}
}
};
http_response_code(201);
echo json_encode(['status' => 'created', 'type' => $obj['type'], 'string' => $obj['string'], 'imported_count' => $return_count, 'messages' => $return_msg]);
}
}
// API function to check if a callsign is in the logbook already
function logbook_check_callsign() {
function logbook_check_callsign()
{
header('Content-type: application/json');
$this->load->model('api_model');
@ -308,8 +308,7 @@ class API extends CI_Controller {
if ($this->logbooks_model->public_slug_exists($logbook_slug)) {
$logbook_id = $this->logbooks_model->public_slug_exists_logbook_id($logbook_slug);
if($logbook_id != false)
{
if ($logbook_id != false) {
// Get associated station locations for mysql queries
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($logbook_id);
@ -331,8 +330,7 @@ class API extends CI_Controller {
$result = $this->logbook_model->check_if_callsign_worked_in_logbook($callsign, $logbooks_locations_array, $band);
http_response_code(201);
if($result > 0)
{
if ($result > 0) {
echo json_encode(['callsign' => $callsign, 'result' => 'Found']);
} else {
echo json_encode(['callsign' => $callsign, 'result' => 'Not Found']);
@ -343,13 +341,12 @@ class API extends CI_Controller {
echo json_encode(['status' => 'failed', 'reason' => "logbook not found"]);
die();
}
}
}
// API function to check if a grid is in the logbook already
function logbook_check_grid() {
function logbook_check_grid()
{
header('Content-type: application/json');
$this->load->model('api_model');
@ -387,8 +384,7 @@ class API extends CI_Controller {
if ($this->logbooks_model->public_slug_exists($logbook_slug)) {
$logbook_id = $this->logbooks_model->public_slug_exists_logbook_id($logbook_slug);
if($logbook_id != false)
{
if ($logbook_id != false) {
// Get associated station locations for mysql queries
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($logbook_id);
@ -410,8 +406,7 @@ class API extends CI_Controller {
$result = $this->logbook_model->check_if_grid_worked_in_logbook($grid, $logbooks_locations_array, $band);
http_response_code(201);
if($result > 0)
{
if ($result > 0) {
echo json_encode(['gridsquare' => strtoupper($grid), 'result' => 'Found']);
} else {
echo json_encode(['gridsquare' => strtoupper($grid), 'result' => 'Not Found']);
@ -422,9 +417,7 @@ class API extends CI_Controller {
echo json_encode(['status' => 'failed', 'reason' => "logbook not found"]);
die();
}
}
}
@ -525,8 +518,7 @@ class API extends CI_Controller {
if ($this->logbooks_model->public_slug_exists($logbook_slug)) {
$logbook_id = $this->logbooks_model->public_slug_exists_logbook_id($logbook_slug);
if($logbook_id != false)
{
if ($logbook_id != false) {
// Get associated station locations for mysql queries
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($logbook_id);
@ -604,7 +596,8 @@ class API extends CI_Controller {
/* ENDPOINT for Rig Control */
function radio() {
function radio()
{
header('Content-type: application/json');
$this->load->model('api_model');
@ -636,7 +629,6 @@ class API extends CI_Controller {
$arr = array('status' => 'success');
echo json_encode($arr);
}
/*
@ -645,7 +637,8 @@ class API extends CI_Controller {
*
*/
function statistics($key = null) {
function statistics($key = null)
{
header('Content-type: application/json');
$this->load->model('logbook_model');
@ -656,10 +649,10 @@ class API extends CI_Controller {
http_response_code(201);
echo json_encode(['Today' => $data['todays_qsos'], 'total_qsos' => $data['total_qsos'], 'month_qsos' => $data['month_qsos'], 'year_qsos' => $data['year_qsos']]);
}
function lookup() {
function lookup()
{
// start benchmarking
$this->output->enable_profiler(TRUE);
/*
@ -679,7 +672,9 @@ class API extends CI_Controller {
// Make sure users logged in
$this->load->model('user_model');
if(!$this->user_model->authorize($this->config->item('auth_mode'))) { return; }
if (!$this->user_model->authorize($this->config->item('auth_mode'))) {
return;
}
$this->load->model("logbook_model");
@ -773,8 +768,7 @@ class API extends CI_Controller {
*/
$call_lookup_results = $this->logbook_model->call_lookup_result($lookup_callsign);
if($call_lookup_results != null)
{
if ($call_lookup_results != null) {
$return['name'] = $call_lookup_results->COL_NAME;
$return['gridsquare'] = $call_lookup_results->COL_GRIDSQUARE;
$return['location'] = $call_lookup_results->COL_QTH;
@ -786,7 +780,6 @@ class API extends CI_Controller {
if ($return['gridsquare'] != "") {
$return['latlng'] = $this->qralatlng($return['gridsquare']);
}
}
@ -809,7 +802,8 @@ class API extends CI_Controller {
$this->output->enable_profiler(FALSE);
}
function qralatlng($qra) {
function qralatlng($qra)
{
$this->load->library('Qra');
$latlng = $this->qra->qra2latlong($qra);
return $latlng;
@ -848,7 +842,8 @@ class API extends CI_Controller {
* "logbook_slug": "my-public-logbook"
* }
*/
function recent_qsos($public_slug = null, $limit = 10) {
function recent_qsos($public_slug = null, $limit = 10)
{
header('Content-type: application/json');
// Validate and sanitize $limit
@ -923,6 +918,15 @@ class API extends CI_Controller {
$qso['name'] = $row->COL_NAME;
}
$dxcc = $this->logbook_model->check_dxcc_table(strtoupper(trim(strtoupper($row->COL_CALL))), $row->COL_TIME_ON);
if (empty($dxcc[0])) {
$dxcc_id = null;
} else {
$qso['country'] = $dxcc[1];
$qso['lat'] = $dxcc[4];
$qso['long'] = $dxcc[5];
}
$qsos[] = $qso;
}
@ -932,7 +936,6 @@ class API extends CI_Controller {
'count' => count($qsos),
'logbook_slug' => $public_slug
], JSON_PRETTY_PRINT);
} else {
http_response_code(404);
echo json_encode(['status' => 'failed', 'reason' => $public_slug . ' has no associated station locations']);

Wyświetl plik

@ -4093,7 +4093,7 @@ class Logbook_model extends CI_Model
$csadditions = '/^P$|^R$|^A$|^M$/';
$dxcc_exceptions = $this->db->select('`entity`, `adif`, `cqz`, `cont`')
$dxcc_exceptions = $this->db->select('`entity`, `adif`, `cqz`, `cont`,`lat`,`long`')
->where('call', $call)
->where('(start <= ', $date)
->or_where('start is null)', NULL, false)
@ -4103,7 +4103,7 @@ class Logbook_model extends CI_Model
if ($dxcc_exceptions->num_rows() > 0) {
$row = $dxcc_exceptions->row_array();
return array($row['adif'], $row['entity'], $row['cqz'], $row['cont']);
return array($row['adif'], $row['entity'], $row['cqz'], $row['cont'], $row['lat'], $row['long']);
}
if (preg_match('/(^KG4)[A-Z09]{3}/', $call)) { // KG4/ and KG4 5 char calls are Guantanamo Bay. If 4 or 6 char, it is USA
$call = "K";
@ -4158,7 +4158,7 @@ class Logbook_model extends CI_Model
// query the table, removing a character from the right until a match
for ($i = $len; $i > 0; $i--) {
//printf("searching for %s\n", substr($call, 0, $i));
$dxcc_result = $this->db->select('`call`, `entity`, `adif`, `cqz`, `cont`')
$dxcc_result = $this->db->select('`call`, `entity`, `adif`, `cqz`, `cont`,`lat`,`long`')
->where('call', substr($call, 0, $i))
->where('(start <= ', $date)
->or_where("start is null)", NULL, false)
@ -4171,7 +4171,7 @@ class Logbook_model extends CI_Model
if ($dxcc_result->num_rows() > 0) {
$row = $dxcc_result->row_array();
return array($row['adif'], $row['entity'], $row['cqz'], $row['cont']);
return array($row['adif'], $row['entity'], $row['cqz'], $row['cont'], $row['lat'], $row['long']);
}
}