mirror of
https://github.com/wavelog/wavelog.git
synced 2026-03-22 02:14:13 +00:00
[WAC Award] Query speedup
This commit is contained in:
@@ -498,7 +498,6 @@ class Awards extends CI_Controller {
|
||||
|
||||
public function vucc_band(){
|
||||
$this->load->model('vucc');
|
||||
$data['user_map_custom'] = $this->optionslib->get_map_custom();
|
||||
$band = str_replace('"', "", $this->security->xss_clean($this->input->get("Band")));
|
||||
$type = str_replace('"', "", $this->security->xss_clean($this->input->get("Type")));
|
||||
$data['vucc_array'] = $this->vucc->vucc_details($band, $type);
|
||||
@@ -2209,30 +2208,34 @@ class Awards extends CI_Controller {
|
||||
$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['qsl'] = ($this->input->post('qsl',true) ?? 0) == 0 ? NULL: 1;
|
||||
$postdata['lotw'] = ($this->input->post('lotw',true) ?? 0) == 0 ? NULL: 1;
|
||||
$postdata['eqsl'] = ($this->input->post('eqsl',true) ?? 0) == 0 ? NULL: 1;
|
||||
$postdata['qrz'] = ($this->input->post('qrz',true) ?? 0) == 0 ? NULL: 1;
|
||||
$postdata['clublog'] = ($this->input->post('clublog',true) ?? 0) == 0 ? NULL: 1;
|
||||
$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'));
|
||||
$postdata['worked'] = ($this->input->post('worked',true) ?? 0) == 0 ? NULL: 1;
|
||||
$postdata['confirmed'] = ($this->input->post('confirmed',true) ?? 0) == 0 ? NULL: 1;
|
||||
$postdata['notworked'] = ($this->input->post('notworked',true) ?? 0) == 0 ? NULL: 1;
|
||||
$postdata['band'] = $this->security->xss_clean($this->input->post('band'));
|
||||
}
|
||||
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['eqsl'] = null;
|
||||
$postdata['qrz'] = null;
|
||||
$postdata['clublog'] = null;
|
||||
$postdata['band'] = 'All';
|
||||
$postdata['mode'] = 'All';
|
||||
$postdata['sat'] = 'All';
|
||||
$postdata['orbit'] = 'All';
|
||||
$postdata['worked'] = 1;
|
||||
$postdata['confirmed'] = 1;
|
||||
$postdata['notworked'] = 1;
|
||||
$postdata['band'] = 'All';
|
||||
}
|
||||
|
||||
if ($logbooks_locations_array) {
|
||||
@@ -2245,11 +2248,18 @@ class Awards extends CI_Controller {
|
||||
$data['wac_summary'] = null;
|
||||
}
|
||||
|
||||
$data['posted_band'] = $postdata['band'];
|
||||
|
||||
$footerData = [];
|
||||
$footerData['scripts'] = [
|
||||
'assets/js/sections/wac.js',
|
||||
];
|
||||
|
||||
// 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');
|
||||
$this->load->view('interface_assets/footer', $footerData);
|
||||
}
|
||||
|
||||
public function wae () {
|
||||
|
||||
@@ -2,265 +2,277 @@
|
||||
|
||||
class Wac extends CI_Model{
|
||||
|
||||
private $validContinents = ['AF', 'EU', 'AS', 'SA', 'NA', 'OC', 'AN'];
|
||||
private $validContinents = ['AF', 'AN', 'AS', 'EU', 'NA', 'OC', 'SA'];
|
||||
|
||||
function __construct() {
|
||||
$this->load->library('Genfunctions');
|
||||
if(!$this->load->is_loaded('Genfunctions')) {
|
||||
$this->load->library('Genfunctions');
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Gets all WAC data with confirmation status in efficient query using MAX aggregation
|
||||
*/
|
||||
function getWacData($location_list, $postdata) {
|
||||
$bindings = [];
|
||||
$sql = "SELECT thcv.col_cont, thcv.col_band,
|
||||
MAX(case when thcv.col_lotw_qsl_rcvd ='Y' then 1 else 0 end) as lotw,
|
||||
MAX(case when thcv.col_qsl_rcvd = 'Y' then 1 else 0 end) as qsl,
|
||||
MAX(case when thcv.col_eqsl_qsl_rcvd = 'Y' then 1 else 0 end) as eqsl,
|
||||
MAX(case when thcv.COL_QRZCOM_QSO_DOWNLOAD_STATUS= 'Y' then 1 else 0 end) as qrz,
|
||||
MAX(case when thcv.COL_CLUBLOG_QSO_DOWNLOAD_STATUS = 'Y' then 1 else 0 end) as clublog
|
||||
FROM " . $this->config->item('table_name') . " thcv
|
||||
WHERE station_id IN (" . $location_list . ")
|
||||
AND thcv.col_cont IN ('AF', 'EU', 'AS', 'SA', 'NA', 'OC', 'AN')
|
||||
AND thcv.col_cont != ''";
|
||||
|
||||
// Mode filter
|
||||
if ($postdata['mode'] != 'All') {
|
||||
$sql .= " AND (thcv.col_mode = ? OR thcv.col_submode = ?)";
|
||||
$bindings[] = $postdata['mode'];
|
||||
$bindings[] = $postdata['mode'];
|
||||
}
|
||||
|
||||
$sql .= " AND thcv.col_prop_mode != 'SAT'";
|
||||
|
||||
$sql .= " GROUP BY thcv.col_cont, thcv.col_band";
|
||||
|
||||
$query = $this->db->query($sql, $bindings);
|
||||
return $query->result();
|
||||
}
|
||||
|
||||
/*
|
||||
* Gets all WAC satellite data with confirmation status
|
||||
*/
|
||||
function getWacDataSat($location_list, $postdata) {
|
||||
$bindings = [];
|
||||
$sql = "SELECT thcv.col_cont, 'SAT' as col_band,
|
||||
MAX(case when thcv.col_lotw_qsl_rcvd ='Y' then 1 else 0 end) as lotw,
|
||||
MAX(case when thcv.col_qsl_rcvd = 'Y' then 1 else 0 end) as qsl,
|
||||
MAX(case when thcv.col_eqsl_qsl_rcvd = 'Y' then 1 else 0 end) as eqsl,
|
||||
MAX(case when thcv.COL_QRZCOM_QSO_DOWNLOAD_STATUS= 'Y' then 1 else 0 end) as qrz,
|
||||
MAX(case when thcv.COL_CLUBLOG_QSO_DOWNLOAD_STATUS = 'Y' then 1 else 0 end) as clublog
|
||||
FROM " . $this->config->item('table_name') . " thcv
|
||||
LEFT JOIN satellite on thcv.COL_SAT_NAME = satellite.name
|
||||
WHERE station_id IN (" . $location_list . ")
|
||||
AND thcv.col_cont IN ('AF', 'EU', 'AS', 'SA', 'NA', 'OC', 'AN')
|
||||
AND thcv.col_cont != ''";
|
||||
|
||||
// Mode filter
|
||||
if ($postdata['mode'] != 'All') {
|
||||
$sql .= " AND (thcv.col_mode = ? OR thcv.col_submode = ?)";
|
||||
$bindings[] = $postdata['mode'];
|
||||
$bindings[] = $postdata['mode'];
|
||||
}
|
||||
|
||||
// Satellite filter
|
||||
if ($postdata['sat'] != 'All') {
|
||||
$sql .= " AND thcv.col_sat_name = ?";
|
||||
$bindings[] = $postdata['sat'];
|
||||
}
|
||||
|
||||
// Orbit filter
|
||||
$sql .= $this->addOrbitToQuery($postdata, $bindings);
|
||||
|
||||
$sql .= " AND thcv.col_prop_mode = 'SAT'";
|
||||
|
||||
$sql .= " GROUP BY thcv.col_cont";
|
||||
|
||||
$query = $this->db->query($sql, $bindings);
|
||||
return $query->result();
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
// Initialize matrix with all continents
|
||||
foreach ($this->validContinents as $cont) {
|
||||
foreach ($bands as $band) {
|
||||
if (($postdata['band'] != 'SAT') && ($band == 'SAT')) {
|
||||
continue;
|
||||
}
|
||||
$wacMatrix[$cont][$band] = '-';
|
||||
}
|
||||
}
|
||||
|
||||
// Initialize summary counters
|
||||
foreach ($bands as $band) {
|
||||
foreach ($this->validContinents as $cont) {
|
||||
$bandWac[$cont][$band] = '-'; // Sets all to dash to indicate no result
|
||||
if (($postdata['band'] != 'SAT') && ($band == 'SAT')) {
|
||||
continue;
|
||||
}
|
||||
$summary['worked'][$band] = 0;
|
||||
$summary['confirmed'][$band] = 0;
|
||||
}
|
||||
$summary['worked']['Total'] = 0;
|
||||
$summary['confirmed']['Total'] = 0;
|
||||
|
||||
// Track unique continent/band combinations
|
||||
$workedContinents = []; // [band][continent] => true
|
||||
$confirmedContinents = []; // [band][continent] => true
|
||||
|
||||
// Track worked status for each continent
|
||||
$continentWorkedStatus = []; // [continent] => count
|
||||
|
||||
// Create a lookup array for valid bands
|
||||
$validBands = array_flip($bands);
|
||||
|
||||
// Get all WAC data in efficient queries
|
||||
$wacData = $this->getWacData($location_list, $postdata);
|
||||
|
||||
// Process regular band data
|
||||
foreach ($wacData as $wac) {
|
||||
// Skip if this band is not in our requested bands list
|
||||
if (!isset($validBands[$wac->col_band])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($postdata['worked'] != NULL) {
|
||||
$wacBand = $this->getWACWorked($location_list, $band, $postdata);
|
||||
foreach ($wacBand as $line) {
|
||||
$bandWac[$line->col_cont][$band] = '<div class="bg-danger awardsBgWarning"><a href=\'javascript:displayContacts("' . str_replace("&", "%26", $line->col_cont) . '","' . $band . '","All", "All","'. $postdata['mode'] . '","WAC","")\'>W</a></div>';
|
||||
$wac[$line->col_cont]['count']++;
|
||||
// Track worked status for this continent
|
||||
if (!isset($continentWorkedStatus[$wac->col_cont])) {
|
||||
$continentWorkedStatus[$wac->col_cont] = 0;
|
||||
}
|
||||
$continentWorkedStatus[$wac->col_cont]++;
|
||||
|
||||
// Check if confirmed based on the confirmation types selected in postdata
|
||||
$isConfirmed = false;
|
||||
$confirmationLetters = '';
|
||||
if (isset($postdata['qsl']) && $postdata['qsl'] == 1 && $wac->qsl > 0) {
|
||||
$isConfirmed = true;
|
||||
$confirmationLetters .= 'Q';
|
||||
}
|
||||
if (isset($postdata['lotw']) && $postdata['lotw'] == 1 && $wac->lotw > 0) {
|
||||
$isConfirmed = true;
|
||||
$confirmationLetters .= 'L';
|
||||
}
|
||||
if (isset($postdata['eqsl']) && $postdata['eqsl'] == 1 && $wac->eqsl > 0) {
|
||||
$isConfirmed = true;
|
||||
$confirmationLetters .= 'E';
|
||||
}
|
||||
if (isset($postdata['qrz']) && $postdata['qrz'] == 1 && $wac->qrz > 0) {
|
||||
$isConfirmed = true;
|
||||
$confirmationLetters .= 'Z';
|
||||
}
|
||||
if (isset($postdata['clublog']) && $postdata['clublog'] == 1 && $wac->clublog > 0) {
|
||||
$isConfirmed = true;
|
||||
$confirmationLetters .= 'C';
|
||||
}
|
||||
|
||||
if ($isConfirmed) {
|
||||
$wacMatrix[$wac->col_cont][$wac->col_band] = '<div class="bg-success awardsBgSuccess"><a href=\'javascript:displayContacts("' . str_replace("&", "%26", $wac->col_cont) . '","' . $wac->col_band . '","All", "All","'. $postdata['mode'] . '","WAC","'.$qsl.'","","")\'>'.$confirmationLetters.'</a></div>';
|
||||
// Track confirmed continents for summary
|
||||
if (!isset($confirmedContinents[$wac->col_band][$wac->col_cont])) {
|
||||
$confirmedContinents[$wac->col_band][$wac->col_cont] = true;
|
||||
$summary['confirmed'][$wac->col_band]++;
|
||||
}
|
||||
} else {
|
||||
$wacMatrix[$wac->col_cont][$wac->col_band] = '<div class="bg-danger awardsBgWarning"><a href=\'javascript:displayContacts("' . str_replace("&", "%26", $wac->col_cont) . '","' . $wac->col_band . '","All", "All","'. $postdata['mode'] . '","WAC","","","")\'>W</a></div>';
|
||||
}
|
||||
if ($postdata['confirmed'] != NULL) {
|
||||
$wacBand = $this->getWACConfirmed($location_list, $band, $postdata);
|
||||
foreach ($wacBand as $line) {
|
||||
$bandWac[$line->col_cont][$band] = '<div class="bg-success awardsBgSuccess"><a href=\'javascript:displayContacts("' . str_replace("&", "%26", $line->col_cont) . '","' . $band . '","All", "All","'. $postdata['mode'] . '","WAC","'.$qsl.'")\'>C</a></div>';
|
||||
$wac[$line->col_cont]['count']++;
|
||||
}
|
||||
|
||||
// Track worked continents for summary
|
||||
if (!isset($workedContinents[$wac->col_band][$wac->col_cont])) {
|
||||
$workedContinents[$wac->col_band][$wac->col_cont] = true;
|
||||
$summary['worked'][$wac->col_band]++;
|
||||
}
|
||||
}
|
||||
|
||||
// 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]);
|
||||
}
|
||||
}
|
||||
// Process SAT data if needed
|
||||
if ($postdata['band'] == 'SAT') {
|
||||
if (in_array('SAT', $bands)) {
|
||||
$wacDataSat = $this->getWacDataSat($location_list, $postdata);
|
||||
|
||||
// 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) {
|
||||
if (isset($bandWac)) {
|
||||
unset($bandWac[$cont]);
|
||||
foreach ($wacDataSat as $wac) {
|
||||
// Track worked status for this continent
|
||||
if (!isset($continentWorkedStatus[$wac->col_cont])) {
|
||||
$continentWorkedStatus[$wac->col_cont] = 0;
|
||||
}
|
||||
};
|
||||
$continentWorkedStatus[$wac->col_cont]++;
|
||||
|
||||
// Check if confirmed based on the confirmation types selected in postdata
|
||||
$isConfirmed = false;
|
||||
$confirmationLetters = '';
|
||||
if (isset($postdata['qsl']) && $postdata['qsl'] == 1 && $wac->qsl > 0) {
|
||||
$isConfirmed = true;
|
||||
$confirmationLetters .= 'Q';
|
||||
}
|
||||
if (isset($postdata['lotw']) && $postdata['lotw'] == 1 && $wac->lotw > 0) {
|
||||
$isConfirmed = true;
|
||||
$confirmationLetters .= 'L';
|
||||
}
|
||||
if (isset($postdata['eqsl']) && $postdata['eqsl'] == 1 && $wac->eqsl > 0) {
|
||||
$isConfirmed = true;
|
||||
$confirmationLetters .= 'E';
|
||||
}
|
||||
if (isset($postdata['qrz']) && $postdata['qrz'] == 1 && $wac->qrz > 0) {
|
||||
$isConfirmed = true;
|
||||
$confirmationLetters .= 'Z';
|
||||
}
|
||||
if (isset($postdata['clublog']) && $postdata['clublog'] == 1 && $wac->clublog > 0) {
|
||||
$isConfirmed = true;
|
||||
$confirmationLetters .= 'C';
|
||||
}
|
||||
|
||||
if ($isConfirmed) {
|
||||
$wacMatrix[$wac->col_cont]['SAT'] = '<div class="bg-success awardsBgSuccess"><a href=\'javascript:displayContacts("' . str_replace("&", "%26", $wac->col_cont) . '","SAT","All", "All","'. $postdata['mode'] . '","WAC","'.$qsl.'","","")\'>'.$confirmationLetters.'</a></div>';
|
||||
// Track confirmed continents for summary
|
||||
if (!isset($confirmedContinents['SAT'][$wac->col_cont])) {
|
||||
$confirmedContinents['SAT'][$wac->col_cont] = true;
|
||||
$summary['confirmed']['SAT']++;
|
||||
}
|
||||
} else {
|
||||
if ($postdata['worked'] != NULL) {
|
||||
$wacMatrix[$wac->col_cont]['SAT'] = '<div class="bg-danger awardsBgWarning"><a href=\'javascript:displayContacts("' . str_replace("&", "%26", $wac->col_cont) . '","SAT","All", "All","'. $postdata['mode'] . '","WAC","","","")\'>W</a></div>';
|
||||
}
|
||||
}
|
||||
|
||||
// Track worked continents for summary
|
||||
if (!isset($workedContinents['SAT'][$wac->col_cont])) {
|
||||
$workedContinents['SAT'][$wac->col_cont] = true;
|
||||
$summary['worked']['SAT']++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($bandWac)) {
|
||||
return $bandWac;
|
||||
// Calculate totals across all bands (excluding SAT)
|
||||
$totalWorkedContinents = [];
|
||||
$totalConfirmedContinents = [];
|
||||
foreach ($workedContinents as $band => $continents) {
|
||||
foreach ($continents as $cont => $true) {
|
||||
if (!isset($totalWorkedContinents[$cont])) {
|
||||
$totalWorkedContinents[$cont] = true;
|
||||
if ($band === 'SAT') {
|
||||
continue;
|
||||
}
|
||||
$summary['worked']['Total']++;
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach ($confirmedContinents as $band => $continents) {
|
||||
foreach ($continents as $cont => $true) {
|
||||
if (!isset($totalConfirmedContinents[$cont])) {
|
||||
$totalConfirmedContinents[$cont] = true;
|
||||
if ($band === 'SAT') {
|
||||
continue;
|
||||
}
|
||||
$summary['confirmed']['Total']++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($wacMatrix)) {
|
||||
// Return both the matrix data and summary
|
||||
return ['matrix' => $wacMatrix, 'summary' => $summary];
|
||||
} else {
|
||||
return 0;
|
||||
return ['matrix' => [], 'summary' => $summary];
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 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')";
|
||||
|
||||
if ($postdata['mode'] != 'All') {
|
||||
$sql .= " and (col_mode = ? or col_submode = ?)";
|
||||
$bindings[]=$postdata['mode'];
|
||||
$bindings[]=$postdata['mode'];
|
||||
}
|
||||
|
||||
$sql .= $this->genfunctions->addBandToQuery($band,$bindings);
|
||||
if ($band == 'SAT') {
|
||||
if ($postdata['sat'] != 'All') {
|
||||
$sql .= " and col_sat_name = ?";
|
||||
$bindings[]=$postdata['sat'];
|
||||
}
|
||||
}
|
||||
$sql .= $this->addOrbitToQuery($postdata,$bindings);
|
||||
|
||||
$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,$bindings);
|
||||
if ($band == 'SAT') {
|
||||
if ($postdata['sat'] != 'All') {
|
||||
$sql .= " and col_sat_name = ?";
|
||||
$bindings[]=$postdata['sat'];
|
||||
}
|
||||
}
|
||||
|
||||
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,$bindings);
|
||||
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
|
||||
* This is now integrated into get_wac_array for efficiency
|
||||
*/
|
||||
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 = ?";
|
||||
$bindings[]=$band;
|
||||
}
|
||||
|
||||
if ($postdata['mode'] != 'All') {
|
||||
$sql .= " and (col_mode = ? or col_submode = ?)";
|
||||
$bindings[]=$postdata['mode'];
|
||||
$bindings[]=$postdata['mode'];
|
||||
}
|
||||
|
||||
$sql .= $this->addOrbitToQuery($postdata,$bindings);
|
||||
|
||||
$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();
|
||||
$result = $this->get_wac_array($bands, $postdata, $location_list);
|
||||
return $result['summary'];
|
||||
}
|
||||
|
||||
// Adds orbit type to query
|
||||
|
||||
@@ -2,69 +2,53 @@
|
||||
|
||||
<!-- Award Info Box -->
|
||||
<br>
|
||||
<div id="awardInfoButton">
|
||||
<script>
|
||||
var lang_awards_info_button = "<?= __("Award Info"); ?>";
|
||||
var lang_award_info_ln1 = "<?= __("Worked All Continents (WAC)"); ?>";
|
||||
var lang_award_info_ln2 = "<?= __("Sponsored by the International Amateur Radio Union (IARU), the Worked All Continents award is issued for working and confirming all six continents. These are North America, South America, Oceania, Asia, Europe and Africa."); ?>";
|
||||
var lang_award_info_ln3 = "";
|
||||
var lang_award_info_ln4 = "<?= sprintf(__("You can find all information about the DXCC Award on the %s."), "<a href='https://www.arrl.org/wac' target='_blank'>" . __("ARRL website") . "</a>"); ?>";
|
||||
var lang_award_info_ln5 = "<?= __("Fields taken for this Award: Continent (ADIF tag 'CONT'). Must contain a valid continent-abbreviation!"); ?>";
|
||||
</script>
|
||||
<h2><?= __("Awards - Worked All Continents (WAC)"); ?></h2>
|
||||
<button type="button" class="btn btn-sm btn-primary me-1" id="displayAwardInfo"><?= __("Award Info"); ?></button>
|
||||
</div>
|
||||
<!-- End of Award Info Box -->
|
||||
<div id="awardInfoButton">
|
||||
<script>
|
||||
var lang_awards_info_button = "<?= __("Award Info"); ?>";
|
||||
var lang_award_info_ln1 = "<?= __("Worked All Continents (WAC)"); ?>";
|
||||
var lang_award_info_ln2 = "<?= __("Sponsored by the International Amateur Radio Union (IARU), the Worked All Continents award is issued for working and confirming all six continents. These are North America, South America, Oceania, Asia, Europe and Africa."); ?>";
|
||||
var lang_award_info_ln3 = "";
|
||||
var lang_award_info_ln4 = "<?= sprintf(__("You can find all information about the DXCC Award on the %s."), "<a href='https://www.arrl.org/wac' target='_blank'>" . __("ARRL website") . "</a>"); ?>";
|
||||
var lang_award_info_ln5 = "<?= __("Fields taken for this Award: Continent (ADIF tag 'CONT'). Must contain a valid continent-abbreviation!"); ?>";
|
||||
</script>
|
||||
<h2><?= __("Awards - Worked All Continents (WAC)"); ?></h2>
|
||||
<button type="button" class="btn btn-sm btn-primary me-1" id="displayAwardInfo"><?= __("Award Info"); ?></button>
|
||||
</div>
|
||||
<!-- End of Award Info Box -->
|
||||
<form class="form" action="<?php echo site_url('awards/wac'); ?>" method="post" enctype="multipart/form-data">
|
||||
<fieldset>
|
||||
|
||||
<!-- Multiple Checkboxes (inline) -->
|
||||
<div class="mb-3 row">
|
||||
<div class="col-md-2" for="checkboxes"><?= __("Worked") . ' / ' . __("Confirmed")?></div>
|
||||
<div class="col-md-10">
|
||||
<div class="form-check-inline">
|
||||
<input class="form-check-input" type="checkbox" name="worked" id="worked" value="1" <?php if ($this->input->post('worked') || $this->input->method() !== 'post') echo ' checked="checked"'; ?> >
|
||||
<label class="form-check-label" for="worked"><?= __("Show worked"); ?></label>
|
||||
</div>
|
||||
<div class="form-check-inline">
|
||||
<input class="form-check-input" type="checkbox" name="confirmed" id="confirmed" value="1" <?php if ($this->input->post('confirmed') || $this->input->method() !== 'post') echo ' checked="checked"'; ?> >
|
||||
<label class="form-check-label" for="confirmed"><?= __("Show confirmed"); ?></label>
|
||||
</div>
|
||||
<div class="form-check-inline">
|
||||
<input class="form-check-input" type="checkbox" name="notworked" id="notworked" value="1" <?php if ($this->input->post('notworked') || $this->input->method() !== 'post') echo ' checked="checked"'; ?> >
|
||||
<label class="form-check-label" for="notworked"><?= __("Show not worked"); ?></label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3 row">
|
||||
<div class="col-md-2"><?= __("Show QSO with QSL Type"); ?></div>
|
||||
<div class="col-md-10">
|
||||
<div class="form-check-inline">
|
||||
<input class="form-check-input" type="checkbox" name="qsl" value="1" id="qsl" <?php if ($this->input->post('qsl') || $this->input->method() !== 'post') echo ' checked="checked"'; ?> >
|
||||
<label class="form-check-label" for="qsl"><?= __("QSL Card"); ?></label>
|
||||
</div>
|
||||
<div class="form-check-inline">
|
||||
<input class="form-check-input" type="checkbox" name="lotw" value="1" id="lotw" <?php if ($this->input->post('lotw') || $this->input->method() !== 'post') echo ' checked="checked"'; ?> >
|
||||
<label class="form-check-label" for="lotw"><?= __("LoTW"); ?></label>
|
||||
</div>
|
||||
<div class="form-check-inline">
|
||||
<input class="form-check-input" type="checkbox" name="eqsl" value="1" id="eqsl" <?php if ($this->input->post('eqsl')) echo ' checked="checked"'; ?> >
|
||||
<label class="form-check-label" for="eqsl"><?= __("eQSL"); ?></label>
|
||||
</div>
|
||||
<div class="form-check-inline">
|
||||
<input class="form-check-input" type="checkbox" name="qrz" value="1" id="qrz" <?php if ($this->input->post('qrz')) echo ' checked="checked"'; ?> >
|
||||
<label class="form-check-label" for="qrz"><?= __("QRZ.com"); ?></label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-2"><?= __("Show QSO with QSL Type"); ?></div>
|
||||
<div class="col-md-10">
|
||||
<div class="form-check-inline">
|
||||
<input class="form-check-input" type="checkbox" name="qsl" value="1" id="qsl" <?php if ($this->input->post('qsl') || $this->input->method() !== 'post') echo ' checked="checked"'; ?> >
|
||||
<label class="form-check-label" for="qsl"><?= __("QSL Card"); ?></label>
|
||||
</div>
|
||||
<div class="form-check-inline">
|
||||
<input class="form-check-input" type="checkbox" name="lotw" value="1" id="lotw" <?php if ($this->input->post('lotw') || $this->input->method() !== 'post') echo ' checked="checked"'; ?> >
|
||||
<label class="form-check-label" for="lotw"><?= __("LoTW"); ?></label>
|
||||
</div>
|
||||
<div class="form-check-inline">
|
||||
<input class="form-check-input" type="checkbox" name="eqsl" value="1" id="eqsl" <?php if ($this->input->post('eqsl')) echo ' checked="checked"'; ?> >
|
||||
<label class="form-check-label" for="eqsl"><?= __("eQSL"); ?></label>
|
||||
</div>
|
||||
<div class="form-check-inline">
|
||||
<input class="form-check-input" type="checkbox" name="qrz" value="1" id="qrz" <?php if ($this->input->post('qrz')) echo ' checked="checked"'; ?> >
|
||||
<label class="form-check-label" for="qrz"><?= __("QRZ.com"); ?></label>
|
||||
</div>
|
||||
<div class="form-check-inline">
|
||||
<input class="form-check-input" type="checkbox" name="clublog" value="1" id="clublog" <?php if ($this->input->post('clublog')) echo ' checked="checked"'; ?> >
|
||||
<label class="form-check-label" for="clublog"><?= __("Clublog"); ?></label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3 row">
|
||||
<label class="col-md-2 control-label" for="band2"><?= __("Band"); ?></label>
|
||||
<div class="col-md-2">
|
||||
<select id="band2" name="band" class="form-select form-select-sm">
|
||||
<option value="All" <?php if ($this->input->post('band') == "All" || $this->input->method() !== 'post') echo ' selected'; ?> ><?= __("Every band"); ?></option>
|
||||
<option value="All" <?php if ($this->input->post('band') == "All" || $this->input->method() !== 'post') echo ' selected'; ?> ><?= __("Every band (w/o SAT)"); ?></option>
|
||||
<?php foreach($worked_bands as $band) {
|
||||
echo '<option value="' . $band . '"';
|
||||
if ($this->input->post('band') == $band) echo ' selected';
|
||||
@@ -91,21 +75,21 @@
|
||||
<input id="sats" type="hidden" value="All"></input>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<div id="orbitrow" class="mb-3 row" <?php if ($this->input->post('band') != 'SAT' && $this->input->post('band') != 'All') echo "style=\"display: none\""; ?>>
|
||||
<div id="orbitrow" class="mb-3 row" <?php if ($this->input->post('band') != 'SAT' && $this->input->post('band') != 'All') echo "style=\"display: none\""; ?>>
|
||||
<label class="col-md-2 control-label" id="orbitslabel" for="orbits"><?= __("Orbit"); ?></label>
|
||||
<div class="col-md-2">
|
||||
<select class="form-select form-select-sm" id="orbits" name="orbits">
|
||||
<option value="All" <?php if ($this->input->post('orbits') == "All" || $this->input->method() !== 'post') echo ' selected'; ?>><?= __("All")?></option>
|
||||
<?php
|
||||
foreach($orbits as $orbit){
|
||||
echo '<option value="' . $orbit . '"';
|
||||
if ($this->input->post('orbits') == $orbit) echo ' selected';
|
||||
echo '>' . strtoupper($orbit) . '</option>'."\n";
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
<select class="form-select form-select-sm" id="orbits" name="orbits">
|
||||
<option value="All" <?php if ($this->input->post('orbits') == "All" || $this->input->method() !== 'post') echo ' selected'; ?>><?= __("All")?></option>
|
||||
<?php
|
||||
foreach($orbits as $orbit){
|
||||
echo '<option value="' . $orbit . '"';
|
||||
if ($this->input->post('orbits') == $orbit) echo ' selected';
|
||||
echo '>' . strtoupper($orbit) . '</option>'."\n";
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3 row">
|
||||
<label class="col-md-2 control-label" for="mode"><?= __("Mode"); ?></label>
|
||||
@@ -132,8 +116,7 @@
|
||||
<div class="mb-3 row">
|
||||
<label class="col-md-2 control-label" for="button1id"></label>
|
||||
<div class="col-md-10">
|
||||
<button id="button2id" type="reset" name="button2id" class="btn btn-sm btn-warning"><?= __("Reset"); ?></button>
|
||||
<button id="button1id" type="submit" name="button1id" class="btn btn-sm btn-primary"><?= __("Show"); ?></button>
|
||||
<button id="button1id" type="submit" name="button1id" class="btn btn-sm btn-primary"><?= __("Show"); ?></button>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
@@ -144,6 +127,13 @@
|
||||
<?php
|
||||
$i = 1;
|
||||
if ($wac_array) {
|
||||
echo __('Legend:');
|
||||
echo '<pre>'.__("(Q)SL-Paper-Card").", ";
|
||||
echo __("(L)oTW").", ";
|
||||
echo __("(e)QSL").", ";
|
||||
echo __('QR(Z)-"confirmation"').", ";
|
||||
echo __("(C)lublog").", ";
|
||||
echo __("(W)orked").'</pre>';
|
||||
echo "
|
||||
<table style='width:100%' class='table tablecq table-sm table-bordered table-hover table-striped table-condensed text-center'>
|
||||
<thead>
|
||||
@@ -151,17 +141,20 @@
|
||||
<td>#</td>
|
||||
<td>" . __("Continent") . "</td>";
|
||||
foreach($bands as $band) {
|
||||
echo '<td>' . $band . '</td>';
|
||||
if (($posted_band != 'SAT') && ($band == 'SAT')) {
|
||||
continue;
|
||||
}
|
||||
echo '<td>' . $band . '</td>';
|
||||
}
|
||||
echo '</tr>
|
||||
</thead>
|
||||
<tbody>';
|
||||
foreach ($wac_array as $wac => $value) { // Fills the table with the data
|
||||
foreach ($wac_array['matrix'] as $wac => $value) { // Fills the table with the data
|
||||
echo '<tr>
|
||||
<td>' . $i++ . '</td>
|
||||
<td>'. $wac.'</td>';
|
||||
foreach ($value as $key) {
|
||||
echo '<td style="text-align: center">' . $key . '</td>';
|
||||
echo '<td style="text-align: center">' . $key . '</td>';
|
||||
}
|
||||
echo '</tr>';
|
||||
}
|
||||
@@ -173,22 +166,56 @@
|
||||
<tr><td></td>";
|
||||
|
||||
foreach($bands as $band) {
|
||||
if (($posted_band != 'SAT') && ($band == 'SAT')) {
|
||||
continue;
|
||||
}
|
||||
echo '<td>' . $band . '</td>';
|
||||
}
|
||||
echo "<td>" . __("Total") . "</td></tr>
|
||||
}
|
||||
if ($posted_band != 'SAT') {
|
||||
echo "<td>" . __("Total (ex SAT)") . "</td>";
|
||||
} ?>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
<tr><td>" . __("Total worked") . "</td>";
|
||||
<?php
|
||||
echo "<tr><td>" . __("Total worked") . "</td>";
|
||||
|
||||
foreach ($wac_summary['worked'] as $wac) { // Fills the table with the data
|
||||
echo '<td style="text-align: center">' . $wac . '</td>';
|
||||
foreach ($wac_summary['worked'] as $wac => $value) { // Fills the table with the data
|
||||
if (($posted_band != 'SAT') && ($wac == 'SAT')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (($posted_band == 'SAT') && ($wac == 'Total')) {
|
||||
continue;
|
||||
}
|
||||
echo '<td style="text-align: center">';
|
||||
if ($wac == 'Total' && $posted_band != 'SAT') {
|
||||
echo '<b>'.$value.'</b>';
|
||||
} else {
|
||||
echo $value;
|
||||
}
|
||||
echo '</td>';
|
||||
}
|
||||
|
||||
echo "</tr><tr>
|
||||
<td>" . __("Total confirmed") . "</td>";
|
||||
foreach ($wac_summary['confirmed'] as $wac) { // Fills the table with the data
|
||||
echo '<td style="text-align: center">' . $wac . '</td>';
|
||||
foreach ($wac_summary['confirmed'] as $wac => $value) { // Fills the table with the data
|
||||
if (($posted_band != 'SAT') && ($wac == 'SAT')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (($posted_band == 'SAT') && ($wac == 'Total')) {
|
||||
continue;
|
||||
}
|
||||
echo '<td style="text-align: center">';
|
||||
if ($wac == 'Total' && $posted_band != 'SAT') {
|
||||
echo '<b>'.$value.'</b>';
|
||||
} else {
|
||||
echo $value;
|
||||
}
|
||||
echo '</td>';
|
||||
}
|
||||
|
||||
echo '</tr>
|
||||
@@ -197,7 +224,7 @@
|
||||
|
||||
}
|
||||
else {
|
||||
echo '<div class="alert alert-danger" role="alert">' . __("Nothing found!") . '</div>';
|
||||
echo '<div class="alert alert-danger" role="alert">' . __("No QSOS found matching the criteria for this award!") . '</div>';
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user