diff --git a/application/controllers/Awards.php b/application/controllers/Awards.php
index dabdced0..512d84c4 100644
--- a/application/controllers/Awards.php
+++ b/application/controllers/Awards.php
@@ -619,4 +619,68 @@ class Awards extends CI_Controller {
header('Content-Type: application/json');
echo json_encode($zones);
}
+
+ /*
+ function dxcc_map
+ This displays the DXCC map
+ */
+ public function dxcc_map() {
+ $this->load->model('dxcc');
+ $this->load->model('bands');
+
+ $bands[] = $this->input->post('band');
+
+ $postdata['lotw'] = $this->input->post('lotw') == 0 ? NULL: 1;
+ $postdata['qsl'] = $this->input->post('qsl') == 0 ? NULL: 1;
+ $postdata['worked'] = $this->input->post('worked') == 0 ? NULL: 1;
+ $postdata['confirmed'] = $this->input->post('confirmed') == 0 ? NULL: 1;
+ $postdata['notworked'] = $this->input->post('notworked') == 0 ? NULL: 1;
+ $postdata['band'] = $this->input->post('band');
+ $postdata['mode'] = $this->input->post('mode');
+ $postdata['includedeleted'] = $this->input->post('includedeleted') == 0 ? NULL: 1;
+ $postdata['Africa'] = $this->input->post('Africa') == 0 ? NULL: 1;
+ $postdata['Asia'] = $this->input->post('Asia') == 0 ? NULL: 1;
+ $postdata['Europe'] = $this->input->post('Europe') == 0 ? NULL: 1;
+ $postdata['NorthAmerica'] = $this->input->post('NorthAmerica') == 0 ? NULL: 1;
+ $postdata['SouthAmerica'] = $this->input->post('SouthAmerica') == 0 ? NULL: 1;
+ $postdata['Oceania'] = $this->input->post('Oceania') == 0 ? NULL: 1;
+ $postdata['Antarctica'] = $this->input->post('Antarctica') == 0 ? NULL: 1;
+
+ $dxcclist = $this->dxcc->fetchdxcc($postdata);
+
+ $dxcc_array = $this->dxcc->get_dxcc_array($dxcclist, $bands, $postdata);
+
+ $i = 0;
+
+ foreach ($dxcclist as $dxcc) {
+ $newdxcc[$i]['adif'] = $dxcc->adif;
+ $newdxcc[$i]['prefix'] = $dxcc->prefix;
+ $newdxcc[$i]['name'] = ucwords(strtolower($dxcc->name), "- (/");
+ if ($dxcc->Enddate!=null) {
+ $newdxcc[$i]['name'] .= ' (deleted)';
+ }
+ $newdxcc[$i]['lat'] = $dxcc->lat;
+ $newdxcc[$i]['long'] = $dxcc->long;
+ $newdxcc[$i++]['status'] = isset($dxcc_array[$dxcc->adif]) ? $this->returnStatus($dxcc_array[$dxcc->adif]) : 'x';
+ }
+
+ header('Content-Type: application/json');
+ echo json_encode($newdxcc);
+ }
+
+ function returnStatus($string) {
+ foreach ($string as $key) {
+ if($key != "") {
+ if (strpos($key, '>W<') !== false) {
+ return 'W';
+ }
+ if (strpos($key, '>C<') !== false) {
+ return 'C';
+ }
+ if ($key == '-') {
+ return '-';
+ }
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/application/models/Dxcc.php b/application/models/Dxcc.php
index 2d4c8f8f..4548cc94 100644
--- a/application/models/Dxcc.php
+++ b/application/models/Dxcc.php
@@ -82,7 +82,6 @@ class DXCC extends CI_Model {
if ($postdata['worked'] != NULL) {
$workedDXCC = $this->getDxccBandWorked($location_list, $band, $postdata);
foreach ($workedDXCC as $wdxcc) {
- //function displayContacts(searchphrase, band, mode, type) {
$dxccMatrix[$wdxcc->dxcc][$band] = '
';
}
}
@@ -131,13 +130,7 @@ class DXCC extends CI_Model {
where station_id in (" . $location_list .
") and col_dxcc > 0";
- if ($band == 'SAT') {
- $sql .= " and col_prop_mode ='" . $band . "'";
- }
- else {
- $sql .= " and col_prop_mode !='SAT'";
- $sql .= " and col_band ='" . $band . "'";
- }
+ $sql .= $this->addBandToQuery($band);
if ($postdata['mode'] != 'All') {
$sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')";
@@ -166,13 +159,7 @@ class DXCC extends CI_Model {
where station_id in (" . $location_list .
") and col_dxcc > 0";
- if ($band == 'SAT') {
- $sql .= " and col_prop_mode ='" . $band . "'";
- }
- else {
- $sql .= " and col_prop_mode !='SAT'";
- $sql .= " and col_band ='" . $band . "'";
- }
+ $sql .= $this->addBandToQuery($band);
if ($postdata['mode'] != 'All') {
$sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')";
@@ -192,6 +179,19 @@ class DXCC extends CI_Model {
return $query->result();
}
+ function addBandToQuery($band) {
+ $sql = '';
+ if ($band != 'All') {
+ if ($band == 'SAT') {
+ $sql .= " and col_prop_mode ='" . $band . "'";
+ } else {
+ $sql .= " and col_prop_mode !='SAT'";
+ $sql .= " and col_band ='" . $band . "'";
+ }
+ }
+ return $sql;
+ }
+
function fetchDxcc($postdata) {
$CI =& get_instance();
$CI->load->model('logbooks_model');
@@ -203,7 +203,7 @@ class DXCC extends CI_Model {
$location_list = "'".implode("','",$logbooks_locations_array)."'";
- $sql = "select adif, prefix, name, date(end) Enddate, date(start) Startdate
+ $sql = "select adif, prefix, name, date(end) Enddate, date(start) Startdate, lat, `long`
from dxcc_entities";
if ($postdata['notworked'] == NULL) {
@@ -248,15 +248,7 @@ class DXCC extends CI_Model {
where station_id in (" . $location_list .
") and col_dxcc > 0";
- if ($postdata['band'] != 'All') {
- if ($postdata['band'] == 'SAT') {
- $sql .= " and col_prop_mode ='" . $postdata['band'] . "'";
- }
- else {
- $sql .= " and col_prop_mode !='SAT'";
- $sql .= " and col_band ='" . $postdata['band'] . "'";
- }
- }
+ $sql .= $this->addBandToQuery($postdata['band']);
if ($postdata['mode'] != 'All') {
$sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')";
@@ -264,15 +256,7 @@ class DXCC extends CI_Model {
$sql .= " and not exists (select 1 from ".$this->config->item('table_name')." where station_id in (". $location_list .") and col_dxcc = thcv.col_dxcc and col_dxcc > 0";
- if ($postdata['band'] != 'All') {
- if ($postdata['band'] == 'SAT') {
- $sql .= " and col_prop_mode ='" . $postdata['band'] . "'";
- }
- else {
- $sql .= " and col_prop_mode !='SAT'";
- $sql .= " and col_band ='" . $postdata['band'] . "'";
- }
- }
+ $sql .= $this->addBandToQuery($postdata['band']);
if ($postdata['mode'] != 'All') {
$sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')";
@@ -305,15 +289,7 @@ class DXCC extends CI_Model {
where station_id in (". $location_list .
") and col_dxcc > 0";
- if ($postdata['band'] != 'All') {
- if ($postdata['band'] == 'SAT') {
- $sql .= " and col_prop_mode ='" . $postdata['band'] . "'";
- }
- else {
- $sql .= " and col_prop_mode !='SAT'";
- $sql .= " and col_band ='" . $postdata['band'] . "'";
- }
- }
+ $sql .= $this->addBandToQuery($postdata['band']);
if ($postdata['mode'] != 'All') {
$sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')";
diff --git a/application/views/awards/dxcc/index.php b/application/views/awards/dxcc/index.php
index 7c25d56d..e1dd3c47 100644
--- a/application/views/awards/dxcc/index.php
+++ b/application/views/awards/dxcc/index.php
@@ -1,4 +1,36 @@
+
@@ -121,13 +153,37 @@
+
+
+
+
+
+
diff --git a/application/views/interface_assets/footer.php b/application/views/interface_assets/footer.php
index c55e7758..d8b437c9 100644
--- a/application/views/interface_assets/footer.php
+++ b/application/views/interface_assets/footer.php
@@ -44,6 +44,10 @@ function load_was_map() {
+uri->segment(1) == "awards" && ($this->uri->segment(2) == "dxcc") ) { ?>
+
+
+
uri->segment(1) == "statistics") { ?>
@@ -2576,6 +2580,19 @@ function deleteQsl(id) {
message: html,
onshown: function(dialog) {
$('[data-toggle="tooltip"]').tooltip();
+ $('.contacttable').DataTable({
+ "pageLength": 25,
+ responsive: false,
+ ordering: false,
+ "scrollY": "550px",
+ "scrollCollapse": true,
+ "paging": false,
+ "scrollX": true,
+ dom: 'Bfrtip',
+ buttons: [
+ 'csv'
+ ]
+ });
},
buttons: [{
label: 'Close',
diff --git a/application/views/view_log/partial/log_ajax.php b/application/views/view_log/partial/log_ajax.php
index c880ed97..9500f152 100644
--- a/application/views/view_log/partial/log_ajax.php
+++ b/application/views/view_log/partial/log_ajax.php
@@ -1,19 +1,18 @@
'.$ctx->lang->line('gen_hamradio_mode').''; break;
- case 'RSTS': echo ''.$ctx->lang->line('gen_hamradio_rsts').' | '; break;
- case 'RSTR': echo ''.$ctx->lang->line('gen_hamradio_rstr').' | '; break;
- case 'Country': echo ''.$ctx->lang->line('general_word_country').' | '; break;
- case 'IOTA': echo ''.$ctx->lang->line('gen_hamradio_iota').' | '; break;
- case 'SOTA': echo ''.$ctx->lang->line('gen_hamradio_sota').' | '; break;
- case 'WWFF': echo ''.$ctx->lang->line('gen_hamradio_wwff').' | '; break;
- case 'POTA': echo ''.$ctx->lang->line('gen_hamradio_pota').' | '; break;
- case 'State': echo ''.$ctx->lang->line('gen_hamradio_state').' | '; break;
- case 'Grid': echo ''.$ctx->lang->line('gen_hamradio_gridsquare').' | '; break;
- case 'Band': echo ''.$ctx->lang->line('gen_hamradio_band').' | '; break;
- case 'Operator': echo ''.$ctx->lang->line('gen_hamradio_operator').' | '; break;
-
+ case 'Mode': echo ''.$ctx->lang->line('gen_hamradio_mode').' | '; break;
+ case 'RSTS': echo ''.$ctx->lang->line('gen_hamradio_rsts').' | '; break;
+ case 'RSTR': echo ''.$ctx->lang->line('gen_hamradio_rstr').' | '; break;
+ case 'Country': echo ''.$ctx->lang->line('general_word_country').' | '; break;
+ case 'IOTA': echo ''.$ctx->lang->line('gen_hamradio_iota').' | '; break;
+ case 'SOTA': echo ''.$ctx->lang->line('gen_hamradio_sota').' | '; break;
+ case 'WWFF': echo ''.$ctx->lang->line('gen_hamradio_wwff').' | '; break;
+ case 'POTA': echo ''.$ctx->lang->line('gen_hamradio_pota').' | '; break;
+ case 'State': echo ''.$ctx->lang->line('gen_hamradio_state').' | '; break;
+ case 'Grid': echo ''.$ctx->lang->line('gen_hamradio_gridsquare').' | '; break;
+ case 'Band': echo ''.$ctx->lang->line('gen_hamradio_band').''; break;
+ case 'Operator': echo ' | '.$ctx->lang->line('gen_hamradio_operator').' | '; break;
}
}
@@ -46,34 +45,37 @@ function echoQrbCalcLink($mygrid, $grid, $vucc) {
-
-
- | lang->line('general_word_date'); ?> |
- config->item('use_auth') && ($this->session->userdata('user_type') >= 2)) || $this->config->item('use_auth') === FALSE || ($this->config->item('show_time'))) { ?>
- lang->line('general_word_time'); ?> |
-
- lang->line('gen_hamradio_call'); ?> |
- session->userdata('user_column1')==""?'Mode':$this->session->userdata('user_column1'));
- echo_table_header_col($this, $this->session->userdata('user_column2')==""?'RSTS':$this->session->userdata('user_column2'));
- echo_table_header_col($this, $this->session->userdata('user_column3')==""?'RSTR':$this->session->userdata('user_column3'));
- echo_table_header_col($this, $this->session->userdata('user_column4')==""?'Band':$this->session->userdata('user_column4'));
- echo_table_header_col($this, $this->session->userdata('user_column5')==""?'Country':$this->session->userdata('user_column5'));
+
diff --git a/assets/js/sections/dxccmap.js b/assets/js/sections/dxccmap.js
new file mode 100644
index 00000000..e117ffec
--- /dev/null
+++ b/assets/js/sections/dxccmap.js
@@ -0,0 +1,153 @@
+var osmUrl = $('#dxccmapjs').attr("tileUrl");
+
+function load_dxcc_map() {
+ $('.nav-tabs a[href="#dxccmaptab"]').tab('show');
+ $.ajax({
+ url: base_url + 'index.php/awards/dxcc_map',
+ type: 'post',
+ data: {
+ band: $('#band2').val(),
+ mode: $('#mode').val(),
+ worked: +$('#worked').prop('checked'),
+ confirmed: +$('#confirmed').prop('checked'),
+ notworked: +$('#notworked').prop('checked'),
+ qsl: +$('#qsl').prop('checked'),
+ lotw: +$('#lotw').prop('checked'),
+ includedeleted: +$('#includedeleted').prop('checked'),
+ Africa: +$('#Africa').prop('checked'),
+ Asia: +$('#Asia').prop('checked'),
+ Europe: +$('#Europe').prop('checked'),
+ NorthAmerica: +$('#NorthAmerica').prop('checked'),
+ SouthAmerica: +$('#SouthAmerica').prop('checked'),
+ Oceania: +$('#Oceania').prop('checked'),
+ Antarctica: +$('#Antarctica').prop('checked'),
+ },
+ success: function(data) {
+ load_dxcc_map2(data, worked, confirmed, notworked);
+ },
+ error: function() {
+
+ },
+ });
+}
+
+function load_dxcc_map2(data, worked, confirmed, notworked) {
+
+ // If map is already initialized
+ var container = L.DomUtil.get('dxccmap');
+
+ if(container != null){
+ container._leaflet_id = null;
+ container.remove();
+ $("#dxccmaptab").append('');
+ }
+
+ var map = L.map('dxccmap');
+ L.tileLayer(
+ osmUrl,
+ {
+ attribution: '© OpenStreetMap contributors, CC-BY-SA',
+ maxZoom: 18
+ }
+ ).addTo(map);
+
+ var notworkedcount = data.length;
+ var confirmedcount = 0;
+ var workednotconfirmedcount = 0;
+
+ for (var i = 0; i < data.length; i++) {
+ var D = data[i];
+ if (D['status'] != 'x') {
+ var mapColor = 'red';
+
+ if (D['status'] == 'C') {
+ mapColor = 'green';
+ if (confirmed != '0') {
+ addMarker(L, D, mapColor, map);
+ confirmedcount++;
+ notworkedcount--;
+ }
+ }
+ if (D['status'] == 'W') {
+ mapColor = 'orange';
+ if (worked != '0') {
+ addMarker(L, D, mapColor, map);
+ workednotconfirmedcount++;
+ notworkedcount--;
+ }
+ }
+
+
+ // Make a check here and hide what I don't want to show
+ if (notworked != '0') {
+ if (mapColor == 'red') {
+ addMarker(L, D, mapColor, map);
+ }
+ }
+ }
+ }
+
+ /*Legend specific*/
+ var legend = L.control({ position: "topright" });
+
+ if (notworked.checked == false) {
+ notworkedcount = 0;
+ }
+
+ legend.onAdd = function(map) {
+ var div = L.DomUtil.create("div", "legend");
+ div.innerHTML += "Colors
";
+ div.innerHTML += 'Confirmed ('+confirmedcount+')
';
+ div.innerHTML += 'Worked not confirmed ('+workednotconfirmedcount+')
';
+ div.innerHTML += 'Not worked ('+notworkedcount+')
';
+ return div;
+ };
+
+ legend.addTo(map);
+
+ map.setView([20, 0], 2);
+}
+
+function addMarker(L, D, mapColor, map) {
+ var title = '' + D['prefix'] + '';
+ var myIcon = L.divIcon({className: 'my-div-icon', html: title});
+
+ const markerHtmlStyles = `
+ background-color: ${mapColor};
+ width: 1rem;
+ height: 1rem;
+ display: block;
+ position: relative;
+ border-radius: 3rem 3rem 0;
+ transform: rotate(45deg);
+ border: 1px solid #FFFFFF`
+
+ const icon = L.divIcon({
+ className: "my-custom-pin",
+ iconAnchor: [0, 24],
+ labelAnchor: [-6, 0],
+ popupAnchor: [0, -36],
+ html: ``
+ })
+
+ L.marker(
+ [D['lat'], D['long']], {
+ icon: myIcon,
+ adif: D['adif'],
+ title: D['prefix'] + ' - ' + D['name'],
+ }
+ ).addTo(map).on('click', onClick);
+
+ L.marker(
+ [D['lat'], D['long']], {
+ icon: icon,
+ adif: D['adif'],
+ title: D['prefix'] + ' - ' + D['name'],
+ }
+ ).addTo(map).on('click', onClick);
+}
+
+function onClick(e) {
+ var marker = e.target;
+ displayContacts(marker.options.adif, $('#band2').val(), $('#mode').val(), 'DXCC2');
+}