diff --git a/application/controllers/Accumulated.php b/application/controllers/Accumulated.php new file mode 100644 index 00000000..a3bc64dc --- /dev/null +++ b/application/controllers/Accumulated.php @@ -0,0 +1,49 @@ +load->model('user_model'); + if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); } + } + + public function index() + { + // Render Page + $data['page_title'] = "Accumulated statistics"; + + $this->load->model('Accumulate_model'); + + $data['worked_bands'] = $this->Accumulate_model->get_worked_bands(); + + $this->load->model('modes'); + + $data['modes'] = $this->modes->active(); + + $this->load->view('interface_assets/header', $data); + $this->load->view('accumulate/index'); + $this->load->view('interface_assets/footer'); + } + + /* + * Used for ajax-call in javascript to fetch the data and insert into table and chart + */ + public function get_accumulated_data(){ + //load model + $this->load->model('accumulate_model'); + $band = $this->input->post('Band'); + $award = $this->input->post('Award'); + $mode = $this->input->post('Mode'); + $period = $this->input->post('Period'); + + // get data + $data = $this->accumulate_model->get_accumulated_data($band, $award, $mode, $period); + header('Content-Type: application/json'); + echo json_encode($data); + } + +} \ No newline at end of file diff --git a/application/models/Accumulate_model.php b/application/models/Accumulate_model.php new file mode 100644 index 00000000..72c1b132 --- /dev/null +++ b/application/models/Accumulate_model.php @@ -0,0 +1,314 @@ +load->model('Stations'); + $station_id = $CI->Stations->find_active(); + + switch ($award) { + case 'dxcc': $result = $this->get_accumulated_dxcc($band, $mode, $period, $station_id); break; + case 'was': $result = $this->get_accumulated_was($band, $mode, $period, $station_id); break; + case 'iota': $result = $this->get_accumulated_iota($band, $mode, $period, $station_id); break; + case 'waz': $result = $this->get_accumulated_waz($band, $mode, $period, $station_id); break; + } + + return $result; + } + + function get_accumulated_dxcc($band, $mode, $period, $station_id) { + if ($period == "year") { + $sql = "SELECT year(col_time_on) as year, + (select count(distinct b.col_dxcc) from " . + $this->config->item('table_name') . + " as b where year(col_time_on) <= year and b.station_id = ". $station_id; + } + else if ($period == "month") { + $sql = "SELECT date_format(col_time_on, '%Y%m') as year, + (select count(distinct b.col_dxcc) from " . + $this->config->item('table_name') . + " as b where date_format(col_time_on, '%Y%m') <= year and b.station_id = ". $station_id; + } + + 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 . "'"; + } + + $sql .=") total from " . $this->config->item('table_name') . " as a + where a.station_id = ". $station_id; + + 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 . "'"; + } + + if ($period == "year") { + $sql .= " group by year(a.col_time_on) + order by year(a.col_time_on)"; + } + else if ($period == "month") { + $sql .= " group by date_format(a.col_time_on, '%Y%m') + order by date_format(a.col_time_on, '%Y%m')"; + } + + $query = $this->db->query($sql); + + return $query->result(); + } + + function get_accumulated_was($band, $mode, $period, $station_id) { + if ($period == "year") { + $sql = "SELECT year(col_time_on) as year, + (select count(distinct b.col_state) from " . + $this->config->item('table_name') . + " as b where year(col_time_on) <= year and b.station_id = ". $station_id; + } + else if ($period == "month") { + $sql = "SELECT date_format(col_time_on, '%Y%m') as year, + (select count(distinct b.col_state) from " . + $this->config->item('table_name') . + " as b where date_format(col_time_on, '%Y%m') <= year and b.station_id = ". $station_id; + } + + 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 . "'"; + } + + $sql .= " and COL_DXCC in ('291', '6', '110')"; + $sql .= " and COL_STATE in ('AK','AL','AR','AZ','CA','CO','CT','DE','FL','GA','HI','IA','ID','IL','IN','KS','KY','LA','MA','MD','ME','MI','MN','MO','MS','MT','NC','ND','NE','NH','NJ','NM','NV','NY','OH','OK','OR','PA','RI','SC','SD','TN','TX','UT','VA','VT','WA','WI','WV','WY')"; + + $sql .=") total from " . $this->config->item('table_name') . " as a + where a.station_id = ". $station_id; + + 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 . "'"; + } + + $sql .= " and COL_DXCC in ('291', '6', '110')"; + $sql .= " and COL_STATE in ('AK','AL','AR','AZ','CA','CO','CT','DE','FL','GA','HI','IA','ID','IL','IN','KS','KY','LA','MA','MD','ME','MI','MN','MO','MS','MT','NC','ND','NE','NH','NJ','NM','NV','NY','OH','OK','OR','PA','RI','SC','SD','TN','TX','UT','VA','VT','WA','WI','WV','WY')"; + + if ($period == "year") { + $sql .= " group by year(a.col_time_on) + order by year(a.col_time_on)"; + } + else if ($period == "month") { + $sql .= " group by date_format(a.col_time_on, '%Y%m') + order by date_format(a.col_time_on, '%Y%m')"; + } + + $query = $this->db->query($sql); + + return $query->result(); + } + + function get_accumulated_iota($band, $mode, $period, $station_id) { + if ($period == "year") { + $sql = "SELECT year(col_time_on) as year, + (select count(distinct b.col_iota) from " . + $this->config->item('table_name') . + " as b where year(col_time_on) <= year and b.station_id = ". $station_id; + } + else if ($period == "month") { + $sql = "SELECT date_format(col_time_on, '%Y%m') as year, + (select count(distinct b.col_iota) from " . + $this->config->item('table_name') . + " as b where date_format(col_time_on, '%Y%m') <= year and b.station_id = ". $station_id; + } + + 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 . "'"; + } + + $sql .=") total from " . $this->config->item('table_name') . " as a + where a.station_id = ". $station_id; + + 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 . "'"; + } + + if ($period == "year") { + $sql .= " group by year(a.col_time_on) + order by year(a.col_time_on)"; + } + else if ($period == "month") { + $sql .= " group by date_format(a.col_time_on, '%Y%m') + order by date_format(a.col_time_on, '%Y%m')"; + } + + $query = $this->db->query($sql); + + return $query->result(); + } + + function get_accumulated_waz($band, $mode, $period, $station_id) { + if ($period == "year") { + $sql = "SELECT year(col_time_on) as year, + (select count(distinct b.col_cqz) from " . + $this->config->item('table_name') . + " as b where year(col_time_on) <= year and b.station_id = ". $station_id; + } + else if ($period == "month") { + $sql = "SELECT date_format(col_time_on, '%Y%m') as year, + (select count(distinct b.col_cqz) from " . + $this->config->item('table_name') . + " as b where date_format(col_time_on, '%Y%m') <= year and b.station_id = ". $station_id; + } + + 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 . "'"; + } + + $sql .=") total from " . $this->config->item('table_name') . " as a + where a.station_id = ". $station_id; + + 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 . "'"; + } + + if ($period == "year") { + $sql .= " group by year(a.col_time_on) + order by year(a.col_time_on)"; + } + else if ($period == "month") { + $sql .= " group by date_format(a.col_time_on, '%Y%m') + order by date_format(a.col_time_on, '%Y%m')"; + } + + $query = $this->db->query($sql); + + return $query->result(); + } + + function get_worked_bands() { + $CI =& get_instance(); + $CI->load->model('Stations'); + $station_id = $CI->Stations->find_active(); + + $data = $this->db->query( + "SELECT distinct LOWER(`COL_BAND`) as `COL_BAND` FROM `" . $this->config->item('table_name') . "` WHERE station_id = " . $station_id . " AND COL_PROP_MODE != \"SAT\"" + ); + $worked_slots = array(); + foreach ($data->result() as $row) { + array_push($worked_slots, $row->COL_BAND); + } + + $SAT_data = $this->db->query( + "SELECT distinct LOWER(`COL_PROP_MODE`) as `COL_PROP_MODE` FROM `" . $this->config->item('table_name') . "` WHERE station_id = " . $station_id . " AND COL_PROP_MODE = \"SAT\"" + ); + + foreach ($SAT_data->result() as $row) { + array_push($worked_slots, strtoupper($row->COL_PROP_MODE)); + } + + // bring worked-slots in order of defined $bandslots + $results = array(); + foreach (array_keys($this->bandslots) as $slot) { + if (in_array($slot, $worked_slots)) { + array_push($results, $slot); + } + } + return $results; + } + + public $bandslots = array("160m" => 0, + "80m" => 0, + "60m" => 0, + "40m" => 0, + "30m" => 0, + "20m" => 0, + "17m" => 0, + "15m" => 0, + "12m" => 0, + "10m" => 0, + "6m" => 0, + "4m" => 0, + "2m" => 0, + "70cm" => 0, + "23cm" => 0, + "13cm" => 0, + "9cm" => 0, + "6cm" => 0, + "3cm" => 0, + "1.25cm" => 0, + "SAT" => 0, + ); +} \ No newline at end of file diff --git a/application/views/accumulate/index.php b/application/views/accumulate/index.php new file mode 100644 index 00000000..4b5b4524 --- /dev/null +++ b/application/views/accumulate/index.php @@ -0,0 +1,99 @@ +
+

+ +
+ + +
+ +
+ +
+ + +
+ +
+
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + + +
+
+ +
+
+ + +
+ +
+ +
+
+ +
+ diff --git a/application/views/interface_assets/footer.php b/application/views/interface_assets/footer.php index aa8c9f39..7cef4581 100644 --- a/application/views/interface_assets/footer.php +++ b/application/views/interface_assets/footer.php @@ -31,9 +31,7 @@ -uri->segment(1) == "awards") { ?> - uri->segment(1) == "search" && $this->uri->segment(2) == "filter") { ?> @@ -1791,6 +1789,131 @@ $(document).ready(function(){ +uri->segment(1) == "accumulated") { ?> + + + diff --git a/application/views/interface_assets/header.php b/application/views/interface_assets/header.php index f284f92f..e40e6eb5 100644 --- a/application/views/interface_assets/header.php +++ b/application/views/interface_assets/header.php @@ -28,16 +28,14 @@ - uri->segment(1) == "qrz") { ?> + uri->segment(1) == "qrz" || $this->uri->segment(1) == "accumulated") { ?> - uri->segment(1) == "awards") { ?> - - + uri->segment(1) == "adif") { ?> @@ -86,6 +84,8 @@ Days with QSOs DXCC Timeline + + Accumulated statistics