From 8deb34cee6c9459b192c8bbe8fd71ebfbad6b5a4 Mon Sep 17 00:00:00 2001
From: Andreas <6977712+AndreasK79@users.noreply.github.com>
Date: Sun, 18 Jun 2023 22:01:59 +0200
Subject: [PATCH 1/9] [Gridmap] Added gridsquare map with band/mode/qsl
---
application/controllers/Gridmap.php | 307 ++++++++++++++++++
application/models/Gridmap_model.php | 214 ++++++++++++
application/views/gridmap/index.php | 56 ++++
.../js/leaflet/L.MaidenheadColouredGridMap.js | 217 +++++++++++++
assets/js/sections/gridmap.js | 112 +++++++
5 files changed, 906 insertions(+)
create mode 100644 application/controllers/Gridmap.php
create mode 100644 application/models/Gridmap_model.php
create mode 100644 application/views/gridmap/index.php
create mode 100644 assets/js/leaflet/L.MaidenheadColouredGridMap.js
create mode 100644 assets/js/sections/gridmap.js
diff --git a/application/controllers/Gridmap.php b/application/controllers/Gridmap.php
new file mode 100644
index 00000000..ed433705
--- /dev/null
+++ b/application/controllers/Gridmap.php
@@ -0,0 +1,307 @@
+load->model('bands');
+ $this->load->model('gridmap_model');
+
+ $data['modes'] = $this->gridmap_model->get_worked_modes();
+
+ $data['bands'] = $this->bands->get_worked_bands();
+
+ $footerData = [];
+ $footerData['scripts'] = [
+ 'assets/js/leaflet/L.MaidenheadColouredGridMap.js',
+ 'assets/js/sections/gridmap.js?'
+ ];
+
+ $this->load->view('interface_assets/header', $data);
+ $this->load->view('gridmap/index');
+ $this->load->view('interface_assets/footer', $footerData);
+ }
+
+ public function getGrids() {
+ $band = $this->security->xss_clean($this->input->post('band'));
+ $mode = $this->security->xss_clean($this->input->post('mode'));
+ $qsl = $this->security->xss_clean($this->input->post('qsl'));
+ $lotw = $this->security->xss_clean($this->input->post('lotw'));
+ $eqsl = $this->security->xss_clean($this->input->post('eqsl'));
+ $this->load->model('gridmap_model');
+
+ $array_grid_2char = array();
+ $array_grid_4char = array();
+ $array_grid_6char = array();
+
+ $array_grid_2char_confirmed = array();
+ $array_grid_4char_confirmed = array();
+ $array_grid_6char_confirmed = array();
+
+ $grid_2char = "";
+ $grid_4char = "";
+ $grid_6char = "";
+
+ $grid_2char_confirmed = "";
+ $grid_4char_confirmed = "";
+ $grid_6char_confirmed = "";
+
+ $query = $this->gridmap_model->get_band_confirmed($band, $mode, $qsl, $lotw, $eqsl);
+
+ if ($query && $query->num_rows() > 0) {
+ foreach ($query->result() as $row) {
+ $grid_2char_confirmed = strtoupper(substr($row->GRID_SQUARES,0,2));
+ $grid_4char_confirmed = strtoupper(substr($row->GRID_SQUARES,0,4));
+ if ($this->config->item('map_6digit_grids')) {
+ $grid_6char_confirmed = strtoupper(substr($row->GRID_SQUARES,0,6));
+ }
+
+ // Check if 2 Char is in array
+ if(!in_array($grid_2char_confirmed, $array_grid_2char_confirmed)){
+ array_push($array_grid_2char_confirmed, $grid_2char_confirmed);
+ }
+
+ if(!in_array($grid_4char_confirmed, $array_grid_4char_confirmed)){
+ array_push($array_grid_4char_confirmed, $grid_4char_confirmed);
+ }
+
+ if ($this->config->item('map_6digit_grids')) {
+ if(!in_array($grid_6char_confirmed, $array_grid_6char_confirmed)){
+ array_push($array_grid_6char_confirmed, $grid_6char_confirmed);
+ }
+ }
+ }
+ }
+
+ $query = $this->gridmap_model->get_band($band, $mode, $qsl, $lotw, $eqsl);
+
+ if ($query && $query->num_rows() > 0) {
+ foreach ($query->result() as $row) {
+
+ $grid_two = strtoupper(substr($row->GRID_SQUARES,0,2));
+ $grid_four = strtoupper(substr($row->GRID_SQUARES,0,4));
+ if ($this->config->item('map_6digit_grids')) {
+ $grid_six = strtoupper(substr($row->GRID_SQUARES,0,6));
+ }
+
+ // Check if 2 Char is in array
+ if(!in_array($grid_two, $array_grid_2char)){
+ array_push($array_grid_2char, $grid_two);
+ }
+
+ if(!in_array($grid_four, $array_grid_4char)){
+ array_push($array_grid_4char, $grid_four);
+ }
+
+ if ($this->config->item('map_6digit_grids')) {
+ if(!in_array($grid_six, $array_grid_6char)){
+ array_push($array_grid_6char, $grid_six);
+ }
+ }
+ }
+ }
+ $query_vucc = $this->gridmap_model->get_band_worked_vucc_squares($band, $mode, $qsl, $lotw, $eqsl);
+
+ if ($query && $query_vucc->num_rows() > 0) {
+ foreach ($query_vucc->result() as $row) {
+
+ $grids = explode(",", $row->COL_VUCC_GRIDS);
+
+ foreach($grids as $key) {
+ $grid_two = strtoupper(substr($key,0,2));
+ $grid_four = strtoupper(substr($key,0,4));
+
+ // Check if 2 Char is in array
+ if(!in_array($grid_two, $array_grid_2char)){
+ array_push($array_grid_2char, $grid_two);
+ }
+
+
+ if(!in_array($grid_four, $array_grid_4char)){
+ array_push($array_grid_4char, $grid_four);
+ }
+ }
+ }
+ }
+
+ // Confirmed Squares
+ $query_vucc = $this->gridmap_model->get_band_confirmed_vucc_squares($band, $mode, $qsl, $lotw, $eqsl);
+
+ if ($query && $query_vucc->num_rows() > 0) {
+ foreach ($query_vucc->result() as $row) {
+
+ $grids = explode(",", $row->COL_VUCC_GRIDS);
+
+ foreach($grids as $key) {
+ $grid_2char_confirmed = strtoupper(substr($key,0,2));
+ $grid_4char_confirmed = strtoupper(substr($key,0,4));
+
+ // Check if 2 Char is in array
+ if(!in_array($grid_2char_confirmed, $array_grid_2char_confirmed)){
+ array_push($array_grid_2char_confirmed, $grid_2char_confirmed);
+ }
+
+
+ if(!in_array($grid_4char_confirmed, $array_grid_4char_confirmed)){
+ array_push($array_grid_4char_confirmed, $grid_4char_confirmed);
+ }
+ }
+ }
+ }
+
+ $data['grid_2char_confirmed'] = ($array_grid_2char_confirmed);
+ $data['grid_4char_confirmed'] = ($array_grid_4char_confirmed);
+ $data['grid_6char_confirmed'] = ($array_grid_6char_confirmed);
+
+ $data['grid_2char'] = ($array_grid_2char);
+ $data['grid_4char'] = ($array_grid_4char);
+ $data['grid_6char'] = ($array_grid_6char);
+
+ header('Content-Type: application/json');
+ echo json_encode($data);
+ }
+
+ public function getGridsjs() {
+ $band = $this->security->xss_clean($this->input->post('band'));
+ $mode = $this->security->xss_clean($this->input->post('mode'));
+ $qsl = $this->security->xss_clean($this->input->post('qsl'));
+ $lotw = $this->security->xss_clean($this->input->post('lotw'));
+ $eqsl = $this->security->xss_clean($this->input->post('eqsl'));
+ $this->load->model('gridmap_model');
+
+ $array_grid_2char = array();
+ $array_grid_4char = array();
+ $array_grid_6char = array();
+
+ $array_grid_2char_confirmed = array();
+ $array_grid_4char_confirmed = array();
+ $array_grid_6char_confirmed = array();
+
+ $grid_2char = "";
+ $grid_4char = "";
+ $grid_6char = "";
+
+ $grid_2char_confirmed = "";
+ $grid_4char_confirmed = "";
+ $grid_6char_confirmed = "";
+
+ $query = $this->gridmap_model->get_band_confirmed($band, $mode, $qsl, $lotw, $eqsl);
+
+ if ($query && $query->num_rows() > 0) {
+ foreach ($query->result() as $row) {
+ $grid_2char_confirmed = strtoupper(substr($row->GRID_SQUARES,0,2));
+ $grid_4char_confirmed = strtoupper(substr($row->GRID_SQUARES,0,4));
+ if ($this->config->item('map_6digit_grids')) {
+ $grid_6char_confirmed = strtoupper(substr($row->GRID_SQUARES,0,6));
+ }
+
+ // Check if 2 Char is in array
+ if(!in_array($grid_2char_confirmed, $array_grid_2char_confirmed)){
+ array_push($array_grid_2char_confirmed, $grid_2char_confirmed);
+ }
+
+ if(!in_array($grid_4char_confirmed, $array_grid_4char_confirmed)){
+ array_push($array_grid_4char_confirmed, $grid_4char_confirmed);
+ }
+
+ if ($this->config->item('map_6digit_grids')) {
+ if(!in_array($grid_6char_confirmed, $array_grid_6char_confirmed)){
+ array_push($array_grid_6char_confirmed, $grid_6char_confirmed);
+ }
+ }
+ }
+ }
+
+ $query = $this->gridmap_model->get_band($band, $mode, $qsl, $lotw, $eqsl);
+
+ if ($query && $query->num_rows() > 0) {
+ foreach ($query->result() as $row) {
+
+ $grid_two = strtoupper(substr($row->GRID_SQUARES,0,2));
+ $grid_four = strtoupper(substr($row->GRID_SQUARES,0,4));
+ if ($this->config->item('map_6digit_grids')) {
+ $grid_six = strtoupper(substr($row->GRID_SQUARES,0,6));
+ }
+
+ // Check if 2 Char is in array
+ if(!in_array($grid_two, $array_grid_2char)){
+ array_push($array_grid_2char, $grid_two);
+ }
+
+ if(!in_array($grid_four, $array_grid_4char)){
+ array_push($array_grid_4char, $grid_four);
+ }
+
+ if ($this->config->item('map_6digit_grids')) {
+ if(!in_array($grid_six, $array_grid_6char)){
+ array_push($array_grid_6char, $grid_six);
+ }
+ }
+ }
+ }
+ $query_vucc = $this->gridmap_model->get_band_worked_vucc_squares($band, $mode, $qsl, $lotw, $eqsl);
+
+ if ($query && $query_vucc->num_rows() > 0) {
+ foreach ($query_vucc->result() as $row) {
+
+ $grids = explode(",", $row->COL_VUCC_GRIDS);
+
+ foreach($grids as $key) {
+ $grid_two = strtoupper(substr($key,0,2));
+ $grid_four = strtoupper(substr($key,0,4));
+
+ // Check if 2 Char is in array
+ if(!in_array($grid_two, $array_grid_2char)){
+ array_push($array_grid_2char, $grid_two);
+ }
+
+
+ if(!in_array($grid_four, $array_grid_4char)){
+ array_push($array_grid_4char, $grid_four);
+ }
+ }
+ }
+ }
+
+ // Confirmed Squares
+ $query_vucc = $this->gridmap_model->get_band_confirmed_vucc_squares($band, $mode, $qsl, $lotw, $eqsl);
+
+ if ($query && $query_vucc->num_rows() > 0) {
+ foreach ($query_vucc->result() as $row) {
+
+ $grids = explode(",", $row->COL_VUCC_GRIDS);
+
+ foreach($grids as $key) {
+ $grid_2char_confirmed = strtoupper(substr($key,0,2));
+ $grid_4char_confirmed = strtoupper(substr($key,0,4));
+
+ // Check if 2 Char is in array
+ if(!in_array($grid_2char_confirmed, $array_grid_2char_confirmed)){
+ array_push($array_grid_2char_confirmed, $grid_2char_confirmed);
+ }
+
+
+ if(!in_array($grid_4char_confirmed, $array_grid_4char_confirmed)){
+ array_push($array_grid_4char_confirmed, $grid_4char_confirmed);
+ }
+ }
+ }
+ }
+
+ $data['grid_2char_confirmed'] = ($array_grid_2char_confirmed);
+ $data['grid_4char_confirmed'] = ($array_grid_4char_confirmed);
+ $data['grid_6char_confirmed'] = ($array_grid_6char_confirmed);
+
+ $data['grid_2char'] = ($array_grid_2char);
+ $data['grid_4char'] = ($array_grid_4char);
+ $data['grid_6char'] = ($array_grid_6char);
+
+ header('Content-Type: application/json');
+ echo json_encode($data);
+ }
+}
\ No newline at end of file
diff --git a/application/models/Gridmap_model.php b/application/models/Gridmap_model.php
new file mode 100644
index 00000000..f2001814
--- /dev/null
+++ b/application/models/Gridmap_model.php
@@ -0,0 +1,214 @@
+load->model('logbooks_model');
+ $logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
+
+ if (!$logbooks_locations_array) {
+ return null;
+ }
+
+ $location_list = "'".implode("','",$logbooks_locations_array)."'";
+
+ $sql = 'SELECT distinct substring(COL_GRIDSQUARE,1,6) as GRID_SQUARES, COL_BAND FROM '
+ .$this->config->item('table_name')
+ .' WHERE station_id in ('
+ .$location_list.') AND COL_GRIDSQUARE != ""';
+
+ if ($band != 'All') {
+ if ($band == 'SAT') {
+ $sql .= " and col_prop_mode ='" . $band . "'";
+ }
+ else {
+ $sql .= " and col_prop_mode !='SAT'";
+ $sql .= " and col_band ='" . $band . "'";
+ }
+ }
+
+ if ($mode != 'All') {
+ $sql .= " and (col_mode ='" . $mode . "' or col_submode ='" . $mode . "')";
+ }
+
+ $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl);
+
+ return $this->db->query($sql);
+ }
+
+ function get_band($band, $mode, $qsl, $lotw, $eqsl) {
+ $CI =& get_instance();
+ $CI->load->model('logbooks_model');
+ $logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
+
+ if (!$logbooks_locations_array) {
+ return null;
+ }
+
+ $location_list = "'".implode("','",$logbooks_locations_array)."'";
+
+ $sql = 'SELECT distinct substring(COL_GRIDSQUARE,1,6) as GRID_SQUARES, COL_BAND FROM '
+ .$this->config->item('table_name')
+ .' WHERE station_id in ('
+ .$location_list.') AND COL_GRIDSQUARE != ""';
+
+ if ($band != 'All') {
+ if ($band == 'SAT') {
+ $sql .= " and col_prop_mode ='" . $band . "'";
+ }
+ else {
+ $sql .= " and col_prop_mode !='SAT'";
+ $sql .= " and col_band ='" . $band . "'";
+ }
+ }
+
+ if ($mode != 'All') {
+ $sql .= " and (col_mode ='" . $mode . "' or col_submode ='" . $mode . "')";
+ }
+
+ return $this->db->query($sql);
+ }
+
+ function get_band_worked_vucc_squares($band, $mode, $qsl, $lotw, $eqsl) {
+ $CI =& get_instance();
+ $CI->load->model('logbooks_model');
+ $logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
+
+ if (!$logbooks_locations_array) {
+ return null;
+ }
+
+ $location_list = "'".implode("','",$logbooks_locations_array)."'";
+
+ $sql = 'SELECT distinct COL_VUCC_GRIDS, COL_BAND FROM '
+ .$this->config->item('table_name')
+ .' WHERE station_id in ('
+ .$location_list.') AND COL_VUCC_GRIDS != ""';
+
+ if ($band != 'All') {
+ if ($band == 'SAT') {
+ $sql .= " and col_prop_mode ='" . $band . "'";
+ }
+ else {
+ $sql .= " and col_prop_mode !='SAT'";
+ $sql .= " and col_band ='" . $band . "'";
+ }
+ }
+
+ if ($mode != 'All') {
+ $sql .= " and (col_mode ='" . $mode . "' or col_submode ='" . $mode . "')";
+ }
+
+ return $this->db->get($this->config->item('table_name'));
+ }
+
+ function get_band_confirmed_vucc_squares($band, $mode, $qsl, $lotw, $eqsl) {
+ $CI =& get_instance();
+ $CI->load->model('logbooks_model');
+ $logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
+
+ if (!$logbooks_locations_array) {
+ return null;
+ }
+
+ $location_list = "'".implode("','",$logbooks_locations_array)."'";
+
+ $sql = 'SELECT distinct COL_VUCC_GRIDS, COL_BAND FROM '
+ .$this->config->item('table_name')
+ .' WHERE station_id in ('
+ .$location_list.') AND COL_VUCC_GRIDS != ""';
+
+ if ($band != 'All') {
+ if ($band == 'SAT') {
+ $sql .= " and col_prop_mode ='" . $band . "'";
+ }
+ else {
+ $sql .= " and col_prop_mode !='SAT'";
+ $sql .= " and col_band ='" . $band . "'";
+ }
+ }
+
+ if ($mode != 'All') {
+ $sql .= " and (col_mode ='" . $mode . "' or col_submode ='" . $mode . "')";
+ }
+
+ $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl);
+
+ return $this->db->query($sql);
+ }
+
+ // Adds confirmation to query
+ function addQslToQuery($qsl, $lotw, $eqsl) {
+ $sql = '';
+ if ($lotw == "true" && $qsl == "false" && $eqsl == "false") {
+ $sql .= " and col_lotw_qsl_rcvd = 'Y'";
+ }
+
+ if ($qsl == "true" && $lotw == "false" && $eqsl == "false") {
+ $sql .= " and col_qsl_rcvd = 'Y'";
+ }
+
+ if ($eqsl == "true" && $lotw == "false" && $qsl == "false") {
+ $sql .= " and col_eqsl_qsl_rcvd = 'Y'";
+ }
+
+ if ($lotw == "true" && $qsl == "true" && $eqsl == "false") {
+ $sql .= " and (col_lotw_qsl_rcvd = 'Y' or col_qsl_rcvd = 'Y')";
+ }
+
+ if ($qsl == "true" && $lotw == "false" && $eqsl == "true") {
+ $sql .= " and (col_qsl_rcvd = 'Y' or col_eqsl_qsl_rcvd = 'Y')";
+ }
+
+ if ($eqsl == "true" && $lotw == "true" && $qsl == "false") {
+ $sql .= " and (col_eqsl_qsl_rcvd = 'Y' or col_lotw_qsl_rcvd = 'Y')";
+ }
+
+ if ($qsl == "true" && $lotw == "true" && $eqsl == "true") {
+ $sql .= " and (col_qsl_rcvd = 'Y' or col_lotw_qsl_rcvd = 'Y' or col_eqsl_qsl_rcvd = 'Y')";
+ }
+
+ if ($qsl == "false" && $lotw == "false" && $eqsl == "false") {
+ $sql .= " and (col_qsl_rcvd != 'Y' and col_lotw_qsl_rcvd != 'Y' and col_eqsl_qsl_rcvd != 'Y')";
+ }
+ return $sql;
+ }
+
+ /*
+ * Get's the worked modes from the log
+ */
+ function get_worked_modes() {
+ $CI =& get_instance();
+ $CI->load->model('logbooks_model');
+ $logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
+
+ if (!$logbooks_locations_array) {
+ return null;
+ }
+
+ $location_list = "'".implode("','",$logbooks_locations_array)."'";
+
+ // get all worked modes from database
+ $data = $this->db->query(
+ "SELECT distinct LOWER(`COL_MODE`) as `COL_MODE` FROM `" . $this->config->item('table_name') . "` WHERE station_id in (" . $location_list . ") order by COL_MODE ASC"
+ );
+ $results = array();
+ foreach ($data->result() as $row) {
+ array_push($results, $row->COL_MODE);
+ }
+
+ $data = $this->db->query(
+ "SELECT distinct LOWER(`COL_SUBMODE`) as `COL_SUBMODE` FROM `" . $this->config->item('table_name') . "` WHERE station_id in (" . $location_list . ") and coalesce(COL_SUBMODE, '') <> '' order by COL_SUBMODE ASC"
+ );
+ foreach ($data->result() as $row) {
+ if (!in_array($row, $results)) {
+ array_push($results, $row->COL_SUBMODE);
+ }
+ }
+
+ asort($results);
+
+ return $results;
+ }
+}
\ No newline at end of file
diff --git a/application/views/gridmap/index.php b/application/views/gridmap/index.php
new file mode 100644
index 00000000..264c4c6d
--- /dev/null
+++ b/application/views/gridmap/index.php
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+ session->flashdata('message')) { ?>
+
+
+
session->flashdata('message'); ?>
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/js/leaflet/L.MaidenheadColouredGridMap.js b/assets/js/leaflet/L.MaidenheadColouredGridMap.js
new file mode 100644
index 00000000..81cfd895
--- /dev/null
+++ b/assets/js/leaflet/L.MaidenheadColouredGridMap.js
@@ -0,0 +1,217 @@
+/*
+ * L.Maidenhead displays a Maidenhead Locator of lines on the map.
+ */
+
+L.Maidenhead = L.LayerGroup.extend({
+
+
+ options: {
+ // Line and label color
+ color: 'rgba(255, 0, 0, 0.4)',
+
+ // Redraw on move or moveend
+ redraw: 'move'
+ },
+
+ initialize: function (options) {
+ L.LayerGroup.prototype.initialize.call(this);
+ L.Util.setOptions(this, options);
+ },
+
+ onAdd: function (map) {
+ this._map = map;
+ var grid = this.redraw();
+ this._map.on('viewreset '+ this.options.redraw, function () {
+ grid.redraw();
+ });
+
+ this.eachLayer(map.addLayer, map);
+ },
+
+ onRemove: function (map) {
+ // remove layer listeners and elements
+ map.off('viewreset '+ this.options.redraw, this.map);
+ this.eachLayer(this.removeLayer, this);
+ },
+
+ redraw: function () {
+ var d3 = new Array(20, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1 / 24, 1 / 24, 1 / 24, 1 / 24, 1 / 24, 1 / 240, 1 / 240, 1 / 240, 1 / 240, 1 / 240 / 24, 1 / 240 / 24);
+ var lat_cor = new Array(0, 8, 8, 8, 2.5, 2.2, 6, 8, 8, 8, 1.4, 2.5, 3, 3.5, 4, 4, 3.5, 3.5, 3, 1.8, 1.6); // Used for gridsquare text offset
+ var bounds = map.getBounds();
+ var zoom = map.getZoom();
+ console.log(zoom);
+ var unit = d3[zoom];
+ var lcor = lat_cor[zoom];
+ var w = bounds.getWest();
+ var e = bounds.getEast();
+ var n = bounds.getNorth();
+ var s = bounds.getSouth();
+ var field_lat_cor = new Array(0, 8, 8, 9, 8, 7, 6, 8, 8, 8, 1.4, 2.5, 3, 3.5, 4, 4, 3.5, 3.5, 3, 1.8, 1.6); // Used for field text offset
+ var field_cor = field_lat_cor[zoom];
+ if (zoom==1) {var c = 2;} else {var c = 0.2;} // Height offset
+ if (n > 85) n = 85;
+ if (s < -85) s = -85;
+ var left = Math.floor(w/(unit*2))*(unit*2);
+ var right = Math.ceil(e/(unit*2))*(unit*2);
+ var top = Math.ceil(n/unit)*unit;
+ var bottom = Math.floor(s/unit)*unit;
+ this.eachLayer(this.removeLayer, this);
+
+ for (var lon = left; lon < right; lon += (unit*2)) {
+ if (lon > -180 || lon < 180) {
+ for (var lat = bottom; lat < top; lat += unit) {
+ var bounds = [[lat,lon],[lat+unit,lon+(unit*2)]];
+ var locator = this._getLocator(lon,lat);
+
+ if(grid_two.includes(locator) || grid_four.includes(locator) || grid_six.includes(locator)) {
+
+ if(grid_two_confirmed.includes(locator) || grid_four_confirmed.includes(locator) || grid_six_confirmed.includes(locator)) {
+ var rectConfirmed = L.rectangle(bounds, {className: 'grid-rectangle grid-confirmed', color: 'rgba(144,238,144, 0.6)', weight: 1, fillOpacity: 1, fill:true, interactive: false});
+ this.addLayer(rectConfirmed);
+ } else {
+ var rectWorked = L.rectangle(bounds, {className: 'grid-rectangle grid-worked', color: this.options.color, weight: 1, fillOpacity: 1, fill:true, interactive: false})
+ this.addLayer(rectWorked);
+ }
+ // Controls text on grid on various zoom levels
+ if (zoom < 2 || zoom > 2) {
+ this.addLayer(this._getLabel(lon+unit-(unit/lcor),lat+(unit/2)+(unit/lcor*c)));
+ }
+ if (zoom < 3 ) {
+ this.addLayer(L.rectangle(bounds, {className: 'grid-rectangle', color: this.options.color, weight: 1, fill:false, interactive: false}));
+ }
+ } else {
+ if (zoom < 3 || zoom > 5) {
+ this.addLayer(L.rectangle(bounds, {className: 'grid-rectangle', color: this.options.color, weight: 1, fill:false, interactive: false}));
+ }
+ }
+ // This one shows all grids, not just the worked/confirmed
+ if (zoom < 3 || zoom > 5) {
+ this.addLayer(this._getLabel(lon+unit-(unit/lcor),lat+(unit/2)+(unit/lcor*c)));
+ }
+ }
+ }
+ }
+ // Added this to print fields and field name, while still showing worked/confirmed gridsquares
+ if (zoom < 6 && zoom > 2) {
+ unit = 10;
+ var left = Math.floor(w / (unit * 2)) * (unit * 2);
+ var right = Math.ceil(e / (unit * 2)) * (unit * 2);
+ var top = Math.ceil(n / unit) * unit;
+ var bottom = Math.floor(s / unit) * unit;
+ for (var lon = left; lon < right; lon += (unit * 2)) {
+ for (var lat = bottom; lat < top; lat += unit) {
+ var bounds = [[lat, lon], [lat + unit, lon + (unit * 2)]];
+
+ this.addLayer(L.rectangle(bounds, {
+ className: 'grid-rectangle',
+ color: this.options.color,
+ weight: 1,
+ fill: false,
+ interactive: false
+ }));
+ this.addLayer(this._getLabel2(lon + unit - (unit / field_cor), lat + (unit / 2) + (unit / lcor * c)));
+ }
+ }
+ }
+ return this;
+ },
+
+ _getLabel: function(lon,lat) {
+ var title_size = new Array(0, 10, 14, 16, 8.5, 13, 14, 16, 24, 36, 12, 14, 20, 36, 60, 12, 20, 36, 60, 12, 24); // Controls text size on labels
+ var zoom = map.getZoom();
+ var size = title_size[zoom]+'px';
+ var title = '';
+ var locator = this._getLocator(lon,lat);
+ if (zoom != 3) {
+ title = '' + locator + '';
+ }
+ var myIcon = L.divIcon({className: 'my-div-icon', html: title});
+ var marker = L.marker([lat,lon], {icon: myIcon}, clickable=false);
+ if (zoom == 4 || zoom == 3) {
+ marker.bindTooltip(locator);
+ }
+ if (typeof gridsquaremap !== 'undefined' && gridsquaremap == true) {
+ marker.on('click', function(event) {
+ spawnGridsquareModal(locator);
+ });
+ }
+ return marker;
+ },
+
+ _getLocator: function(lon,lat) {
+ var ydiv_arr=new Array(10, 1, 1/24, 1/240, 1/240/24);
+ var d1 = "ABCDEFGHIJKLMNOPQR".split("");
+ var d2 = "ABCDEFGHIJKLMNOPQRSTUVWX".split("");
+ var d4 = new Array(0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5);
+ var locator = "";
+ var x = lon;
+ var y = lat;
+ var precision = d4[map.getZoom()];
+ while (x < -180) {x += 360;}
+ while (x > 180) {x -=360;}
+ x = x + 180;
+ y = y + 90;
+ locator = locator + d1[Math.floor(x/20)] + d1[Math.floor(y/10)];
+ for (var i=0; i<4; i=i+1) {
+ if (precision > i+1) {
+ rlon = x%(ydiv_arr[i]*2);
+ rlat = y%(ydiv_arr[i]);
+ if ((i%2)==0) {
+ locator += Math.floor(rlon/(ydiv_arr[i+1]*2)) +""+ Math.floor(rlat/(ydiv_arr[i+1]));
+ } else {
+ locator += d2[Math.floor(rlon/(ydiv_arr[i+1]*2))] +""+ d2[Math.floor(rlat/(ydiv_arr[i+1]))];
+ }
+ }
+ }
+ return locator;
+ },
+
+ /*
+ Need this for the field printing, while showing worked/confirmed grids
+ */
+ _getLabel2: function(lon,lat) {
+ var title_size = new Array(0, 10, 12, 16, 20, 26, 26, 16, 24, 36, 12, 14, 20, 36, 60, 12, 20, 36, 60, 12, 24);
+ var zoom = map.getZoom();
+ var size = title_size[zoom]+'px';
+ var title = '' + this._getLocator2(lon,lat) + '';
+ var myIcon = L.divIcon({className: 'my-div-icon', html: title});
+ var marker = L.marker([lat,lon], {icon: myIcon}, clickable=false);
+ return marker;
+ },
+
+ /*
+ Need this for the field printing, while showing worked/confirmed grids
+ */
+ _getLocator2: function(lon,lat) {
+ var ydiv_arr=new Array(10, 1, 1/24, 1/240, 1/240/24);
+ var d1 = "ABCDEFGHIJKLMNOPQR".split("");
+ var d2 = "ABCDEFGHIJKLMNOPQRSTUVWX".split("");
+ var d4 = new Array(0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5);
+ var locator = "";
+ var x = lon;
+ var y = lat;
+ var precision = d4[map.getZoom()];
+ while (x < -180) {x += 360;}
+ while (x > 180) {x -=360;}
+ x = x + 180;
+ y = y + 90;
+ locator = locator + d1[Math.floor(x/20)] + d1[Math.floor(y/10)];
+ for (var i=0; i<4; i=i+1) {
+ if (precision > i+1) {
+ rlon = x%(ydiv_arr[i]*2);
+ rlat = y%(ydiv_arr[i]);
+ if ((i%2)==0) {
+ locator += Math.floor(rlon/(ydiv_arr[i+1]*2)) +""+ Math.floor(rlat/(ydiv_arr[i+1]));
+ } else {
+ locator += d2[Math.floor(rlon/(ydiv_arr[i+1]*2))] +""+ d2[Math.floor(rlat/(ydiv_arr[i+1]))];
+ }
+ }
+ }
+ return locator;
+ },
+
+});
+
+L.maidenhead = function (options) {
+ return new L.Maidenhead(options);
+};
diff --git a/assets/js/sections/gridmap.js b/assets/js/sections/gridmap.js
new file mode 100644
index 00000000..d11df9fe
--- /dev/null
+++ b/assets/js/sections/gridmap.js
@@ -0,0 +1,112 @@
+var map;
+var grid_two = '';
+var grid_four = '';
+var grid_six = '';
+var grid_two_confirmed = '';
+var grid_four_confirmed = '';
+var grid_six_confirmed = '';
+
+function gridPlot(form) {
+ $('#plot').prop("disabled", true);
+ // If map is already initialized
+ var container = L.DomUtil.get('gridsquare_map');
+
+ if(container != null){
+ container._leaflet_id = null;
+ container.remove();
+ $("#gridmapcontainer").append('');
+ }
+
+ $.ajax({
+ url: site_url + '/gridmap/getGridsjs',
+ type: 'post',
+ data: {
+ band: $("#band").val(),
+ mode: $("#mode").val(),
+ qsl: $("#qsl").is(":checked"),
+ lotw: $("#lotw").is(":checked"),
+ eqsl: $("#eqsl").is(":checked")
+ },
+ success: function (data) {
+ $('#plot').prop("disabled", false);
+ grid_two = data.grid_2char;
+ grid_four = data.grid_4char;
+ grid_six = data.grid_6char;
+ grid_two_confirmed = data.grid_2char_confirmed;
+ grid_four_confirmed = data.grid_4char_confirmed;
+ grid_six_confirmed = data.grid_6char_confirmed;
+ var layer = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
+ maxZoom: 9,
+ attribution: 'Map data © OpenStreetMap',
+ id: 'mapbox.streets'
+ });
+
+ map = L.map('gridsquare_map', {
+ layers: [layer],
+ center: [19, 0],
+ zoom: 3,
+ minZoom: 2,
+ fullscreenControl: true,
+ fullscreenControlOptions: {
+ position: 'topleft'
+ },
+ });
+
+ var printer = L.easyPrint({
+ tileLayer: layer,
+ sizeModes: ['Current'],
+ filename: 'myMap',
+ exportOnly: true,
+ hideControlContainer: true
+ }).addTo(map);
+ var maidenhead = L.maidenhead().addTo(map);
+ },
+ error: function (data) {
+ },
+ });
+}
+
+function spawnGridsquareModal(loc_4char) {
+ $.ajax({
+ url: base_url + 'index.php/awards/qso_details_ajax',
+ type: 'post',
+ data: {
+ 'Searchphrase': loc_4char,
+ 'Band': $("#band").val(),
+ 'Mode': $("#mode").val(),
+ 'Type': 'VUCC'
+ },
+ success: function (html) {
+ BootstrapDialog.show({
+ title: 'QSO Data',
+ cssClass: 'qso-dialog',
+ size: BootstrapDialog.SIZE_WIDE,
+ nl2br: false,
+ 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',
+ action: function(dialogItself) {
+ dialogItself.close();
+ }
+ }]
+ });
+ }
+ });
+}
\ No newline at end of file
From 60242ebbee756ab8d4f6145b2e9c7092fd9f758c Mon Sep 17 00:00:00 2001
From: Andreas <6977712+AndreasK79@users.noreply.github.com>
Date: Mon, 19 Jun 2023 09:38:47 +0200
Subject: [PATCH 2/9] [Gridmap] Query fix
---
application/controllers/Gridmap.php | 13 +++++++------
application/models/Gridmap_model.php | 2 +-
2 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/application/controllers/Gridmap.php b/application/controllers/Gridmap.php
index ed433705..fc56ac3d 100644
--- a/application/controllers/Gridmap.php
+++ b/application/controllers/Gridmap.php
@@ -13,15 +13,16 @@ class Gridmap extends CI_Controller {
$this->load->model('gridmap_model');
$data['modes'] = $this->gridmap_model->get_worked_modes();
+
$data['bands'] = $this->bands->get_worked_bands();
-
+
$footerData = [];
$footerData['scripts'] = [
- 'assets/js/leaflet/L.MaidenheadColouredGridMap.js',
+ 'assets/js/leaflet/L.MaidenheadColouredGridMap.js',
'assets/js/sections/gridmap.js?'
];
-
+
$this->load->view('interface_assets/header', $data);
$this->load->view('gridmap/index');
$this->load->view('interface_assets/footer', $footerData);
@@ -246,7 +247,7 @@ class Gridmap extends CI_Controller {
}
$query_vucc = $this->gridmap_model->get_band_worked_vucc_squares($band, $mode, $qsl, $lotw, $eqsl);
- if ($query && $query_vucc->num_rows() > 0) {
+ if ($query_vucc && $query_vucc->num_rows() > 0) {
foreach ($query_vucc->result() as $row) {
$grids = explode(",", $row->COL_VUCC_GRIDS);
@@ -268,10 +269,10 @@ class Gridmap extends CI_Controller {
}
}
- // Confirmed Squares
+ // // Confirmed Squares
$query_vucc = $this->gridmap_model->get_band_confirmed_vucc_squares($band, $mode, $qsl, $lotw, $eqsl);
- if ($query && $query_vucc->num_rows() > 0) {
+ if ($query_vucc && $query_vucc->num_rows() > 0) {
foreach ($query_vucc->result() as $row) {
$grids = explode(",", $row->COL_VUCC_GRIDS);
diff --git a/application/models/Gridmap_model.php b/application/models/Gridmap_model.php
index f2001814..a34cfeb2 100644
--- a/application/models/Gridmap_model.php
+++ b/application/models/Gridmap_model.php
@@ -100,7 +100,7 @@ class Gridmap_model extends CI_Model {
$sql .= " and (col_mode ='" . $mode . "' or col_submode ='" . $mode . "')";
}
- return $this->db->get($this->config->item('table_name'));
+ return $this->db->query($sql);
}
function get_band_confirmed_vucc_squares($band, $mode, $qsl, $lotw, $eqsl) {
From 3d1b35b068bb47a93073ec7feda2e3b8a26db73d Mon Sep 17 00:00:00 2001
From: Andreas <6977712+AndreasK79@users.noreply.github.com>
Date: Mon, 19 Jun 2023 11:03:29 +0200
Subject: [PATCH 3/9] [Gridmap] Added legend for totals
---
application/views/gridmap/index.php | 28 ++++++++++++++++++++++++++++
assets/js/sections/gridmap.js | 15 +++++++++++++++
2 files changed, 43 insertions(+)
diff --git a/application/views/gridmap/index.php b/application/views/gridmap/index.php
index 264c4c6d..534680ea 100644
--- a/application/views/gridmap/index.php
+++ b/application/views/gridmap/index.php
@@ -1,3 +1,31 @@
+
diff --git a/assets/js/sections/gridmap.js b/assets/js/sections/gridmap.js
index d11df9fe..74986cb9 100644
--- a/assets/js/sections/gridmap.js
+++ b/assets/js/sections/gridmap.js
@@ -59,6 +59,21 @@ function gridPlot(form) {
exportOnly: true,
hideControlContainer: true
}).addTo(map);
+
+ /*Legend specific*/
+ var legend = L.control({ position: "topright" });
+
+ legend.onAdd = function(map) {
+ var div = L.DomUtil.create("div", "legend");
+ div.innerHTML += "
Gridsquares
";
+ div.innerHTML += '
Gridsquares confirmed ('+grid_four_confirmed.length+')';
+ div.innerHTML += '
Gridsquares not confirmed ('+(grid_four.length - grid_four_confirmed.length)+')';
+ div.innerHTML += '
Total gridsquares worked ('+grid_four.length+')';
+ return div;
+ };
+
+ legend.addTo(map);
+
var maidenhead = L.maidenhead().addTo(map);
},
error: function (data) {
From db590c969b03904f61897007ce8eaf5c4f32e295 Mon Sep 17 00:00:00 2001
From: Andreas <6977712+AndreasK79@users.noreply.github.com>
Date: Mon, 19 Jun 2023 11:29:46 +0200
Subject: [PATCH 4/9] [Gridmap] Added sat selection
---
application/controllers/Gridmap.php | 153 ++-------------------------
application/models/Gridmap_model.php | 22 +++-
application/views/gridmap/index.php | 25 +++--
assets/js/sections/gridmap.js | 12 ++-
4 files changed, 53 insertions(+), 159 deletions(-)
diff --git a/application/controllers/Gridmap.php b/application/controllers/Gridmap.php
index fc56ac3d..03ffe737 100644
--- a/application/controllers/Gridmap.php
+++ b/application/controllers/Gridmap.php
@@ -13,9 +13,8 @@ class Gridmap extends CI_Controller {
$this->load->model('gridmap_model');
$data['modes'] = $this->gridmap_model->get_worked_modes();
-
-
- $data['bands'] = $this->bands->get_worked_bands();
+ $data['bands'] = $this->bands->get_worked_bands();
+ $data['sats_available'] = $this->bands->get_worked_sats();
$footerData = [];
$footerData['scripts'] = [
@@ -28,151 +27,13 @@ class Gridmap extends CI_Controller {
$this->load->view('interface_assets/footer', $footerData);
}
- public function getGrids() {
- $band = $this->security->xss_clean($this->input->post('band'));
- $mode = $this->security->xss_clean($this->input->post('mode'));
- $qsl = $this->security->xss_clean($this->input->post('qsl'));
- $lotw = $this->security->xss_clean($this->input->post('lotw'));
- $eqsl = $this->security->xss_clean($this->input->post('eqsl'));
- $this->load->model('gridmap_model');
-
- $array_grid_2char = array();
- $array_grid_4char = array();
- $array_grid_6char = array();
-
- $array_grid_2char_confirmed = array();
- $array_grid_4char_confirmed = array();
- $array_grid_6char_confirmed = array();
-
- $grid_2char = "";
- $grid_4char = "";
- $grid_6char = "";
-
- $grid_2char_confirmed = "";
- $grid_4char_confirmed = "";
- $grid_6char_confirmed = "";
-
- $query = $this->gridmap_model->get_band_confirmed($band, $mode, $qsl, $lotw, $eqsl);
-
- if ($query && $query->num_rows() > 0) {
- foreach ($query->result() as $row) {
- $grid_2char_confirmed = strtoupper(substr($row->GRID_SQUARES,0,2));
- $grid_4char_confirmed = strtoupper(substr($row->GRID_SQUARES,0,4));
- if ($this->config->item('map_6digit_grids')) {
- $grid_6char_confirmed = strtoupper(substr($row->GRID_SQUARES,0,6));
- }
-
- // Check if 2 Char is in array
- if(!in_array($grid_2char_confirmed, $array_grid_2char_confirmed)){
- array_push($array_grid_2char_confirmed, $grid_2char_confirmed);
- }
-
- if(!in_array($grid_4char_confirmed, $array_grid_4char_confirmed)){
- array_push($array_grid_4char_confirmed, $grid_4char_confirmed);
- }
-
- if ($this->config->item('map_6digit_grids')) {
- if(!in_array($grid_6char_confirmed, $array_grid_6char_confirmed)){
- array_push($array_grid_6char_confirmed, $grid_6char_confirmed);
- }
- }
- }
- }
-
- $query = $this->gridmap_model->get_band($band, $mode, $qsl, $lotw, $eqsl);
-
- if ($query && $query->num_rows() > 0) {
- foreach ($query->result() as $row) {
-
- $grid_two = strtoupper(substr($row->GRID_SQUARES,0,2));
- $grid_four = strtoupper(substr($row->GRID_SQUARES,0,4));
- if ($this->config->item('map_6digit_grids')) {
- $grid_six = strtoupper(substr($row->GRID_SQUARES,0,6));
- }
-
- // Check if 2 Char is in array
- if(!in_array($grid_two, $array_grid_2char)){
- array_push($array_grid_2char, $grid_two);
- }
-
- if(!in_array($grid_four, $array_grid_4char)){
- array_push($array_grid_4char, $grid_four);
- }
-
- if ($this->config->item('map_6digit_grids')) {
- if(!in_array($grid_six, $array_grid_6char)){
- array_push($array_grid_6char, $grid_six);
- }
- }
- }
- }
- $query_vucc = $this->gridmap_model->get_band_worked_vucc_squares($band, $mode, $qsl, $lotw, $eqsl);
-
- if ($query && $query_vucc->num_rows() > 0) {
- foreach ($query_vucc->result() as $row) {
-
- $grids = explode(",", $row->COL_VUCC_GRIDS);
-
- foreach($grids as $key) {
- $grid_two = strtoupper(substr($key,0,2));
- $grid_four = strtoupper(substr($key,0,4));
-
- // Check if 2 Char is in array
- if(!in_array($grid_two, $array_grid_2char)){
- array_push($array_grid_2char, $grid_two);
- }
-
-
- if(!in_array($grid_four, $array_grid_4char)){
- array_push($array_grid_4char, $grid_four);
- }
- }
- }
- }
-
- // Confirmed Squares
- $query_vucc = $this->gridmap_model->get_band_confirmed_vucc_squares($band, $mode, $qsl, $lotw, $eqsl);
-
- if ($query && $query_vucc->num_rows() > 0) {
- foreach ($query_vucc->result() as $row) {
-
- $grids = explode(",", $row->COL_VUCC_GRIDS);
-
- foreach($grids as $key) {
- $grid_2char_confirmed = strtoupper(substr($key,0,2));
- $grid_4char_confirmed = strtoupper(substr($key,0,4));
-
- // Check if 2 Char is in array
- if(!in_array($grid_2char_confirmed, $array_grid_2char_confirmed)){
- array_push($array_grid_2char_confirmed, $grid_2char_confirmed);
- }
-
-
- if(!in_array($grid_4char_confirmed, $array_grid_4char_confirmed)){
- array_push($array_grid_4char_confirmed, $grid_4char_confirmed);
- }
- }
- }
- }
-
- $data['grid_2char_confirmed'] = ($array_grid_2char_confirmed);
- $data['grid_4char_confirmed'] = ($array_grid_4char_confirmed);
- $data['grid_6char_confirmed'] = ($array_grid_6char_confirmed);
-
- $data['grid_2char'] = ($array_grid_2char);
- $data['grid_4char'] = ($array_grid_4char);
- $data['grid_6char'] = ($array_grid_6char);
-
- header('Content-Type: application/json');
- echo json_encode($data);
- }
-
public function getGridsjs() {
$band = $this->security->xss_clean($this->input->post('band'));
$mode = $this->security->xss_clean($this->input->post('mode'));
$qsl = $this->security->xss_clean($this->input->post('qsl'));
$lotw = $this->security->xss_clean($this->input->post('lotw'));
$eqsl = $this->security->xss_clean($this->input->post('eqsl'));
+ $sat = $this->security->xss_clean($this->input->post('sat'));
$this->load->model('gridmap_model');
$array_grid_2char = array();
@@ -191,7 +52,7 @@ class Gridmap extends CI_Controller {
$grid_4char_confirmed = "";
$grid_6char_confirmed = "";
- $query = $this->gridmap_model->get_band_confirmed($band, $mode, $qsl, $lotw, $eqsl);
+ $query = $this->gridmap_model->get_band_confirmed($band, $mode, $qsl, $lotw, $eqsl, $sat);
if ($query && $query->num_rows() > 0) {
foreach ($query->result() as $row) {
@@ -218,7 +79,7 @@ class Gridmap extends CI_Controller {
}
}
- $query = $this->gridmap_model->get_band($band, $mode, $qsl, $lotw, $eqsl);
+ $query = $this->gridmap_model->get_band($band, $mode, $qsl, $lotw, $eqsl, $sat);
if ($query && $query->num_rows() > 0) {
foreach ($query->result() as $row) {
@@ -245,7 +106,7 @@ class Gridmap extends CI_Controller {
}
}
}
- $query_vucc = $this->gridmap_model->get_band_worked_vucc_squares($band, $mode, $qsl, $lotw, $eqsl);
+ $query_vucc = $this->gridmap_model->get_band_worked_vucc_squares($band, $mode, $qsl, $lotw, $eqsl, $sat);
if ($query_vucc && $query_vucc->num_rows() > 0) {
foreach ($query_vucc->result() as $row) {
@@ -270,7 +131,7 @@ class Gridmap extends CI_Controller {
}
// // Confirmed Squares
- $query_vucc = $this->gridmap_model->get_band_confirmed_vucc_squares($band, $mode, $qsl, $lotw, $eqsl);
+ $query_vucc = $this->gridmap_model->get_band_confirmed_vucc_squares($band, $mode, $qsl, $lotw, $eqsl, $sat);
if ($query_vucc && $query_vucc->num_rows() > 0) {
foreach ($query_vucc->result() as $row) {
diff --git a/application/models/Gridmap_model.php b/application/models/Gridmap_model.php
index a34cfeb2..fd44b0bd 100644
--- a/application/models/Gridmap_model.php
+++ b/application/models/Gridmap_model.php
@@ -2,7 +2,7 @@
class Gridmap_model extends CI_Model {
- function get_band_confirmed($band, $mode, $qsl, $lotw, $eqsl) {
+ function get_band_confirmed($band, $mode, $qsl, $lotw, $eqsl, $sat) {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
@@ -21,6 +21,9 @@ class Gridmap_model extends CI_Model {
if ($band != 'All') {
if ($band == 'SAT') {
$sql .= " and col_prop_mode ='" . $band . "'";
+ if ($sat != 'All') {
+ $sql .= " and col_sat_name ='" . $sat . "'";
+ }
}
else {
$sql .= " and col_prop_mode !='SAT'";
@@ -37,7 +40,7 @@ class Gridmap_model extends CI_Model {
return $this->db->query($sql);
}
- function get_band($band, $mode, $qsl, $lotw, $eqsl) {
+ function get_band($band, $mode, $qsl, $lotw, $eqsl, $sat) {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
@@ -56,6 +59,9 @@ class Gridmap_model extends CI_Model {
if ($band != 'All') {
if ($band == 'SAT') {
$sql .= " and col_prop_mode ='" . $band . "'";
+ if ($sat != 'All') {
+ $sql .= " and col_sat_name ='" . $sat . "'";
+ }
}
else {
$sql .= " and col_prop_mode !='SAT'";
@@ -70,7 +76,7 @@ class Gridmap_model extends CI_Model {
return $this->db->query($sql);
}
- function get_band_worked_vucc_squares($band, $mode, $qsl, $lotw, $eqsl) {
+ function get_band_worked_vucc_squares($band, $mode, $qsl, $lotw, $eqsl, $sat) {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
@@ -89,6 +95,9 @@ class Gridmap_model extends CI_Model {
if ($band != 'All') {
if ($band == 'SAT') {
$sql .= " and col_prop_mode ='" . $band . "'";
+ if ($sat != 'All') {
+ $sql .= " and col_sat_name ='" . $sat . "'";
+ }
}
else {
$sql .= " and col_prop_mode !='SAT'";
@@ -103,7 +112,7 @@ class Gridmap_model extends CI_Model {
return $this->db->query($sql);
}
- function get_band_confirmed_vucc_squares($band, $mode, $qsl, $lotw, $eqsl) {
+ function get_band_confirmed_vucc_squares($band, $mode, $qsl, $lotw, $eqsl, $sat) {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
@@ -119,9 +128,12 @@ class Gridmap_model extends CI_Model {
.' WHERE station_id in ('
.$location_list.') AND COL_VUCC_GRIDS != ""';
- if ($band != 'All') {
+ if ($band != 'All') {
if ($band == 'SAT') {
$sql .= " and col_prop_mode ='" . $band . "'";
+ if ($sat != 'All') {
+ $sql .= " and col_sat_name ='" . $sat . "'";
+ }
}
else {
$sql .= " and col_prop_mode !='SAT'";
diff --git a/application/views/gridmap/index.php b/application/views/gridmap/index.php
index 534680ea..2a66f47c 100644
--- a/application/views/gridmap/index.php
+++ b/application/views/gridmap/index.php
@@ -40,16 +40,27 @@
echo '
'."\n";
} ?>
+
+
+
+
+
+
diff --git a/assets/js/sections/gridmap.js b/assets/js/sections/gridmap.js
index 74986cb9..f37779bb 100644
--- a/assets/js/sections/gridmap.js
+++ b/assets/js/sections/gridmap.js
@@ -1,3 +1,12 @@
+$('#band').change(function(){
+ var band = $("#band option:selected").text();
+ if (band != "SAT") {
+ $("#sats").prop('disabled', true);
+ } else {
+ $("#sats").prop('disabled', false);
+ }
+});
+
var map;
var grid_two = '';
var grid_four = '';
@@ -25,7 +34,8 @@ function gridPlot(form) {
mode: $("#mode").val(),
qsl: $("#qsl").is(":checked"),
lotw: $("#lotw").is(":checked"),
- eqsl: $("#eqsl").is(":checked")
+ eqsl: $("#eqsl").is(":checked"),
+ sat: $("#sats").val(),
},
success: function (data) {
$('#plot').prop("disabled", false);
From 9074cceec49a47b1b65d206d485ef4971dfeebdc Mon Sep 17 00:00:00 2001
From: Andreas <6977712+AndreasK79@users.noreply.github.com>
Date: Tue, 20 Jun 2023 18:39:37 +0200
Subject: [PATCH 5/9] [Gridmap] Added layer from option. Some translation
---
application/controllers/Gridmap.php | 6 +++++-
application/views/gridmap/index.php | 15 +++++++++++----
assets/js/sections/gridmap.js | 8 ++++++--
3 files changed, 22 insertions(+), 7 deletions(-)
diff --git a/application/controllers/Gridmap.php b/application/controllers/Gridmap.php
index 03ffe737..038626c4 100644
--- a/application/controllers/Gridmap.php
+++ b/application/controllers/Gridmap.php
@@ -15,7 +15,11 @@ class Gridmap extends CI_Controller {
$data['modes'] = $this->gridmap_model->get_worked_modes();
$data['bands'] = $this->bands->get_worked_bands();
$data['sats_available'] = $this->bands->get_worked_sats();
-
+
+ $data['layer'] = $this->optionslib->get_option('option_map_tile_server');
+
+ $data['attribution'] = $this->optionslib->get_option('option_map_tile_server_copyright');
+
$footerData = [];
$footerData['scripts'] = [
'assets/js/leaflet/L.MaidenheadColouredGridMap.js',
diff --git a/application/views/gridmap/index.php b/application/views/gridmap/index.php
index 2a66f47c..29014f2b 100644
--- a/application/views/gridmap/index.php
+++ b/application/views/gridmap/index.php
@@ -1,3 +1,5 @@
+
+