From c1fe605e1af6a0f28d32481054e29795a9c08fdf Mon Sep 17 00:00:00 2001 From: Andreas Kristiansen <6977712+AndreasK79@users.noreply.github.com> Date: Fri, 6 Sep 2024 11:24:03 +0200 Subject: [PATCH 1/4] [Awards] Added Worked All Continents --- application/controllers/Awards.php | 73 +++++ application/models/Logbook_model.php | 3 + application/models/Wac.php | 253 ++++++++++++++++++ application/views/awards/wac/index.php | 204 ++++++++++++++ application/views/interface_assets/footer.php | 26 ++ application/views/interface_assets/header.php | 2 + 6 files changed, 561 insertions(+) create mode 100644 application/models/Wac.php create mode 100644 application/views/awards/wac/index.php diff --git a/application/controllers/Awards.php b/application/controllers/Awards.php index 675ff5990..e9bc2085a 100644 --- a/application/controllers/Awards.php +++ b/application/controllers/Awards.php @@ -1838,4 +1838,77 @@ class Awards extends CI_Controller { echo json_encode($zones); } + public function wac() { + $this->load->model('logbooks_model'); + $logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook')); + + $this->load->model('wac'); + $this->load->model('modes'); + $this->load->model('bands'); + + $data['worked_bands'] = $this->bands->get_worked_bands(); + $data['modes'] = $this->modes->active(); // Used in the view for mode select + + $data['orbits'] = $this->bands->get_worked_orbits(); + $data['sats_available'] = $this->bands->get_worked_sats(); + $data['user_default_band'] = $this->session->userdata('user_default_band'); + + if ($this->input->post('band') != NULL) { // Band is not set when page first loads. + if ($this->input->post('band') == 'All') { // Did the user specify a band? If not, use all bands + $bands = $data['worked_bands']; + } + else { + $bands[] = $this->input->post('band'); + } + } + else { + $bands = $data['worked_bands']; + } + + $data['bands'] = $bands; // Used for displaying selected band(s) in the table in the view + + if($this->input->method() === 'post') { + $postdata['qsl'] = $this->security->xss_clean($this->input->post('qsl')); + $postdata['lotw'] = $this->security->xss_clean($this->input->post('lotw')); + $postdata['eqsl'] = $this->security->xss_clean($this->input->post('eqsl')); + $postdata['qrz'] = $this->security->xss_clean($this->input->post('qrz')); + $postdata['worked'] = $this->security->xss_clean($this->input->post('worked')); + $postdata['confirmed'] = $this->security->xss_clean($this->input->post('confirmed')); + $postdata['notworked'] = $this->security->xss_clean($this->input->post('notworked')); + $postdata['band'] = $this->security->xss_clean($this->input->post('band')); + $postdata['mode'] = $this->security->xss_clean($this->input->post('mode')); + $postdata['sat'] = $this->security->xss_clean($this->input->post('sats')); + $postdata['orbit'] = $this->security->xss_clean($this->input->post('orbits')); + } + else { // Setting default values at first load of page + $postdata['qsl'] = 1; + $postdata['lotw'] = 1; + $postdata['eqsl'] = 0; + $postdata['qrz'] = 0; + $postdata['worked'] = 1; + $postdata['confirmed'] = 1; + $postdata['notworked'] = 1; + $postdata['band'] = 'All'; + $postdata['mode'] = 'All'; + $postdata['sat'] = 'All'; + $postdata['orbit'] = 'All'; + } + + if ($logbooks_locations_array) { + $location_list = "'".implode("','",$logbooks_locations_array)."'"; + $data['wac_array'] = $this->wac->get_wac_array($bands, $postdata, $location_list); + $data['wac_summary'] = $this->wac->get_wac_summary($bands, $postdata, $location_list); + } else { + $location_list = null; + $data['wac_array'] = null; + $data['wac_summary'] = null; + } + + // Render page + $data['page_title'] = sprintf(__("Awards - %s"), __("Worked All Continents (WAC)")); + $this->load->view('interface_assets/header', $data); + $this->load->view('awards/wac/index'); + $this->load->view('interface_assets/footer'); + } + } diff --git a/application/models/Logbook_model.php b/application/models/Logbook_model.php index 12ccab09b..a62c2689b 100644 --- a/application/models/Logbook_model.php +++ b/application/models/Logbook_model.php @@ -548,6 +548,9 @@ class Logbook_model extends CI_Model { $this->db->where('COL_SIG', 'WAB'); $this->db->where('COL_SIG_INFO', $searchphrase); break; + case 'WAC': + $this->db->where('COL_CONT', $searchphrase); + break; case 'WAJA': $state = str_pad($searchphrase, 2, '0', STR_PAD_LEFT); $this->db->where('COL_STATE', $state); diff --git a/application/models/Wac.php b/application/models/Wac.php new file mode 100644 index 000000000..ce3bbe5be --- /dev/null +++ b/application/models/Wac.php @@ -0,0 +1,253 @@ +load->library('Genfunctions'); + } + + function get_wac_array($bands, $postdata, $location_list) { + $wac = array(); + + foreach ($this->validContinents as $cont) { + $wac[$cont]['count'] = 0; // Inits each wac's count + } + + $qsl = $this->genfunctions->gen_qsl_from_postdata($postdata); + + foreach ($bands as $band) { + foreach ($this->validContinents as $cont) { + $bandWac[$cont][$band] = '-'; // Sets all to dash to indicate no result + } + + if ($postdata['worked'] != NULL) { + $wacBand = $this->getWACWorked($location_list, $band, $postdata); + foreach ($wacBand as $line) { + $bandWac[$line->col_cont][$band] = '
col_cont) . '","' . $band . '","All", "All","'. $postdata['mode'] . '","WAC","")\'>W
'; + $wac[$line->col_cont]['count']++; + } + } + if ($postdata['confirmed'] != NULL) { + $wacBand = $this->getWACConfirmed($location_list, $band, $postdata); + foreach ($wacBand as $line) { + $bandWac[$line->col_cont][$band] = '
col_cont) . '","' . $band . '","All", "All","'. $postdata['mode'] . '","WAC","'.$qsl.'")\'>C
'; + $wac[$line->col_cont]['count']++; + } + } + } + + // We want to remove the worked continents in the list, since we do not want to display them + if ($postdata['worked'] == NULL) { + $wacBand = $this->getWACWorked($location_list, $postdata['band'], $postdata); + foreach ($wacBand as $line) { + unset($bandWac[$line->col_cont]); + } + } + + // We want to remove the confirmed continents in the list, since we do not want to display them + if ($postdata['confirmed'] == NULL) { + $wacBand = $this->getWACConfirmed($location_list, $postdata['band'], $postdata); + foreach ($wacBand as $line) { + unset($bandWac[$line->col_cont]); + } + } + + if ($postdata['notworked'] == NULL) { + foreach ($this->validContinents as $cont) { + if ($wac[$cont]['count'] == 0) { + unset($bandWac[$cont]); + }; + } + } + + if (isset($bandWac)) { + return $bandWac; + } else { + return 0; + } + } + + /* + * Function returns all worked, but not confirmed continents + * $postdata contains data from the form, in this case Lotw or QSL are used + */ + function getWACWorked($location_list, $band, $postdata) { + $sql = "SELECT distinct col_cont FROM " . $this->config->item('table_name') . " thcv + LEFT JOIN satellite on thcv.COL_SAT_NAME = satellite.name + where station_id in (" . $location_list . ") and col_cont in ('AF', 'EU', 'AS', 'SA', 'NA', 'OC', 'AN')"; + + if ($postdata['mode'] != 'All') { + $sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')"; + } + + $sql .= $this->genfunctions->addBandToQuery($band); + if ($band == 'SAT') { + if ($postdata['sat'] != 'All') { + $sql .= " and col_sat_name ='" . $postdata['sat'] . "'"; + } + } + $sql .= $this->addOrbitToQuery($postdata); + + $sql .= " and not exists (select 1 from " . $this->config->item('table_name') . " thcv2 + LEFT JOIN satellite on thcv2.COL_SAT_NAME = satellite.name + where station_id in (" . $location_list . + ") and col_cont = thcv.col_cont and col_cont <> '' "; + + $sql .= $this->genfunctions->addBandToQuery($band); + if ($band == 'SAT') { + if ($postdata['sat'] != 'All') { + $sql .= " and col_sat_name ='" . $postdata['sat'] . "'"; + } + } + + if ($postdata['mode'] != 'All') { + $sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')"; + } + + $sql .= $this->addOrbitToQuery($postdata); + + $sql .= $this->genfunctions->addQslToQuery($postdata); + + $sql .= ")"; + + $query = $this->db->query($sql); + + return $query->result(); + } + + /* + * Function returns all confirmed continents on given band and on LoTW or QSL + * $postdata contains data from the form, in this case Lotw or QSL are used + */ + function getWACConfirmed($location_list, $band, $postdata) { + $sql = "SELECT distinct col_cont FROM " . $this->config->item('table_name') . " thcv + LEFT JOIN satellite on thcv.COL_SAT_NAME = satellite.name + where station_id in (" . $location_list . ") and col_cont in ('AF', 'EU', 'AS', 'SA', 'NA', 'OC', 'AN')"; + + if ($postdata['mode'] != 'All') { + $sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')"; + } + + $sql .= $this->genfunctions->addBandToQuery($band); + if ($band == 'SAT') { + if ($postdata['sat'] != 'All') { + $sql .= " and col_sat_name ='" . $postdata['sat'] . "'"; + } + } + + $sql .= $this->genfunctions->addQslToQuery($postdata); + + $sql .= $this->addOrbitToQuery($postdata); + + $query = $this->db->query($sql); + + return $query->result(); + } + + + /* + * Function gets worked and confirmed summary on each band on the active stationprofile + */ + function get_wac_summary($bands, $postdata, $location_list) { + foreach ($bands as $band) { + $worked = $this->getSummaryByBand($band, $postdata, $location_list); + $confirmed = $this->getSummaryByBandConfirmed($band, $postdata, $location_list); + $wacSummary['worked'][$band] = $worked[0]->count; + $wacSummary['confirmed'][$band] = $confirmed[0]->count; + } + + $workedTotal = $this->getSummaryByBand($postdata['band'], $postdata, $location_list); + $confirmedTotal = $this->getSummaryByBandConfirmed($postdata['band'], $postdata, $location_list); + + $wacSummary['worked']['Total'] = $workedTotal[0]->count; + $wacSummary['confirmed']['Total'] = $confirmedTotal[0]->count; + + return $wacSummary; + } + + function getSummaryByBand($band, $postdata, $location_list) { + $sql = "SELECT count(distinct thcv.col_cont) as count FROM " . $this->config->item('table_name') . " thcv"; + $sql .= " LEFT JOIN satellite on thcv.COL_SAT_NAME = satellite.name"; + + $sql .= " where station_id in (" . $location_list . ") and col_cont in ('AF', 'EU', 'AS', 'SA', 'NA', 'OC', 'AN')"; + + if ($band == 'SAT') { + $sql .= " and thcv.col_prop_mode ='" . $band . "'"; + if ($band != 'All' && $postdata['sat'] != 'All') { + $sql .= " and col_sat_name ='" . $postdata['sat'] . "'"; + } + } else if ($band == 'All') { + $this->load->model('bands'); + + $bandslots = $this->bands->get_worked_bands(); + + $bandslots_list = "'".implode("','",$bandslots)."'"; + + $sql .= " and thcv.col_band in (" . $bandslots_list . ")" . + " and thcv.col_prop_mode !='SAT'"; + } else { + $sql .= " and thcv.col_prop_mode !='SAT'"; + $sql .= " and thcv.col_band ='" . $band . "'"; + } + + if ($postdata['mode'] != 'All') { + $sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')"; + } + + $sql .= $this->addOrbitToQuery($postdata); + + $query = $this->db->query($sql); + + return $query->result(); + } + + function getSummaryByBandConfirmed($band, $postdata, $location_list){ + $sql = "SELECT count(distinct thcv.col_cont) as count FROM " . $this->config->item('table_name') . " thcv"; + $sql .= " LEFT JOIN satellite on thcv.COL_SAT_NAME = satellite.name"; + + $sql .= " where station_id in (" . $location_list . ") and col_cont in ('AF', 'EU', 'AS', 'SA', 'NA', 'OC', 'AN')"; + + if ($band == 'SAT') { + $sql .= " and thcv.col_prop_mode ='" . $band . "'"; + if ($postdata['sat'] != 'All') { + $sql .= " and col_sat_name ='" . $postdata['sat'] . "'"; + } + } else if ($band == 'All') { + $this->load->model('bands'); + + $bandslots = $this->bands->get_worked_bands(); + + $bandslots_list = "'".implode("','",$bandslots)."'"; + + $sql .= " and thcv.col_band in (" . $bandslots_list . ")" . + " and thcv.col_prop_mode !='SAT'"; + } else { + $sql .= " and thcv.col_prop_mode !='SAT'"; + $sql .= " and thcv.col_band ='" . $band . "'"; + } + + if ($postdata['mode'] != 'All') { + $sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')"; + } + + $sql .= $this->genfunctions->addQslToQuery($postdata); + $sql .= $this->addOrbitToQuery($postdata); + + $query = $this->db->query($sql); + + return $query->result(); + } + + // Adds orbit type to query + function addOrbitToQuery($postdata) { + $sql = ''; + if ($postdata['orbit'] != 'All') { + $sql .= ' AND satellite.orbit = \''.$postdata['orbit'].'\''; + } + + return $sql; + } + +} diff --git a/application/views/awards/wac/index.php b/application/views/awards/wac/index.php new file mode 100644 index 000000000..b244dbe26 --- /dev/null +++ b/application/views/awards/wac/index.php @@ -0,0 +1,204 @@ +
+ + +
+
+ +

+ +
+ +
+
+ + +
+
+
+
+ input->post('worked') || $this->input->method() !== 'post') echo ' checked="checked"'; ?> > + +
+
+ input->post('confirmed') || $this->input->method() !== 'post') echo ' checked="checked"'; ?> > + +
+
+ input->post('notworked') || $this->input->method() !== 'post') echo ' checked="checked"'; ?> > + +
+
+
+ +
+
+
+
+ input->post('qsl') || $this->input->method() !== 'post') echo ' checked="checked"'; ?> > + +
+
+ input->post('lotw') || $this->input->method() !== 'post') echo ' checked="checked"'; ?> > + +
+
+ input->post('eqsl')) echo ' checked="checked"'; ?> > + +
+
+ input->post('qrz')) echo ' checked="checked"'; ?> > + +
+
+
+ + +
+ +
+ +
+
+ +
input->post('band') != 'SAT' && $this->input->post('band') != 'All') echo "style=\"display: none\""; ?>> + + +
+ +
+ + + +
+
input->post('band') != 'SAT' && $this->input->post('band') != 'All') echo "style=\"display: none\""; ?>> + +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ + +
+
+
+
+ +
+ + + + + # + " . __("Continent") . ""; + foreach($bands as $band) { + echo '' . $band . ''; + } + echo ' + + '; + foreach ($wac_array as $wac => $value) { // Fills the table with the data + echo ' + ' . $i++ . ' + '. $wac.''; + foreach ($value as $key) { + echo '' . $key . ''; + } + echo ''; + } + echo " +

" . __("Summary") . "

+ + + + "; + + foreach($bands as $band) { + echo ''; + } + echo " + + + + "; + + foreach ($wac_summary['worked'] as $wac) { // Fills the table with the data + echo ''; + } + + echo " + "; + foreach ($wac_summary['confirmed'] as $wac) { // Fills the table with the data + echo ''; + } + + echo ' +
' . $band . '" . __("Total") . "
" . __("Total worked") . "' . $wac . '
" . __("Total confirmed") . "' . $wac . '
+
'; + + } + else { + echo ''; + } + ?> + +
+ diff --git a/application/views/interface_assets/footer.php b/application/views/interface_assets/footer.php index d967908c4..a13de10c7 100644 --- a/application/views/interface_assets/footer.php +++ b/application/views/interface_assets/footer.php @@ -2757,6 +2757,32 @@ function viewEqsl(picture, callsign) { $('[class*="buttons"]').css("color", "white"); } + uri->segment(2) == "wac") { ?> + diff --git a/application/views/interface_assets/header.php b/application/views/interface_assets/header.php index 9c0d977bd..a5eb84316 100644 --- a/application/views/interface_assets/header.php +++ b/application/views/interface_assets/header.php @@ -171,6 +171,8 @@
  • +
  • +
  • From c12d3c8bc6b70d6e7995002ebb7ae598b42f87b2 Mon Sep 17 00:00:00 2001 From: int2001 Date: Fri, 6 Sep 2024 10:03:34 +0000 Subject: [PATCH 2/4] Add Binding to WaC --- application/models/Wac.php | 415 +++++++++++++++++++------------------ 1 file changed, 218 insertions(+), 197 deletions(-) diff --git a/application/models/Wac.php b/application/models/Wac.php index ce3bbe5be..ce1f90508 100644 --- a/application/models/Wac.php +++ b/application/models/Wac.php @@ -8,245 +8,266 @@ class Wac extends CI_Model{ $this->load->library('Genfunctions'); } - function get_wac_array($bands, $postdata, $location_list) { - $wac = array(); + function get_wac_array($bands, $postdata, $location_list) { + $wac = array(); - foreach ($this->validContinents as $cont) { - $wac[$cont]['count'] = 0; // Inits each wac's count - } + foreach ($this->validContinents as $cont) { + $wac[$cont]['count'] = 0; // Inits each wac's count + } - $qsl = $this->genfunctions->gen_qsl_from_postdata($postdata); + $qsl = $this->genfunctions->gen_qsl_from_postdata($postdata); - foreach ($bands as $band) { - foreach ($this->validContinents as $cont) { - $bandWac[$cont][$band] = '-'; // Sets all to dash to indicate no result - } + foreach ($bands as $band) { + foreach ($this->validContinents as $cont) { + $bandWac[$cont][$band] = '-'; // Sets all to dash to indicate no result + } - if ($postdata['worked'] != NULL) { - $wacBand = $this->getWACWorked($location_list, $band, $postdata); - foreach ($wacBand as $line) { - $bandWac[$line->col_cont][$band] = '
    col_cont) . '","' . $band . '","All", "All","'. $postdata['mode'] . '","WAC","")\'>W
    '; - $wac[$line->col_cont]['count']++; - } - } - if ($postdata['confirmed'] != NULL) { - $wacBand = $this->getWACConfirmed($location_list, $band, $postdata); - foreach ($wacBand as $line) { - $bandWac[$line->col_cont][$band] = '
    col_cont) . '","' . $band . '","All", "All","'. $postdata['mode'] . '","WAC","'.$qsl.'")\'>C
    '; - $wac[$line->col_cont]['count']++; - } - } - } + if ($postdata['worked'] != NULL) { + $wacBand = $this->getWACWorked($location_list, $band, $postdata); + foreach ($wacBand as $line) { + $bandWac[$line->col_cont][$band] = '
    col_cont) . '","' . $band . '","All", "All","'. $postdata['mode'] . '","WAC","")\'>W
    '; + $wac[$line->col_cont]['count']++; + } + } + if ($postdata['confirmed'] != NULL) { + $wacBand = $this->getWACConfirmed($location_list, $band, $postdata); + foreach ($wacBand as $line) { + $bandWac[$line->col_cont][$band] = '
    col_cont) . '","' . $band . '","All", "All","'. $postdata['mode'] . '","WAC","'.$qsl.'")\'>C
    '; + $wac[$line->col_cont]['count']++; + } + } + } - // We want to remove the worked continents in the list, since we do not want to display them - if ($postdata['worked'] == NULL) { - $wacBand = $this->getWACWorked($location_list, $postdata['band'], $postdata); - foreach ($wacBand as $line) { - unset($bandWac[$line->col_cont]); - } - } + // We want to remove the worked continents in the list, since we do not want to display them + if ($postdata['worked'] == NULL) { + $wacBand = $this->getWACWorked($location_list, $postdata['band'], $postdata); + foreach ($wacBand as $line) { + unset($bandWac[$line->col_cont]); + } + } - // We want to remove the confirmed continents in the list, since we do not want to display them - if ($postdata['confirmed'] == NULL) { - $wacBand = $this->getWACConfirmed($location_list, $postdata['band'], $postdata); - foreach ($wacBand as $line) { - unset($bandWac[$line->col_cont]); - } - } + // We want to remove the confirmed continents in the list, since we do not want to display them + if ($postdata['confirmed'] == NULL) { + $wacBand = $this->getWACConfirmed($location_list, $postdata['band'], $postdata); + foreach ($wacBand as $line) { + unset($bandWac[$line->col_cont]); + } + } - if ($postdata['notworked'] == NULL) { + if ($postdata['notworked'] == NULL) { foreach ($this->validContinents as $cont) { if ($wac[$cont]['count'] == 0) { - unset($bandWac[$cont]); - }; - } - } - - if (isset($bandWac)) { - return $bandWac; - } else { - return 0; - } - } - - /* - * Function returns all worked, but not confirmed continents - * $postdata contains data from the form, in this case Lotw or QSL are used - */ - function getWACWorked($location_list, $band, $postdata) { - $sql = "SELECT distinct col_cont FROM " . $this->config->item('table_name') . " thcv - LEFT JOIN satellite on thcv.COL_SAT_NAME = satellite.name - where station_id in (" . $location_list . ") and col_cont in ('AF', 'EU', 'AS', 'SA', 'NA', 'OC', 'AN')"; - - if ($postdata['mode'] != 'All') { - $sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')"; - } - - $sql .= $this->genfunctions->addBandToQuery($band); - if ($band == 'SAT') { - if ($postdata['sat'] != 'All') { - $sql .= " and col_sat_name ='" . $postdata['sat'] . "'"; - } - } - $sql .= $this->addOrbitToQuery($postdata); - - $sql .= " and not exists (select 1 from " . $this->config->item('table_name') . " thcv2 - LEFT JOIN satellite on thcv2.COL_SAT_NAME = satellite.name - where station_id in (" . $location_list . - ") and col_cont = thcv.col_cont and col_cont <> '' "; - - $sql .= $this->genfunctions->addBandToQuery($band); - if ($band == 'SAT') { - if ($postdata['sat'] != 'All') { - $sql .= " and col_sat_name ='" . $postdata['sat'] . "'"; + unset($bandWac[$cont]); + }; } } - if ($postdata['mode'] != 'All') { - $sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')"; + if (isset($bandWac)) { + return $bandWac; + } else { + return 0; } + } - $sql .= $this->addOrbitToQuery($postdata); - - $sql .= $this->genfunctions->addQslToQuery($postdata); - - $sql .= ")"; - - $query = $this->db->query($sql); - - return $query->result(); - } - - /* - * Function returns all confirmed continents on given band and on LoTW or QSL - * $postdata contains data from the form, in this case Lotw or QSL are used - */ - function getWACConfirmed($location_list, $band, $postdata) { - $sql = "SELECT distinct col_cont FROM " . $this->config->item('table_name') . " thcv + /* + * Function returns all worked, but not confirmed continents + * $postdata contains data from the form, in this case Lotw or QSL are used + */ + function getWACWorked($location_list, $band, $postdata) { + $bindings=[]; + $sql = "SELECT distinct col_cont FROM " . $this->config->item('table_name') . " thcv LEFT JOIN satellite on thcv.COL_SAT_NAME = satellite.name - where station_id in (" . $location_list . ") and col_cont in ('AF', 'EU', 'AS', 'SA', 'NA', 'OC', 'AN')"; + where station_id in (" . $location_list . ") and col_cont in ('AF', 'EU', 'AS', 'SA', 'NA', 'OC', 'AN')"; if ($postdata['mode'] != 'All') { - $sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')"; + $sql .= " and (col_mode = ? or col_submode = ?)"; + $bindings[]=$postdata['mode']; + $bindings[]=$postdata['mode']; } - $sql .= $this->genfunctions->addBandToQuery($band); + $sql .= $this->genfunctions->addBandToQuery($band); if ($band == 'SAT') { if ($postdata['sat'] != 'All') { - $sql .= " and col_sat_name ='" . $postdata['sat'] . "'"; + $sql .= " and col_sat_name = ?"; + $bindings[]=$postdata['sat']; } } + $sql .= $this->addOrbitToQuery($postdata,$bindings); - $sql .= $this->genfunctions->addQslToQuery($postdata); + $sql .= " and not exists (select 1 from " . $this->config->item('table_name') . " thcv2 + LEFT JOIN satellite on thcv2.COL_SAT_NAME = satellite.name + where station_id in (" . $location_list . + ") and col_cont = thcv.col_cont and col_cont <> '' "; - $sql .= $this->addOrbitToQuery($postdata); - - $query = $this->db->query($sql); - - return $query->result(); - } - - - /* - * Function gets worked and confirmed summary on each band on the active stationprofile - */ - function get_wac_summary($bands, $postdata, $location_list) { - foreach ($bands as $band) { - $worked = $this->getSummaryByBand($band, $postdata, $location_list); - $confirmed = $this->getSummaryByBandConfirmed($band, $postdata, $location_list); - $wacSummary['worked'][$band] = $worked[0]->count; - $wacSummary['confirmed'][$band] = $confirmed[0]->count; - } - - $workedTotal = $this->getSummaryByBand($postdata['band'], $postdata, $location_list); - $confirmedTotal = $this->getSummaryByBandConfirmed($postdata['band'], $postdata, $location_list); - - $wacSummary['worked']['Total'] = $workedTotal[0]->count; - $wacSummary['confirmed']['Total'] = $confirmedTotal[0]->count; - - return $wacSummary; - } - - function getSummaryByBand($band, $postdata, $location_list) { - $sql = "SELECT count(distinct thcv.col_cont) as count FROM " . $this->config->item('table_name') . " thcv"; - $sql .= " LEFT JOIN satellite on thcv.COL_SAT_NAME = satellite.name"; - - $sql .= " where station_id in (" . $location_list . ") and col_cont in ('AF', 'EU', 'AS', 'SA', 'NA', 'OC', 'AN')"; - - if ($band == 'SAT') { - $sql .= " and thcv.col_prop_mode ='" . $band . "'"; - if ($band != 'All' && $postdata['sat'] != 'All') { - $sql .= " and col_sat_name ='" . $postdata['sat'] . "'"; - } - } else if ($band == 'All') { - $this->load->model('bands'); - - $bandslots = $this->bands->get_worked_bands(); - - $bandslots_list = "'".implode("','",$bandslots)."'"; - - $sql .= " and thcv.col_band in (" . $bandslots_list . ")" . - " and thcv.col_prop_mode !='SAT'"; - } else { - $sql .= " and thcv.col_prop_mode !='SAT'"; - $sql .= " and thcv.col_band ='" . $band . "'"; - } - - if ($postdata['mode'] != 'All') { - $sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')"; - } - - $sql .= $this->addOrbitToQuery($postdata); - - $query = $this->db->query($sql); - - return $query->result(); - } - - function getSummaryByBandConfirmed($band, $postdata, $location_list){ - $sql = "SELECT count(distinct thcv.col_cont) as count FROM " . $this->config->item('table_name') . " thcv"; - $sql .= " LEFT JOIN satellite on thcv.COL_SAT_NAME = satellite.name"; - - $sql .= " where station_id in (" . $location_list . ") and col_cont in ('AF', 'EU', 'AS', 'SA', 'NA', 'OC', 'AN')"; - - if ($band == 'SAT') { - $sql .= " and thcv.col_prop_mode ='" . $band . "'"; + $sql .= $this->genfunctions->addBandToQuery($band,$bindings); + if ($band == 'SAT') { if ($postdata['sat'] != 'All') { - $sql .= " and col_sat_name ='" . $postdata['sat'] . "'"; + $sql .= " and col_sat_name = ?"; + $bindings[]=$postdata['sat']; } - } else if ($band == 'All') { - $this->load->model('bands'); + } + + if ($postdata['mode'] != 'All') { + $sql .= " and (col_mode = ? or col_submode = ?')"; + $bindings[]=$postdata['mode']; + $bindings[]=$postdata['mode']; + } + + $sql .= $this->addOrbitToQuery($postdata,$bindings); + + $sql .= $this->genfunctions->addQslToQuery($postdata); + + $sql .= ")"; + + $query = $this->db->query($sql,$bindings); + + return $query->result(); + } + + /* + * Function returns all confirmed continents on given band and on LoTW or QSL + * $postdata contains data from the form, in this case Lotw or QSL are used + */ + function getWACConfirmed($location_list, $band, $postdata) { + $bindings=[]; + $sql = "SELECT distinct col_cont FROM " . $this->config->item('table_name') . " thcv + LEFT JOIN satellite on thcv.COL_SAT_NAME = satellite.name + where station_id in (" . $location_list . ") and col_cont in ('AF', 'EU', 'AS', 'SA', 'NA', 'OC', 'AN')"; + + if ($postdata['mode'] != 'All') { + $sql .= " and (col_mode = ? or col_submode = ?)"; + $bindings[]=$postdata['mode']; + $bindings[]=$postdata['mode']; + } + + $sql .= $this->genfunctions->addBandToQuery($band); + if ($band == 'SAT') { + if ($postdata['sat'] != 'All') { + $sql .= " and col_sat_name = ?"; + $bindings[]=$postdata['sat']; + } + } + + $sql .= $this->genfunctions->addQslToQuery($postdata); + + $sql .= $this->addOrbitToQuery($postdata,$bindings); + + $query = $this->db->query($sql,$bindings); + + return $query->result(); + } + + + /* + * Function gets worked and confirmed summary on each band on the active stationprofile + */ + function get_wac_summary($bands, $postdata, $location_list) { + foreach ($bands as $band) { + $worked = $this->getSummaryByBand($band, $postdata, $location_list); + $confirmed = $this->getSummaryByBandConfirmed($band, $postdata, $location_list); + $wacSummary['worked'][$band] = $worked[0]->count; + $wacSummary['confirmed'][$band] = $confirmed[0]->count; + } + + $workedTotal = $this->getSummaryByBand($postdata['band'], $postdata, $location_list); + $confirmedTotal = $this->getSummaryByBandConfirmed($postdata['band'], $postdata, $location_list); + + $wacSummary['worked']['Total'] = $workedTotal[0]->count; + $wacSummary['confirmed']['Total'] = $confirmedTotal[0]->count; + + return $wacSummary; + } + + function getSummaryByBand($band, $postdata, $location_list) { + $bindings=[]; + $sql = "SELECT count(distinct thcv.col_cont) as count FROM " . $this->config->item('table_name') . " thcv"; + $sql .= " LEFT JOIN satellite on thcv.COL_SAT_NAME = satellite.name"; + + $sql .= " where station_id in (" . $location_list . ") and col_cont in ('AF', 'EU', 'AS', 'SA', 'NA', 'OC', 'AN')"; + + if ($band == 'SAT') { + $sql .= " and thcv.col_prop_mode = ?"; + $bindings[]=$band; + if ($band != 'All' && $postdata['sat'] != 'All') { + $sql .= " and col_sat_name = ?"; + $bindings[]=$postdata['sat']; + } + } else if ($band == 'All') { + $this->load->model('bands'); $bandslots = $this->bands->get_worked_bands(); $bandslots_list = "'".implode("','",$bandslots)."'"; $sql .= " and thcv.col_band in (" . $bandslots_list . ")" . - " and thcv.col_prop_mode !='SAT'"; - } else { - $sql .= " and thcv.col_prop_mode !='SAT'"; - $sql .= " and thcv.col_band ='" . $band . "'"; - } - - if ($postdata['mode'] != 'All') { - $sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')"; + " and thcv.col_prop_mode !='SAT'"; + } else { + $sql .= " and thcv.col_prop_mode !='SAT'"; + $sql .= " and thcv.col_band = ?"; + $bindings[]=$band; } - $sql .= $this->genfunctions->addQslToQuery($postdata); - $sql .= $this->addOrbitToQuery($postdata); + if ($postdata['mode'] != 'All') { + $sql .= " and (col_mode = ? or col_submode = ?)"; + $bindings[]=$postdata['mode']; + $bindings[]=$postdata['mode']; + } - $query = $this->db->query($sql); + $sql .= $this->addOrbitToQuery($postdata,$bindings); - return $query->result(); - } + $query = $this->db->query($sql,$bindings); + return $query->result(); + } + + function getSummaryByBandConfirmed($band, $postdata, $location_list){ + $bindings=[]; + $sql = "SELECT count(distinct thcv.col_cont) as count FROM " . $this->config->item('table_name') . " thcv"; + $sql .= " LEFT JOIN satellite on thcv.COL_SAT_NAME = satellite.name"; + + $sql .= " where station_id in (" . $location_list . ") and col_cont in ('AF', 'EU', 'AS', 'SA', 'NA', 'OC', 'AN')"; + + if ($band == 'SAT') { + $sql .= " and thcv.col_prop_mode ='" . $band . "'"; + if ($postdata['sat'] != 'All') { + $sql .= " and col_sat_name = ?"; + $bindings[]=$postdata['sat']; + } + } else if ($band == 'All') { + $this->load->model('bands'); + + $bandslots = $this->bands->get_worked_bands(); + + $bandslots_list = "'".implode("','",$bandslots)."'"; + + $sql .= " and thcv.col_band in (" . $bandslots_list . ")" . + " and thcv.col_prop_mode !='SAT'"; + } else { + $sql .= " and thcv.col_prop_mode !='SAT'"; + $sql .= " and thcv.col_band = ?"; + $bindings[]=$band; + } + + if ($postdata['mode'] != 'All') { + $sql .= " and (col_mode = ? or col_submode = ?)"; + $bindings[]=$postdata['mode']; + $bindings[]=$postdata['mode']; + } + + $sql .= $this->genfunctions->addQslToQuery($postdata); + $sql .= $this->addOrbitToQuery($postdata,$bindings); + + $query = $this->db->query($sql,$bindings); + + return $query->result(); + } // Adds orbit type to query - function addOrbitToQuery($postdata) { + function addOrbitToQuery($postdata,&$binding) { $sql = ''; if ($postdata['orbit'] != 'All') { - $sql .= ' AND satellite.orbit = \''.$postdata['orbit'].'\''; + $sql .= ' AND satellite.orbit = ?'; + $binding[]=$postdata['orbit']; } - return $sql; } From 6f48bd0b16bf4569cd41f1ca94d6a0636cfe5fbe Mon Sep 17 00:00:00 2001 From: int2001 Date: Fri, 6 Sep 2024 10:06:09 +0000 Subject: [PATCH 3/4] Typo --- application/models/Wac.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/models/Wac.php b/application/models/Wac.php index ce1f90508..e766e96f7 100644 --- a/application/models/Wac.php +++ b/application/models/Wac.php @@ -99,7 +99,7 @@ class Wac extends CI_Model{ where station_id in (" . $location_list . ") and col_cont = thcv.col_cont and col_cont <> '' "; - $sql .= $this->genfunctions->addBandToQuery($band,$bindings); + $sql .= $this->genfunctions->addBandToQuery($band); if ($band == 'SAT') { if ($postdata['sat'] != 'All') { $sql .= " and col_sat_name = ?"; From 66741b10e45797b163370ec984634e87f11c97d3 Mon Sep 17 00:00:00 2001 From: phl0 Date: Fri, 6 Sep 2024 13:00:13 +0200 Subject: [PATCH 4/4] Fix syntax error --- application/models/Wac.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/models/Wac.php b/application/models/Wac.php index e766e96f7..a9c9f241c 100644 --- a/application/models/Wac.php +++ b/application/models/Wac.php @@ -108,7 +108,7 @@ class Wac extends CI_Model{ } if ($postdata['mode'] != 'All') { - $sql .= " and (col_mode = ? or col_submode = ?')"; + $sql .= " and (col_mode = ? or col_submode = ?)"; $bindings[]=$postdata['mode']; $bindings[]=$postdata['mode']; }