diff --git a/application/controllers/Api.php b/application/controllers/Api.php index 695ba185..de9c5fdf 100644 --- a/application/controllers/Api.php +++ b/application/controllers/Api.php @@ -1,6 +1,7 @@ -user_model->validate_session() == 0) { + if ($this->user_model->validate_session() == 0) { // user is not logged in redirect('user/login'); } @@ -31,12 +32,13 @@ class API extends CI_Controller { } - function edit($key) { + function edit($key) + { $this->load->model('user_model'); // Check if users logged in - if($this->user_model->validate_session() == 0) { + if ($this->user_model->validate_session() == 0) { // user is not logged in redirect('user/login'); } @@ -45,40 +47,37 @@ class API extends CI_Controller { $this->load->helper(array('form', 'url')); - $this->load->library('form_validation'); + $this->load->library('form_validation'); - $this->form_validation->set_rules('api_desc', 'API Description', 'required'); - $this->form_validation->set_rules('api_key', 'API Key is required do not change this field', 'required'); + $this->form_validation->set_rules('api_desc', 'API Description', 'required'); + $this->form_validation->set_rules('api_key', 'API Key is required do not change this field', 'required'); - $data['api_info'] = $this->api_model->key_description($key); + $data['api_info'] = $this->api_model->key_description($key); - if ($this->form_validation->run() == FALSE) - { - $data['page_title'] = "Edit API Description"; + 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')); - $this->session->set_flashdata('notice', 'API Key '.$this->input->post('api_key')." description has been updated."); + $this->session->set_flashdata('notice', 'API Key ' . $this->input->post('api_key') . " description has been updated."); redirect('api/help'); } - } - function generate($rights) { + function generate($rights) + { $this->load->model('user_model'); // Check if users logged in - if($this->user_model->validate_session() == 0) { + if ($this->user_model->validate_session() == 0) { // user is not logged in redirect('user/login'); } @@ -91,12 +90,13 @@ class API extends CI_Controller { redirect('api/help'); } - function delete($key) { + function delete($key) + { $this->load->model('user_model'); // Check if users logged in - if($this->user_model->validate_session() == 0) { + if ($this->user_model->validate_session() == 0) { // user is not logged in redirect('user/login'); } @@ -106,31 +106,33 @@ class API extends CI_Controller { $this->api_model->delete_key($key); - $this->session->set_flashdata('notice', 'API Key '.$key." has been deleted"); + $this->session->set_flashdata('notice', 'API Key ' . $key . " has been deleted"); redirect('api/help'); } // 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") { + header("Content-type: text/xml"); + if ($this->api_model->access($key) == "No Key Found" || $this->api_model->access($key) == "Key Disabled") { echo ""; echo "Key Invalid - either not found or disabled"; echo ""; } else { echo ""; echo "Valid"; - echo "".$this->api_model->access($key).""; + echo "" . $this->api_model->access($key) . ""; echo ""; } } - 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") { + header("Content-type: text/xml"); + if ($this->api_model->access($key) == "No Key Found" || $this->api_model->access($key) == "Key Disabled") { // set the content type as json header("Content-type: application/json"); @@ -150,23 +152,24 @@ 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"); - if(substr($this->api_model->access($key),0,1) == 'r') { /* Checkpermission for _r_eading */ + if (substr($this->api_model->access($key), 0, 1) == 'r') { /* Checkpermission for _r_eading */ $this->api_model->update_last_used($key); $userid = $this->api_model->key_userid($key); - $station_ids = array(); - $stations=$this->stations->all_of_user($userid); - foreach ($stations->result() as $row) { - $result['station_id']=$row->station_id; - $result['station_profile_name']=$row->station_profile_name; - $result['station_gridsquare']=$row->station_gridsquare; - $result['station_callsign']=$row->station_callsign;; - $result['station_active']=$row->station_active; - array_push($station_ids, $result); - } + $station_ids = array(); + $stations = $this->stations->all_of_user($userid); + foreach ($stations->result() as $row) { + $result['station_id'] = $row->station_id; + $result['station_profile_name'] = $row->station_profile_name; + $result['station_gridsquare'] = $row->station_gridsquare; + $result['station_callsign'] = $row->station_callsign;; + $result['station_active'] = $row->station_active; + array_push($station_ids, $result); + } echo json_encode($station_ids); } else { http_response_code(401); @@ -175,12 +178,13 @@ 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'); @@ -194,29 +198,29 @@ class API extends CI_Controller { $obj = json_decode(file_get_contents("php://input"), true); if ($obj === NULL) { // Decoding not valid try simple www-x-form-urlencoded - $objTmp = file_get_contents("php://input"); - parse_str($objTmp, $obj); - if ($obj === NULL) { - echo json_encode(['status' => 'failed', 'reason' => "wrong JSON"]); - die(); - } + $objTmp = file_get_contents("php://input"); + parse_str($objTmp, $obj); + if ($obj === NULL) { + echo json_encode(['status' => 'failed', 'reason' => "wrong JSON"]); + die(); + } } - if(!isset($obj['key']) || $this->api_model->authorize($obj['key']) == 0) { - http_response_code(401); - echo json_encode(['status' => 'failed', 'reason' => "missing api key"]); - die(); + if (!isset($obj['key']) || $this->api_model->authorize($obj['key']) == 0) { + http_response_code(401); + echo json_encode(['status' => 'failed', 'reason' => "missing api key"]); + die(); } $userid = $this->api_model->key_userid($obj['key']); - if(!isset($obj['station_profile_id']) || $this->stations->check_station_against_user($obj['station_profile_id'], $userid) == false) { + if (!isset($obj['station_profile_id']) || $this->stations->check_station_against_user($obj['station_profile_id'], $userid) == false) { http_response_code(401); echo json_encode(['status' => 'failed', 'reason' => "station id does not belong to the API key owner."]); die(); } - if($obj['type'] == "adif" && $obj['string'] != "") { + if ($obj['type'] == "adif" && $obj['string'] != "") { // Load the logbook model for adding QSO records $this->load->model('logbook_model'); @@ -227,22 +231,20 @@ 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; }; - if(isset($obj['station_profile_id'])) { - if(isset($record['station_callsign']) && $this->stations->check_station_against_callsign($obj['station_profile_id'], $record['station_callsign']) == false) { + if (isset($obj['station_profile_id'])) { + if (isset($record['station_callsign']) && $this->stations->check_station_against_callsign($obj['station_profile_id'], $record['station_callsign']) == false) { http_response_code(401); echo json_encode(['status' => 'failed', 'reason' => "station callsign does not match station callsign in station profile."]); die(); } - if(!(isset($record['call'])) || (trim($record['call']) == '')) { + if (!(isset($record['call'])) || (trim($record['call']) == '')) { http_response_code(401); echo json_encode(['status' => 'failed', 'reason' => "QSO Call is empty."]); die(); @@ -252,23 +254,21 @@ class API extends CI_Controller { $msg = $this->logbook_model->import($record, $obj['station_profile_id'], NULL, NULL, NULL, NULL, NULL, NULL, false, false, true); - if ( $msg == "" ) { + if ($msg == "") { $return_count++; } else { $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 ]); - + 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'); @@ -276,29 +276,29 @@ class API extends CI_Controller { // Decode JSON and store $obj = json_decode(file_get_contents("php://input"), true); if ($obj === NULL) { - echo json_encode(['status' => 'failed', 'reason' => "wrong JSON"]); + echo json_encode(['status' => 'failed', 'reason' => "wrong JSON"]); return; } - if(!isset($obj['key']) || $this->api_model->authorize($obj['key']) == 0) { - http_response_code(401); - echo json_encode(['status' => 'failed', 'reason' => "missing api key"]); + if (!isset($obj['key']) || $this->api_model->authorize($obj['key']) == 0) { + http_response_code(401); + echo json_encode(['status' => 'failed', 'reason' => "missing api key"]); return; } - if(!isset($obj['logbook_public_slug']) || !isset($obj['callsign'])) { - http_response_code(401); - echo json_encode(['status' => 'failed', 'reason' => "missing fields"]); + if (!isset($obj['logbook_public_slug']) || !isset($obj['callsign'])) { + http_response_code(401); + echo json_encode(['status' => 'failed', 'reason' => "missing fields"]); return; } - if($obj['logbook_public_slug'] != "" && $obj['callsign'] != "") { + if ($obj['logbook_public_slug'] != "" && $obj['callsign'] != "") { $logbook_slug = $obj['logbook_public_slug']; $callsign = $obj['callsign']; // If $obj['band'] exists - if(isset($obj['band'])) { + if (isset($obj['band'])) { $band = $obj['band']; } else { $band = null; @@ -306,13 +306,12 @@ class API extends CI_Controller { $this->load->model('logbooks_model'); - if($this->logbooks_model->public_slug_exists($logbook_slug)) { + 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); - + if (!$logbooks_locations_array) { // Logbook not found http_response_code(404); @@ -322,7 +321,7 @@ class API extends CI_Controller { } else { // Logbook not found http_response_code(404); - echo json_encode(['status' => 'failed', 'reason' => $logbook_slug." has no associated station locations"]); + echo json_encode(['status' => 'failed', 'reason' => $logbook_slug . " has no associated station locations"]); die(); } // Search Logbook for callsign @@ -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'); @@ -357,27 +354,27 @@ class API extends CI_Controller { // Decode JSON and store $obj = json_decode(file_get_contents("php://input"), true); if ($obj === NULL) { - echo json_encode(['status' => 'failed', 'reason' => "wrong JSON"]); + echo json_encode(['status' => 'failed', 'reason' => "wrong JSON"]); } - if(!isset($obj['key']) || $this->api_model->authorize($obj['key']) == 0) { - http_response_code(401); - echo json_encode(['status' => 'failed', 'reason' => "missing api key"]); + if (!isset($obj['key']) || $this->api_model->authorize($obj['key']) == 0) { + http_response_code(401); + echo json_encode(['status' => 'failed', 'reason' => "missing api key"]); } - if(!isset($obj['logbook_public_slug']) || !isset($obj['grid'])) { - http_response_code(401); - echo json_encode(['status' => 'failed', 'reason' => "missing fields"]); + if (!isset($obj['logbook_public_slug']) || !isset($obj['grid'])) { + http_response_code(401); + echo json_encode(['status' => 'failed', 'reason' => "missing fields"]); return; } - if($obj['logbook_public_slug'] != "" && $obj['grid'] != "") { + if ($obj['logbook_public_slug'] != "" && $obj['grid'] != "") { $logbook_slug = $obj['logbook_public_slug']; $grid = $obj['grid']; // If $obj['band'] exists - if(isset($obj['band'])) { + if (isset($obj['band'])) { $band = $obj['band']; } else { $band = null; @@ -385,13 +382,12 @@ class API extends CI_Controller { $this->load->model('logbooks_model'); - if($this->logbooks_model->public_slug_exists($logbook_slug)) { + 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); - + if (!$logbooks_locations_array) { // Logbook not found http_response_code(404); @@ -401,7 +397,7 @@ class API extends CI_Controller { } else { // Logbook not found http_response_code(404); - echo json_encode(['status' => 'failed', 'reason' => $logbook_slug." has no associated station locations"]); + echo json_encode(['status' => 'failed', 'reason' => $logbook_slug . " has no associated station locations"]); die(); } // Search Logbook for callsign @@ -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(); } - } - } @@ -487,16 +480,16 @@ class API extends CI_Controller { return; } - if(!isset($obj['key']) || $this->api_model->authorize($obj['key']) == 0) { - http_response_code(401); - echo json_encode(['status' => 'failed', 'reason' => "missing api key"]); - return; + if (!isset($obj['key']) || $this->api_model->authorize($obj['key']) == 0) { + http_response_code(401); + echo json_encode(['status' => 'failed', 'reason' => "missing api key"]); + return; } - if(!isset($obj['logbook_public_slug']) || !isset($obj['callsign'])) { - http_response_code(401); - echo json_encode(['status' => 'failed', 'reason' => "missing fields"]); - return; + if (!isset($obj['logbook_public_slug']) || !isset($obj['callsign'])) { + http_response_code(401); + echo json_encode(['status' => 'failed', 'reason' => "missing fields"]); + return; } // Load models @@ -523,10 +516,9 @@ class API extends CI_Controller { ] ]; - if($this->logbooks_model->public_slug_exists($logbook_slug)) { + 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); @@ -539,7 +531,7 @@ class API extends CI_Controller { } else { // Logbook not found http_response_code(404); - echo json_encode(['status' => 'failed', 'reason' => $logbook_slug." has no associated station locations"]); + echo json_encode(['status' => 'failed', 'reason' => $logbook_slug . " has no associated station locations"]); die(); } @@ -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'); @@ -618,7 +611,7 @@ class API extends CI_Controller { // Decode JSON and store $obj = json_decode(file_get_contents("php://input"), true); - if(!isset($obj['key']) || $this->api_model->authorize($obj['key']) == 0) { + if (!isset($obj['key']) || $this->api_model->authorize($obj['key']) == 0) { http_response_code(401); echo json_encode(['status' => 'failed', 'reason' => "missing api key"]); die(); @@ -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"); @@ -711,9 +706,9 @@ class API extends CI_Controller { * Handle POST data being sent to check lookups * */ - $raw_input = json_decode(file_get_contents("php://input"), true); + $raw_input = json_decode(file_get_contents("php://input"), true); - $lookup_callsign = strtoupper($raw_input['callsign']); + $lookup_callsign = strtoupper($raw_input['callsign']); /* @@ -721,7 +716,7 @@ class API extends CI_Controller { * Handle Callsign field * */ - $return['callsign'] = $lookup_callsign; + $return['callsign'] = $lookup_callsign; /* * @@ -729,65 +724,63 @@ class API extends CI_Controller { * */ - $callsign_dxcc_lookup = $this->logbook_model->dxcc_lookup($lookup_callsign, $date); + $callsign_dxcc_lookup = $this->logbook_model->dxcc_lookup($lookup_callsign, $date); - $last_slash_pos = strrpos($lookup_callsign, '/'); + $last_slash_pos = strrpos($lookup_callsign, '/'); - if(isset($last_slash_pos) && $last_slash_pos > 4) { - $suffix_slash = $last_slash_pos === false ? $lookup_callsign : substr($lookup_callsign, $last_slash_pos + 1); - switch ($suffix_slash) { - case "P": - $suffix_slash_item = "Portable"; - break; - case "M": - $suffix_slash_item = "Mobile"; - case "MM": - $suffix_slash_item = "Maritime Mobile"; - break; - default: - // If its not one of the above suffix slashes its likely dxcc - $ans2 = $this->logbook_model->dxcc_lookup($suffix_slash, $date); - $suffix_slash_item = null; - } - - $return['suffix_slash'] = $suffix_slash_item; + if (isset($last_slash_pos) && $last_slash_pos > 4) { + $suffix_slash = $last_slash_pos === false ? $lookup_callsign : substr($lookup_callsign, $last_slash_pos + 1); + switch ($suffix_slash) { + case "P": + $suffix_slash_item = "Portable"; + break; + case "M": + $suffix_slash_item = "Mobile"; + case "MM": + $suffix_slash_item = "Maritime Mobile"; + break; + default: + // If its not one of the above suffix slashes its likely dxcc + $ans2 = $this->logbook_model->dxcc_lookup($suffix_slash, $date); + $suffix_slash_item = null; } - // If the final slash is a DXCC then find it! - if (isset($ans2['call'])) { - $return['dxcc'] = $ans2['entity']; - $return['dxcc_lat'] = $ans2['lat']; - $return['dxcc_long'] = $ans2['long']; - $return['dxcc_cqz'] = $ans2['cqz']; - } else { - $return['dxcc'] = $callsign_dxcc_lookup['entity']; - $return['dxcc_lat'] = $callsign_dxcc_lookup['lat']; - $return['dxcc_long'] = $callsign_dxcc_lookup['long']; - $return['dxcc_cqz'] = $callsign_dxcc_lookup['cqz']; - } + $return['suffix_slash'] = $suffix_slash_item; + } + + // If the final slash is a DXCC then find it! + if (isset($ans2['call'])) { + $return['dxcc'] = $ans2['entity']; + $return['dxcc_lat'] = $ans2['lat']; + $return['dxcc_long'] = $ans2['long']; + $return['dxcc_cqz'] = $ans2['cqz']; + } else { + $return['dxcc'] = $callsign_dxcc_lookup['entity']; + $return['dxcc_lat'] = $callsign_dxcc_lookup['lat']; + $return['dxcc_long'] = $callsign_dxcc_lookup['long']; + $return['dxcc_cqz'] = $callsign_dxcc_lookup['cqz']; + } /* * * Pool any local data we have for a callsign * */ - $call_lookup_results = $this->logbook_model->call_lookup_result($lookup_callsign); + $call_lookup_results = $this->logbook_model->call_lookup_result($lookup_callsign); - 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; - $return['iota_ref'] = $call_lookup_results->COL_IOTA; - $return['qsl_manager'] = $call_lookup_results->COL_QSL_VIA; - $return['state'] = $call_lookup_results->COL_STATE; - $return['us_county'] = $call_lookup_results->COL_CNTY; - - if ($return['gridsquare'] != "") { - $return['latlng'] = $this->qralatlng($return['gridsquare']); - } + 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; + $return['iota_ref'] = $call_lookup_results->COL_IOTA; + $return['qsl_manager'] = $call_lookup_results->COL_QSL_VIA; + $return['state'] = $call_lookup_results->COL_STATE; + $return['us_county'] = $call_lookup_results->COL_CNTY; + 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 @@ -863,7 +858,7 @@ class API extends CI_Controller { } } - if($public_slug == null) { + if ($public_slug == null) { http_response_code(400); echo json_encode(['status' => 'failed', 'reason' => 'missing public_slug parameter']); return; @@ -872,9 +867,9 @@ class API extends CI_Controller { $this->load->model('logbooks_model'); $this->load->model('logbook_model'); - if($this->logbooks_model->public_slug_exists($public_slug)) { + if ($this->logbooks_model->public_slug_exists($public_slug)) { $logbook_id = $this->logbooks_model->public_slug_exists_logbook_id($public_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); @@ -886,7 +881,7 @@ class API extends CI_Controller { // Get recent QSOs using existing method $recent_qsos_query = $this->logbook_model->get_last_qsos($limit, $logbooks_locations_array); - + if ($recent_qsos_query == null) { http_response_code(404); echo json_encode(['status' => 'failed', 'reason' => 'No QSOs found']); @@ -905,7 +900,7 @@ class API extends CI_Controller { 'rst_sent' => $row->COL_RST_SENT, 'rst_rcvd' => $row->COL_RST_RCVD ); - + // Add optional fields if they exist if ($row->COL_STX_STRING) { $qso['stx_string'] = $row->COL_STX_STRING; @@ -922,7 +917,16 @@ class API extends CI_Controller { if ($row->COL_NAME) { $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,10 +936,9 @@ 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']); + echo json_encode(['status' => 'failed', 'reason' => $public_slug . ' has no associated station locations']); } } else { http_response_code(404); diff --git a/application/models/Logbook_model.php b/application/models/Logbook_model.php index f133c698..c3904c20 100755 --- a/application/models/Logbook_model.php +++ b/application/models/Logbook_model.php @@ -4084,7 +4084,7 @@ class Logbook_model extends CI_Model return null; } } - + /* * Check the dxxc_prefixes table and return (dxcc, country) */ @@ -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']); } }