diff --git a/application/controllers/Awards.php b/application/controllers/Awards.php index a6c24309..709e0b01 100644 --- a/application/controllers/Awards.php +++ b/application/controllers/Awards.php @@ -619,6 +619,54 @@ 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 iota @@ -636,7 +684,7 @@ class Awards extends CI_Controller { $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['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; 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] = '
name).'","'. $band . '","'. $postdata['mode'] . '","DXCC")\'>W
'; } } @@ -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 @@
- - + + + +
+ + +
+ +
+
+
+ +
+ +
+ +
+ ×Nothing found!
'; } ?> +
+
diff --git a/application/views/backup/exportall.php b/application/views/backup/exportall.php index 3d52d220..b80fa963 100644 --- a/application/views/backup/exportall.php +++ b/application/views/backup/exportall.php @@ -1,7 +1,7 @@ Cloudlog ADIF export 3.1.2 config->item('app_name')); ?>>config->item('app_name')."\n"; ?> -config->item('app_version')); ?>>Version config->item('app_version')."\n"; ?> +config->item('app_version')); ?>>Version config->item('app_version')."\n"; ?> assets/js/sections/iotamap.js" tileUrl="optionslib->get_option('option_map_tile_server');?>"> +uri->segment(1) == "awards" && ($this->uri->segment(2) == "dxcc") ) { ?> + + + uri->segment(1) == "statistics") { ?> @@ -2580,6 +2584,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) {
- - - - config->item('use_auth') && ($this->session->userdata('user_type') >= 2)) || $this->config->item('use_auth') === FALSE || ($this->config->item('show_time'))) { ?> - - - - 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')); +
lang->line('general_word_date'); ?>lang->line('general_word_time'); ?>lang->line('gen_hamradio_call'); ?>
+ + + + config->item('use_auth') && ($this->session->userdata('user_type') >= 2)) || $this->config->item('use_auth') === FALSE || ($this->config->item('show_time'))) { ?> + + + + 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')); - if(($this->config->item('use_auth')) && ($this->session->userdata('user_type') >= 2)) { ?> - - session->userdata('user_eqsl_name') != "") { ?> - + if(($this->config->item('use_auth')) && ($this->session->userdata('user_type') >= 2)) { ?> + + session->userdata('user_eqsl_name') != "") { ?> + + + session->userdata('user_lotw_name') != "") { ?> + + - session->userdata('user_lotw_name') != "") { ?> - + + config->item('use_auth')) && ($this->session->userdata('user_type') >= 2)) { ?> + - - - config->item('use_auth')) && ($this->session->userdata('user_type') >= 2)) { ?> - - - + + + result() as $row) { @@ -248,7 +250,7 @@ function echoQrbCalcLink($mygrid, $grid, $vucc) { - +
lang->line('general_word_date'); ?>lang->line('general_word_time'); ?>lang->line('gen_hamradio_call'); ?>QSLeQSLQSLeQSLLoTW LoTWlang->line('gen_hamradio_station'); ?> lang->line('gen_hamradio_station'); ?>
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'); +}