diff --git a/.htaccess.sample b/.htaccess.sample
index 435eea60..f766ea9f 100644
--- a/.htaccess.sample
+++ b/.htaccess.sample
@@ -10,3 +10,5 @@ RewriteRule ^(.*)$ /index.php?/$1 "[L,QSA,B= ?,BNP]"
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 "[L,QSA,B= ?,BNP]"
+
+RedirectMatch 404 ^/\.git
diff --git a/README.md b/README.md
index 31d76758..88f87b65 100644
--- a/README.md
+++ b/README.md
@@ -46,6 +46,6 @@ Thanks to Andy (VE7CXZ), Gavin (M1BXF), Graham (W5ISP), Robert (M0VFC), Corby (K
Cloudlog is supported by Patreon and donations via PayPal, thanks to the following people:
-Paul (M0TZO), Tim (G4VXE), Paul (N8HM), Michelle (W5NYV), Mitchell (AD0HJ), Dan (M0TCB), Martin (DK3ML), Juan Carlos (EA5WA), Iain (M0PCB), Charlie (GM1TGY), Ondrej (OK1CDJ), Trystan (G0KAY), Oliver (DL6KBG), Volkmar Schirmer, Jordan (M0PIR), Thomas Ziegler, Mathis (DB9MAT), Ken (VE3HLS), Tyler (WL7T), Jeremy Taylor, Ben Kuhn, Eric Thresher, Michael Cullen, Juuso (OH1JW), Anthony Castiglia, Fernando Ramirez-Ferrer, Robert Dixon, Mark Percival, Julia (KV1V), Timo Tomasini, Ant (NU1U), Christopher Williams, Danny Barnes, Vic, Tom (M0LTE), smurphboy, Lars (SM0TGU), Theo (PD9DP), Stefan (SM0RGM). Peter (G0ABI), Lou (KI5FTY), Michael (DG3NAB).
+Paul (M0TZO), Tim (G4VXE), Paul (N8HM), Michelle (W5NYV), Mitchell (AD0HJ), Dan (M0TCB), Martin (DK3ML), Juan Carlos (EA5WA), Iain (M0PCB), Charlie (GM1TGY), Ondrej (OK1CDJ), Trystan (G0KAY), Oliver (DL6KBG), Volkmar Schirmer, Jordan (M0PIR), Thomas Ziegler, Mathis (DB9MAT), Ken (VE3HLS), Tyler (WL7T), Jeremy Taylor, Ben Kuhn, Eric Thresher, Michael Cullen, Juuso (OH1JW), Anthony Castiglia, Fernando Ramirez-Ferrer, Robert Dixon, Mark Percival, Julia (KV1V), Timo Tomasini, Ant (NU1U), Christopher Williams, Danny Barnes, Vic, Tom (M0LTE), smurphboy, Lars (SM0TGU), Theo (PD9DP), Stefan (SM0RGM). Peter (G0ABI), Lou (KI5FTY), Michael (DG3NAB), Dragan (4O4A), minorsecond, Emily (W7AYQ), Steve (M0SKM), Rob (M0VFC).
If you'd like to donate to Cloudlog to help allow @magicbug spend less time doing commercial work and more time coding Cloudlog then you can donate via [PayPal](https://paypal.me/PGoodhall), [Github Sponsor](https://github.com/sponsors/magicbug) or become a [Patreon](https://www.patreon.com/2m0sql)
diff --git a/application/config/config.sample.php b/application/config/config.sample.php
index adc2d85a..081a62e8 100644
--- a/application/config/config.sample.php
+++ b/application/config/config.sample.php
@@ -14,7 +14,7 @@ defined('BASEPATH') OR exit('No direct script access allowed');
*/
$config['app_name'] = "Cloudlog";
-$config['app_version'] = "2.4.3";
+$config['app_version'] = "2.4.5";
$config['directory'] = "logbook";
$config['callbook'] = "hamqth"; // Options are hamqth or qrz
$config['datadir'] = null; // default to install directory
diff --git a/application/config/migration.php b/application/config/migration.php
index 55613c99..b4c75212 100644
--- a/application/config/migration.php
+++ b/application/config/migration.php
@@ -21,7 +21,7 @@ $config['migration_enabled'] = TRUE;
| be upgraded / downgraded to.
|
*/
-$config['migration_version'] = 124;
+$config['migration_version'] = 130;
/*
|--------------------------------------------------------------------------
diff --git a/application/controllers/Adif.php b/application/controllers/Adif.php
index 5ebe2826..960b48bc 100644
--- a/application/controllers/Adif.php
+++ b/application/controllers/Adif.php
@@ -206,7 +206,7 @@ class adif extends CI_Controller {
$custom_errors .= $this->logbook_model->import($record, $this->input->post('station_profile'),
- $this->input->post('skipDuplicate'), $this->input->post('markLotw'), $this->input->post('dxccAdif'), $this->input->post('markQrz'), true, $this->input->post('operatorName'));
+ $this->input->post('skipDuplicate'), $this->input->post('markLotw'), $this->input->post('dxccAdif'), $this->input->post('markQrz'), $this->input->post('markHrd'), true, $this->input->post('operatorName'))."
";
};
diff --git a/application/controllers/Api.php b/application/controllers/Api.php
index 2eaf99a7..ceaa192a 100644
--- a/application/controllers/Api.php
+++ b/application/controllers/Api.php
@@ -5,38 +5,7 @@ class API extends CI_Controller {
// Do absolutely nothing
function index()
{
- }
-
- /*
- TODOs
- - Search Callsign (Return Json)
- - Add QSO return json
- */
-
-
- function search_callsign($callsign) {
- $this->db->select('COL_PRIMARY_KEY, COL_CALL, COL_MODE, COL_SUBMODE, COL_BAND, COL_COUNTRY, COL_FREQ, COL_GRIDSQUARE, COL_RST_RCVD, COL_RST_SENT, COL_SAT_MODE, COL_SAT_NAME');
- //$this->db->select("DATE_FORMAT(COL_TIME_ON, '%H:%i') AS time_on", FALSE );
- //$this->db->select("DATE_FORMAT(COL_TIME_ON, '%d/%c/%Y') AS date_on", FALSE );
- $this->db->like('COL_CALL', $callsign);
- $this->db->or_like('COL_GRIDSQUARE', $callsign);
- $query = $this->db->get($this->config->item('table_name'));
-
-
- $results = array();
-
- foreach ($query->result() as $result)
- {
- $results[] = $result;
- }
-
- header('Content-type: application/json');
-
- //$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
- echo $_GET['jsoncallback'].'('.json_encode($results).')'; //assign resulting code to $_GET['jsoncallback].
-
- //echo json_encode($results);
-
+ echo "nothing to see";
}
function help()
@@ -158,6 +127,30 @@ class API extends CI_Controller {
}
}
+ 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 */
+ $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);
+ }
+ echo json_encode($station_ids);
+ } else {
+ http_response_code(401);
+ echo json_encode(['status' => 'failed', 'reason' => "missing or invalid api key"]);
+ }
+ }
+
// FUNCTION: search()
// Handle search requests
/*
@@ -468,9 +461,7 @@ class API extends CI_Controller {
if(isset($obj['station_profile_id'])) {
- $this->logbook_model->import($record, $obj['station_profile_id'], NULL, NULL, NULL, NULL, false, false, true);
- } else {
- $this->logbook_model->import($record, 0, NULL, NULL, NULL, NULL, false, false, true);
+ $this->logbook_model->import($record, $obj['station_profile_id'], NULL, NULL, NULL, NULL, NULL, false, false, true);
}
};
diff --git a/application/controllers/Eqsl.php b/application/controllers/Eqsl.php
index 642e6fa5..b18cf0b8 100644
--- a/application/controllers/Eqsl.php
+++ b/application/controllers/Eqsl.php
@@ -15,6 +15,7 @@ class eqsl extends CI_Controller {
$folder_name = "images/eqsl_card_images";
$data['storage_used'] = $this->sizeFormat($this->folderSize($folder_name));
+
// Render Page
$data['page_title'] = "eQSL Cards";
@@ -29,6 +30,12 @@ class eqsl extends CI_Controller {
$this->load->model('user_model');
if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
+ $this->load->model('stations');
+ $data['station_profile'] = $this->stations->all_of_user();
+ $active_station_id = $this->stations->find_active();
+ $station_profile = $this->stations->profile($active_station_id);
+ $data['active_station_info'] = $station_profile->row();
+
// Check if eQSL Nicknames have been defined
$this->load->model('eqslmethods_model');
$eqsl_locations = $this->eqslmethods_model->all_of_user_with_eqsl_nick_defined();
@@ -71,29 +78,39 @@ class eqsl extends CI_Controller {
$eqsl_results[] = $this->eqslimporter->fetch($eqsl_password);
}
- }
- else
- {
- if ( ! $this->upload->do_upload())
- {
- $data['page_title'] = "eQSL Import";
- $data['error'] = $this->upload->display_errors();
+ } elseif ($this->input->post('eqslimport') == 'upload') {
+ $station_id4upload=$this->input->post('station_profile');
+ if ($this->stations->check_station_is_accessible($station_id4upload)) {
+ $station_callsign=$this->stations->profile($station_id4upload)->row()->station_callsign;
+ if ( ! $this->upload->do_upload())
+ {
+ $data['page_title'] = "eQSL Import";
+ $data['error'] = $this->upload->display_errors();
- $this->load->view('interface_assets/header', $data);
- $this->load->view('eqsl/import');
- $this->load->view('interface_assets/footer');
+ $this->load->view('interface_assets/header', $data);
+ $this->load->view('eqsl/import');
+ $this->load->view('interface_assets/footer');
- return;
+ return;
+ } else {
+ $data = array('upload_data' => $this->upload->data());
+
+ $this->load->library('EqslImporter');
+ $this->eqslimporter->from_file('./uploads/'.$data['upload_data']['file_name'],$station_callsign);
+
+ $eqsl_results[] = $this->eqslimporter->import();
+ }
+ } else {
+ log_message('error',$station_id4upload." is not valid for user!");
}
- else
- {
- $data = array('upload_data' => $this->upload->data());
+ } else {
+ $data['page_title'] = "eQSL Import";
- $this->load->library('EqslImporter');
- $this->eqslimporter->from_file('./uploads/'.$data['upload_data']['file_name']);
+ $this->load->view('interface_assets/header', $data);
+ $this->load->view('eqsl/import');
+ $this->load->view('interface_assets/footer');
- $eqsl_results[] = $this->eqslimporter->import();
- }
+ return;
}
$data['eqsl_results'] = $eqsl_results;
diff --git a/application/controllers/Gridmap.php b/application/controllers/Gridmap.php
index d4e32e6a..cc28c06e 100644
--- a/application/controllers/Gridmap.php
+++ b/application/controllers/Gridmap.php
@@ -11,11 +11,17 @@ class Gridmap extends CI_Controller {
$this->load->model('bands');
$this->load->model('gridmap_model');
+ $this->load->model('stations');
+
+ $data['homegrid'] = explode(',', $this->stations->find_gridsquare());
$data['modes'] = $this->gridmap_model->get_worked_modes();
$data['bands'] = $this->bands->get_worked_bands();
$data['sats_available'] = $this->bands->get_worked_sats();
+ $data['user_gridmap_default_band'] = $this->session->userdata('user_gridmap_default_band');
+ $data['user_gridmap_confirmation'] = $this->session->userdata('user_gridmap_confirmation');
+
$data['layer'] = $this->optionslib->get_option('option_map_tile_server');
$data['attribution'] = $this->optionslib->get_option('option_map_tile_server_copyright');
@@ -27,6 +33,7 @@ class Gridmap extends CI_Controller {
$footerData = [];
$footerData['scripts'] = [
+ 'assets/js/leaflet/geocoding.js',
'assets/js/leaflet/L.MaidenheadColouredGridMap.js',
'assets/js/sections/gridmap.js?'
];
@@ -175,4 +182,4 @@ class Gridmap extends CI_Controller {
header('Content-Type: application/json');
echo json_encode($data);
}
-}
\ No newline at end of file
+}
diff --git a/application/controllers/Hrdlog.php b/application/controllers/Hrdlog.php
new file mode 100644
index 00000000..eca9ef47
--- /dev/null
+++ b/application/controllers/Hrdlog.php
@@ -0,0 +1,171 @@
+setOptions();
+
+ $this->load->model('logbook_model');
+
+ $station_ids = $this->logbook_model->get_station_id_with_hrdlog_code();
+
+ if ($station_ids) {
+ foreach ($station_ids as $station) {
+ $hrdlog_code = $station->hrdlog_code;
+ if($this->mass_upload_qsos($station->station_id, $hrdlog_code)) {
+ echo "QSOs have been uploaded to hrdlog.net.";
+ log_message('info', 'QSOs have been uploaded to hrdlog.net.');
+ } else{
+ echo "No QSOs found for upload.";
+ log_message('info', 'No QSOs found for upload.');
+ }
+ }
+ } else {
+ echo "No station profiles with a hrdlog Code found.";
+ log_message('error', "No station profiles with a hrdlog Code found.");
+ }
+
+ }
+
+ function setOptions() {
+ $this->config->load('config');
+ ini_set('memory_limit', '-1');
+ ini_set('display_errors', 1);
+ ini_set('display_startup_errors', 1);
+ error_reporting(E_ALL);
+ }
+
+ /*
+ * Function gets all QSOs from given station_id, that are not previously uploaded to hrdlog.
+ * Adif is build for each qso, and then uploaded, one at a time
+ */
+ function mass_upload_qsos($station_id, $hrdlog_code) {
+ $i = 0;
+ $data['qsos'] = $this->logbook_model->get_hrdlog_qsos($station_id);
+ $errormessages=array();
+
+ $CI =& get_instance();
+ $CI->load->library('AdifHelper');
+
+ if ($data['qsos']) {
+ foreach ($data['qsos']->result() as $qso) {
+ $adif = $CI->adifhelper->getAdifLine($qso);
+
+ if ($qso->COL_HRDLOG_QSO_UPLOAD_STATUS == 'M') {
+ $result = $this->logbook_model->push_qso_to_hrdlog($hrdlog_code, $qso->COL_STATION_CALLSIGN,$adif, true);
+ } else {
+ $result = $this->logbook_model->push_qso_to_hrdlog($hrdlog_code, $qso->COL_STATION_CALLSIGN,$adif);
+ }
+
+ if ( ($result['status'] == 'OK') || ( ($result['status'] == 'error') || ($result['status'] == 'duplicate')) ){
+ $this->markqso($qso->COL_PRIMARY_KEY);
+ $i++;
+ } elseif ((substr($result['status'],0,11) == 'auth_error')) {
+ log_message('error', 'hrdlog upload failed for qso: Call: ' . $qso->COL_CALL . ' Band: ' . $qso->COL_BAND . ' Mode: ' . $qso->COL_MODE . ' Time: ' . $qso->COL_TIME_ON);
+ log_message('error', 'hrdlog upload failed with the following message: ' .$result['message']);
+ log_message('error', 'hrdlog upload stopped for Station_ID: ' .$station_id);
+ $errormessages[] = $result['message'] . 'Invalid HRDLog-Code, stopped at Call: ' . $qso->COL_CALL . ' Band: ' . $qso->COL_BAND . ' Mode: ' . $qso->COL_MODE . ' Time: ' . $qso->COL_TIME_ON;
+ break; /* If key is invalid, immediate stop syncing for more QSOs of this station */
+ } else {
+ log_message('error', 'hrdlog upload failed for qso: Call: ' . $qso->COL_CALL . ' Band: ' . $qso->COL_BAND . ' Mode: ' . $qso->COL_MODE . ' Time: ' . $qso->COL_TIME_ON);
+ log_message('error', 'hrdlog upload failed with the following message: ' .$result['message']);
+ $errormessages[] = $result['message'] . ' Call: ' . $qso->COL_CALL . ' Band: ' . $qso->COL_BAND . ' Mode: ' . $qso->COL_MODE . ' Time: ' . $qso->COL_TIME_ON;
+ }
+ }
+ $result['status'] = 'OK';
+ $result['count'] = $i;
+ $result['errormessages'] = $errormessages;
+ return $result;
+ } else {
+ $result['status'] = 'Error';
+ $result['count'] = $i;
+ $result['errormessages'] = $errormessages;
+ return $result;
+ }
+ }
+
+ /*
+ * Function marks QSO with given primarykey as uploaded to hrdlog
+ */
+ function markqso($primarykey) {
+ $this->logbook_model->mark_hrdlog_qsos_sent($primarykey);
+ }
+
+ /*
+ * Used for displaying the uid for manually selecting log for upload to hrdlog
+ */
+ public function export() {
+ $this->load->model('stations');
+
+ $data['page_title'] = "HRDlog.net Logbook";
+
+ $data['station_profiles'] = $this->stations->all_of_user();
+ $data['station_profile'] = $this->stations->stations_with_hrdlog_code();
+
+ $this->load->view('interface_assets/header', $data);
+ $this->load->view('hrdlog/export');
+ $this->load->view('interface_assets/footer');
+ }
+
+ /*
+ * Used for ajax-function when selecting log for upload to hrdlog
+ */
+ public function upload_station() {
+ $this->setOptions();
+ $this->load->model('stations');
+
+ $postData = $this->input->post();
+
+ $this->load->model('logbook_model');
+ $result = $this->logbook_model->exists_hrdlog_code($postData['station_id']);
+ $hrdlog_code = $result->hrdlog_code;
+ header('Content-type: application/json');
+ $result = $this->mass_upload_qsos($postData['station_id'], $hrdlog_code);
+ if ($result['status'] == 'OK') {
+ $stationinfo = $this->stations->stations_with_hrdlog_code();
+ $info = $stationinfo->result();
+
+ $data['status'] = 'OK';
+ $data['info'] = $info;
+ $data['infomessage'] = $result['count'] . " QSOs are now uploaded to hrdlog";
+ $data['errormessages'] = $result['errormessages'];
+ echo json_encode($data);
+ } else {
+ $data['status'] = 'Error';
+ $data['info'] = 'Error: No QSOs found to upload.';
+ $data['errormessages'] = $result['errormessages'];
+ echo json_encode($data);
+ }
+ }
+
+ public function mark_hrdlog() {
+ // Set memory limit to unlimited to allow heavy usage
+ ini_set('memory_limit', '-1');
+
+ $station_id = $this->security->xss_clean($this->input->post('station_profile'));
+
+ $this->load->model('adif_data');
+
+ $data['qsos'] = $this->adif_data->export_custom($this->input->post('from'), $this->input->post('to'), $station_id);
+
+ $this->load->model('logbook_model');
+
+ foreach ($data['qsos']->result() as $qso)
+ {
+ $this->logbook_model->mark_hrdlog_qsos_sent($qso->COL_PRIMARY_KEY);
+ }
+
+ $this->load->view('interface_assets/header', $data);
+ $this->load->view('hrdlog/mark_hrdlog', $data);
+ $this->load->view('interface_assets/footer');
+ }
+}
diff --git a/application/controllers/Logbook.php b/application/controllers/Logbook.php
index d1d797e2..87933907 100644
--- a/application/controllers/Logbook.php
+++ b/application/controllers/Logbook.php
@@ -98,30 +98,15 @@ class Logbook extends CI_Controller {
$callsign = str_replace("-","/",$callsign);
// Check if callsign is an LOTW User
- $lotw_member = "";
- $lotw_file_name = "./updates/lotw_users.csv";
-
- if (file_exists($lotw_file_name)) {
- $f = fopen($lotw_file_name, "r");
- $result = false;
- while ($row = fgetcsv($f)) {
- if ($row[0] == strtoupper($callsign)) {
- $result = $row[0];
- $lotw_member = "active";
- break;
- }
- }
-
- if($lotw_member != "active") {
- $lotw_member = "not found";
- }
- fclose($f);
- } else {
- $lotw_member = "not found";
- }
-
// Check Database for all other data
$this->load->model('logbook_model');
+
+ $lotw_days=$this->logbook_model->check_last_lotw($callsign);
+ if ($lotw_days != null) {
+ $lotw_member="active";
+ } else {
+ $lotw_member="not found";
+ }
$return = [
"callsign" => strtoupper($callsign),
@@ -137,6 +122,7 @@ class Logbook extends CI_Controller {
"bearing" => "",
"workedBefore" => false,
"lotw_member" => $lotw_member,
+ "lotw_days" => $lotw_days,
"image" => "",
];
@@ -772,7 +758,7 @@ class Logbook extends CI_Controller {
function querydb($id) {
$this->db->from($this->config->item('table_name'));
$this->db->join('station_profile', 'station_profile.station_id = '.$this->config->item('table_name').'.station_id');
- $this->db->join('dxcc_entities', 'dxcc_entities.adif = '.$this->config->item('table_name').'.COL_DXCC');
+ $this->db->join('dxcc_entities', 'dxcc_entities.adif = '.$this->config->item('table_name').'.COL_DXCC', 'left outer');
$this->db->join('lotw_users', 'lotw_users.callsign = '.$this->config->item('table_name').'.col_call', 'left outer');
$this->db->group_start();
$this->db->like(''.$this->config->item('table_name').'.COL_CALL', $id);
diff --git a/application/controllers/Logbookadvanced.php b/application/controllers/Logbookadvanced.php
index b2ed5e60..384889f3 100644
--- a/application/controllers/Logbookadvanced.php
+++ b/application/controllers/Logbookadvanced.php
@@ -1,4 +1,4 @@
-logbook_model->fetchDxcc();
$pageData['iotaarray'] = $this->logbook_model->fetchIota();
$pageData['sats'] = $this->bands->get_worked_sats();
-
+
$pageData['bands'] = $this->bands->get_worked_bands();
- $CI =& get_instance();
+ $CI =& get_instance();
// Get Date format
if($CI->session->userdata('user_date_format')) {
// If Logged in and session exists
@@ -104,8 +104,17 @@ class Logbookadvanced extends CI_Controller {
'propmode' => xss_clean($this->input->post('propmode')),
'gridsquare' => xss_clean($this->input->post('gridsquare')),
'state' => xss_clean($this->input->post('state')),
+ 'cqzone' => xss_clean($this->input->post('cqzone')),
'qsoresults' => xss_clean($this->input->post('qsoresults')),
'sats' => xss_clean($this->input->post('sats')),
+ 'lotwSent' => xss_clean($this->input->post('lotwSent')),
+ 'lotwReceived' => xss_clean($this->input->post('lotwReceived')),
+ 'eqslSent' => xss_clean($this->input->post('eqslSent')),
+ 'eqslReceived' => xss_clean($this->input->post('eqslReceived')),
+ 'qslvia' => xss_clean($this->input->post('qslvia')),
+ 'sota' => xss_clean($this->input->post('sota')),
+ 'pota' => xss_clean($this->input->post('pota')),
+ 'wwff' => xss_clean($this->input->post('wwff')),
);
$qsos = [];
@@ -170,7 +179,7 @@ class Logbookadvanced extends CI_Controller {
$data = $this->logbookadvanced_model->getQsosForAdif($ids, $user_id);
$results = $data->result('array');
-
+
$qsos = [];
foreach ($results as $data) {
$qsos[] = new QSO($data);
@@ -198,7 +207,7 @@ class Logbookadvanced extends CI_Controller {
$data = $this->logbookadvanced_model->getQsosForAdif($ids, $user_id);
$results = $data->result('array');
-
+
$qsos = [];
foreach ($results as $data) {
$qsos[] = new QSO($data);
@@ -212,4 +221,4 @@ class Logbookadvanced extends CI_Controller {
header("Content-Type: application/json");
print json_encode($q);
}
-}
\ No newline at end of file
+}
diff --git a/application/controllers/Logbooks.php b/application/controllers/Logbooks.php
index ed7a2d1a..a5f021c3 100644
--- a/application/controllers/Logbooks.php
+++ b/application/controllers/Logbooks.php
@@ -129,6 +129,12 @@ class Logbooks extends CI_Controller {
$this->load->view('logbooks/components/publicSlugInputValidation', $data);
}
+ public function save_publicsearch() {
+ $this->load->model('logbooks_model');
+ $returndata = $this->logbooks_model->save_public_search($this->input->post('public_search'), $this->input->post('logbook_id'));
+ echo "
| Version | -config->item('app_version')."\n"; ?> | +optionslib->get_option('version')."\n"; ?> |
| Language | @@ -38,6 +38,11 @@PHP Version | |
| MySQL Version | +db->version(); ?> | +
Upload the Exported ADIF file from eQSL from the Download Inbox page, to mark QSOs as confirmed on eQSL.
Important Log files must have the file type .adi
+Choose Station(location) eQSL File belongs to:
++
| + | + | + | + | Station Callsign | +
|---|---|---|---|---|
| COL_TIME_ON); echo date($this->config->item('qso_date_format'), $timestamp); ?> | ++ COL_CALL)); ?> + | ++ COL_SUBMODE==null ? $row->COL_MODE : $row->COL_SUBMODE; ?> + | ++ COL_SAT_NAME != null) { echo $row->COL_SAT_NAME; } else { echo strtolower($row->COL_BAND); } ?> + | ++ station_callsign; ?> + | +
Here you can see and upload all QSOs which have not been previously uploaded to a QRZ logbook.
You need to set a QRZ Logbook API key in your station profile. Only station profiles with an API Key set are displayed.
-WarningThis might take a while as QSO uploads are processed sequentially.
+Warning This might take a while as QSO uploads are processed sequentially.
result()) { @@ -61,9 +61,9 @@