From 198389a764bc8d59a8ca218c96043190d2779c9b Mon Sep 17 00:00:00 2001 From: Andreas <6977712+AndreasK79@users.noreply.github.com> Date: Thu, 20 Jul 2023 21:42:45 +0200 Subject: [PATCH 01/39] [Bandmap] First integration of bandmap from @int2001 --- application/controllers/Bandmap.php | 23 +++ application/language/english/menu_lang.php | 1 + application/language/german/menu_lang.php | 1 + application/views/bandmap/index.php | 12 ++ application/views/interface_assets/footer.php | 9 + application/views/interface_assets/header.php | 12 +- assets/css/general.css | 50 ++++++ assets/js/sections/bandmap.js | 166 ++++++++++++++++++ 8 files changed, 269 insertions(+), 5 deletions(-) create mode 100644 application/controllers/Bandmap.php create mode 100644 application/views/bandmap/index.php create mode 100644 assets/js/sections/bandmap.js diff --git a/application/controllers/Bandmap.php b/application/controllers/Bandmap.php new file mode 100644 index 00000000..62c19b90 --- /dev/null +++ b/application/controllers/Bandmap.php @@ -0,0 +1,23 @@ +load->model('user_model'); + if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); } + } + + function index() { + $footerData = []; + $footerData['scripts'] = [ + 'assets/js/sections/bandmap.js', + ]; + + $data['page_title'] = "Bandmap"; + $this->load->view('interface_assets/header', $data); + $this->load->view('bandmap/index'); + $this->load->view('interface_assets/footer', $footerData); + } +} diff --git a/application/language/english/menu_lang.php b/application/language/english/menu_lang.php index b4951a41..7b72a7f6 100644 --- a/application/language/english/menu_lang.php +++ b/application/language/english/menu_lang.php @@ -13,6 +13,7 @@ $lang['menu_live_qso'] = 'Live QSO'; $lang['menu_post_qso'] = 'Post QSO'; $lang['menu_live_contest_logging'] = 'Live Contest Logging'; $lang['menu_post_contest_logging'] = 'Post Contest Logging'; +$lang['menu_bandmap'] = 'Bandmap'; $lang['menu_view_qsl'] = 'View QSL'; $lang['menu_view_eqsl'] = 'View eQSL'; diff --git a/application/language/german/menu_lang.php b/application/language/german/menu_lang.php index 05fbb07d..1efedc0a 100644 --- a/application/language/german/menu_lang.php +++ b/application/language/german/menu_lang.php @@ -13,6 +13,7 @@ $lang['menu_live_qso'] = 'Live QSO'; $lang['menu_post_qso'] = 'Zeitversetztes QSO'; $lang['menu_live_contest_logging'] = 'Live Contest Logging'; $lang['menu_post_contest_logging'] = 'Zeitversetztes Contest Logging'; +$lang['menu_bandmap'] = 'Bandmap'; $lang['menu_view_qsl'] = 'QSL Ansicht'; $lang['menu_view_eqsl'] = 'eQSL Ansicht'; diff --git a/application/views/bandmap/index.php b/application/views/bandmap/index.php new file mode 100644 index 00000000..2561c811 --- /dev/null +++ b/application/views/bandmap/index.php @@ -0,0 +1,12 @@ +
+ +
+ +

+ +
+
+

+

+
+
diff --git a/application/views/interface_assets/footer.php b/application/views/interface_assets/footer.php index db2d2fb2..030f28a0 100644 --- a/application/views/interface_assets/footer.php +++ b/application/views/interface_assets/footer.php @@ -2911,6 +2911,15 @@ function viewEqsl(picture, callsign) { +uri->segment(1) == "bandmap") { ?> + + + + + + + + uri->segment(1) == "awards") { // Get Date format if($this->session->userdata('user_date_format')) { diff --git a/application/views/interface_assets/header.php b/application/views/interface_assets/header.php index df346f2b..6166f617 100644 --- a/application/views/interface_assets/header.php +++ b/application/views/interface_assets/header.php @@ -81,6 +81,8 @@ + + @@ -179,7 +181,7 @@ - + @@ -282,8 +284,8 @@ $oqrs_requests = $CI->oqrs_model->oqrs_requests($location_list); - - oqrs_model->oqrs_requests($location_list); - + diff --git a/assets/css/general.css b/assets/css/general.css index 70bfbfa1..50f6f767 100644 --- a/assets/css/general.css +++ b/assets/css/general.css @@ -458,3 +458,53 @@ div#station_logbooks_linked_table_paginate { .lotw_info_red { background-image: linear-gradient(to bottom, #3fb618, red); } + + +.highcharts-strong { + font-weight: bold; +} + +.highcharts-figure, +.highcharts-data-table table { + min-width: 320px; + max-width: 100%; + margin: 1em auto; + max-height: calc(100vh - 200px) !important; + overflow-y: auto; +} + +.highcharts-data-table table { + font-family: Verdana, sans-serif; + border-collapse: collapse; + border: 1px solid #ebebeb; + margin: 10px auto; + text-align: center; + width: 100%; + max-width: 500px; +} + +.highcharts-data-table caption { + padding: 1em 0; + font-size: 1.2em; + color: #555; +} + +.highcharts-data-table th { + font-weight: 600; + padding: 0.5em; +} + +.highcharts-data-table td, +.highcharts-data-table th, +.highcharts-data-table caption { + padding: 0.5em; +} + +.highcharts-data-table thead tr, +.highcharts-data-table tr:nth-child(even) { + background: #f8f8f8; +} + +.highcharts-data-table tr:hover { + background: #f1f7ff; +} \ No newline at end of file diff --git a/assets/js/sections/bandmap.js b/assets/js/sections/bandmap.js new file mode 100644 index 00000000..91ee9429 --- /dev/null +++ b/assets/js/sections/bandmap.js @@ -0,0 +1,166 @@ +$(function() { + (function(H) { + H.seriesTypes.timeline.prototype.distributeDL = function() { + var series = this, + dataLabelsOptions = series.options.dataLabels, + options, + pointDLOptions, + newOptions = {}, + visibilityIndex = 1, + j = 2, + distance; + + series.points.forEach(function(point, i) { + distance = dataLabelsOptions.distance; + + if (point.visible && !point.isNull) { + options = point.options; + pointDLOptions = point.options.dataLabels; + + if (!series.hasRendered) { + point.userDLOptions = H.merge({}, pointDLOptions); + } + + /* + if (i === j || i === j + 1) { + distance = distance * 2.5 + + if (i === j + 1) { + j += 4 + } + } + */ + if (i % 6 == 0) { distance = distance * 1; } + if (i % 6 == 1) { distance = distance * -1; } + if (i % 6 == 2) { distance = distance * 2; } + if (i % 6 == 3) { distance = distance * -2; } + if (i % 6 == 4) { distance = distance * 3; } + if (i % 6 == 5) { distance = distance * -3; } + + newOptions[series.chart.inverted ? 'x' : 'y'] = distance; + // newOptions[series.chart.inverted ? 'x' : 'y'] = dataLabelsOptions.alternate && (visibilityIndex % 3 != 0) ? -distance : distance; + + options.dataLabels = H.merge(newOptions, point.userDLOptions); + visibilityIndex++; + } + }); + } + }(Highcharts)); + + var dxcluster_provider = 'https://dxc.jo30.de/dxcache'; + var bandMapChart; + var color = ifDarkModeThemeReturn('white', 'grey'); + + function render_chart (band,spot_data) { + let chartObject=Highcharts.chart('bandmap', { + chart: { + type: 'timeline', + zoomType: 'x', + inverted: true, + backgroundColor: getBodyBackground(), + height: '800px' + }, + accessibility: { + screenReaderSection: { + beforeChartFormat: '
{chartTitle}
' + + '
{typeDescription}
' + + '
{chartSubtitle}
' + + '
{chartLongdesc}
' + + '
{viewTableButton}
' + }, + point: { + valueDescriptionFormat: '{index}. {point.label}. {point.description}.' + } + }, + xAxis: { + visible: true, + type: 'linear', + labels: { + style: { + color: color, + } + } + }, + yAxis: { + visible: false, + }, + title: { + text: band, + style: { + color: color + } + }, + series: [ { data: spot_data } ] + }); + return chartObject; + } + + function SortByQrg(a, b){ + var a = a.frequency; + var b = b.frequency; + return ((a< b) ? -1 : ((a> b) ? 1 : 0)); + } + + function reduce_spots(spotobject) { + let unique=[]; + spotobject.forEach((single) => { + if (!spotobject.find((item) => ((item.spotted == single.spotted) && (item.frequency == single.frequency) && (Date.parse(item.when)>Date.parse(single.when))))) { + unique.push(single); + } + }); + return unique; + } + + function convert2high(spotobject) { + let ret={}; + ret.name=spotobject.spotted; + ret.x=spotobject.frequency; + ret.description=spotobject.frequency + " / "+Math.round( (Date.now() - Date.parse(spotobject.when)) / 1000 / 60)+"min. ago"; + ret.dataLabels={}; + ret.dataLabels.alternate=true; + ret.dataLabels.distance=200; + return ret; + } + + function update_chart(lowerQrg,upperQrg,maxAgeMinutes) { + $.ajax({ + url: dxcluster_provider + "/spots", + cache: false, + dataType: "json" + }).done(function(dxspots) { + spots4chart=[]; + dxspots.sort(SortByQrg); + dxspots=reduce_spots(dxspots); + dxspots.forEach((single) => { + if ( (single.frequency >= lowerQrg) && (single.frequency <= upperQrg) && (Date.parse(single.when)>(Date.now() - 1000 * 60 * maxAgeMinutes)) ) { + spots4chart.push(convert2high(single)); + } + }); + // console.log(spots4chart); + bandMapChart.series[0].setData(spots4chart); + bandMapChart.redraw(); + }); + } + + + function set_chart(lowerQrg,upperQrg,maxAgeMinutes) { + $.ajax({ + url: dxcluster_provider + "/spots", + cache: false, + dataType: "json" + }).done(function(dxspots) { + spots4chart=[]; + dxspots.sort(SortByQrg); + dxspots=reduce_spots(dxspots); + dxspots.forEach((single) => { + if ( (single.frequency >= lowerQrg) && (single.frequency <= upperQrg) && (Date.parse(single.when)>(Date.now() - 1000 * 60 * maxAgeMinutes)) ) { + spots4chart.push(convert2high(single)); + } + }); + bandMapChart=render_chart('20m',spots4chart); + }); + } + + set_chart(14000,14350,30); + setInterval(function () { update_chart(14000,14350,30); },60000); +}); From 99e46bf1fc0b8ec8992c5c410893deb5177ef28e Mon Sep 17 00:00:00 2001 From: int2001 Date: Fri, 21 Jul 2023 04:48:28 +0000 Subject: [PATCH 02/39] Added Controller for DXCluster --- application/controllers/Dxcluster.php | 36 +++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 application/controllers/Dxcluster.php diff --git a/application/controllers/Dxcluster.php b/application/controllers/Dxcluster.php new file mode 100644 index 00000000..703106f9 --- /dev/null +++ b/application/controllers/Dxcluster.php @@ -0,0 +1,36 @@ +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('logbook_model'); + } + + + function qrg_lookup($qrg) { + $call_found=$this->logbook_model->qrg_lookup($qrg); + if ($call_found) { + header('Content-Type: application/json'); + echo json_encode($call_found, JSON_PRETTY_PRINT); + } else { + echo '{ error: "not found" }'; + } + } + + function call($call) { + + $date = date('Ymd', time()); + $dxcc = $this->logbook_model->dxcc_lookup($call, $date); + + if ($dxcc) { + header('Content-Type: application/json'); + echo json_encode($dxcc, JSON_PRETTY_PRINT); + } else { + echo '{ error: "not found" }'; + } + } +} From 45161142ef66bd24eb72be9f1975e1814495ee50 Mon Sep 17 00:00:00 2001 From: int2001 Date: Fri, 21 Jul 2023 05:45:56 +0000 Subject: [PATCH 03/39] Implemented enrichment of spot --- application/controllers/Dxcluster.php | 8 ++--- application/models/Logbook_model.php | 36 +++++++++++++++++++ application/views/interface_assets/footer.php | 4 +-- 3 files changed, 42 insertions(+), 6 deletions(-) diff --git a/application/controllers/Dxcluster.php b/application/controllers/Dxcluster.php index 703106f9..1bb0d3e3 100644 --- a/application/controllers/Dxcluster.php +++ b/application/controllers/Dxcluster.php @@ -12,12 +12,12 @@ class Dxcluster extends CI_Controller { function qrg_lookup($qrg) { - $call_found=$this->logbook_model->qrg_lookup($qrg); + $call_found=$this->logbook_model->dxc_qrg_lookup($this->security->xss_clean($qrg)); + header('Content-Type: application/json'); if ($call_found) { - header('Content-Type: application/json'); echo json_encode($call_found, JSON_PRETTY_PRINT); } else { - echo '{ error: "not found" }'; + echo '{ "error": "not found" }'; } } @@ -30,7 +30,7 @@ class Dxcluster extends CI_Controller { header('Content-Type: application/json'); echo json_encode($dxcc, JSON_PRETTY_PRINT); } else { - echo '{ error: "not found" }'; + echo '{ "error": "not found" }'; } } } diff --git a/application/models/Logbook_model.php b/application/models/Logbook_model.php index cec2811f..2fd68597 100755 --- a/application/models/Logbook_model.php +++ b/application/models/Logbook_model.php @@ -3993,6 +3993,42 @@ class Logbook_model extends CI_Model { return false; } + public function dxc_qrg_lookup($qrg, $maxage = 120) { + if ( ($this->optionslib->get_option('dxcache_url') != '') && (is_numeric($qrg)) ) { + $dxcache_url = $this->optionslib->get_option('dxcache_url').'/spot/'.$qrg; + + // CURL Functions + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $dxcache_url); + curl_setopt($ch, CURLOPT_USERAGENT, 'Cloudlog DXLookup'); + curl_setopt($ch, CURLOPT_HEADER, false); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + $jsonraw = curl_exec($ch); + curl_close($ch); + $json = json_decode($jsonraw); + + // Create JSON object + if (strlen($jsonraw)>20) { + $datetimecurrent = new DateTime("now", new DateTimeZone('UTC')); // Today's Date/Time + $datetimespot = new DateTime($json->when, new DateTimeZone('UTC')); + $spotage = $datetimecurrent->diff($datetimespot); + $minutes = $spotage->days * 24 * 60; + $minutes += $spotage->h * 60; + $minutes += $spotage->i; + $json->age=$minutes; + if ($minutes<=$maxage) { + $dxcc=$this->dxcc_lookup($json->spotted,date('Ymd', time())); + $json->dxcc=$dxcc; + return ($json); + } else { + return ''; + } + } else { + return ''; + } + } + } + } function validateADIFDate($date, $format = 'Ymd') diff --git a/application/views/interface_assets/footer.php b/application/views/interface_assets/footer.php index db2d2fb2..b9acafc4 100644 --- a/application/views/interface_assets/footer.php +++ b/application/views/interface_assets/footer.php @@ -937,10 +937,10 @@ $(document).on('keypress',function(e) { if ($this->optionslib->get_option('dxcache_url') != ''){ ?> +

+
+ + +
+

From e6668443714b47a689aee4a1d9615653b8e3cf99 Mon Sep 17 00:00:00 2001 From: int2001 Date: Fri, 21 Jul 2023 09:19:59 +0000 Subject: [PATCH 08/39] Modified Bandmap --- assets/js/sections/bandmap.js | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/assets/js/sections/bandmap.js b/assets/js/sections/bandmap.js index 23a0731f..d5de46f9 100644 --- a/assets/js/sections/bandmap.js +++ b/assets/js/sections/bandmap.js @@ -47,7 +47,6 @@ $(function() { } }(Highcharts)); - var dxcluster_provider = 'https://dxc.jo30.de/dxcache'; var bandMapChart; var color = ifDarkModeThemeReturn('white', 'grey'); @@ -123,9 +122,10 @@ $(function() { return ret; } - function update_chart(lowerQrg,upperQrg,maxAgeMinutes) { + function update_chart(band,maxAgeMinutes) { + let dxurl = dxcluster_provider + "/spots/" + band + "/" +maxAgeMinutes; $.ajax({ - url: dxcluster_provider + "/spots", + url: dxurl, cache: false, dataType: "json" }).done(function(dxspots) { @@ -133,9 +133,7 @@ $(function() { dxspots.sort(SortByQrg); dxspots=reduce_spots(dxspots); dxspots.forEach((single) => { - if ( (single.frequency >= lowerQrg) && (single.frequency <= upperQrg) && (Date.parse(single.when)>(Date.now() - 1000 * 60 * maxAgeMinutes)) ) { - spots4chart.push(convert2high(single)); - } + spots4chart.push(convert2high(single)); }); // console.log(spots4chart); bandMapChart.series[0].setData(spots4chart); @@ -144,9 +142,10 @@ $(function() { } - function set_chart(lowerQrg,upperQrg,maxAgeMinutes) { + function set_chart(band,maxAgeMinutes) { + let dxurl = dxcluster_provider + "/spots/" + band + "/" +maxAgeMinutes; $.ajax({ - url: dxcluster_provider + "/spots", + url: dxurl, cache: false, dataType: "json" }).done(function(dxspots) { @@ -154,14 +153,12 @@ $(function() { dxspots.sort(SortByQrg); dxspots=reduce_spots(dxspots); dxspots.forEach((single) => { - if ( (single.frequency >= lowerQrg) && (single.frequency <= upperQrg) && (Date.parse(single.when)>(Date.now() - 1000 * 60 * maxAgeMinutes)) ) { - spots4chart.push(convert2high(single)); - } + spots4chart.push(convert2high(single)); }); - bandMapChart=render_chart('20m',spots4chart); + bandMapChart=render_chart(band,spots4chart); }); } - set_chart(14000,14350,30); - setInterval(function () { update_chart(14000,14350,30); },60000); + set_chart($('#band option:selected').val(),30); + setInterval(function () { update_chart($('#band option:selected').val(),30); },60000); }); From c24a2fc1137594a064828612d043aaea8a06a6b1 Mon Sep 17 00:00:00 2001 From: int2001 Date: Fri, 21 Jul 2023 09:44:05 +0000 Subject: [PATCH 09/39] Changed hard-url to base_url --- application/views/interface_assets/footer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/views/interface_assets/footer.php b/application/views/interface_assets/footer.php index 2d755e2c..1acd0bc5 100644 --- a/application/views/interface_assets/footer.php +++ b/application/views/interface_assets/footer.php @@ -937,7 +937,7 @@ $(document).on('keypress',function(e) { if ($this->optionslib->get_option('dxcache_url') != ''){ ?>

From dc7abe462f962926548869f7d6126ea195aa061a Mon Sep 17 00:00:00 2001 From: int2001 Date: Fri, 21 Jul 2023 10:15:24 +0000 Subject: [PATCH 11/39] onChange-Trigger for Band // Errorhandling when there are no spots --- assets/js/sections/bandmap.js | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/assets/js/sections/bandmap.js b/assets/js/sections/bandmap.js index d5de46f9..327285c4 100644 --- a/assets/js/sections/bandmap.js +++ b/assets/js/sections/bandmap.js @@ -130,12 +130,14 @@ $(function() { dataType: "json" }).done(function(dxspots) { spots4chart=[]; - dxspots.sort(SortByQrg); - dxspots=reduce_spots(dxspots); - dxspots.forEach((single) => { - spots4chart.push(convert2high(single)); - }); - // console.log(spots4chart); + if (dxspots.length>1) { + dxspots.sort(SortByQrg); + dxspots=reduce_spots(dxspots); + dxspots.forEach((single) => { + spots4chart.push(convert2high(single)); + }); + } + bandMapChart.title.text=band; bandMapChart.series[0].setData(spots4chart); bandMapChart.redraw(); }); @@ -150,15 +152,20 @@ $(function() { dataType: "json" }).done(function(dxspots) { spots4chart=[]; - dxspots.sort(SortByQrg); - dxspots=reduce_spots(dxspots); - dxspots.forEach((single) => { - spots4chart.push(convert2high(single)); - }); + if (dxspots.length>1) { + dxspots.sort(SortByQrg); + dxspots=reduce_spots(dxspots); + dxspots.forEach((single) => { + spots4chart.push(convert2high(single)); + }); + } bandMapChart=render_chart(band,spots4chart); }); } set_chart($('#band option:selected').val(),30); setInterval(function () { update_chart($('#band option:selected').val(),30); },60000); + $("#band").on("change",function() { + set_chart($('#band option:selected').val(),30); + }); }); From 1dc278847c381b4e64136d027f67788647a6cab1 Mon Sep 17 00:00:00 2001 From: int2001 Date: Fri, 21 Jul 2023 10:24:21 +0000 Subject: [PATCH 12/39] Number of spots must be at least 1 spot to render/update --- assets/js/sections/bandmap.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/js/sections/bandmap.js b/assets/js/sections/bandmap.js index 327285c4..520d9fc0 100644 --- a/assets/js/sections/bandmap.js +++ b/assets/js/sections/bandmap.js @@ -130,7 +130,7 @@ $(function() { dataType: "json" }).done(function(dxspots) { spots4chart=[]; - if (dxspots.length>1) { + if (dxspots.length>0) { dxspots.sort(SortByQrg); dxspots=reduce_spots(dxspots); dxspots.forEach((single) => { @@ -152,7 +152,7 @@ $(function() { dataType: "json" }).done(function(dxspots) { spots4chart=[]; - if (dxspots.length>1) { + if (dxspots.length>0) { dxspots.sort(SortByQrg); dxspots=reduce_spots(dxspots); dxspots.forEach((single) => { From fb39d8ec0dd4f8df8611ca9bdc87152990d7aaf5 Mon Sep 17 00:00:00 2001 From: Andreas <6977712+AndreasK79@users.noreply.github.com> Date: Fri, 21 Jul 2023 13:27:13 +0200 Subject: [PATCH 13/39] [Bandmap] Added cat --- application/controllers/Bandmap.php | 5 +++ application/views/bandmap/index.php | 45 ++++++++++++--------- assets/js/sections/bandmap.js | 61 ++++++++++++++++++++++++++++- 3 files changed, 91 insertions(+), 20 deletions(-) diff --git a/application/controllers/Bandmap.php b/application/controllers/Bandmap.php index 1719d891..f8c7e26b 100644 --- a/application/controllers/Bandmap.php +++ b/application/controllers/Bandmap.php @@ -11,6 +11,11 @@ class Bandmap extends CI_Controller { } function index() { + $this->load->model('cat'); + $this->load->model('bands'); + $data['radios'] = $this->cat->radios(); + $data['bands'] = $this->bands->get_user_bands_for_qso_entry(); + $footerData = []; $footerData['scripts'] = [ 'assets/js/sections/bandmap.js', diff --git a/application/views/bandmap/index.php b/application/views/bandmap/index.php index 8e5d6d3c..a933678c 100644 --- a/application/views/bandmap/index.php +++ b/application/views/bandmap/index.php @@ -1,31 +1,38 @@ -
+

-
- +
+
+ + + + + +
- -
-

diff --git a/assets/js/sections/bandmap.js b/assets/js/sections/bandmap.js index 520d9fc0..dfd89c07 100644 --- a/assets/js/sections/bandmap.js +++ b/assets/js/sections/bandmap.js @@ -147,7 +147,7 @@ $(function() { function set_chart(band,maxAgeMinutes) { let dxurl = dxcluster_provider + "/spots/" + band + "/" +maxAgeMinutes; $.ajax({ - url: dxurl, + url: dxurl, cache: false, dataType: "json" }).done(function(dxspots) { @@ -169,3 +169,62 @@ $(function() { set_chart($('#band option:selected').val(),30); }); }); + +var updateFromCAT = function() { + if($('select.radios option:selected').val() != '0') { + radioID = $('select.radios option:selected').val(); + $.getJSON( "radio/json/" + radioID, function( data ) { + + if (data.error) { + if (data.error == 'not_logged_in') { + $(".radio_cat_state" ).remove(); + if($('.radio_login_error').length == 0) { + $('.messages').prepend('

'); + } + } + // Put future Errorhandling here + } else { + if($('.radio_login_error').length != 0) { + $(".radio_login_error" ).remove(); + } + var band = frequencyToBand(data.frequency); + + if (band !== $("#band").val()) { + $("#band").val(band); + $("#band").trigger("change"); + } + + var minutes = Math.floor(cat_timeout_interval / 60); + + if(data.updated_minutes_ago > minutes) { + $(".radio_cat_state" ).remove(); + if($('.radio_timeout_error').length == 0) { + $('.messages').prepend(''); + } else { + $('.radio_timeout_error').html('Radio connection timed-out: ' + $('select.radios option:selected').text() + ' data is ' + data.updated_minutes_ago + ' minutes old.'); + } + } else { + $(".radio_timeout_error" ).remove(); + text = 'TX: '+(Math.round(parseInt(data.frequency)/100)/10000).toFixed(4)+' MHz'; + if(data.mode != null) { + text = text+''+data.mode; + } + if(data.power != null && data.power != 0) { + text = text+''+data.power+' W'; + } + if (! $('#radio_cat_state').length) { + $('.messages').prepend(''); + } else { + $('#radio_cat_state').html(text); + } + } + } + }); + } +}; + +// Update frequency every three second +setInterval(updateFromCAT, 3000); + +// If a radios selected from drop down select radio update. +$('.radios').change(updateFromCAT); From 6c07da28ee8a7323a949ecc5384737796717417e Mon Sep 17 00:00:00 2001 From: int2001 Date: Fri, 21 Jul 2023 11:46:16 +0000 Subject: [PATCH 14/39] Added Settings for spot-age and de-continent --- application/controllers/Options.php | 12 ++++++++++ application/language/english/options_lang.php | 5 ++++ application/language/german/options_lang.php | 5 +++- application/views/options/dxcluster.php | 24 ++++++++++++++++++- 4 files changed, 44 insertions(+), 2 deletions(-) diff --git a/application/controllers/Options.php b/application/controllers/Options.php index c83bcf27..55e7551a 100644 --- a/application/controllers/Options.php +++ b/application/controllers/Options.php @@ -159,12 +159,24 @@ class Options extends CI_Controller { $this->load->library('form_validation'); $this->form_validation->set_rules('dxcache_url', 'URL of DXCache', 'valid_url'); + $this->form_validation->set_rules('dxcluster_maxage', 'Max Age of Spots', 'required'); + $this->form_validation->set_rules('dxcluster_decont', 'de continent', 'required'); if ($this->form_validation->run() == FALSE) { $this->load->view('interface_assets/header', $data); $this->load->view('options/dxcluster'); $this->load->view('interface_assets/footer'); } else { + $dxcluster_decont_update = $this->optionslib->update('dxcluster_decont', $this->input->post('dxcluster_decont'), 'yes'); + if($dxcluster_decont_update == TRUE) { + $this->session->set_flashdata('success', $this->lang->line('options_dxcluster_decont_changed_to').$this->input->post('dxcluster_decont')); + } + + $dxcluster_url_update = $this->optionslib->update('dxcluster_maxage', $this->input->post('dxcluster_maxage'), 'yes'); + if($dxcluster_maxage_update == TRUE) { + $this->session->set_flashdata('success', $this->lang->line('options_dxcluster_maxage_changed_to').$this->input->post('dxcluster_maxage')); + } + $dxcache_url_update = $this->optionslib->update('dxcache_url', $this->input->post('dxcache_url'), 'yes'); if($dxcache_url_update == TRUE) { $this->session->set_flashdata('success', $this->lang->line('options_dxcache_url_changed_to').$this->input->post('dxcache_url')); diff --git a/application/language/english/options_lang.php b/application/language/english/options_lang.php index 70814e49..da12f681 100644 --- a/application/language/english/options_lang.php +++ b/application/language/english/options_lang.php @@ -64,5 +64,10 @@ $lang['options_dxcluster_longtext'] = 'The Provider of the DXCluster-Cache. You $lang['options_dxcluster_hint'] = 'URL of the DXCluster-Cache. e.g. https://dxc.jo30.de/dxcache'; $lang['options_dxcluster_settings'] = 'DXCluster'; $lang['options_dxcache_url_changed_to'] = 'DXCluster Cache URL changed to '; +$lang['options_dxcluster_maxage'] = 'Maximum Age of spots taken care of'; +$lang['options_dxcluster_maxage_hint'] = 'The Age in Minutes of spots, that will be taken care at bandplan/lookup'; +$lang['options_dxcluster_decont'] = 'Show spots which are spotted from following continent'; +$lang['options_dxcluster_maxage_changed_to']='Maximum age of spots changed to '; +$lang['options_dxcluster_decont_changed_to']='de continent changed to '; $lang['options_save'] = 'Save'; diff --git a/application/language/german/options_lang.php b/application/language/german/options_lang.php index eee2cdfd..ec0886a1 100644 --- a/application/language/german/options_lang.php +++ b/application/language/german/options_lang.php @@ -64,6 +64,9 @@ $lang['options_dxcluster_longtext'] = 'Der Provider des DXCluster-Caches. Du kan $lang['options_dxcluster_hint'] = 'URL des DXCluster-Caches. z.B. https://dxc.jo30.de/dxcache'; $lang['options_dxcluster_settings'] = 'DXCluster'; $lang['options_dxcache_url_changed_to'] = 'DXCluster Cache URL geänder zu '; - +$lang['options_dxcluster_maxage'] = 'Maximales Alter bis zu dem Spots berücksichtigt werden'; +$lang['options_dxcluster_decont'] = 'Nur Spots berücksichtigen, die in folgendem Kontinent erfasst wurden'; +$lang['options_dxcluster_maxage_changed_to']='Maximal Spot-Alter geänder auf '; +$lang['options_dxcluster_decont_changed_to']='Spotterkontinent geändert auf '; $lang['options_save'] = 'Speichern'; diff --git a/application/views/options/dxcluster.php b/application/views/options/dxcluster.php index 645eb923..4d8d9a58 100644 --- a/application/views/options/dxcluster.php +++ b/application/views/options/dxcluster.php @@ -40,7 +40,29 @@
- +
+ + + +
+
+ + + +
+ From 355aef7af820005d5404c35f4a5752a7b0987bbd Mon Sep 17 00:00:00 2001 From: int2001 Date: Fri, 21 Jul 2023 12:17:28 +0000 Subject: [PATCH 15/39] Show Bandmap only in Menu, when setted up --- application/views/interface_assets/header.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/application/views/interface_assets/header.php b/application/views/interface_assets/header.php index 6166f617..cd0b2449 100644 --- a/application/views/interface_assets/header.php +++ b/application/views/interface_assets/header.php @@ -80,8 +80,10 @@ +optionslib->get_option('dxcache_url') != '') { ?> + From c62a4c70a0f3ef4bf38e34b3418b4bfd26c97cb9 Mon Sep 17 00:00:00 2001 From: int2001 Date: Fri, 21 Jul 2023 14:44:14 +0000 Subject: [PATCH 16/39] Added filtering on maxAge / de-cont to bandmap (apply settings) --- application/controllers/Dxcluster.php | 10 ++++++++-- application/models/Logbook_model.php | 10 ++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/application/controllers/Dxcluster.php b/application/controllers/Dxcluster.php index 807e3793..af10c8cf 100644 --- a/application/controllers/Dxcluster.php +++ b/application/controllers/Dxcluster.php @@ -11,8 +11,14 @@ class Dxcluster extends CI_Controller { } - function spots($band,$age = 60) { - $calls_found=$this->logbook_model->dxc_spotlist($band, $age); + function spots($band,$age = '', $de = '') { + if ($age == '') { + $age = $this->optionslib->get_option('dxcluster_maxage'); + } + if ($de == '') { + $de = $this->optionslib->get_option('dxcluster_decont'); + } + $calls_found=$this->logbook_model->dxc_spotlist($band, $age, $de); header('Content-Type: application/json'); if ($calls_found) { echo json_encode($calls_found, JSON_PRETTY_PRINT); diff --git a/application/models/Logbook_model.php b/application/models/Logbook_model.php index 704e5bad..a3327d22 100755 --- a/application/models/Logbook_model.php +++ b/application/models/Logbook_model.php @@ -3993,7 +3993,7 @@ class Logbook_model extends CI_Model { return false; } - public function dxc_spotlist($band = '20m',$maxage = 60) { + public function dxc_spotlist($band = '20m',$maxage = 60, $de = '') { $CI =& get_instance(); if ( ($this->optionslib->get_option('dxcache_url') != '') ) { $dxcache_url = $this->optionslib->get_option('dxcache_url').'/spots/'; @@ -4025,7 +4025,13 @@ class Logbook_model extends CI_Model { if ($minutes<=$maxage) { $dxcc=$this->dxcc_lookup($singlespot->spotter,date('Ymd', time())); $singlespot->dxcc_spotter=$dxcc; - array_push($spotsout,$singlespot); + if ($de != '') { + if ($de == $dxcc['cont']) { + array_push($spotsout,$singlespot); + } + } else { + array_push($spotsout,$singlespot); + } } } return ($spotsout); From a2304a8fe5de1df0c221c7aaf6d9694a439fb109 Mon Sep 17 00:00:00 2001 From: int2001 Date: Fri, 21 Jul 2023 16:05:38 +0000 Subject: [PATCH 17/39] Fixed a small bug at qso page (tick was missing) --- application/models/Logbook_model.php | 2 +- application/views/interface_assets/footer.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/application/models/Logbook_model.php b/application/models/Logbook_model.php index a3327d22..0909a2cc 100755 --- a/application/models/Logbook_model.php +++ b/application/models/Logbook_model.php @@ -4050,7 +4050,7 @@ class Logbook_model extends CI_Model { // CURL Functions $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $dxcache_url); - curl_setopt($ch, CURLOPT_USERAGENT, 'Cloudlog DXLookup'); + curl_setopt($ch, CURLOPT_USERAGENT, 'Cloudlog DXLookup by QRG'); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $jsonraw = curl_exec($ch); diff --git a/application/views/interface_assets/footer.php b/application/views/interface_assets/footer.php index 1acd0bc5..c1b15a73 100644 --- a/application/views/interface_assets/footer.php +++ b/application/views/interface_assets/footer.php @@ -937,7 +937,7 @@ $(document).on('keypress',function(e) { if ($this->optionslib->get_option('dxcache_url') != ''){ ?> + + +
+
+ +

+
+
+ + + + + +
+ +
+
DXCluster
+

+ + + + + + + + + + + + + +
/DXCC
+

+
+ +
diff --git a/assets/js/sections/bandmap_list.js b/assets/js/sections/bandmap_list.js new file mode 100644 index 00000000..91717e78 --- /dev/null +++ b/assets/js/sections/bandmap_list.js @@ -0,0 +1,100 @@ +$(function() { + + function SortByQrg(a, b){ + var a = a.frequency; + var b = b.frequency; + return ((a< b) ? -1 : ((a> b) ? 1 : 0)); + } + + + function fill_list(band,maxAgeMinutes) { + let dxurl = dxcluster_provider + "/spots/" + band + "/" +maxAgeMinutes; + $.ajax({ + url: dxurl, + cache: false, + dataType: "json" + }).done(function(dxspots) { + var table = $('.spottable').DataTable(); + table.clear(); + table.page.len(50); + table.order([1, 'asc']); + if (dxspots.length>0) { + dxspots.sort(SortByQrg); + dxspots.forEach((single) => { + var data = [[ single.when, single.frequency, single.spotted, single.dxcc_spotted.call ]]; + table.rows.add(data).draw(); + // add to datatable single + }); + } + }); + } + + fill_list($('#band option:selected').val(),30); + setInterval(function () { fill_list($('#band option:selected').val(),30); },60000); + $("#band").on("change",function() { + fill_list($('#band option:selected').val(),30); + }); + + + var updateFromCAT = function() { + if($('select.radios option:selected').val() != '0') { + radioID = $('select.radios option:selected').val(); + $.getJSON( "radio/json/" + radioID, function( data ) { + + if (data.error) { + if (data.error == 'not_logged_in') { + $(".radio_cat_state" ).remove(); + if($('.radio_login_error').length == 0) { + $('.messages').prepend(''); + } + } + // Put future Errorhandling here + } else { + if($('.radio_login_error').length != 0) { + $(".radio_login_error" ).remove(); + } + var band = frequencyToBand(data.frequency); + + if (band !== $("#band").val()) { + $("#band").val(band); + $("#band").trigger("change"); + } + + var minutes = Math.floor(cat_timeout_interval / 60); + + if(data.updated_minutes_ago > minutes) { + $(".radio_cat_state" ).remove(); + if($('.radio_timeout_error').length == 0) { + $('.messages').prepend(''); + } else { + $('.radio_timeout_error').html('Radio connection timed-out: ' + $('select.radios option:selected').text() + ' data is ' + data.updated_minutes_ago + ' minutes old.'); + } + } else { + $(".radio_timeout_error" ).remove(); + text = 'TX: '+(Math.round(parseInt(data.frequency)/100)/10000).toFixed(4)+' MHz'; + if(data.mode != null) { + text = text+''+data.mode; + } + if(data.power != null && data.power != 0) { + text = text+''+data.power+' W'; + } + if (! $('#radio_cat_state').length) { + $('.messages').prepend(''); + } else { + $('#radio_cat_state').html(text); + } + } + } + }); + } +}; + +// Update frequency every three second +// setInterval(updateFromCAT, 3000); + +// If a radios selected from drop down select radio update. +$('.radios').change(updateFromCAT); + +}); + + From c27f97defa7d81a16f66bb3a9c002e1036f27dae Mon Sep 17 00:00:00 2001 From: int2001 Date: Sun, 23 Jul 2023 06:12:11 +0000 Subject: [PATCH 24/39] Added highlighting on already worked and time-things --- application/controllers/Bandmap.php | 31 +++++++++++++++++++++++--- application/models/Dxcluster_model.php | 8 ++++++- application/views/bandmap/list.php | 3 ++- assets/js/sections/bandmap_list.js | 9 +++++++- 4 files changed, 45 insertions(+), 6 deletions(-) diff --git a/application/controllers/Bandmap.php b/application/controllers/Bandmap.php index e40363c8..e98d7470 100644 --- a/application/controllers/Bandmap.php +++ b/application/controllers/Bandmap.php @@ -33,14 +33,39 @@ class Bandmap extends CI_Controller { $data['radios'] = $this->cat->radios(); $data['bands'] = $this->bands->get_user_bands_for_qso_entry(); - $footerData = []; + $footerData = []; $footerData['scripts'] = [ - 'assets/js/sections/bandmap_list.js', + 'assets/js/moment.min.js', + 'assets/js/datetime-moment.js', + 'assets/js/sections/bandmap_list.js' ]; + $CI =& get_instance(); + // Get Date format + if($CI->session->userdata('user_date_format')) { + // If Logged in and session exists + $pageData['custom_date_format'] = $CI->session->userdata('user_date_format'); + } else { + // Get Default date format from /config/cloudlog.php + $pageData['custom_date_format'] = $CI->config->item('qso_date_format'); + } + + switch ($pageData['custom_date_format']) { + case "d/m/y": $pageData['custom_date_format'] = 'DD/MM/YY'; break; + case "d/m/Y": $pageData['custom_date_format'] = 'DD/MM/YYYY'; break; + case "m/d/y": $pageData['custom_date_format'] = 'MM/DD/YY'; break; + case "m/d/Y": $pageData['custom_date_format'] = 'MM/DD/YYYY'; break; + case "d.m.Y": $pageData['custom_date_format'] = 'DD.MM.YYYY'; break; + case "y/m/d": $pageData['custom_date_format'] = 'YY/MM/DD'; break; + case "Y-m-d": $pageData['custom_date_format'] = 'YYYY-MM-DD'; break; + case "M d, Y": $pageData['custom_date_format'] = 'MMM DD, YYYY'; break; + case "M d, y": $pageData['custom_date_format'] = 'MMM DD, YY'; break; + default: $pageData['custom_date_format'] = 'DD/MM/YYYY'; + } + $data['page_title'] = "DXCluster"; $this->load->view('interface_assets/header', $data); - $this->load->view('bandmap/list'); + $this->load->view('bandmap/list',$pageData); $this->load->view('interface_assets/footer', $footerData); } } diff --git a/application/models/Dxcluster_model.php b/application/models/Dxcluster_model.php index fcb61472..fc9b4551 100644 --- a/application/models/Dxcluster_model.php +++ b/application/models/Dxcluster_model.php @@ -7,6 +7,12 @@ class Dxcluster_model extends CI_Model { $this->load->helper(array('psr4_autoloader')); $CI =& get_instance(); if ( ($this->optionslib->get_option('dxcache_url') != '') ) { + if($CI->session->userdata('user_date_format')) { + $custom_date_format = $CI->session->userdata('user_date_format'); + } else { + $custom_date_format = $CI->config->item('qso_date_format'); + } + $dxcache_url = $this->optionslib->get_option('dxcache_url').'/spots/'.$band; $CI->load->model('logbooks_model'); $CI->load->model('logbook_model'); @@ -39,7 +45,7 @@ class Dxcluster_model extends CI_Model { $minutes += $spotage->h * 60; $minutes += $spotage->i; $singlespot->age=$minutes; - + $singlespot->when_pretty=date($custom_date_format . " H:i", strtotime($singlespot->when)); if ($minutes<=$maxage) { if (!(property_exists($singlespot,'dxcc_spotted'))) { // Check if we already have dxcc of spotted diff --git a/application/views/bandmap/list.php b/application/views/bandmap/list.php index 4f7a55c4..e742863a 100644 --- a/application/views/bandmap/list.php +++ b/application/views/bandmap/list.php @@ -1,6 +1,7 @@ @@ -37,7 +38,7 @@
DXCluster

- +
diff --git a/assets/js/sections/bandmap_list.js b/assets/js/sections/bandmap_list.js index 91717e78..2129fbe5 100644 --- a/assets/js/sections/bandmap_list.js +++ b/assets/js/sections/bandmap_list.js @@ -21,7 +21,13 @@ $(function() { if (dxspots.length>0) { dxspots.sort(SortByQrg); dxspots.forEach((single) => { - var data = [[ single.when, single.frequency, single.spotted, single.dxcc_spotted.call ]]; + // var data = [[ single.when_pretty, single.frequency, single.spotted, single.dxcc_spotted.call ]]; + var data=[]; + data[0]=[]; + data[0].push(single.when_pretty); + data[0].push(single.frequency); + data[0].push((single.worked_call ?'' : '')+single.spotted+(single.worked_call ? '' : '')); + data[0].push(single.dxcc_spotted.entity); table.rows.add(data).draw(); // add to datatable single }); @@ -89,6 +95,7 @@ $(function() { } }; +$.fn.dataTable.moment(custom_date_format + ' HH:mm'); // Update frequency every three second // setInterval(updateFromCAT, 3000); From 32073482b618c97dedcf1c23eaf40790ddf83789 Mon Sep 17 00:00:00 2001 From: int2001 Date: Sun, 23 Jul 2023 08:55:45 +0000 Subject: [PATCH 25/39] Highlighting when updated/fresh spot --- application/controllers/Bandmap.php | 2 +- application/views/bandmap/list.php | 9 +++++++++ assets/js/sections/bandmap_list.js | 29 ++++++++++++++++++++++++----- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/application/controllers/Bandmap.php b/application/controllers/Bandmap.php index e98d7470..e600e365 100644 --- a/application/controllers/Bandmap.php +++ b/application/controllers/Bandmap.php @@ -36,7 +36,7 @@ class Bandmap extends CI_Controller { $footerData = []; $footerData['scripts'] = [ 'assets/js/moment.min.js', - 'assets/js/datetime-moment.js', + 'assets/js/datetime-moment.js', 'assets/js/sections/bandmap_list.js' ]; diff --git a/application/views/bandmap/list.php b/application/views/bandmap/list.php index e742863a..a193a5ac 100644 --- a/application/views/bandmap/list.php +++ b/application/views/bandmap/list.php @@ -4,6 +4,15 @@ var custom_date_format = ""; + +

diff --git a/assets/js/sections/bandmap_list.js b/assets/js/sections/bandmap_list.js index 2129fbe5..75deb82f 100644 --- a/assets/js/sections/bandmap_list.js +++ b/assets/js/sections/bandmap_list.js @@ -15,29 +15,48 @@ $(function() { dataType: "json" }).done(function(dxspots) { var table = $('.spottable').DataTable(); - table.clear(); table.page.len(50); - table.order([1, 'asc']); + let oldtable=table.data(); + table.clear(); if (dxspots.length>0) { dxspots.sort(SortByQrg); dxspots.forEach((single) => { - // var data = [[ single.when_pretty, single.frequency, single.spotted, single.dxcc_spotted.call ]]; var data=[]; data[0]=[]; data[0].push(single.when_pretty); data[0].push(single.frequency); data[0].push((single.worked_call ?'' : '')+single.spotted+(single.worked_call ? '' : '')); data[0].push(single.dxcc_spotted.entity); - table.rows.add(data).draw(); - // add to datatable single + if (oldtable.length > 0) { + let update=false; + oldtable.each( function (srow) { + if (JSON.stringify(srow) === JSON.stringify(data[0])) { + update=true; + } + }); + if (!update) { // Sth. Fresh? So highlight + table.rows.add(data).draw().nodes().to$().addClass("fresh bg-info"); + } else { + table.rows.add(data).draw(); + } + } else { + table.rows.add(data).draw(); + } }); + setTimeout(function(){ // Remove Highlights within 15sec + $(".fresh").removeClass("bg-info"); + },1000); } }); } + $('.spottable').DataTable().order([1, 'asc']); + $('.spottable').DataTable().clear(); fill_list($('#band option:selected').val(),30); setInterval(function () { fill_list($('#band option:selected').val(),30); },60000); $("#band").on("change",function() { + $('.spottable').DataTable().order([1, 'asc']); + $('.spottable').DataTable().clear(); fill_list($('#band option:selected').val(),30); }); From ba9d5be56235de5bd3d47db76b9b69ef2edd4666 Mon Sep 17 00:00:00 2001 From: int2001 Date: Sun, 23 Jul 2023 09:29:04 +0000 Subject: [PATCH 26/39] Added de-spot options as selector --- application/models/Dxcluster_model.php | 4 ++-- application/views/bandmap/list.php | 11 +++++++++++ assets/js/sections/bandmap_list.js | 16 +++++++++++----- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/application/models/Dxcluster_model.php b/application/models/Dxcluster_model.php index fc9b4551..23108b58 100644 --- a/application/models/Dxcluster_model.php +++ b/application/models/Dxcluster_model.php @@ -56,8 +56,8 @@ class Dxcluster_model extends CI_Model { $dxcc=$dxccObj->dxcc_lookup($singlespot->spotter,date('Ymd', time())); $singlespot->dxcc_spotter=$dxcc; } - if ( ($de != '') && (property_exists($singlespot->dxcc_spotter,'cont')) ){ // If we have a "de continent" and a filter-wish filter on that - if ($de == $singlespot->dxcc_spotter->cont) { + if ( ($de != '') && ($de != 'Any') && (property_exists($singlespot->dxcc_spotter,'cont')) ){ // If we have a "de continent" and a filter-wish filter on that + if (strtolower($de) == strtolower($singlespot->dxcc_spotter->cont)) { $singlespot->worked_call = ($this->logbook_model->check_if_callsign_worked_in_logbook($singlespot->spotted, $logbooks_locations_array, $singlespot->band) == 1); array_push($spotsout,$singlespot); } diff --git a/application/views/bandmap/list.php b/application/views/bandmap/list.php index a193a5ac..8abd3271 100644 --- a/application/views/bandmap/list.php +++ b/application/views/bandmap/list.php @@ -27,6 +27,17 @@ + + @@ -29,6 +29,18 @@ + + + @@ -68,8 +68,6 @@
-
-
DXCluster

/
@@ -86,7 +84,6 @@

-
diff --git a/assets/js/sections/bandmap.js b/assets/js/sections/bandmap.js index a035c62a..e6df82f4 100644 --- a/assets/js/sections/bandmap.js +++ b/assets/js/sections/bandmap.js @@ -144,8 +144,8 @@ $(function() { } - function set_chart(band,maxAgeMinutes) { - let dxurl = dxcluster_provider + "/spots/" + band + "/" +maxAgeMinutes; + function set_chart(band, de, maxAgeMinutes) { + let dxurl = dxcluster_provider + "/spots/" + band + "/" +maxAgeMinutes + "/" + de; $.ajax({ url: dxurl, cache: false, @@ -178,11 +178,15 @@ $(function() { $('#menutoggle_i').addClass('fa-arrow-down'); } }); - - set_chart($('#band option:selected').val(),30); + + set_chart($('#band option:selected').val(), $('#decontSelect option:selected').val(), 30); setInterval(function () { update_chart($('#band option:selected').val(),30); },60000); $("#band").on("change",function() { - set_chart($('#band option:selected').val(),30); + set_chart($('#band option:selected').val(), $('#decontSelect option:selected').val(), 30); + }); + + $("#decontSelect").on("change",function() { + set_chart($('#band option:selected').val(), $('#decontSelect option:selected').val(), 30); }); }); From fc7a9c7f5ae0247db1da9ab5d11e9925472a34f1 Mon Sep 17 00:00:00 2001 From: int2001 Date: Sun, 23 Jul 2023 18:02:04 +0000 Subject: [PATCH 34/39] Added kHz and spotter to list --- application/views/bandmap/list.php | 1 + assets/js/sections/bandmap_list.js | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/application/views/bandmap/list.php b/application/views/bandmap/list.php index a2c9c1c0..ab192bc2 100644 --- a/application/views/bandmap/list.php +++ b/application/views/bandmap/list.php @@ -77,6 +77,7 @@ DXCC + Spotter diff --git a/assets/js/sections/bandmap_list.js b/assets/js/sections/bandmap_list.js index f9ee2d69..c2a5227c 100644 --- a/assets/js/sections/bandmap_list.js +++ b/assets/js/sections/bandmap_list.js @@ -24,9 +24,10 @@ $(function() { var data=[]; data[0]=[]; data[0].push(single.when_pretty); - data[0].push(single.frequency); + data[0].push(single.frequency + " kHz"); data[0].push((single.worked_call ?'' : '')+single.spotted+(single.worked_call ? '' : '')); data[0].push(single.dxcc_spotted.entity); + data[0].push(single.spotter); if (oldtable.length > 0) { let update=false; oldtable.each( function (srow) { @@ -54,7 +55,7 @@ $(function() { var table=$('.spottable').DataTable(); table.rows().every(function() { var d=this.data(); - var distance=Math.abs(parseInt(d[1])-qrg); + var distance=Math.abs(parseInt(d[1].substring(0,d[1].length-4))-qrg); if (distance<=20) { distance++; alpha=(.5/distance); @@ -133,7 +134,7 @@ $(function() { } else { $(".radio_timeout_error" ).remove(); text = 'TX: '+(Math.round(parseInt(data.frequency)/100)/10000).toFixed(4)+' MHz'; - highlight_current_qrg((parseInt(data.frequency)/1000)); + highlight_current_qrg((parseInt(data.frequency))/1000); if(data.mode != null) { text = text+''+data.mode; } From aca4a4f40998a9e82b4c87c979e1542c942f50e2 Mon Sep 17 00:00:00 2001 From: int2001 Date: Sun, 23 Jul 2023 18:48:03 +0000 Subject: [PATCH 35/39] Added (blind) functions to toggle the spotter --- assets/js/sections/bandmap_list.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/assets/js/sections/bandmap_list.js b/assets/js/sections/bandmap_list.js index c2a5227c..78f1733a 100644 --- a/assets/js/sections/bandmap_list.js +++ b/assets/js/sections/bandmap_list.js @@ -82,6 +82,14 @@ $(function() { fill_list($('#band option:selected').val(), $('#decontSelect option:selected').val(),30); }); + $("#spottertoggle").on("click", function() { + if ($('.spottable').DataTable().column(4).visible()) { + $('.spottable').DataTable().column(4).visible(false); + } else { + $('.spottable').DataTable().column(4).visible(true); + } + }); + $("#menutoggle").on("click", function() { if ($('.navbar').is(":hidden")) { $('.navbar').show(); From 2df9d80b2ae0dd3dffb0e6ab85f1bdb3daa30524 Mon Sep 17 00:00:00 2001 From: int2001 Date: Mon, 24 Jul 2023 08:33:04 +0000 Subject: [PATCH 36/39] Renamaed DXMap and DXList to BandMap and BandList --- application/views/bandmap/index.php | 4 ++-- application/views/bandmap/list.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/application/views/bandmap/index.php b/application/views/bandmap/index.php index fcdedfce..968fccf2 100644 --- a/application/views/bandmap/index.php +++ b/application/views/bandmap/index.php @@ -11,10 +11,10 @@ diff --git a/application/views/bandmap/list.php b/application/views/bandmap/list.php index ab192bc2..e1249275 100644 --- a/application/views/bandmap/list.php +++ b/application/views/bandmap/list.php @@ -23,10 +23,10 @@ From 7f15a94c6b1ad3683d957f6371b86f3a5d3bc103 Mon Sep 17 00:00:00 2001 From: int2001 Date: Mon, 24 Jul 2023 08:44:42 +0000 Subject: [PATCH 37/39] variable typo removed --- application/controllers/Options.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/controllers/Options.php b/application/controllers/Options.php index 55e7551a..6ab72ab9 100644 --- a/application/controllers/Options.php +++ b/application/controllers/Options.php @@ -172,7 +172,7 @@ class Options extends CI_Controller { $this->session->set_flashdata('success', $this->lang->line('options_dxcluster_decont_changed_to').$this->input->post('dxcluster_decont')); } - $dxcluster_url_update = $this->optionslib->update('dxcluster_maxage', $this->input->post('dxcluster_maxage'), 'yes'); + $dxcluster_maxage_update = $this->optionslib->update('dxcluster_maxage', $this->input->post('dxcluster_maxage'), 'yes'); if($dxcluster_maxage_update == TRUE) { $this->session->set_flashdata('success', $this->lang->line('options_dxcluster_maxage_changed_to').$this->input->post('dxcluster_maxage')); } From 5edab2e44312dffab89f42981e01d1659f4c0b6e Mon Sep 17 00:00:00 2001 From: int2001 Date: Mon, 24 Jul 2023 09:57:03 +0000 Subject: [PATCH 38/39] Take care of maxage for map/list --- application/views/bandmap/index.php | 1 + application/views/bandmap/list.php | 1 + assets/js/sections/bandmap.js | 8 ++++---- assets/js/sections/bandmap_list.js | 8 ++++---- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/application/views/bandmap/index.php b/application/views/bandmap/index.php index 968fccf2..f5c353b7 100644 --- a/application/views/bandmap/index.php +++ b/application/views/bandmap/index.php @@ -1,5 +1,6 @@ diff --git a/application/views/bandmap/list.php b/application/views/bandmap/list.php index e1249275..e6ba866c 100644 --- a/application/views/bandmap/list.php +++ b/application/views/bandmap/list.php @@ -1,6 +1,7 @@ diff --git a/assets/js/sections/bandmap.js b/assets/js/sections/bandmap.js index e6df82f4..368135aa 100644 --- a/assets/js/sections/bandmap.js +++ b/assets/js/sections/bandmap.js @@ -179,14 +179,14 @@ $(function() { } }); - set_chart($('#band option:selected').val(), $('#decontSelect option:selected').val(), 30); - setInterval(function () { update_chart($('#band option:selected').val(),30); },60000); + set_chart($('#band option:selected').val(), $('#decontSelect option:selected').val(), dxcluster_maxage); + setInterval(function () { update_chart($('#band option:selected').val(),dxcluster_maxage); },60000); $("#band").on("change",function() { - set_chart($('#band option:selected').val(), $('#decontSelect option:selected').val(), 30); + set_chart($('#band option:selected').val(), $('#decontSelect option:selected').val(), dxcluster_maxage); }); $("#decontSelect").on("change",function() { - set_chart($('#band option:selected').val(), $('#decontSelect option:selected').val(), 30); + set_chart($('#band option:selected').val(), $('#decontSelect option:selected').val(), dxcluster_maxage); }); }); diff --git a/assets/js/sections/bandmap_list.js b/assets/js/sections/bandmap_list.js index 78f1733a..b326e3de 100644 --- a/assets/js/sections/bandmap_list.js +++ b/assets/js/sections/bandmap_list.js @@ -68,18 +68,18 @@ $(function() { $('.spottable').DataTable().order([1, 'asc']); $('.spottable').DataTable().clear(); - fill_list($('#band option:selected').val(), $('#decontSelect option:selected').val(),30); - setInterval(function () { fill_list($('#band option:selected').val(), $('#decontSelect option:selected').val(),30); },60000); + fill_list($('#band option:selected').val(), $('#decontSelect option:selected').val(),dxcluster_maxage); + setInterval(function () { fill_list($('#band option:selected').val(), $('#decontSelect option:selected').val(),dxcluster_maxage); },60000); $("#decontSelect").on("change",function() { $('.spottable').DataTable().clear(); - fill_list($('#band option:selected').val(), $('#decontSelect option:selected').val(),30); + fill_list($('#band option:selected').val(), $('#decontSelect option:selected').val(),dxcluster_maxage); }); $("#band").on("change",function() { $('.spottable').DataTable().order([1, 'asc']); $('.spottable').DataTable().clear(); - fill_list($('#band option:selected').val(), $('#decontSelect option:selected').val(),30); + fill_list($('#band option:selected').val(), $('#decontSelect option:selected').val(),dxcluster_maxage); }); $("#spottertoggle").on("click", function() { From 3b4138990c0f4cd7a7bc69d7b973ca6fa1b620b5 Mon Sep 17 00:00:00 2001 From: int2001 Date: Tue, 25 Jul 2023 05:42:02 +0000 Subject: [PATCH 39/39] Don't rerender list/map if band is not populated --- assets/js/sections/bandmap.js | 4 ++ assets/js/sections/bandmap_list.js | 85 ++++++++++++++++-------------- 2 files changed, 49 insertions(+), 40 deletions(-) diff --git a/assets/js/sections/bandmap.js b/assets/js/sections/bandmap.js index 368135aa..096c11b7 100644 --- a/assets/js/sections/bandmap.js +++ b/assets/js/sections/bandmap.js @@ -123,6 +123,7 @@ $(function() { } function update_chart(band,maxAgeMinutes) { + if ((band != '') && (band !== undefined)) { let dxurl = dxcluster_provider + "/spots/" + band + "/" +maxAgeMinutes; $.ajax({ url: dxurl, @@ -141,10 +142,12 @@ $(function() { bandMapChart.series[0].setData(spots4chart); bandMapChart.redraw(); }); + } } function set_chart(band, de, maxAgeMinutes) { + if ((band != '') && (band !== undefined)) { let dxurl = dxcluster_provider + "/spots/" + band + "/" +maxAgeMinutes + "/" + de; $.ajax({ url: dxurl, @@ -161,6 +164,7 @@ $(function() { } bandMapChart=render_chart(band,spots4chart); }); + } } $("#menutoggle").on("click", function() { diff --git a/assets/js/sections/bandmap_list.js b/assets/js/sections/bandmap_list.js index b326e3de..adc1ba30 100644 --- a/assets/js/sections/bandmap_list.js +++ b/assets/js/sections/bandmap_list.js @@ -8,47 +8,52 @@ $(function() { function fill_list(band,de,maxAgeMinutes) { - let dxurl = dxcluster_provider + "/spots/" + band + "/" +maxAgeMinutes + "/" + de; - $.ajax({ - url: dxurl, - cache: false, - dataType: "json" - }).done(function(dxspots) { - var table = $('.spottable').DataTable(); - table.page.len(50); - let oldtable=table.data(); - table.clear(); - if (dxspots.length>0) { - dxspots.sort(SortByQrg); - dxspots.forEach((single) => { - var data=[]; - data[0]=[]; - data[0].push(single.when_pretty); - data[0].push(single.frequency + " kHz"); - data[0].push((single.worked_call ?'' : '')+single.spotted+(single.worked_call ? '' : '')); - data[0].push(single.dxcc_spotted.entity); - data[0].push(single.spotter); - if (oldtable.length > 0) { - let update=false; - oldtable.each( function (srow) { - if (JSON.stringify(srow) === JSON.stringify(data[0])) { - update=true; - } - }); - if (!update) { // Sth. Fresh? So highlight - table.rows.add(data).draw().nodes().to$().addClass("fresh bg-info"); - } else { - table.rows.add(data).draw(); + var table = $('.spottable').DataTable(); + if ((band != '') && (band !== undefined)) { + let dxurl = dxcluster_provider + "/spots/" + band + "/" +maxAgeMinutes + "/" + de; + $.ajax({ + url: dxurl, + cache: false, + dataType: "json" + }).done(function(dxspots) { + table.page.len(50); + let oldtable=table.data(); + table.clear(); + if (dxspots.length>0) { + dxspots.sort(SortByQrg); + dxspots.forEach((single) => { + var data=[]; + data[0]=[]; + data[0].push(single.when_pretty); + data[0].push(single.frequency + " kHz"); + data[0].push((single.worked_call ?'' : '')+single.spotted+(single.worked_call ? '' : '')); + data[0].push(single.dxcc_spotted.entity); + data[0].push(single.spotter); + if (oldtable.length > 0) { + let update=false; + oldtable.each( function (srow) { + if (JSON.stringify(srow) === JSON.stringify(data[0])) { + update=true; + } + }); + if (!update) { // Sth. Fresh? So highlight + table.rows.add(data).draw().nodes().to$().addClass("fresh bg-info"); + } else { + table.rows.add(data).draw(); + } + } else { + table.rows.add(data).draw(); } - } else { - table.rows.add(data).draw(); - } - }); - setTimeout(function(){ // Remove Highlights within 15sec - $(".fresh").removeClass("bg-info"); - },1000); - } - }); + }); + setTimeout(function(){ // Remove Highlights within 15sec + $(".fresh").removeClass("bg-info"); + },1000); + } + }); + } else { + table.clear(); + table.draw(); + } } function highlight_current_qrg(qrg) {