From 06215061d8bbfbc98dcef1548646f2757ad8cb49 Mon Sep 17 00:00:00 2001 From: Joerg Date: Fri, 23 Jun 2023 23:08:01 +0200 Subject: [PATCH 01/34] Update Eqsl.php Fixed issue https://github.com/magicbug/Cloudlog/issues/2189 --- application/controllers/Eqsl.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/controllers/Eqsl.php b/application/controllers/Eqsl.php index d329d2dc..642e6fa5 100644 --- a/application/controllers/Eqsl.php +++ b/application/controllers/Eqsl.php @@ -501,7 +501,7 @@ class eqsl extends CI_Controller { $query = $this->user_model->get_by_id($this->session->userdata('user_id')); $q = $query->row(); - $username = $q->user_eqsl_name; + $username = $qso->COL_STATION_CALLSIGN; $password = $q->user_eqsl_password; $image_url = $this->electronicqsl->card_image($username, urlencode($password), $callsign, $band, $mode, $year, $month, $day, $hour, $minute); @@ -559,7 +559,7 @@ class eqsl extends CI_Controller { $query = $this->user_model->get_by_id($this->session->userdata('user_id')); $q = $query->row(); - $username = $q->user_eqsl_name; + $username = $qso->COL_STATION_CALLSIGN; $password = $q->user_eqsl_password; $error = ''; From 5cb333fdbb6a53f9891b614498e6564f80a364eb Mon Sep 17 00:00:00 2001 From: Peter Goodhall Date: Mon, 26 Jun 2023 11:29:18 +0100 Subject: [PATCH 02/34] Update menu_lang.php --- application/language/english/menu_lang.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/language/english/menu_lang.php b/application/language/english/menu_lang.php index eb3911e7..30972966 100644 --- a/application/language/english/menu_lang.php +++ b/application/language/english/menu_lang.php @@ -21,7 +21,7 @@ $lang['menu_notes'] = 'Notes'; $lang['menu_analytics'] = 'Analytics'; $lang['menu_statistics'] = 'Statistics'; $lang['menu_gridsquares'] = 'Gridsquares'; -$lang['menu_gridmap'] = 'Gridmap'; +$lang['menu_gridmap'] = 'Gridsquare Map'; $lang['menu_activated_gridsquares'] = 'Activated Gridsquares'; $lang['menu_gridsquare_activators'] = 'Gridsquare Activators'; $lang['menu_distances_worked'] = 'Distances Worked'; From cba1ba4190871377c51ea8402f6582edf75a7f26 Mon Sep 17 00:00:00 2001 From: Andreas <6977712+AndreasK79@users.noreply.github.com> Date: Mon, 26 Jun 2023 16:56:08 +0200 Subject: [PATCH 03/34] [Advanced Logbook] Fixed display of refs --- src/QSLManager/QSO.php | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/QSLManager/QSO.php b/src/QSLManager/QSO.php index 22033afe..e9082085 100644 --- a/src/QSLManager/QSO.php +++ b/src/QSLManager/QSO.php @@ -37,7 +37,7 @@ class QSO private string $dxcc; private string $iota; /** @var string[] */ - private array $deVUCCGridsquares; + private string $deVUCCGridsquares; private string $dxGridsquare; private string $dxIOTA; private string $dxSig; @@ -45,7 +45,7 @@ class QSO private string $dxDARCDOK; private string $dxSOTAReference; /** @var string[] */ - private array $dxVUCCGridsquares; + private string $dxVUCCGridsquares; private string $QSLMsg; private ?DateTime $QSLReceivedDate; private string $QSLReceived; @@ -159,7 +159,7 @@ class QSO $this->deIOTAIslandID = $data['COL_MY_IOTA_ISLAND_ID'] ?? ''; $this->deSOTAReference = $data['COL_MY_SOTA_REF'] ?? ''; - $this->deVUCCGridsquares = ($data['COL_MY_VUCC_GRIDS'] === null) ? [] : explode(",", $data['COL_MY_VUCC_GRIDS'] ?? ''); + $this->deVUCCGridsquares = $data['COL_MY_VUCC_GRIDS'] ?? ''; $this->dxGridsquare = $data['COL_GRIDSQUARE'] ?? ''; $this->dxIOTA = $data['COL_IOTA'] ?? ''; @@ -169,7 +169,7 @@ class QSO $this->dxSOTAReference = $data['COL_SOTA_REF'] ?? ''; - $this->dxVUCCGridsquares = ($data['COL_VUCC_GRIDS'] === null) ? [] : explode(",", $data['COL_VUCC_GRIDS'] ?? ''); + $this->dxVUCCGridsquares = $data['COL_VUCC_GRIDS'] ?? ''; $this->QSLMsg = $data['COL_QSLMSG'] ?? ''; @@ -595,7 +595,7 @@ class QSO /** * @return string[] */ - public function getDeVUCCGridsquares(): array + public function getDeVUCCGridsquares(): string { return $this->deVUCCGridsquares; } @@ -651,7 +651,7 @@ class QSO /** * @return string[] */ - public function getDxVUCCGridsquares(): array + public function getDxVUCCGridsquares(): string { return $this->dxVUCCGridsquares; } @@ -825,8 +825,8 @@ class QSO private function getFormattedDeRefs(): string { $refs = []; - if ($this->deVUCCGridsquares !== []) { - $refs[] = implode(",", $this->deVUCCGridsquares); + if ($this->deVUCCGridsquares !== '') { + $refs[] = $this->deVUCCGridsquares; } else { if ($this->deGridsquare !== '') { $refs[] = $this->deGridsquare; @@ -851,8 +851,8 @@ class QSO private function getFormattedDxRefs(): string { $refs = []; - if ($this->dxVUCCGridsquares !== []) { - $refs[] = implode(",", $this->dxVUCCGridsquares); + if ($this->dxVUCCGridsquares !== '') { + $refs[] = $this->dxVUCCGridsquares; } else if ($this->dxGridsquare !== '') { $refs[] = $this->dxGridsquare; } From 3ef655f4b7190c016e09b5a814475f3b544fe826 Mon Sep 17 00:00:00 2001 From: Andreas <6977712+AndreasK79@users.noreply.github.com> Date: Mon, 26 Jun 2023 20:54:36 +0200 Subject: [PATCH 04/34] [Advanced Logbook] Added qrblink to grid --- assets/js/sections/logbookadvanced.js | 2 +- src/QSLManager/QSO.php | 42 ++++++++++----------------- 2 files changed, 16 insertions(+), 28 deletions(-) diff --git a/assets/js/sections/logbookadvanced.js b/assets/js/sections/logbookadvanced.js index 984d5620..9e2a8057 100644 --- a/assets/js/sections/logbookadvanced.js +++ b/assets/js/sections/logbookadvanced.js @@ -32,7 +32,7 @@ function updateRow(qso) { cells.eq(c++).text(qso.rstR); cells.eq(c++).text(qso.band); cells.eq(c++).text(qso.deRefs); - cells.eq(c++).text(qso.dxRefs); + cells.eq(c++).html(qso.dxRefs); cells.eq(c++).text(qso.name); cells.eq(c++).text(qso.qslVia); cells.eq(c++).html(qso.qsl); diff --git a/src/QSLManager/QSO.php b/src/QSLManager/QSO.php index e9082085..66b1e760 100644 --- a/src/QSLManager/QSO.php +++ b/src/QSLManager/QSO.php @@ -38,6 +38,7 @@ class QSO private string $iota; /** @var string[] */ private string $deVUCCGridsquares; + private string $stationGridsquare; private string $dxGridsquare; private string $dxIOTA; private string $dxSig; @@ -161,6 +162,8 @@ class QSO $this->deVUCCGridsquares = $data['COL_MY_VUCC_GRIDS'] ?? ''; + $this->stationGridsquare = $data['station_gridsquare'] ?? ''; + $this->dxGridsquare = $data['COL_GRIDSQUARE'] ?? ''; $this->dxIOTA = $data['COL_IOTA'] ?? ''; $this->dxSig = $data['COL_SIG'] ?? ''; @@ -209,7 +212,6 @@ class QSO } } $this->lotw_hint = $lotw_hint; - } /** @@ -218,14 +220,6 @@ class QSO function getQSLString($data, $custom_date_format): string { $CI =& get_instance(); - // Load language files - $CI->lang->load(array( - 'contesting', - 'qslcard', - 'lotw', - 'eqsl', - 'qso' - )); $qslstring = 'lang->load(array( - 'contesting', - 'qslcard', - 'lotw', - 'eqsl', - 'qso' - )); $lotwstring = 'lang->load(array( - 'contesting', - 'qslcard', - 'lotw', - 'eqsl', - 'qso' - )); $eqslstring = 'dxVUCCGridsquares !== '') { - $refs[] = $this->dxVUCCGridsquares; + $refs[] = $this->dxVUCCGridsquares . ' ' .$this->getQrbLink($this->stationGridsquare, $this->dxVUCCGridsquares, $this->dxGridsquare); } else if ($this->dxGridsquare !== '') { - $refs[] = $this->dxGridsquare; + $refs[] = $this->dxGridsquare . ' ' .$this->getQrbLink($this->stationGridsquare, $this->dxVUCCGridsquares, $this->dxGridsquare); } if ($this->dxSOTAReference !== '') { $refs[] = "SOTA:" . $this->dxSOTAReference; @@ -961,4 +939,14 @@ class QSO return trim(implode(" ", $label)); } + + private function getQrbLink($mygrid, $grid, $vucc) + { + if (!empty($grid)) { + return ''; + } else if (!empty($vucc)) { + return ''; + } + return ''; + } } From f13aa832543219ac8ec20c21982d4d6d6c54f7c5 Mon Sep 17 00:00:00 2001 From: Andreas <6977712+AndreasK79@users.noreply.github.com> Date: Tue, 27 Jun 2023 08:36:50 +0200 Subject: [PATCH 05/34] [Advanced Logbook] Added link to IOTA --- assets/js/sections/logbookadvanced.js | 2 +- src/QSLManager/QSO.php | 28 +++++++++++++++++++++------ 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/assets/js/sections/logbookadvanced.js b/assets/js/sections/logbookadvanced.js index 9e2a8057..70f026da 100644 --- a/assets/js/sections/logbookadvanced.js +++ b/assets/js/sections/logbookadvanced.js @@ -46,7 +46,7 @@ function updateRow(qso) { cells.eq(c++).text(qso.dxcc); cells.eq(c++).text(qso.state); cells.eq(c++).text(qso.cqzone); - cells.eq(c++).text(qso.iota); + cells.eq(c++).html(qso.iota); $('[data-toggle="tooltip"]').tooltip(); return row; diff --git a/src/QSLManager/QSO.php b/src/QSLManager/QSO.php index 66b1e760..98a4a614 100644 --- a/src/QSLManager/QSO.php +++ b/src/QSLManager/QSO.php @@ -191,7 +191,7 @@ class QSO $this->cqzone = ($data['COL_CQZ'] === null) ? '' : $data['COL_CQZ']; $this->state = ($data['COL_STATE'] === null) ? '' :$data['COL_STATE']; $this->dxcc = ($data['name'] === null) ? '- NONE -' : ucwords(strtolower($data['name']), "- (/"); - $this->iota = ($data['COL_IOTA'] === null) ? '' :$data['COL_IOTA']; + $this->iota = ($data['COL_IOTA'] === null) ? '' : $this->getIotaLink($data['COL_IOTA']); if (array_key_exists('end', $data)) { $this->end = ($data['end'] === null) ? null : DateTime::createFromFormat("Y-m-d", $data['end'], new DateTimeZone('UTC')); } else { @@ -199,10 +199,18 @@ class QSO } $this->callsign = ($data['callsign'] === null) ? '' :$data['callsign']; $this->lastupload = ($data['lastupload'] === null) ? '' : date($custom_date_format . " H:i", strtotime($data['lastupload'])); + $this->lotw_hint = $this->getLotwHint($data['lastupload']); + } + + /** + * @return string + */ + function getLotwHint($lastupload): string + { $lotw_hint = ''; - if ($data['lastupload'] !== null) { + if ($lastupload !== null) { $diff = time(); - $diff = (time() - strtotime($data['lastupload'])) / 86400; + $diff = (time() - strtotime($lastupload)) / 86400; if ($diff > 365) { $lotw_hint = ' lotw_info_red'; } elseif ($diff > 30) { @@ -211,9 +219,9 @@ class QSO $lotw_hint = ' lotw_info_yellow'; } } - $this->lotw_hint = $lotw_hint; + return $lotw_hint; } - + /** * @return string */ @@ -940,7 +948,7 @@ class QSO return trim(implode(" ", $label)); } - private function getQrbLink($mygrid, $grid, $vucc) + private function getQrbLink($mygrid, $grid, $vucc) : string { if (!empty($grid)) { return ''; @@ -949,4 +957,12 @@ class QSO } return ''; } + + private function getIotaLink($iota) : string + { + if ($iota !== '') { + return '' . $iota . ''; + } + return ''; + } } From d666cb3c4ce2548ea1dc02439af17dac3ada068a Mon Sep 17 00:00:00 2001 From: Andreas <6977712+AndreasK79@users.noreply.github.com> Date: Tue, 27 Jun 2023 11:21:20 +0200 Subject: [PATCH 06/34] [Advanced Logbook] Added links for QRZ and HamQTH after callsign --- application/models/Logbookadvanced_model.php | 1 + assets/js/sections/logbookadvanced.js | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/application/models/Logbookadvanced_model.php b/application/models/Logbookadvanced_model.php index f0571352..d94e1565 100644 --- a/application/models/Logbookadvanced_model.php +++ b/application/models/Logbookadvanced_model.php @@ -136,6 +136,7 @@ class Logbookadvanced_model extends CI_Model { FROM " . $this->config->item('table_name') . " qsos INNER JOIN station_profile ON qsos.station_id = station_profile.station_id LEFT OUTER JOIN dxcc_entities ON qsos.COL_MY_DXCC = dxcc_entities.adif + LEFT OUTER JOIN lotw_users ON qsos.col_call=lotw_users.callsign WHERE station_profile.user_id = ? $where $order diff --git a/assets/js/sections/logbookadvanced.js b/assets/js/sections/logbookadvanced.js index 70f026da..2cf65790 100644 --- a/assets/js/sections/logbookadvanced.js +++ b/assets/js/sections/logbookadvanced.js @@ -26,7 +26,7 @@ function updateRow(qso) { let c = 1; cells.eq(c++).text(qso.qsoDateTime); cells.eq(c++).text(qso.de); - cells.eq(c++).html(''+qso.dx+'' + (qso.callsign == '' ? '' : ' L')); + cells.eq(c++).html(''+qso.dx+'' + (qso.callsign == '' ? '' : ' L') + ' Lookup ' + qso.dx + ' on QRZ.com Lookup ' + qso.dx + ' on HamQTH'); cells.eq(c++).text(qso.mode); cells.eq(c++).text(qso.rstS); cells.eq(c++).text(qso.rstR); @@ -81,7 +81,7 @@ function loadQSOTable(rows) { data.push('
'); data.push(qso.qsoDateTime); data.push(qso.de); - data.push(''+qso.dx+'' + (qso.callsign == '' ? '' : ' L')); + data.push(''+qso.dx+'' + (qso.callsign == '' ? '' : ' L') + ' Lookup ' + qso.dx + ' on QRZ.com Lookup ' + qso.dx + ' on HamQTH'); data.push(qso.mode); data.push(qso.rstS); data.push(qso.rstR); From 8dd3f290a76fb4b11037fe5e8902cac0f6b4f761 Mon Sep 17 00:00:00 2001 From: Andreas <6977712+AndreasK79@users.noreply.github.com> Date: Tue, 27 Jun 2023 15:03:12 +0200 Subject: [PATCH 07/34] [Advanced Logbook] Now can print label from advanced logbook --- application/controllers/Labels.php | 36 ++++++++++--------- application/models/Labels_model.php | 12 +++++++ application/views/logbookadvanced/index.php | 3 ++ assets/js/sections/logbookadvanced.js | 39 +++++++++++++++++++++ 4 files changed, 74 insertions(+), 16 deletions(-) diff --git a/application/controllers/Labels.php b/application/controllers/Labels.php index 628b4dcd..908a23bd 100644 --- a/application/controllers/Labels.php +++ b/application/controllers/Labels.php @@ -87,22 +87,27 @@ class Labels extends CI_Controller { } + public function printids() { + $ids = xss_clean(json_decode($this->input->post('id'))); + $this->load->model('labels_model'); + $result = $this->labels_model->export_printrequestedids($ids); + + $this->prepareLabel($result); + } + public function print($station_id) { $clean_id = xss_clean($station_id); $this->load->model('labels_model'); $result = $this->labels_model->export_printrequested($clean_id); + $this->prepareLabel($result); + } + + function prepareLabel($qsos) { + $this->load->model('labels_model'); $label = $this->labels_model->getDefaultLabel(); - - // require_once('fpdf.php'); - // require('PDF_Label.php'); - // require_once APPPATH."/src/Label/PDF_Label.php"; - // require_once APPPATH."/src/Label/fpdf.php"; - - // Example of custom format - // $pdf = new PDF_Label(array('paper-size'=>'A4', 'metric'=>'mm', 'marginLeft'=>1, 'marginTop'=>1, 'NX'=>2, 'NY'=>7, 'SpaceX'=>0, 'SpaceY'=>0, 'width'=>99, 'height'=>38, 'font-size'=>14)); - + try { if ($label) { $pdf = new PDF_Label(array( @@ -127,9 +132,9 @@ class Labels extends CI_Controller { redirect('labels'); } define('FPDF_FONTPATH', './src/Label/font/'); - + $pdf->AddPage(); - + if ($label->font == 'DejaVuSans') { $pdf->AddFont($label->font,'','DejaVuSansMono.ttf',true); $pdf->SetFont($label->font); @@ -137,13 +142,12 @@ class Labels extends CI_Controller { $pdf->AddFont($label->font); $pdf->SetFont($label->font); } - - - if ($result->num_rows() > 0) { + + if ($qsos->num_rows() > 0) { if ($label->qsos == 1) { - $this->makeOneQsoLabel($result->result(), $pdf); + $this->makeOneQsoLabel($qsos->result(), $pdf); } else { - $this->makeMultiQsoLabel($result->result(), $pdf, $label->qsos); + $this->makeMultiQsoLabel($qsos->result(), $pdf, $label->qsos); } } else { $this->session->set_flashdata('message', '0 QSOs found for print!'); diff --git a/application/models/Labels_model.php b/application/models/Labels_model.php index 91c62027..c0c50494 100644 --- a/application/models/Labels_model.php +++ b/application/models/Labels_model.php @@ -127,4 +127,16 @@ class Labels_model extends CI_Model { return $query; } + + function export_printrequestedids($ids) { + $this->db->select($this->config->item('table_name').'.*, station_profile.*, dxcc_entities.name as station_country'); + $this->db->join('station_profile', 'station_profile.station_id = '.$this->config->item('table_name').'.station_id'); + $this->db->join('dxcc_entities', 'station_profile.station_dxcc = dxcc_entities.adif'); + $this->db->where('station_profile.user_id', $this->session->userdata('user_id')); + $this->db->where_in('COL_PRIMARY_KEY', $ids); + $this->db->order_by("COL_DXCC", "ASC"); + $query = $this->db->get($this->config->item('table_name')); + + return $query; + } } \ No newline at end of file diff --git a/application/views/logbookadvanced/index.php b/application/views/logbookadvanced/index.php index ed417d8b..230df578 100644 --- a/application/views/logbookadvanced/index.php +++ b/application/views/logbookadvanced/index.php @@ -191,7 +191,10 @@ + + + diff --git a/assets/js/sections/logbookadvanced.js b/assets/js/sections/logbookadvanced.js index 70f026da..05156ac4 100644 --- a/assets/js/sections/logbookadvanced.js +++ b/assets/js/sections/logbookadvanced.js @@ -348,6 +348,45 @@ $(document).ready(function () { $('#notRequired').click(function (event) { handleQsl('I','', 'notRequired'); }); + $('#receivedBureau').click(function (event) { + }); + $('#receivedDirect').click(function (event) { + }); + + $('#printLabel').click(function (event) { + var elements = $('#qsoList tbody input:checked'); + var nElements = elements.length; + if (nElements == 0) { + return; + } + $('#printLabel').prop("disabled", true); + + var id_list=[]; + + elements.each(function() { + let id = $(this).first().closest('tr').data('qsoID') + id_list.push(id); + }); + + $.ajax({ + url: base_url + 'index.php/labels/printids', + type: 'post', + data: {'id': JSON.stringify(id_list, null, 2) }, + xhr:function(){ + var xhr = new XMLHttpRequest(); + xhr.responseType= 'blob' + return xhr; + }, + success: function(data) { + if(data){ + var file = new Blob([data], {type: 'application/pdf'}); + var fileURL = URL.createObjectURL(file); + window.open(fileURL); + } + $('#printLabel').prop("disabled", false); + } + }); + }); $('#searchForm').on('reset', function(e) { setTimeout(function() { From cf05c9017dd7552ad20d24cac4eea82345cab3af Mon Sep 17 00:00:00 2001 From: Andreas <6977712+AndreasK79@users.noreply.github.com> Date: Tue, 27 Jun 2023 22:22:24 +0200 Subject: [PATCH 08/34] [Advanced Logbook] Unselects QSOs after printing label --- assets/js/sections/logbookadvanced.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/assets/js/sections/logbookadvanced.js b/assets/js/sections/logbookadvanced.js index 05156ac4..ecfad2ad 100644 --- a/assets/js/sections/logbookadvanced.js +++ b/assets/js/sections/logbookadvanced.js @@ -383,6 +383,9 @@ $(document).ready(function () { var fileURL = URL.createObjectURL(file); window.open(fileURL); } + $.each(id_list, function(k, v) { + unselectQsoID(this); + }); $('#printLabel').prop("disabled", false); } }); From aa139017d9a38f75335ec34d2a60219feb2a9ab4 Mon Sep 17 00:00:00 2001 From: Andreas <6977712+AndreasK79@users.noreply.github.com> Date: Wed, 28 Jun 2023 08:27:44 +0200 Subject: [PATCH 09/34] [Advanced Logbook] Received QSL (direct/bureau) can be set --- application/controllers/Logbookadvanced.php | 28 +++++++++++++++++ application/models/Logbookadvanced_model.php | 19 +++++++++++ assets/js/sections/logbookadvanced.js | 33 ++++++++++++++++++++ 3 files changed, 80 insertions(+) diff --git a/application/controllers/Logbookadvanced.php b/application/controllers/Logbookadvanced.php index 19daff37..b2ed5e60 100644 --- a/application/controllers/Logbookadvanced.php +++ b/application/controllers/Logbookadvanced.php @@ -184,4 +184,32 @@ class Logbookadvanced extends CI_Controller { header("Content-Type: application/json"); print json_encode($q); } + + function update_qsl_received() { + $this->load->model('logbookadvanced_model'); + + $ids = xss_clean($this->input->post('id')); + $user_id = (int)$this->session->userdata('user_id'); + $method = xss_clean($this->input->post('method')); + $sent = xss_clean($this->input->post('sent')); + + $status = $this->logbookadvanced_model->updateQslReceived($ids, $user_id, $method, $sent); + + $data = $this->logbookadvanced_model->getQsosForAdif($ids, $user_id); + + $results = $data->result('array'); + + $qsos = []; + foreach ($results as $data) { + $qsos[] = new QSO($data); + } + + $q = []; + foreach ($qsos as $qso) { + $q[] = $qso->toArray(); + } + + header("Content-Type: application/json"); + print json_encode($q); + } } \ No newline at end of file diff --git a/application/models/Logbookadvanced_model.php b/application/models/Logbookadvanced_model.php index f0571352..4fcdab99 100644 --- a/application/models/Logbookadvanced_model.php +++ b/application/models/Logbookadvanced_model.php @@ -136,6 +136,7 @@ class Logbookadvanced_model extends CI_Model { FROM " . $this->config->item('table_name') . " qsos INNER JOIN station_profile ON qsos.station_id = station_profile.station_id LEFT OUTER JOIN dxcc_entities ON qsos.COL_MY_DXCC = dxcc_entities.adif + LEFT OUTER JOIN lotw_users ON qsos.col_call=lotw_users.callsign WHERE station_profile.user_id = ? $where $order @@ -215,6 +216,24 @@ class Logbookadvanced_model extends CI_Model { } } + public function updateQslReceived($ids, $user_id, $method, $sent) { + $this->load->model('user_model'); + + if(!$this->user_model->authorize(2)) { + return array('message' => 'Error'); + } else { + $data = array( + 'COL_QSLRDATE' => date('Y-m-d H:i:s'), + 'COL_QSL_RCVD' => $sent, + 'COL_QSL_RCVD_VIA' => $method + ); + $this->db->where_in('COL_PRIMARY_KEY', json_decode($ids, true)); + $this->db->update($this->config->item('table_name'), $data); + + return array('message' => 'OK'); + } + } + public function updateQsoWithCallbookInfo($qsoID, $qso, $callbook) { $updatedData = array(); if (!empty($callbook['name']) && empty($qso['COL_NAME'])) { diff --git a/assets/js/sections/logbookadvanced.js b/assets/js/sections/logbookadvanced.js index ecfad2ad..8d688be0 100644 --- a/assets/js/sections/logbookadvanced.js +++ b/assets/js/sections/logbookadvanced.js @@ -349,8 +349,10 @@ $(document).ready(function () { handleQsl('I','', 'notRequired'); }); $('#receivedBureau').click(function (event) { + handleQslReceived('Y','B', 'receivedBureau'); }); $('#receivedDirect').click(function (event) { + handleQslReceived('Y','D', 'receivedDirect'); }); $('#printLabel').click(function (event) { @@ -428,6 +430,37 @@ $(document).ready(function () { }); } + function handleQslReceived(sent, method, tag) { + var elements = $('#qsoList tbody input:checked'); + var nElements = elements.length; + if (nElements == 0) { + return; + } + $('#'+tag).prop("disabled", true); + var id_list=[]; + elements.each(function() { + let id = $(this).first().closest('tr').data('qsoID') + id_list.push(id); + }); + $.ajax({ + url: base_url + 'index.php/logbookadvanced/update_qsl_received', + type: 'post', + data: {'id': JSON.stringify(id_list, null, 2), + 'sent' : sent, + 'method' : method + }, + success: function(data) { + if (data !== []) { + $.each(data, function(k, v) { + updateRow(this); + unselectQsoID(this.qsoID); + }); + } + $('#'+tag).prop("disabled", false); + } + }); + } + $('#checkBoxAll').change(function (event) { if (this.checked) { $('#qsoList tbody tr').each(function (i) { From e2b442d39ce0b51aaca51b1d6ea1b2bc31dfc401 Mon Sep 17 00:00:00 2001 From: Andreas <6977712+AndreasK79@users.noreply.github.com> Date: Wed, 28 Jun 2023 09:17:48 +0200 Subject: [PATCH 10/34] [Advanced Logbook] Fixed update query --- application/models/Logbookadvanced_model.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/application/models/Logbookadvanced_model.php b/application/models/Logbookadvanced_model.php index 4fcdab99..490450cf 100644 --- a/application/models/Logbookadvanced_model.php +++ b/application/models/Logbookadvanced_model.php @@ -132,10 +132,11 @@ class Logbookadvanced_model extends CI_Model { $order = $this->getSortorder($sortorder); $sql = " - SELECT *, dxcc_entities.name AS station_country + SELECT qsos.*, d2.*, lotw_users.*, station_profile.*, dxcc_entities.name AS station_country FROM " . $this->config->item('table_name') . " qsos INNER JOIN station_profile ON qsos.station_id = station_profile.station_id LEFT OUTER JOIN dxcc_entities ON qsos.COL_MY_DXCC = dxcc_entities.adif + LEFT OUTER JOIN dxcc_entities d2 ON qsos.COL_DXCC = d2.adif LEFT OUTER JOIN lotw_users ON qsos.col_call=lotw_users.callsign WHERE station_profile.user_id = ? $where From 4254a37642b47ca22c8926157dbc8232c9151bb3 Mon Sep 17 00:00:00 2001 From: Andreas <6977712+AndreasK79@users.noreply.github.com> Date: Wed, 28 Jun 2023 12:24:38 +0200 Subject: [PATCH 11/34] [Advanced Logbook] Added some error handling when printing labels --- application/controllers/Labels.php | 24 ++++++++++++++++++------ assets/js/sections/logbookadvanced.js | 17 ++++++++++++++++- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/application/controllers/Labels.php b/application/controllers/Labels.php index 908a23bd..9b813de0 100644 --- a/application/controllers/Labels.php +++ b/application/controllers/Labels.php @@ -92,7 +92,7 @@ class Labels extends CI_Controller { $this->load->model('labels_model'); $result = $this->labels_model->export_printrequestedids($ids); - $this->prepareLabel($result); + $this->prepareLabel($result, true); } public function print($station_id) { @@ -104,7 +104,7 @@ class Labels extends CI_Controller { $this->prepareLabel($result); } - function prepareLabel($qsos) { + function prepareLabel($qsos, $jscall = false) { $this->load->model('labels_model'); $label = $this->labels_model->getDefaultLabel(); @@ -124,12 +124,24 @@ class Labels extends CI_Controller { 'font-size' => $label->font_size )); } else { - $this->session->set_flashdata('error', 'You need to create a label and set it to be used for print.'); - redirect('labels'); + if ($jscall) { + header('Content-Type: application/json'); + echo json_encode(array('message' => 'You need to create a label and set it to be used for print.')); + return; + } else { + $this->session->set_flashdata('error', 'You need to create a label and set it to be used for print.'); + redirect('labels'); + } } } catch (\Throwable $th) { - $this->session->set_flashdata('error', 'Something went wrong! The label could not be generated. Check label size and font size.'); - redirect('labels'); + if ($jscall) { + header('Content-Type: application/json'); + echo json_encode(array('message' => 'Something went wrong! The label could not be generated. Check label size and font size.')); + return; + } else { + $this->session->set_flashdata('error', 'Something went wrong! The label could not be generated. Check label size and font size.'); + redirect('labels'); + } } define('FPDF_FONTPATH', './src/Label/font/'); diff --git a/assets/js/sections/logbookadvanced.js b/assets/js/sections/logbookadvanced.js index 8813af4e..f447c8d2 100644 --- a/assets/js/sections/logbookadvanced.js +++ b/assets/js/sections/logbookadvanced.js @@ -389,7 +389,22 @@ $(document).ready(function () { unselectQsoID(this); }); $('#printLabel').prop("disabled", false); - } + }, + error: function (data) { + BootstrapDialog.alert({ + title: 'ERROR', + message: 'Something went wrong with label print. Go to labels and check if you have defined a label, and that it is set for print!', + type: BootstrapDialog.TYPE_DANGER, + closable: false, + draggable: false, + callback: function (result) { + } + }); + $.each(id_list, function(k, v) { + unselectQsoID(this); + }); + $('#printLabel').prop("disabled", false); + }, }); }); From dec43405936d9ac9d6d46d4c712001aada6f4133 Mon Sep 17 00:00:00 2001 From: Andreas <6977712+AndreasK79@users.noreply.github.com> Date: Wed, 28 Jun 2023 12:26:46 +0200 Subject: [PATCH 12/34] [Advanced Logbook] Added collapsable filters and actions --- application/views/logbookadvanced/index.php | 70 +++++++++++---------- 1 file changed, 38 insertions(+), 32 deletions(-) diff --git a/application/views/logbookadvanced/index.php b/application/views/logbookadvanced/index.php index 230df578..45539220 100644 --- a/application/views/logbookadvanced/index.php +++ b/application/views/logbookadvanced/index.php @@ -15,7 +15,9 @@
+
" method="post"> +
@@ -164,41 +166,47 @@
-
- - -
-
-
- - -
+
- +
+ +
With selected : - - - - - - - - - - - - - - + + + + + + + + + + + + + +
+
+
+
+ + + + + + +
+
+ @@ -231,6 +239,4 @@
- - - + \ No newline at end of file From ca611dee737ad10d1b63ed60ec56cf6d2b71b6f5 Mon Sep 17 00:00:00 2001 From: phl0 Date: Thu, 29 Jun 2023 09:46:01 +0200 Subject: [PATCH 13/34] Add option to mark QSL RX from pic upload window --- .../language/english/general_words_lang.php | 3 +- .../language/german/general_words_lang.php | 1 + application/views/view_log/qso.php | 42 ++++++++++++------- 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/application/language/english/general_words_lang.php b/application/language/english/general_words_lang.php index 6dc3b456..2b15e688 100644 --- a/application/language/english/general_words_lang.php +++ b/application/language/english/general_words_lang.php @@ -55,6 +55,7 @@ $lang['general_word_lotw'] = 'Logbook of the World'; $lang['general_edit_qso'] = 'Edit QSO'; $lang['general_mark_qsl_rx_bureau'] = 'Mark QSL Received (Bureau)'; $lang['general_mark_qsl_rx_direct'] = 'Mark QSL Received (Direct)'; +$lang['general_mark_qsl_rx_electronic'] = 'Mark QSL Received (Electronic)'; $lang['general_mark_qsl_tx_bureau'] = 'Mark QSL Sent (Bureau)'; $lang['general_mark_qsl_tx_direct'] = 'Mark QSL Sent (Direct)'; @@ -138,4 +139,4 @@ $lang['northamerica'] = 'North America'; $lang['oceania'] = 'Oceania'; $lang['southamerica'] = 'South America'; -$lang['gen_band_selection'] = 'Band selection'; \ No newline at end of file +$lang['gen_band_selection'] = 'Band selection'; diff --git a/application/language/german/general_words_lang.php b/application/language/german/general_words_lang.php index 61865b04..8930dddf 100644 --- a/application/language/german/general_words_lang.php +++ b/application/language/german/general_words_lang.php @@ -55,6 +55,7 @@ $lang['general_word_lotw'] = 'Logbook of the World'; $lang['general_edit_qso'] = 'QSO bearbeiten'; $lang['general_mark_qsl_rx_bureau'] = 'Markiere QSL erhalten (Büro)'; $lang['general_mark_qsl_rx_direct'] = 'Markiere QSL erhalten (Direkt)'; +$lang['general_mark_qsl_rx_electronic'] = 'Markiere QSL erhalten (Elektronisch)'; $lang['general_mark_qsl_tx_bureau'] = 'Markiere QSL gesendet (Büro)'; $lang['general_mark_qsl_tx_direct'] = 'Markiere QSL gesendet (Direkt)'; diff --git a/application/views/view_log/qso.php b/application/views/view_log/qso.php index 0071fc06..8c61953d 100644 --- a/application/views/view_log/qso.php +++ b/application/views/view_log/qso.php @@ -507,25 +507,39 @@

-
-
+
+
+ +
-
- - -
+
+ + +
-
- - -
+
+ + +
- + - + -
- +
+ + + COL_QSL_RCVD != 'Y') { ?> +
+

+ +

+ +

+ +
+ +
From 2eafb03bde9d9322ac13dd7123eb424a1269e824 Mon Sep 17 00:00:00 2001 From: phl0 Date: Thu, 29 Jun 2023 12:06:46 +0200 Subject: [PATCH 14/34] Show buttons regardless of QSL state --- application/views/view_log/qso.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/application/views/view_log/qso.php b/application/views/view_log/qso.php index 8c61953d..c23ad147 100644 --- a/application/views/view_log/qso.php +++ b/application/views/view_log/qso.php @@ -529,7 +529,6 @@
- COL_QSL_RCVD != 'Y') { ?>

@@ -538,7 +537,6 @@

- From 35a2c46783ccfd9371ee3677a2f1aec748d30c1c Mon Sep 17 00:00:00 2001 From: Peter Goodhall Date: Thu, 29 Jun 2023 11:26:40 +0100 Subject: [PATCH 15/34] Time to bump the version number to 2.4.4 --- install/config/config.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/config/config.php b/install/config/config.php index 70f1741f..c1f01bdb 100644 --- a/install/config/config.php +++ b/install/config/config.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.4"; $config['directory'] = "%directory%"; $config['callbook'] = "hamqth"; // Options are hamqth or qrz From cd5ff2f99a3d0165ec7380ada7b35a95f1d02810 Mon Sep 17 00:00:00 2001 From: phl0 Date: Thu, 29 Jun 2023 12:43:16 +0200 Subject: [PATCH 16/34] Add spinner to show progress / action --- application/views/view_log/qso.php | 6 +++--- assets/js/sections/common.js | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/application/views/view_log/qso.php b/application/views/view_log/qso.php index c23ad147..458a95c4 100644 --- a/application/views/view_log/qso.php +++ b/application/views/view_log/qso.php @@ -530,11 +530,11 @@
-

+

-

+

-

+

diff --git a/assets/js/sections/common.js b/assets/js/sections/common.js index ceb493e5..e2be8bc2 100644 --- a/assets/js/sections/common.js +++ b/assets/js/sections/common.js @@ -1,4 +1,6 @@ function qsl_rcvd(id, method) { + $(".ld-ext-right-"+method).addClass('running'); + $(".ld-ext-right-"+method).prop('disabled', true); $.ajax({ url: base_url + 'index.php/qso/qsl_rcvd_ajax', type: 'post', @@ -6,6 +8,8 @@ function qsl_rcvd(id, method) { 'method': method }, success: function(data) { + $(".ld-ext-right-"+method).removeClass('running'); + $(".ld-ext-right-"+method).prop('disabled', false); if (data.message == 'OK') { $("#qsl_" + id).find("span:eq(1)").attr('class', 'qsl-green'); // Paints arrow green $(".qsl_rcvd_" + id).remove(); // removes choice from menu From c368dca5365705e8709074a6e5ce2b44837416d2 Mon Sep 17 00:00:00 2001 From: Andreas <6977712+AndreasK79@users.noreply.github.com> Date: Thu, 29 Jun 2023 13:50:55 +0200 Subject: [PATCH 17/34] [Awards] Fix error when no bands are selected for POTA, SOTA and WWFF --- application/models/Pota.php | 2 ++ application/models/Sota.php | 2 ++ application/models/Wwff.php | 2 ++ 3 files changed, 6 insertions(+) diff --git a/application/models/Pota.php b/application/models/Pota.php index 117a8c42..1c5c8a40 100644 --- a/application/models/Pota.php +++ b/application/models/Pota.php @@ -15,6 +15,8 @@ class Pota extends CI_Model { $bandslots = $this->bands->get_worked_bands('pota'); + if(!$bandslots) return null; + $this->db->where_in("station_id", $logbooks_locations_array); $this->db->where_in("col_band", $bandslots); $this->db->order_by("COL_POTA_REF", "ASC"); diff --git a/application/models/Sota.php b/application/models/Sota.php index 6d47334e..46d7e5f5 100644 --- a/application/models/Sota.php +++ b/application/models/Sota.php @@ -15,6 +15,8 @@ class Sota extends CI_Model { $bandslots = $this->bands->get_worked_bands('sota'); + if(!$bandslots) return null; + $this->db->where_in("station_id", $logbooks_locations_array); $this->db->where_in("col_band", $bandslots); $this->db->order_by("COL_SOTA_REF", "ASC"); diff --git a/application/models/Wwff.php b/application/models/Wwff.php index 93908d7e..e15584c3 100644 --- a/application/models/Wwff.php +++ b/application/models/Wwff.php @@ -15,6 +15,8 @@ class Wwff extends CI_Model { $bandslots = $this->bands->get_worked_bands('wwff'); + if(!$bandslots) return null; + $this->db->where_in("station_id", $logbooks_locations_array); $this->db->where_in("col_band", $bandslots); $this->db->order_by("COL_WWFF_REF", "ASC"); From 10d7739ea2c20d6d50a535a8b9fd997efa248837 Mon Sep 17 00:00:00 2001 From: Andreas <6977712+AndreasK79@users.noreply.github.com> Date: Thu, 29 Jun 2023 14:08:57 +0200 Subject: [PATCH 18/34] [Search] Fixes search when no dxcc is set on qso --- application/controllers/Logbook.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/controllers/Logbook.php b/application/controllers/Logbook.php index d1d797e2..6c5d7675 100644 --- a/application/controllers/Logbook.php +++ b/application/controllers/Logbook.php @@ -772,7 +772,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); From e82a866611db85b4f274a4066645e69089c22022 Mon Sep 17 00:00:00 2001 From: phl0 Date: Thu, 29 Jun 2023 14:57:19 +0200 Subject: [PATCH 19/34] Brush up layout --- application/views/view_log/qso.php | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/application/views/view_log/qso.php b/application/views/view_log/qso.php index 458a95c4..a918a3ef 100644 --- a/application/views/view_log/qso.php +++ b/application/views/view_log/qso.php @@ -517,26 +517,30 @@ + + + + +
- - - -
+ +

+

-

+ -

- -

+ +
+
From 7e836149ff55fe6d0db8c6526688c37cc9e1671d Mon Sep 17 00:00:00 2001 From: phl0 Date: Thu, 29 Jun 2023 17:53:18 +0200 Subject: [PATCH 20/34] Add buttons for outgoing QSL --- application/views/view_log/qso.php | 16 +++++++++++++--- assets/js/sections/common.js | 16 ++++++++++++---- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/application/views/view_log/qso.php b/application/views/view_log/qso.php index a918a3ef..3807efe8 100644 --- a/application/views/view_log/qso.php +++ b/application/views/view_log/qso.php @@ -534,13 +534,23 @@

- + - + - +
+
+

+

+
+ + + + + +
diff --git a/assets/js/sections/common.js b/assets/js/sections/common.js index e2be8bc2..2464589c 100644 --- a/assets/js/sections/common.js +++ b/assets/js/sections/common.js @@ -1,6 +1,6 @@ function qsl_rcvd(id, method) { - $(".ld-ext-right-"+method).addClass('running'); - $(".ld-ext-right-"+method).prop('disabled', true); + $(".ld-ext-right-r-"+method).addClass('running'); + $(".ld-ext-right-r-"+method).prop('disabled', true); $.ajax({ url: base_url + 'index.php/qso/qsl_rcvd_ajax', type: 'post', @@ -8,8 +8,8 @@ function qsl_rcvd(id, method) { 'method': method }, success: function(data) { - $(".ld-ext-right-"+method).removeClass('running'); - $(".ld-ext-right-"+method).prop('disabled', false); + $(".ld-ext-right-r-"+method).removeClass('running'); + $(".ld-ext-right-r-"+method).prop('disabled', false); if (data.message == 'OK') { $("#qsl_" + id).find("span:eq(1)").attr('class', 'qsl-green'); // Paints arrow green $(".qsl_rcvd_" + id).remove(); // removes choice from menu @@ -43,6 +43,8 @@ function qsl_sent(id, method) { // Function: qsl_requested // Marks QSL card requested against the QSO. function qsl_requested(id, method) { + $(".ld-ext-right-t-"+method).addClass('running'); + $(".ld-ext-right-t-"+method).prop('disabled', true); $.ajax({ url: base_url + 'index.php/qso/qsl_requested_ajax', type: 'post', @@ -50,6 +52,8 @@ function qsl_requested(id, method) { 'method': method }, success: function(data) { + $(".ld-ext-right-t-"+method).removeClass('running'); + $(".ld-ext-right-t-"+method).prop('disabled', false); if (data.message == 'OK') { $("#qsl_" + id).find("span:eq(0)").attr('class', 'qsl-yellow'); // Paints arrow yellow } @@ -63,6 +67,8 @@ function qsl_requested(id, method) { // Function: qsl_ignore // Marks QSL card ignore against the QSO. function qsl_ignore(id, method) { + $(".ld-ext-right-ignore").addClass('running'); + $(".ld-ext-right-ignore").prop('disabled', true); $.ajax({ url: base_url + 'index.php/qso/qsl_ignore_ajax', type: 'post', @@ -70,6 +76,8 @@ function qsl_ignore(id, method) { 'method': method }, success: function(data) { + $(".ld-ext-right-ignore").removeClass('running'); + $(".ld-ext-right-ignore").prop('disabled', false); if (data.message == 'OK') { $("#qsl_" + id).find("span:eq(0)").attr('class', 'qsl-grey'); // Paints arrow grey } From 34c0a925f2746e37a702f11ab2bb1dca74e1cb04 Mon Sep 17 00:00:00 2001 From: Andreas <6977712+AndreasK79@users.noreply.github.com> Date: Thu, 29 Jun 2023 18:59:12 +0200 Subject: [PATCH 21/34] [Advanced Logbook] Added eQSL/LoTW filter and DXCC/CQ/IOTA lookup --- application/controllers/Logbookadvanced.php | 4 + application/models/Logbookadvanced_model.php | 18 +++++ application/views/logbookadvanced/index.php | 49 +++++++++++- assets/js/sections/common.js | 82 ++++++++++++-------- assets/js/sections/logbookadvanced.js | 6 +- 5 files changed, 124 insertions(+), 35 deletions(-) diff --git a/application/controllers/Logbookadvanced.php b/application/controllers/Logbookadvanced.php index b2ed5e60..736fc077 100644 --- a/application/controllers/Logbookadvanced.php +++ b/application/controllers/Logbookadvanced.php @@ -106,6 +106,10 @@ class Logbookadvanced extends CI_Controller { 'state' => xss_clean($this->input->post('state')), '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')), ); $qsos = []; diff --git a/application/models/Logbookadvanced_model.php b/application/models/Logbookadvanced_model.php index 490450cf..d30f7b8a 100644 --- a/application/models/Logbookadvanced_model.php +++ b/application/models/Logbookadvanced_model.php @@ -56,6 +56,24 @@ class Logbookadvanced_model extends CI_Model { $binding[] = $searchCriteria['qslReceived']; } + if ($searchCriteria['lotwSent'] !== '') { + $conditions[] = "COL_LOTW_QSL_SENT = ?"; + $binding[] = $searchCriteria['lotwSent']; + } + if ($searchCriteria['lotwReceived'] !== '') { + $conditions[] = "COL_LOTW_QSL_RCVD = ?"; + $binding[] = $searchCriteria['lotwReceived']; + } + + if ($searchCriteria['eqslSent'] !== '') { + $conditions[] = "COL_EQSL_QSL_SENT = ?"; + $binding[] = $searchCriteria['eqslSent']; + } + if ($searchCriteria['eqslReceived'] !== '') { + $conditions[] = "COL_EQSL_QSL_RCVD = ?"; + $binding[] = $searchCriteria['eqslReceived']; + } + if ($searchCriteria['iota'] !== '') { $conditions[] = "COL_IOTA = ?"; $binding[] = $searchCriteria['iota']; diff --git a/application/views/logbookadvanced/index.php b/application/views/logbookadvanced/index.php index 45539220..671ba95c 100644 --- a/application/views/logbookadvanced/index.php +++ b/application/views/logbookadvanced/index.php @@ -144,7 +144,9 @@ -
+
+
+
- +
+ + +
+
+ + +
+
+ + +
+
+ + +
diff --git a/assets/js/sections/common.js b/assets/js/sections/common.js index ceb493e5..94d04727 100644 --- a/assets/js/sections/common.js +++ b/assets/js/sections/common.js @@ -358,7 +358,7 @@ function validateLocator(locator) { } // This displays the dialog with the form and it's where the resulttable is displayed -function spawnLookupModal() { +function spawnLookupModal(searchphrase, searchtype) { $.ajax({ url: base_url + 'index.php/lookup', type: 'post', @@ -372,38 +372,22 @@ function spawnLookupModal() { onshown: function(dialog) { $('#quicklookuptype').change(function(){ var type = $('#quicklookuptype').val(); - if (type == "dxcc") { - $('#quicklookupdxcc').show(); - $('#quicklookupiota').hide(); - $('#quicklookupcqz').hide(); - $('#quicklookupwas').hide(); - $('#quicklookuptext').hide(); - } else if (type == "iota") { - $('#quicklookupiota').show(); - $('#quicklookupdxcc').hide(); - $('#quicklookupcqz').hide(); - $('#quicklookupwas').hide(); - $('#quicklookuptext').hide(); - } else if (type == "vucc" || type == "sota" || type == "wwff") { - $('#quicklookuptext').show(); - $('#quicklookupiota').hide(); - $('#quicklookupdxcc').hide(); - $('#quicklookupcqz').hide(); - $('#quicklookupwas').hide(); - } else if (type == "cq") { - $('#quicklookupcqz').show(); - $('#quicklookupiota').hide(); - $('#quicklookupdxcc').hide(); - $('#quicklookupwas').hide(); - $('#quicklookuptext').hide(); - } else if (type == "was") { - $('#quicklookupwas').show(); - $('#quicklookupcqz').hide(); - $('#quicklookupiota').hide(); - $('#quicklookupdxcc').hide(); - $('#quicklookuptext').hide(); - } + changeLookupType(type); }); + if (searchtype !== undefined) { + $('#quicklookuptype').val(searchtype); + if (searchtype == 'dxcc') { + $("#quicklookupdxcc").val(searchphrase); + } else if (searchtype == 'iota') { + $("#quicklookupiota").val(searchphrase); + } else if (searchtype == 'cq') { + $("#quicklookupcqz").val(searchphrase); + } else { + $("#quicklookuptext").val(searchphrase); + } + changeLookupType(searchtype); + getLookupResult(this.form); + } }, buttons: [{ label: 'Close', @@ -416,6 +400,40 @@ function spawnLookupModal() { }); } +function changeLookupType(type) { + if (type == "dxcc") { + $('#quicklookupdxcc').show(); + $('#quicklookupiota').hide(); + $('#quicklookupcqz').hide(); + $('#quicklookupwas').hide(); + $('#quicklookuptext').hide(); + } else if (type == "iota") { + $('#quicklookupiota').show(); + $('#quicklookupdxcc').hide(); + $('#quicklookupcqz').hide(); + $('#quicklookupwas').hide(); + $('#quicklookuptext').hide(); + } else if (type == "vucc" || type == "sota" || type == "wwff") { + $('#quicklookuptext').show(); + $('#quicklookupiota').hide(); + $('#quicklookupdxcc').hide(); + $('#quicklookupcqz').hide(); + $('#quicklookupwas').hide(); + } else if (type == "cq") { + $('#quicklookupcqz').show(); + $('#quicklookupiota').hide(); + $('#quicklookupdxcc').hide(); + $('#quicklookupwas').hide(); + $('#quicklookuptext').hide(); + } else if (type == "was") { + $('#quicklookupwas').show(); + $('#quicklookupcqz').hide(); + $('#quicklookupiota').hide(); + $('#quicklookupdxcc').hide(); + $('#quicklookuptext').hide(); + } +} + // This function executes the call to the backend for fetching queryresult and displays the table in the dialog function getLookupResult() { $(".ld-ext-right").addClass('running'); diff --git a/assets/js/sections/logbookadvanced.js b/assets/js/sections/logbookadvanced.js index f447c8d2..85e7d2b9 100644 --- a/assets/js/sections/logbookadvanced.js +++ b/assets/js/sections/logbookadvanced.js @@ -187,7 +187,11 @@ $(document).ready(function () { gridsquare: this.gridsquare.value, state: this.state.value, qsoresults: this.qsoResults.value, - sats: this.sats.value + sats: this.sats.value, + lotwSent: this.lotwSent.value, + lotwReceived: this.lotwReceived.value, + eqslSent: this.eqslSent.value, + eqslReceived: this.eqslReceived.value, }, dataType: 'json', success: function (data) { From f4296b2c24b9e03fb99015c6d613a0cea527feeb Mon Sep 17 00:00:00 2001 From: phl0 Date: Thu, 29 Jun 2023 22:05:04 +0200 Subject: [PATCH 22/34] Add error message for no outstanding QO-100 QSOs --- application/models/Stations.php | 4 ++-- application/views/webadif/export.php | 29 +++++++++++++++++++++------- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/application/models/Stations.php b/application/models/Stations.php index 7d9e8823..dca8cd88 100644 --- a/application/models/Stations.php +++ b/application/models/Stations.php @@ -372,14 +372,14 @@ class Stations extends CI_Model { $sql=" SELECT station_profile.station_id, station_profile.station_profile_name, station_profile.station_callsign, notc.c notcount, totc.c totcount FROM station_profile - INNER JOIN ( + LEFT OUTER JOIN ( SELECT qsos.station_id, COUNT(qsos.COL_PRIMARY_KEY) c FROM %s qsos LEFT JOIN webadif ON qsos.COL_PRIMARY_KEY = webadif.qso_id WHERE webadif.qso_id IS NULL AND qsos.COL_SAT_NAME = 'QO-100' GROUP BY qsos.station_id ) notc ON station_profile.station_id = notc.station_id - INNER JOIN ( + LEFT JOIN ( SELECT qsos.station_id, COUNT(qsos.COL_PRIMARY_KEY) c FROM %s qsos WHERE qsos.COL_SAT_NAME = 'QO-100' diff --git a/application/views/webadif/export.php b/application/views/webadif/export.php index 11756f21..f968d582 100644 --- a/application/views/webadif/export.php +++ b/application/views/webadif/export.php @@ -24,6 +24,11 @@ result()) { + $queuedqsos = 0; + foreach ($station_profile->result() as $count) { // Fills the table with the data + $queuedqsos += $count->notcount; + } + if ($queuedqsos > 0) { ?>

You need to set a QO-100 Dx Club API key in your station profile. Only station profiles with an API Key are displayed.

Warning This might take a while as QSO uploads are processed sequentially.

@@ -41,15 +46,25 @@ '; foreach ($station_profile->result() as $station) { // Fills the table with the data - echo ''; - echo '' . $station->station_profile_name . ''; - echo '' . $station->station_callsign . ''; - echo '' . $station->notcount . ''; - echo '' . $station->totcount . ''; - echo ''; - echo ''; + if ($station->notcount != null) { + echo ''; + echo '' . $station->station_profile_name . ''; + echo '' . $station->station_callsign . ''; + echo '' . $station->notcount . ''; + echo '' . $station->totcount . ''; + echo ''; + echo ''; + } } echo ''; + } else { + ?> +
+ There are currently no outstanding QSOs that need to be uploaded to the QO-100 Dx Club's API.
+ Go ahead and turn on your QO-100 station! +
+ Date: Fri, 30 Jun 2023 07:01:03 +0200 Subject: [PATCH 23/34] Prevent .git being served by Webserver Securitything: Prevent .git-directory being served/exposed --- .htaccess.sample | 2 ++ 1 file changed, 2 insertions(+) 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 From 5d4681696a8c5c1a203995ece12cdd9346deee62 Mon Sep 17 00:00:00 2001 From: Andreas <6977712+AndreasK79@users.noreply.github.com> Date: Fri, 30 Jun 2023 07:59:12 +0200 Subject: [PATCH 24/34] [Advanced Logbook] Added missing changes --- src/QSLManager/QSO.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/QSLManager/QSO.php b/src/QSLManager/QSO.php index 98a4a614..5d85a1be 100644 --- a/src/QSLManager/QSO.php +++ b/src/QSLManager/QSO.php @@ -188,9 +188,9 @@ class QSO $this->lotw = $this->getLotwString($data, $custom_date_format); $this->eqsl = $this->getEqslString($data, $custom_date_format); - $this->cqzone = ($data['COL_CQZ'] === null) ? '' : $data['COL_CQZ']; + $this->cqzone = ($data['COL_CQZ'] === null) ? '' : ''.$data['COL_CQZ'].''; $this->state = ($data['COL_STATE'] === null) ? '' :$data['COL_STATE']; - $this->dxcc = ($data['name'] === null) ? '- NONE -' : ucwords(strtolower($data['name']), "- (/"); + $this->dxcc = ($data['name'] === null) ? '- NONE -' : ''.ucwords(strtolower($data['name']), "- (/").''; $this->iota = ($data['COL_IOTA'] === null) ? '' : $this->getIotaLink($data['COL_IOTA']); if (array_key_exists('end', $data)) { $this->end = ($data['end'] === null) ? null : DateTime::createFromFormat("Y-m-d", $data['end'], new DateTimeZone('UTC')); @@ -961,7 +961,7 @@ class QSO private function getIotaLink($iota) : string { if ($iota !== '') { - return '' . $iota . ''; + return ''.$iota.' '; } return ''; } From cb95b3a5e1c677f5537f56451beb1933014fb703 Mon Sep 17 00:00:00 2001 From: Andreas <6977712+AndreasK79@users.noreply.github.com> Date: Fri, 30 Jun 2023 11:54:39 +0200 Subject: [PATCH 25/34] [QSL Image Upload] Fixed some errors in the upload --- application/controllers/Qsl.php | 4 ++++ application/views/interface_assets/footer.php | 4 ++-- application/views/view_log/qso.php | 6 +++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/application/controllers/Qsl.php b/application/controllers/Qsl.php index 2602fa78..fb039215 100644 --- a/application/controllers/Qsl.php +++ b/application/controllers/Qsl.php @@ -66,11 +66,15 @@ class Qsl extends CI_Controller { if (isset($_FILES['qslcardfront']) && $_FILES['qslcardfront']['name'] != "" && $_FILES['qslcardfront']['error'] == 0) { $result['front'] = $this->uploadQslCardFront($qsoid); + } else { + $result['front']['status'] = ''; } if (isset($_FILES['qslcardback']) && $_FILES['qslcardback']['name'] != "" && $_FILES['qslcardback']['error'] == 0) { $result['back'] = $this->uploadQslCardBack($qsoid); + } else { + $result['back']['status'] = ''; } header("Content-type: application/json"); diff --git a/application/views/interface_assets/footer.php b/application/views/interface_assets/footer.php index cb3e3c63..df7aef74 100644 --- a/application/views/interface_assets/footer.php +++ b/application/views/interface_assets/footer.php @@ -2398,7 +2398,7 @@ function viewEqsl(picture, callsign) { $("#qslcardfront").val(null); } - } else { + } else if (data.status.front.status != '') { $("#qslupload").append('
×Front QSL Card:' + data.status.front.error + '
'); @@ -2436,7 +2436,7 @@ function viewEqsl(picture, callsign) { $(".carouselExampleIndicators").carousel(); $("#qslcardback").val(null); } - } else { + } else if (data.status.back.status != '') { $("#qslupload").append('
×\nBack QSL Card: ' + data.status.back.error + '
'); diff --git a/application/views/view_log/qso.php b/application/views/view_log/qso.php index 3807efe8..6595ded1 100644 --- a/application/views/view_log/qso.php +++ b/application/views/view_log/qso.php @@ -507,9 +507,9 @@

+
-
@@ -528,9 +528,9 @@
- +
- +

From cfbe4971d061fd8a86fda5175425faa5aee08870 Mon Sep 17 00:00:00 2001 From: Andreas <6977712+AndreasK79@users.noreply.github.com> Date: Fri, 30 Jun 2023 12:50:58 +0200 Subject: [PATCH 26/34] [QSL Image Carousel] Fixed carousel in QSO popup --- application/views/view_log/qso.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/views/view_log/qso.php b/application/views/view_log/qso.php index 6595ded1..29fbe52f 100644 --- a/application/views/view_log/qso.php +++ b/application/views/view_log/qso.php @@ -574,13 +574,13 @@ '; + echo '
'; } ?>
From 38dee35937ae2ca3c6ef4302b46d7d6b529ead5e Mon Sep 17 00:00:00 2001 From: Andreas <6977712+AndreasK79@users.noreply.github.com> Date: Fri, 30 Jun 2023 23:36:35 +0200 Subject: [PATCH 27/34] [Advanced Logbook] Added QSL image popup and indicator --- application/controllers/Qsl.php | 7 ++++ application/models/Logbookadvanced_model.php | 12 ++++++- application/views/qslcard/qslcarousel.php | 38 ++++++++++++++++++++ assets/js/sections/common.js | 28 +++++++++++++++ assets/js/sections/logbookadvanced.js | 4 +-- src/QSLManager/QSO.php | 3 ++ 6 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 application/views/qslcard/qslcarousel.php diff --git a/application/controllers/Qsl.php b/application/controllers/Qsl.php index fb039215..89df8947 100644 --- a/application/controllers/Qsl.php +++ b/application/controllers/Qsl.php @@ -174,6 +174,13 @@ class Qsl extends CI_Controller { echo json_encode($result); } + function viewQsl() { + $cleanid = $this->security->xss_clean($this->input->post('id')); + $this->load->model('Qsl_model'); + $data['qslimages'] = $this->Qsl_model->getQslForQsoId($cleanid); + $this->load->view('qslcard/qslcarousel', $data); + } + } // Functions for storage, these need shifted to a libary to use across Cloudlog diff --git a/application/models/Logbookadvanced_model.php b/application/models/Logbookadvanced_model.php index d30f7b8a..cc361181 100644 --- a/application/models/Logbookadvanced_model.php +++ b/application/models/Logbookadvanced_model.php @@ -119,6 +119,11 @@ class Logbookadvanced_model extends CI_Model { INNER JOIN station_profile ON qsos.station_id=station_profile.station_id LEFT OUTER JOIN dxcc_entities ON qsos.col_dxcc=dxcc_entities.adif LEFT OUTER JOIN lotw_users ON qsos.col_call=lotw_users.callsign + LEFT OUTER JOIN ( + select count(*) as qslcount, qsoid + from qsl_images + group by qsoid + ) x on qsos.COL_PRIMARY_KEY = x.qsoid WHERE station_profile.user_id = ? $where ORDER BY qsos.COL_TIME_ON desc, qsos.COL_PRIMARY_KEY desc @@ -150,12 +155,17 @@ class Logbookadvanced_model extends CI_Model { $order = $this->getSortorder($sortorder); $sql = " - SELECT qsos.*, d2.*, lotw_users.*, station_profile.*, dxcc_entities.name AS station_country + SELECT qsos.*, d2.*, lotw_users.*, station_profile.*, x.qslcount, dxcc_entities.name AS station_country FROM " . $this->config->item('table_name') . " qsos INNER JOIN station_profile ON qsos.station_id = station_profile.station_id LEFT OUTER JOIN dxcc_entities ON qsos.COL_MY_DXCC = dxcc_entities.adif LEFT OUTER JOIN dxcc_entities d2 ON qsos.COL_DXCC = d2.adif LEFT OUTER JOIN lotw_users ON qsos.col_call=lotw_users.callsign + LEFT OUTER JOIN ( + select count(*) as qslcount, qsoid + from qsl_images + group by qsoid + ) x on qsos.COL_PRIMARY_KEY = x.qsoid WHERE station_profile.user_id = ? $where $order diff --git a/application/views/qslcard/qslcarousel.php b/application/views/qslcard/qslcarousel.php new file mode 100644 index 00000000..78aad712 --- /dev/null +++ b/application/views/qslcard/qslcarousel.php @@ -0,0 +1,38 @@ + + + + Previous + + + + Next + + \ No newline at end of file diff --git a/assets/js/sections/common.js b/assets/js/sections/common.js index effd35b8..030a298f 100644 --- a/assets/js/sections/common.js +++ b/assets/js/sections/common.js @@ -487,3 +487,31 @@ function getDxccResult(dxcc, name) { } }); } + +function displayQsl(id) { + $.ajax({ + url: base_url + 'index.php/qsl/viewQsl', + type: 'post', + data: { + id: id, + }, + success: function (html) { + BootstrapDialog.show({ + title: 'QSL Card', + size: BootstrapDialog.SIZE_WIDE, + cssClass: 'lookup-dialog', + nl2br: false, + message: html, + onshown: function(dialog) { + + }, + buttons: [{ + label: 'Close', + action: function (dialogItself) { + dialogItself.close(); + } + }] + }); + } + }); +} diff --git a/assets/js/sections/logbookadvanced.js b/assets/js/sections/logbookadvanced.js index 85e7d2b9..16c76ea3 100644 --- a/assets/js/sections/logbookadvanced.js +++ b/assets/js/sections/logbookadvanced.js @@ -43,9 +43,9 @@ function updateRow(qso) { cells.eq(c++).html(qso.lotw); } cells.eq(c++).text(qso.qslMessage); - cells.eq(c++).text(qso.dxcc); + cells.eq(c++).html(qso.dxcc); cells.eq(c++).text(qso.state); - cells.eq(c++).text(qso.cqzone); + cells.eq(c++).html(qso.cqzone); cells.eq(c++).html(qso.iota); $('[data-toggle="tooltip"]').tooltip(); diff --git a/src/QSLManager/QSO.php b/src/QSLManager/QSO.php index 5d85a1be..0e96988a 100644 --- a/src/QSLManager/QSO.php +++ b/src/QSLManager/QSO.php @@ -317,6 +317,9 @@ class QSO } } $qslstring .= '">▼
'; + if ($data['qslcount'] != null) { + $qslstring .= ' '; + } return $qslstring; } From 0c0e9219a3fecc0ffa0e34c36bab51d3fc235ed5 Mon Sep 17 00:00:00 2001 From: Hugo Silva Date: Sat, 1 Jul 2023 17:25:21 +0100 Subject: [PATCH 28/34] When importing LOTW certs, consider full day for end date --- application/models/LotwCert.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/application/models/LotwCert.php b/application/models/LotwCert.php index 1d1fd03d..1dab4515 100644 --- a/application/models/LotwCert.php +++ b/application/models/LotwCert.php @@ -6,7 +6,7 @@ class LotwCert extends CI_Model { |-------------------------------------------------------------------------- | Function: lotw_certs |-------------------------------------------------------------------------- - | + | | Returns all lotw_certs for a selected user via the $user_id parameter | */ @@ -17,7 +17,7 @@ class LotwCert extends CI_Model { $this->db->join('dxcc_entities','lotw_certs.cert_dxcc_id = dxcc_entities.adif','left'); $this->db->order_by('cert_dxcc', 'ASC'); $query = $this->db->get('lotw_certs'); - + return $query; } @@ -46,7 +46,7 @@ class LotwCert extends CI_Model { 'date_created' => $date_created, 'date_expires' => $date_expires, 'qso_start_date' => $qso_start_date, - 'qso_end_date' => $qso_end_date, + 'qso_end_date' => $qso_end_date . ' 23:59:59', 'cert_key' => $cert_key, 'cert' => $general_cert, ); @@ -60,7 +60,7 @@ class LotwCert extends CI_Model { 'date_created' => $date_created, 'date_expires' => $date_expires, 'qso_start_date' => $qso_start_date, - 'qso_end_date' => $qso_end_date, + 'qso_end_date' => $qso_end_date . ' 23:59:59', 'cert_key' => $cert_key, 'cert' => $general_cert ); @@ -90,9 +90,9 @@ class LotwCert extends CI_Model { return "Updated"; } - + function empty_table($table) { - $this->db->empty_table($table); + $this->db->empty_table($table); } function lotw_cert_expired($user_id, $date) { From 08765a8bd81d278a35c11b4b1c43c734b021dab4 Mon Sep 17 00:00:00 2001 From: phl0 Date: Sat, 1 Jul 2023 23:06:31 +0200 Subject: [PATCH 29/34] Update qso_end_date of existing certs where time is 00:00:00 --- application/config/migration.php | 2 +- application/migrations/125_lotw_enddates.php | 21 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 application/migrations/125_lotw_enddates.php diff --git a/application/config/migration.php b/application/config/migration.php index 55613c99..ceb663f7 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'] = 125; /* |-------------------------------------------------------------------------- diff --git a/application/migrations/125_lotw_enddates.php b/application/migrations/125_lotw_enddates.php new file mode 100644 index 00000000..e09e26d3 --- /dev/null +++ b/application/migrations/125_lotw_enddates.php @@ -0,0 +1,21 @@ +db->table_exists('lotw_certs')) { + $sql = 'UPDATE lotw_certs SET qso_end_date = DATE_ADD(qso_end_date, INTERVAL 24*60*60 -1 SECOND) WHERE TIME(qso_end_date) = "00:00:00";'; + $this->db->query($sql); + } + } + + public function down() + { + if ($this->db->table_exists('lotw_certs')) { + $sql = 'UPDATE lotw_certs SET qso_end_date = DATE_SUB(qso_end_date, INTERVAL 24*60*60 -1 SECOND) WHERE TIME(qso_end_date) = "23:59:59";'; + $this->db->query($sql); + } + } +} From a6da3c1277562c96152a8916b5e76c6fc2767341 Mon Sep 17 00:00:00 2001 From: Andreas <6977712+AndreasK79@users.noreply.github.com> Date: Sun, 2 Jul 2023 11:37:48 +0200 Subject: [PATCH 30/34] [QSO Popup] Load QSL carousel from separate view file --- application/views/view_log/qso.php | 39 +----------------------------- 1 file changed, 1 insertion(+), 38 deletions(-) diff --git a/application/views/view_log/qso.php b/application/views/view_log/qso.php index 29fbe52f..18bb3a31 100644 --- a/application/views/view_log/qso.php +++ b/application/views/view_log/qso.php @@ -555,44 +555,7 @@
- - - - Previous - - - - Next - -
+ load->view('qslcard/qslcarousel', $qslimages); ?>
From 36fdce5ecab9a845b75d827d705cf4deab9c170f Mon Sep 17 00:00:00 2001 From: Andreas <6977712+AndreasK79@users.noreply.github.com> Date: Sun, 2 Jul 2023 16:50:06 +0200 Subject: [PATCH 31/34] [Gridsquare Map] Added display of coordinates, gridsquare, distance and bearing when mouseover --- application/controllers/Gridmap.php | 4 + application/views/gridmap/index.php | 23 +++++- assets/js/leaflet/geocoding.js | 121 ++++++++++++++++++++++++++++ assets/js/sections/gridmap.js | 2 + 4 files changed, 148 insertions(+), 2 deletions(-) create mode 100644 assets/js/leaflet/geocoding.js diff --git a/application/controllers/Gridmap.php b/application/controllers/Gridmap.php index d4e32e6a..7594b98d 100644 --- a/application/controllers/Gridmap.php +++ b/application/controllers/Gridmap.php @@ -11,6 +11,9 @@ 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(); @@ -27,6 +30,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?' ]; diff --git a/application/views/gridmap/index.php b/application/views/gridmap/index.php index 93a2cdeb..74ebaefc 100644 --- a/application/views/gridmap/index.php +++ b/application/views/gridmap/index.php @@ -6,9 +6,9 @@ padding: 6px 8px; font: 14px Arial, Helvetica, sans-serif; background: white; - background: rgba(255, 255, 255, 0.8); line-height: 24px; color: #555; + border-radius: 10px; } .legend h4 { text-align: center; @@ -25,7 +25,13 @@ height: 18px; float: left; margin: 0 8px 0 0; - opacity: 0.7; +} +.coordinates { + justify-content: center; + align-items: stretch; +} +.cohidden { + display:none; }
@@ -94,10 +100,23 @@
+
+
Latitude:
+
+
Longitude:
+
+
Gridsquare:
+
+
Distance:
+
+
Bearing:
+
+