diff --git a/application/controllers/Statistics.php b/application/controllers/Statistics.php
index 2647c8fcf..593bda6ca 100644
--- a/application/controllers/Statistics.php
+++ b/application/controllers/Statistics.php
@@ -162,6 +162,20 @@ class Statistics extends CI_Controller {
echo json_encode($satstats);
}
+ public function get_unique_sat_callsigns() {
+ $this->load->model('stats');
+
+ $result = $this->stats->unique_sat_callsigns();
+ $total_qsos['qsoarray'] = $result['qsoView'];
+ $total_qsos['satunique'] = $result['satunique'];
+ $total_qsos['modeunique'] = $result['modeunique'];
+ $total_qsos['total'] = $result['total'];
+ $total_qsos['sats'] = $this->stats->get_sats();
+ $total_qsos['modes'] = $this->stats->get_sat_modes();
+
+ $this->load->view('statistics/satuniquetable', $total_qsos);
+ }
+
public function get_unique_callsigns() {
$this->load->model('stats');
@@ -175,6 +189,21 @@ class Statistics extends CI_Controller {
$this->load->view('statistics/uniquetable', $total_qsos);
}
+ public function get_total_sat_qsos() {
+ $this->load->model('stats');
+
+ $totalqsos = array();
+
+ $result = $this->stats->total_sat_qsos();
+ $total_qsos['qsoarray'] = $result['qsoView'];
+ $total_qsos['sattotal'] = $result['sattotal'];
+ $total_qsos['modetotal'] = $result['modetotal'];
+ $total_qsos['modes'] = $result['modes'];
+ $total_qsos['sats'] = $this->stats->get_sats();
+
+ $this->load->view('statistics/satqsotable', $total_qsos);
+ }
+
public function get_total_qsos() {
$this->load->model('stats');
diff --git a/application/models/Stats.php b/application/models/Stats.php
index 8fb9bf200..6ead78c4d 100644
--- a/application/models/Stats.php
+++ b/application/models/Stats.php
@@ -71,6 +71,57 @@
return $this->db->get($this->config->item('table_name'));
}
+ function unique_sat_callsigns() {
+ $qsoView = array();
+
+ $sats = $this->get_sats();
+ $modes = $this->get_sat_modes();
+
+ $satunique = $this->getUniqueSatCallsignsSat();
+ $modeunique = $this->getUniqueSatCallsignsModes();
+
+ // Generating the band/mode table
+ foreach ($sats as $sat) {
+ $sattotal[$sat] = 0;
+ foreach ($modes as $mode) {
+ $qsoView [$sat][$mode] = '-';
+ }
+ }
+
+ foreach ($satunique as $sat) {
+ $satcalls[$sat->sat] = $sat->calls;
+ }
+
+ foreach ($modeunique as $mode) {
+ //if ($mode->col_submode == null) {
+ if ($mode->col_submode == null || $mode->col_submode == "") {
+ $modecalls[$mode->col_mode] = $mode->calls;
+ } else {
+ $modecalls[$mode->col_submode] = $mode->calls;
+ }
+ }
+
+ // Populating array with worked
+ $workedQso = $this->getUniqueSatCallsigns();
+
+ foreach ($workedQso as $line) {
+ //if ($line->col_submode == null) {
+ if ($line->col_submode == null || $line->col_submode == "") {
+ $qsoView [$line->sat] [$line->col_mode] = $line->calls;
+ } else {
+ $qsoView [$line->sat] [$line->col_submode] = $line->calls;
+ }
+ }
+
+ $result['qsoView'] = $qsoView;
+ $result['satunique'] = $satcalls;
+ $result['modeunique'] = $modecalls;
+ $result['total'] = $this->getUniqueSatCallsignsTotal();
+
+ return $result;
+ }
+
+
function unique_callsigns() {
$qsoView = array();
@@ -79,6 +130,9 @@
$bandunique = $this->getUniqueCallsignsBands();
$modeunique = $this->getUniqueCallsignsModes();
+
+ $modecalls=[];
+ $bandcalls=[];
// Generating the band/mode table
foreach ($bands as $band) {
@@ -121,6 +175,48 @@
return $result;
}
+ function getUniqueSatCallsignsSat() {
+ $this->load->model('logbooks_model');
+ $logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
+
+ if (!$logbooks_locations_array) {
+ return null;
+ }
+
+ $bands = array();
+
+ $this->db->select('count(distinct col_call) as calls, upper(col_sat_name) as sat', FALSE);
+ $this->db->where('col_prop_mode', 'SAT');
+ $this->db->where('coalesce(col_sat_name,"") != ""');
+ $this->db->where_in('station_id', $logbooks_locations_array);
+ $this->db->group_by('upper(col_sat_name)');
+
+ $query = $this->db->get($this->config->item('table_name'));
+
+ return $query->result();
+ }
+
+ function getUniqueSatCallsigns() {
+ $this->load->model('logbooks_model');
+ $logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
+
+ if (!$logbooks_locations_array) {
+ return null;
+ }
+
+ $bands = array();
+
+ $this->db->select('count(distinct col_call) as calls, upper(col_sat_name) as sat, col_mode, coalesce(col_submode, "") col_submode', FALSE);
+ $this->db->where('col_prop_mode', 'SAT');
+ $this->db->where('coalesce(col_sat_name,"") != ""');
+ $this->db->where_in('station_id', $logbooks_locations_array);
+ $this->db->group_by('upper(col_sat_name), col_mode, coalesce(col_submode, "")');
+
+ $query = $this->db->get($this->config->item('table_name'));
+
+ return $query->result();
+ }
+
function getUniqueCallsigns() {
$CI =& get_instance();
$CI->load->model('logbooks_model');
@@ -161,6 +257,27 @@
return $query->result();
}
+ function getUniqueSatCallsignsModes() {
+ $this->load->model('logbooks_model');
+ $logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
+
+ if (!$logbooks_locations_array) {
+ return null;
+ }
+
+ $bands = array();
+
+ $this->db->select('count(distinct col_call) as calls, col_mode, coalesce(col_submode, "") col_submode', FALSE);
+ $this->db->where('coalesce(col_sat_name,"") != ""');
+ $this->db->where('col_prop_mode', 'SAT');
+ $this->db->where_in('station_id', $logbooks_locations_array);
+ $this->db->group_by('col_mode, coalesce(col_submode, "")');
+
+ $query = $this->db->get($this->config->item('table_name'));
+
+ return $query->result();
+ }
+
function getUniqueCallsignsBands() {
$CI =& get_instance();
$CI->load->model('logbooks_model');
@@ -181,6 +298,26 @@
return $query->result();
}
+ function getUniqueSatCallsignsTotal() {
+ $this->load->model('logbooks_model');
+ $logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
+
+ if (!$logbooks_locations_array) {
+ return null;
+ }
+
+ $bands = array();
+
+ $this->db->select('count(distinct col_call) as calls', FALSE);
+ $this->db->where('coalesce(col_sat_name,"") != ""');
+ $this->db->where('col_prop_mode', 'SAT');
+ $this->db->where_in('station_id', $logbooks_locations_array);
+
+ $query = $this->db->get($this->config->item('table_name'));
+
+ return $query->row();
+ }
+
function getUniqueCallsignsTotal() {
$CI =& get_instance();
$CI->load->model('logbooks_model');
@@ -200,6 +337,44 @@
return $query->row();
}
+ function total_sat_qsos() {
+ $qsoView = array();
+
+ $sats = $this->get_sats();
+ $modes = $this->get_sat_modes();
+
+ $sattotal = array();
+ $modetotal = array();
+ // Generating the band/mode table
+ foreach ($sats as $sat) {
+ $sattotal[$sat] = 0;
+ foreach ($modes as $mode) {
+ $qsoView [$sat][$mode] = '-';
+ $modetotal[$mode] = 0;
+ }
+ }
+
+ // Populating array with worked
+ $workedQso = $this->modeSatQso();
+ foreach ($workedQso as $line) {
+ if ($line->col_submode == null || $line->col_submode == "") {
+ $qsoView [$line->sat] [$line->col_mode] = $line->count;
+ $modetotal[$line->col_mode] += $line->count;
+ } else {
+ $qsoView [$line->sat] [$line->col_submode] = $line->count;
+ $modetotal[$line->col_submode] += $line->count;
+ }
+ $sattotal[$line->sat] += $line->count;
+ }
+
+ $result['qsoView'] = $qsoView;
+ $result['sattotal'] = $sattotal;
+ $result['modetotal'] = $modetotal;
+ $result['modes'] = $modes;
+
+ return $result;
+ }
+
function total_qsos() {
$qsoView = array();
@@ -237,6 +412,27 @@
return $result;
}
+ function modeSatQso() {
+ $this->load->model('logbooks_model');
+ $logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
+
+ if (!$logbooks_locations_array) {
+ return null;
+ }
+
+ $bands = array();
+
+ $this->db->select('count(*) as count, upper(col_sat_name) as sat, col_mode, coalesce(col_submode, "") col_submode', FALSE);
+ $this->db->where('coalesce(col_sat_name,"") != ""');
+ $this->db->where('col_prop_mode', 'SAT');
+ $this->db->where_in('station_id', $logbooks_locations_array);
+ $this->db->group_by('upper(col_sat_name), col_mode, coalesce(col_submode, "")');
+
+ $query = $this->db->get($this->config->item('table_name'));
+
+ return $query->result();
+ }
+
function modeBandQso() {
$CI =& get_instance();
$CI->load->model('logbooks_model');
@@ -257,6 +453,31 @@
return $query->result();
}
+ function get_sats() {
+ $this->load->model('logbooks_model');
+ $logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
+
+ if (!$logbooks_locations_array) {
+ return null;
+ }
+
+ $sats = array();
+
+ $this->db->select('distinct col_sat_name as satsort, upper(col_sat_name) as sat', FALSE);
+ $this->db->where('coalesce(col_sat_name,"") != ""');
+ $this->db->where('col_prop_mode', 'SAT');
+ $this->db->where_in('station_id', $logbooks_locations_array);
+ $this->db->order_by('satsort', 'asc');
+
+ $query = $this->db->get($this->config->item('table_name'));
+
+ foreach($query->result() as $sat){
+ array_push($sats, $sat->sat);
+ }
+
+ return $sats;
+ }
+
function get_bands() {
$CI =& get_instance();
$CI->load->model('logbooks_model');
@@ -281,6 +502,35 @@
return $bands;
}
+ function get_sat_modes() {
+ $this->load->model('logbooks_model');
+ $logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
+
+ if (!$logbooks_locations_array) {
+ return null;
+ }
+
+ $modes = array();
+
+ $this->db->select('distinct col_mode, coalesce(col_submode, "") col_submode', FALSE);
+ $this->db->where('coalesce(col_sat_name,"") != ""');
+ $this->db->where('col_prop_mode', 'SAT');
+ $this->db->where_in('station_id', $logbooks_locations_array);
+ $this->db->order_by('col_mode, col_submode', 'ASC');
+
+ $query = $this->db->get($this->config->item('table_name'));
+
+ foreach($query->result() as $mode){
+ if ($mode->col_submode == null || $mode->col_submode == "") {
+ array_push($modes, $mode->col_mode);
+ } else {
+ array_push($modes, $mode->col_submode);
+ }
+ }
+
+ return $modes;
+ }
+
function get_modes() {
$CI =& get_instance();
$CI->load->model('logbooks_model');
@@ -310,4 +560,4 @@
}
}
-?>
\ No newline at end of file
+?>
diff --git a/application/views/statistics/index.php b/application/views/statistics/index.php
index e5a7c691a..05880c92d 100644
--- a/application/views/statistics/index.php
+++ b/application/views/statistics/index.php
@@ -87,18 +87,46 @@
-
-
-
-
-
- | # |
- Satellite |
- # of QSO's worked |
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+ | # |
+ Satellite |
+ # of QSO's worked |
+
+
+
+
+
+
+
+
+
+
diff --git a/application/views/statistics/satqsotable.php b/application/views/statistics/satqsotable.php
new file mode 100644
index 000000000..a1efade3c
--- /dev/null
+++ b/application/views/statistics/satqsotable.php
@@ -0,0 +1,30 @@
+
+
+ ';
+ echo ' | ';
+ foreach($modes as $mode) {
+ echo '' . $mode . ' | ';
+ }
+ echo ''.lang('statistics_total').' | ';
+ echo '
+
+ ';
+ foreach ($qsoarray as $sat => $mode) {
+ echo '| '. $sat .' | ';
+ foreach ($mode as $singlemode) {
+ echo ''.$singlemode.' | ';
+ }
+ echo '' . $sattotal[$sat] . ' | ';
+ echo '
';
+ }
+ echo '| '.lang('statistics_total').' | ';
+ $grandtotal=0;
+ foreach($modes as $mode) {
+ echo '' . $modetotal[$mode] . ' | ';
+ $grandtotal += $modetotal[$mode];
+ }
+echo '' . $grandtotal . ' | ';
+ echo '
|---|
';
+}
diff --git a/application/views/statistics/satuniquetable.php b/application/views/statistics/satuniquetable.php
new file mode 100644
index 000000000..855a477a0
--- /dev/null
+++ b/application/views/statistics/satuniquetable.php
@@ -0,0 +1,28 @@
+
+
+ ';
+ echo ' | ';
+ foreach($modes as $mode) {
+ echo '' . $mode . ' | ';
+ }
+ echo ''.lang('statistics_total').' | ';
+ echo '
+
+ ';
+ foreach ($qsoarray as $sat => $mode) {
+ echo '| '. $sat .' | ';
+ foreach ($mode as $singlemode) {
+ echo ''.$singlemode.' | ';
+ }
+ echo '' . $satunique[$sat] . ' | ';
+ echo '
';
+ }
+ echo '| '.lang('statistics_total').' | ';
+ foreach($modes as $mode) {
+ echo '' . $modeunique[$mode] . ' | ';
+ }
+echo '' . $total->calls . ' | ';
+ echo '
|---|
';
+}
diff --git a/assets/js/sections/statistics.js b/assets/js/sections/statistics.js
index 3a650f8d5..13d6bc7fe 100644
--- a/assets/js/sections/statistics.js
+++ b/assets/js/sections/statistics.js
@@ -24,12 +24,36 @@ $("a[href='#qsotab']").on('shown.bs.tab', function(e) {
}
});
+$("a[href='#satqsostab']").on('shown.bs.tab', function(e) {
+ if (!($('.satqsostab').length > 0)) {
+ totalSatQsosC();
+ }
+});
+
$("a[href='#uniquetab']").on('shown.bs.tab', function(e) {
if (!($('.uniquetable').length > 0)) {
uniqueCallsigns();
}
});
+$("a[href='#satuniquetab']").on('shown.bs.tab', function(e) {
+ if (!($('.satuniquetab').length > 0)) {
+ uniqueSatCallsigns();
+ }
+});
+
+function uniqueSatCallsigns() {
+ $.ajax({
+ url: base_url+'index.php/statistics/get_unique_sat_callsigns',
+ type: 'post',
+ success: function (data) {
+ if (data.length > 0) {
+ $(".satunique").html(data);
+ }
+ }
+ });
+}
+
function uniqueCallsigns() {
$.ajax({
url: base_url+'index.php/statistics/get_unique_callsigns',
@@ -54,6 +78,18 @@ function totalQsos() {
});
}
+function totalSatQsosC() {
+ $.ajax({
+ url: base_url+'index.php/statistics/get_total_sat_qsos',
+ type: 'post',
+ success: function (data) {
+ if (data.length > 0) {
+ $(".satqsos").html(data);
+ }
+ }
+ });
+}
+
function totalQsosPerYear() {
// using this to change color of legend and label according to background color
var color = ifDarkModeThemeReturn('white', 'grey');
@@ -574,4 +610,4 @@ function totalSatQsos() {
}
}
});
-}
\ No newline at end of file
+}