From a96bbab727d9408a95153ddfa39c87890dd08dd3 Mon Sep 17 00:00:00 2001 From: Andreas Kristiansen <6977712+AndreasK79@users.noreply.github.com> Date: Tue, 4 Nov 2025 10:13:41 +0100 Subject: [PATCH] [Station Location] Import / export --- application/controllers/Stationsetup.php | 82 +++++++++++ application/models/Stationsetup_model.php | 62 +++++++- .../views/stationsetup/locationlist.php | 136 +++++++++++++++--- 3 files changed, 256 insertions(+), 24 deletions(-) diff --git a/application/controllers/Stationsetup.php b/application/controllers/Stationsetup.php index baa6ac730..26d0320a0 100644 --- a/application/controllers/Stationsetup.php +++ b/application/controllers/Stationsetup.php @@ -528,4 +528,86 @@ class Stationsetup extends CI_Controller { $this->load->view('stationsetup/locationlist'); $this->load->view('interface_assets/footer'); } + + public function export_locations() { + $this->load->model('stationsetup_model'); + + $locations = $this->stationsetup_model->list_all_locations(); + + // Output as JSON + $this->output + ->set_content_type('application/json') + ->set_output(json_encode($locations)); + } + + public function import_locations(){ + if (empty($_FILES['file']['tmp_name'])) { + $this->output + ->set_content_type('application/json') + ->set_output(json_encode(['status' => 'error', 'message' => 'No file uploaded'])); + return; + } + + $fileContent = file_get_contents($_FILES['file']['tmp_name']); + $locations = json_decode($fileContent, true); + + if ($locations === null) { + $this->output + ->set_content_type('application/json') + ->set_output(json_encode(['status' => 'error', 'message' => 'Invalid JSON file'])); + return; + } + + // Load your model + $this->load->model('stationsetup_model'); + + $imported = 0; + foreach ($locations as $loc) { + // Data for station_profile + $dbdata = [ + 'station_active' => 0, + 'station_profile_name' => $loc['station_profile_name'] ?? null, + 'station_gridsquare' => $loc['station_gridsquare'] ?? null, + 'station_city' => $loc['station_city'] ?? null, + 'station_iota' => $loc['station_iota'] ?? null, + 'station_sota' => $loc['station_sota'] ?? null, + 'station_callsign' => $loc['station_callsign'] ?? null, + 'station_power' => $loc['station_power'] ?? null, + 'station_dxcc' => $loc['station_dxcc'] ?? null, + 'station_cq' => $loc['station_cq'] ?? null, + 'station_itu' => $loc['station_itu'] ?? null, + 'station_sig' => $loc['station_sig'] ?? null, + 'station_sig_info' => $loc['station_sig_info'] ?? null, + 'station_wwff' => $loc['station_wwff'] ?? null, + 'station_pota' => $loc['station_pota'] ?? null, + 'state' => $loc['state'] ?? null, + 'station_cnty' => $loc['station_cnty'] ?? null, + 'qrzrealtime' => $loc['qrzrealtime'] ?? 0, + 'oqrs' => $loc['oqrs'] ?? 0, + 'oqrs_text' => $loc['oqrs_text'] ?? null, + 'oqrs_email' => $loc['oqrs_email'] ?? null, + 'webadifrealtime' => $loc['webadifrealtime'] ?? null, + 'clublogignore' => $loc['clublogignore'] ?? 1, + 'clublogrealtime' => $loc['clublogrealtime'] ?? 0, + 'hrdlogrealtime' => $loc['hrdlogrealtime'] ?? 0, + 'hrdlog_username' => $loc['hrdlog_username'] ?? null, + 'eqslqthnickname' => $loc['eqslqthnickname'] ?? null, + 'webadifapiurl' => 'https://qo100dx.club/api', + 'user_id' => $this->session->userdata('user_id'), + ]; + + // Data for user_options + $optiondata = [ + 'eqsl_default_qslmsg' => $loc['eqsl_default_qslmsg'] ?? null, + ]; + + // Insert or update location in DB + $imported += $this->stationsetup_model->save_location($dbdata, $optiondata); + } + + $this->output + ->set_content_type('application/json') + ->set_output(json_encode(['status' => 'success', 'message' => "$imported locations imported."])); + } + } diff --git a/application/models/Stationsetup_model.php b/application/models/Stationsetup_model.php index 81d4aa9fc..d162f503c 100644 --- a/application/models/Stationsetup_model.php +++ b/application/models/Stationsetup_model.php @@ -234,7 +234,7 @@ class Stationsetup_model extends CI_Model { } function list_all_locations() { - $sql = "select dxcc_entities.end, station_profile.station_id, station_profile_name, station_gridsquare, station_city, station_iota, station_sota, station_callsign, station_power, station_dxcc, dxcc_entities.name as dxccname, dxcc_entities.prefix as dxccprefix, station_cnty, station_cq, station_itu, station_active, eqslqthnickname, state, county, station_sig, station_sig_info, qrzrealtime, station_wwff, station_pota, oqrs, oqrs_text, oqrs_email, webadifrealtime, clublogrealtime, clublogignore, hrdlogrealtime, creation_date, last_modified + $sql = "select dxcc_entities.end, station_profile.station_id, station_profile_name, station_profile.hrdlog_username, station_gridsquare, station_city, station_iota, station_sota, station_callsign, station_power, station_dxcc, dxcc_entities.name as dxccname, dxcc_entities.prefix as dxccprefix, station_cnty, station_cq, station_itu, station_active, eqslqthnickname, state, county, station_sig, station_sig_info, qrzrealtime, station_wwff, station_pota, oqrs, oqrs_text, oqrs_email, webadifrealtime, clublogrealtime, clublogignore, hrdlogrealtime, creation_date, last_modified from station_profile join dxcc_entities on station_profile.station_dxcc = dxcc_entities.adif where user_id = ?"; @@ -254,6 +254,66 @@ class Stationsetup_model extends CI_Model { return $result; } + + public function save_location($dbdata, $optiondata) { + // Make sure we have the needed fields + if (empty($dbdata['station_profile_name']) || empty($dbdata['station_callsign'])) { + return false; + } + + // Check if a location exists with same parameters + $sql = " + SELECT * + FROM station_profile + WHERE station_profile_name = ? + AND station_callsign = ? + AND station_gridsquare = ? + AND station_city = ? + AND station_iota = ? + AND station_sota = ? + AND state = ? + AND station_cnty = ? + AND station_dxcc = ? + AND station_wwff = ? + AND station_pota = ? + AND station_sig = ? + AND station_sig_info = ? + AND user_id = ?; + "; + + $query = $this->db->query($sql, [ + $dbdata['station_profile_name'], + $dbdata['station_callsign'], + $dbdata['station_gridsquare'], + $dbdata['station_city'], + $dbdata['station_iota'], + $dbdata['station_sota'], + $dbdata['state'], + $dbdata['station_cnty'], + $dbdata['station_dxcc'], + $dbdata['station_wwff'], + $dbdata['station_pota'], + $dbdata['station_sig'], + $dbdata['station_sig_info'], + $this->session->userdata('user_id') + ]); + + if ($query->num_rows() > 0) { + // Location already exists + return 0; + } else { + // Insert new location + $this->db->insert('station_profile', $dbdata); + $location_id = $this->db->insert_id(); + + if (!empty(trim($optiondata['eqsl_default_qslmsg']))) { + $this->user_options_model->set_option('eqsl_default_qslmsg', 'key_station_id', array($location_id => $optiondata['eqsl_default_qslmsg'])); + } + } + + return 1; + } + } ?> diff --git a/application/views/stationsetup/locationlist.php b/application/views/stationsetup/locationlist.php index 3398beed3..4b59e290e 100644 --- a/application/views/stationsetup/locationlist.php +++ b/application/views/stationsetup/locationlist.php @@ -1,3 +1,4 @@ +