diff --git a/application/controllers/Awards.php b/application/controllers/Awards.php index 1b9b94f18..c02e85147 100644 --- a/application/controllers/Awards.php +++ b/application/controllers/Awards.php @@ -152,6 +152,48 @@ class Awards extends CI_Controller { $this->load->view('interface_assets/footer'); } + public function vucc() { + $this->load->model('vucc'); + $data['worked_bands'] = $this->vucc->get_worked_bands(); + + $data['vucc_array'] = $this->vucc->get_vucc_array($data); + + // Render Page + $data['page_title'] = "Awards - VUCC"; + $this->load->view('interface_assets/header', $data); + $this->load->view('awards/vucc/index'); + $this->load->view('interface_assets/footer'); + } + + public function vucc_band(){ + $this->load->model('vucc'); + $band = str_replace('"', "", $this->input->get("Band")); + $data['vucc_array'] = $this->vucc->vucc_details($band); + + // Render Page + $data['page_title'] = "VUCC - band"; + $data['filter'] = "band ".$band; + $data['band'] = $band; + $this->load->view('interface_assets/header', $data); + $this->load->view('awards/vucc/band'); + $this->load->view('interface_assets/footer'); + } + + public function vucc_details(){ + $this->load->model('logbook_model'); + + $gridsquare = str_replace('"', "", $this->input->get("Gridsquare")); + $band = str_replace('"', "", $this->input->get("Band")); + $data['results'] = $this->logbook_model->vucc_qso_details($gridsquare, $band); + + // Render Page + $data['page_title'] = "Log View - VUCC"; + $data['filter'] = "vucc " . $gridsquare . " and band ".$band; + $this->load->view('interface_assets/header', $data); + $this->load->view('awards/vucc/details'); + $this->load->view('interface_assets/footer'); + } + /* Handles Displaying of WAB Squares worked. Comment field - WAB:# diff --git a/application/controllers/Gridsquares.php b/application/controllers/Gridsquares.php index f1b94ec3a..f1596c96d 100644 --- a/application/controllers/Gridsquares.php +++ b/application/controllers/Gridsquares.php @@ -261,5 +261,21 @@ class Gridsquares extends CI_Controller { $this->load->view('gridsquares/index.php'); $this->load->view('interface_assets/footer'); } + + function search_band($band, $gridsquare){ + $this->load->model('gridsquares_model'); + header('Content-Type: application/json'); + $result = $this->gridsquares_model->search_band($band, $gridsquare); + + echo $result; + } + + function search_sat($gridsquare){ + $this->load->model('gridsquares_model'); + header('Content-Type: application/json'); + $result = $this->gridsquares_model->search_sat($gridsquare); + + echo $result; + } } \ No newline at end of file diff --git a/application/controllers/Logbook.php b/application/controllers/Logbook.php index 7f0b99556..2aa640f04 100755 --- a/application/controllers/Logbook.php +++ b/application/controllers/Logbook.php @@ -71,6 +71,8 @@ class Logbook extends CI_Controller { "callsign_qra" => "", "callsign_qth" => "", "callsign_iota" => "", + "callsign_state" => "", + "callsign_us_county" => "", "qsl_manager" => "", "bearing" => "", "workedBefore" => false, @@ -139,6 +141,9 @@ class Logbook extends CI_Controller { $return['callsign_qra'] = $callbook['gridsquare']; $return['callsign_qth'] = $callbook['city']; $return['callsign_iota'] = $callbook['iota']; + $return['callsign_state'] = $callbook['state']; + $return['callsign_us_county'] = $callbook['us_county']; + if(isset($callbook['qslmgr'])) { $return['qsl_manager'] = $callbook['qslmgr']; } diff --git a/application/libraries/Hamqth.php b/application/libraries/Hamqth.php index b98bb79f1..69b49aadd 100644 --- a/application/libraries/Hamqth.php +++ b/application/libraries/Hamqth.php @@ -79,8 +79,18 @@ class Hamqth { $data['lat'] = (string) $xml->search->latitude; $data['long'] = (string) $xml->search->longitude; $data['iota'] = (string) $xml->search->iota; + $data['us_state'] = (string) $xml->search->us_state; + $data['us_county'] = (string) $xml->search->us_county; $data['error'] = (string) $xml->session->error; + if($xml->search->country == "United States") { + $data['state'] = (string) $xml->search->us_state; + $data['us_county'] = (string) $xml->search->us_county; + } else { + $data['state'] = null; + $data['us_county'] = null; + } + return $data; } } diff --git a/application/libraries/Qrz.php b/application/libraries/Qrz.php index d301ffc39..dd0c995d9 100755 --- a/application/libraries/Qrz.php +++ b/application/libraries/Qrz.php @@ -80,6 +80,15 @@ class Qrz { $data['long'] = (string) $xml->Callsign->lon; $data['iota'] = (string) $xml->Callsign->iota; $data['qslmgr'] = (string) $xml->Callsign->qslmgr; + + if($xml->Callsign->country == "United States") { + $data['state'] = (string) $xml->Callsign->state; + $data['us_county'] = (string) $xml->Callsign->county; + } else { + $data['state'] = null; + $data['us_county'] = null; + } + return $data; } diff --git a/application/migrations/037_update_lotw_url.php b/application/migrations/037_update_lotw_url.php new file mode 100644 index 000000000..379ab45e8 --- /dev/null +++ b/application/migrations/037_update_lotw_url.php @@ -0,0 +1,22 @@ +db->query($sql); + + $sql = "UPDATE config SET lotw_upload_url = 'https://lotw.arrl.org/lotwuser/upload' WHERE id=1"; + $this->db->query($sql); + + $sql = "UPDATE config SET lotw_login_url = 'https://lotw.arrl.org/lotwuser/default' WHERE id=1"; + $this->db->query($sql); + } + + public function down() + { + + } +} +?> diff --git a/application/models/Distances_model.php b/application/models/Distances_model.php index c8025898a..a6da9d683 100644 --- a/application/models/Distances_model.php +++ b/application/models/Distances_model.php @@ -14,6 +14,7 @@ class Distances_model extends CI_Model $CI =& get_instance(); $CI->load->model('Stations'); $station_id = $CI->Stations->find_active(); + $station_gridsquare = $CI->Stations->find_gridsquare(); $gridsquare = explode(',', $station_gridsquare); // We need to convert to an array, since a user can enter several gridsquares @@ -26,7 +27,7 @@ class Distances_model extends CI_Model else { $this->db->where('col_band', $postdata['band']); } - + $this->db->where('station_id', $station_id); $dataarrayata = $this->db->get($this->config->item('table_name')); $this->plot($dataarrayata->result_array(), $gridsquare); } diff --git a/application/models/Dxcc.php b/application/models/Dxcc.php index 63c3fb1a7..3a0993fb5 100644 --- a/application/models/Dxcc.php +++ b/application/models/Dxcc.php @@ -191,7 +191,7 @@ class DXCC extends CI_Model { if ($postdata['worked'] != NULL) { $workedDXCC = $this->getDxccBandWorked($station_id, $band, $postdata); foreach ($workedDXCC as $wdxcc) { - $dxccMatrix[$wdxcc->dxcc][$band] = '
';; + $dxccMatrix[$wdxcc->dxcc][$band] = '';; } } @@ -199,7 +199,7 @@ class DXCC extends CI_Model { if ($postdata['confirmed'] != NULL) { $confirmedDXCC = $this->getDxccBandConfirmed($station_id, $band, $postdata); foreach ($confirmedDXCC as $cdxcc) { - $dxccMatrix[$cdxcc->dxcc][$band] = '';; + $dxccMatrix[$cdxcc->dxcc][$band] = '';; } } } diff --git a/application/models/Gridsquares_model.php b/application/models/Gridsquares_model.php index d845a4b94..a4e244b00 100644 --- a/application/models/Gridsquares_model.php +++ b/application/models/Gridsquares_model.php @@ -76,4 +76,32 @@ class Gridsquares_model extends CI_Model { AND (COL_LOTW_QSL_RCVD = "Y" OR COL_QSL_RCVD = "Y") '); } + + function search_band($band, $gridsquare) { + $CI =& get_instance(); + $CI->load->model('Stations'); + $station_id = $CI->Stations->find_active(); + + $result = $this->db->query('SELECT COL_CALL, COL_TIME_ON, COL_BAND, COL_MODE FROM '.$this->config->item('table_name').' WHERE station_id = "'.$station_id.'" AND COL_GRIDSQUARE LIKE "%'.$gridsquare.'%" AND COL_BAND = "'.$band.'" + AND COL_PROP_MODE != "SAT" + AND COL_PROP_MODE != "INTERNET" + AND COL_PROP_MODE != "ECH" + AND COL_PROP_MODE != "RPT" + AND COL_SAT_NAME = "" + '); + + //print_r($result); + return json_encode($result->result()); + } + + function search_sat($gridsquare) { + $CI =& get_instance(); + $CI->load->model('Stations'); + $station_id = $CI->Stations->find_active(); + + $result = $this->db->query('SELECT COL_CALL, COL_TIME_ON, COL_BAND, COL_MODE, COL_SAT_NAME FROM '.$this->config->item('table_name').' WHERE station_id = "'.$station_id.'" AND COL_GRIDSQUARE LIKE "%'.$gridsquare.'%" AND COL_PROP_MODE = "SAT"'); + + //print_r($result); + return json_encode($result->result()); + } } \ No newline at end of file diff --git a/application/models/Logbook_model.php b/application/models/Logbook_model.php index 54abb7dc0..6660bc5cc 100755 --- a/application/models/Logbook_model.php +++ b/application/models/Logbook_model.php @@ -106,6 +106,7 @@ class Logbook_model extends CI_Model { 'COL_LON' => null, 'COL_DXCC' => $dxcc_id, 'COL_CQZ' => $cqz, + 'COL_STATE' => trim($this->input->post('usa_state')), 'COL_SOTA_REF' => trim($this->input->post('sota_ref')), 'COL_DARC_DOK' => trim($this->input->post('darc_dok')), ); @@ -206,6 +207,36 @@ class Logbook_model extends CI_Model { return $this->db->get($this->config->item('table_name')); } + + public function vucc_qso_details($gridsquare, $band) { + $CI =& get_instance(); + $CI->load->model('Stations'); + $station_id = $CI->Stations->find_active(); + $sql = "select * from " . $this->config->item('table_name') . " where station_id =" . $station_id . " and col_gridsquare like '" . $gridsquare. "%'"; + + if ($band != 'All') { + if ($band == 'SAT') { + $sql .= " and col_prop_mode ='" . $band . "'"; + } else { + $sql .= " and col_prop_mode !='SAT'"; + $sql .= " and col_band ='" . $band . "'"; + } + } + + $sql .= " union "; + $sql .= "select * from " . $this->config->item('table_name') . " where station_id =" . $station_id . " and col_vucc_grids like '%" . $gridsquare. "%'"; + + if ($band != 'All') { + if ($band == 'SAT') { + $sql .= " and col_prop_mode ='" . $band . "'"; + } else { + $sql .= " and col_prop_mode !='SAT'"; + $sql .= " and col_band ='" . $band . "'"; + } + } + + return $this->db->query($sql); + } public function cq_qso_details($cqzone){ $CI =& get_instance(); @@ -298,6 +329,7 @@ class Logbook_model extends CI_Model { 'COL_QSL_VIA' => $this->input->post('qsl_via_callsign'), 'station_id' => $this->input->post('station_profile'), 'COL_OPERATOR' => $this->input->post('operator_callsign'), + 'COL_STATE' =>$this->input->post('usa_state') ); $this->db->where('COL_PRIMARY_KEY', $this->input->post('id')); diff --git a/application/models/Vucc.php b/application/models/Vucc.php new file mode 100644 index 000000000..34f549907 --- /dev/null +++ b/application/models/Vucc.php @@ -0,0 +1,303 @@ + 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, + ); + + function __construct() + { + // Call the Model constructor + parent::__construct(); + } + + function get_worked_bands() + { + $CI =& get_instance(); + $CI->load->model('Stations'); + $station_id = $CI->Stations->find_active(); + + // get all worked slots from database + $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; + } + /* + * Fetches worked and confirmed gridsquare on each band and total + */ + function get_vucc_array($data) { + $vuccArray = $this->fetchVucc($data); + + if (isset($vuccArray)) { + return $vuccArray; + } else { + return 0; + } + } + + /* + * Builds the array to display worked/confirmed vucc on awward page + */ + function fetchVucc($data) { + $totalGridConfirmed = array(); + $totalGridWorked = array(); + + foreach($data['worked_bands'] as $band) { + + // Getting all the worked grids + $col_gridsquare_worked = $this->get_vucc_summary($band, 'none'); + + $workedGridArray = array(); + foreach ($col_gridsquare_worked as $workedgrid) { + array_push($workedGridArray, $workedgrid['gridsquare']); + if(!in_array($workedgrid['gridsquare'], $totalGridWorked)){ + array_push($totalGridWorked, $workedgrid['gridsquare']); + } + } + + $col_vucc_grids_worked = $this->get_vucc_summary_col_vucc($band, 'none'); + + foreach ($col_vucc_grids_worked as $gridSplit) { + $grids = explode(",", $gridSplit['col_vucc_grids']); + foreach($grids as $key) { + $grid_four = strtoupper(substr(trim($key),0,4)); + + if(!in_array($grid_four, $workedGridArray)){ + array_push($workedGridArray, $grid_four); + } + + if(!in_array($grid_four, $totalGridWorked)){ + array_push($totalGridWorked, $grid_four); + } + } + } + + // Getting all the confirmed grids + $col_gridsquare_confirmed = $this->get_vucc_summary($band, 'both'); + + $confirmedGridArray = array(); + foreach ($col_gridsquare_confirmed as $confirmedgrid) { + array_push($confirmedGridArray, $confirmedgrid['gridsquare']); + if(!in_array($confirmedgrid['gridsquare'], $totalGridConfirmed)){ + array_push($totalGridConfirmed, $confirmedgrid['gridsquare']); + } + } + + $col_vucc_grids_confirmed = $this->get_vucc_summary_col_vucc($band, 'both'); + + foreach ($col_vucc_grids_confirmed as $gridSplit) { + $grids = explode(",", $gridSplit['col_vucc_grids']); + foreach($grids as $key) { + $grid_four = strtoupper(substr(trim($key),0,4)); + + if(!in_array($grid_four, $confirmedGridArray)){ + array_push($confirmedGridArray, $grid_four); + } + + if(!in_array($grid_four, $totalGridConfirmed)){ + array_push($totalGridConfirmed, $grid_four); + } + } + } + + $vuccArray[$band]['worked'] = count($workedGridArray); + $vuccArray[$band]['confirmed'] = count($confirmedGridArray); + } + + $vuccArray['All']['worked'] = count($totalGridWorked); + $vuccArray['All']['confirmed'] = count($totalGridConfirmed); + + return $vuccArray; + } + + /* + * Gets the grid from col_vucc_grids + * $band = the band chosen + * $confirmationMethod - qsl, lotw or both, use anything else to skip confirmed + */ + function get_vucc_summary_col_vucc($band, $confirmationMethod) { + $station_id = $this->get_station_id(); + + $sql = "select col_vucc_grids + from " . $this->config->item('table_name') . + " where station_id =" . $station_id . + " and (LENGTH(col_vucc_grids) > 0) "; + + if ($confirmationMethod == 'both') { + $sql .= " and (col_qsl_rcvd='Y' or col_lotw_qsl_rcvd='Y')"; + } + else if ($confirmationMethod == 'qsl') { + $sql .= " and col_qsl_rcvd='Y'"; + } + else if ($confirmationMethod == 'lotw') { + $sql .= " and col_lotw_qsl_rcvd='Y'"; + } + + if ($band != 'All') { + if ($band == 'SAT') { + $sql .= " and col_prop_mode ='" . $band . "'"; + } else { + $sql .= " and col_prop_mode !='SAT'"; + $sql .= " and col_band ='" . $band . "'"; + } + } + + $query = $this->db->query($sql); + return $query->result_array(); + } + + /* + * Gets the grid from col_gridsquare + * $band = the band chosen + * $confirmationMethod - qsl, lotw or both, use anything else to skip confirmed + */ + function get_vucc_summary($band, $confirmationMethod) { + $station_id = $this->get_station_id(); + $sql = "select distinct upper(substring(col_gridsquare, 1, 4)) gridsquare + from " . $this->config->item('table_name') . + " where station_id =" . $station_id . + " and (LENGTH(col_gridsquare) > 0)"; + + if ($confirmationMethod == 'both') { + $sql .= " and (col_qsl_rcvd='Y' or col_lotw_qsl_rcvd='Y')"; + } + else if ($confirmationMethod == 'qsl') { + $sql .= " and col_qsl_rcvd='Y'"; + } + else if ($confirmationMethod == 'lotw') { + $sql .= " and col_lotw_qsl_rcvd='Y'"; + } + + if ($band != 'All') { + if ($band == 'SAT') { + $sql .= " and col_prop_mode ='" . $band . "'"; + } else { + $sql .= " and col_prop_mode !='SAT'"; + $sql .= " and col_band ='" . $band . "'"; + } + } + + $query = $this->db->query($sql); + + return $query->result_array(); + } + + /* + * Makes a list of all gridsquares on chosen band with info about lotw and qsl + */ + function vucc_details($band) { + $col_gridsquare_worked = $this->get_vucc_summary($band, 'none'); + + $workedGridArray = array(); + foreach ($col_gridsquare_worked as $workedgrid) { + array_push($workedGridArray, $workedgrid['gridsquare']); + } + + $col_vucc_grids_worked = $this->get_vucc_summary_col_vucc($band, 'none'); + + foreach ($col_vucc_grids_worked as $gridSplit) { + $grids = explode(",", $gridSplit['col_vucc_grids']); + foreach($grids as $key) { + $grid_four = strtoupper(substr(trim($key),0,4)); + + if(!in_array($grid_four, $workedGridArray)){ + array_push($workedGridArray, $grid_four); + } + } + } + + foreach ($workedGridArray as $grid) { + $vuccBand[$grid]['qsl'] = ''; + $vuccBand[$grid]['lotw'] = ''; + } + + $vuccDataQsl = $this->get_vucc_summary($band, 'qsl'); + + foreach ($vuccDataQsl as $grid) { + $vuccBand[$grid['gridsquare']]['qsl'] = 'Y'; + } + + $vuccDataLotw = $this->get_vucc_summary($band, 'lotw'); + + foreach ($vuccDataLotw as $grid) { + $vuccBand[$grid['gridsquare']]['lotw'] = 'Y'; + } + + $col_vucc_grids_confirmed_qsl = $this->get_vucc_summary_col_vucc($band, 'lotw'); + + foreach ($col_vucc_grids_confirmed_qsl as $gridSplit) { + $grids = explode(",", $gridSplit['col_vucc_grids']); + foreach($grids as $key) { + $grid_four = strtoupper(substr(trim($key),0,4)); + $vuccBand[$grid_four]['lotw'] = 'Y'; + } + } + + $col_vucc_grids_confirmed_lotw = $this->get_vucc_summary_col_vucc($band, 'qsl'); + + foreach ($col_vucc_grids_confirmed_lotw as $gridSplit) { + $grids = explode(",", $gridSplit['col_vucc_grids']); + foreach($grids as $key) { + $grid_four = strtoupper(substr(trim($key),0,4)); + $vuccBand[$grid_four]['qsl'] = 'Y'; + } + } + + if (count($vuccBand) == 0) { + return 0; + } else { + ksort($vuccBand); + return $vuccBand; + } + } + + function get_station_id() { + $CI =& get_instance(); + $CI->load->model('Stations'); + return $CI->Stations->find_active(); + } +} +?> \ No newline at end of file diff --git a/application/views/awards/nav_bar.php b/application/views/awards/nav_bar.php index 33ae85872..b573e53fb 100644 --- a/application/views/awards/nav_bar.php +++ b/application/views/awards/nav_bar.php @@ -1,10 +1,33 @@ + diff --git a/application/views/awards/vucc/band.php b/application/views/awards/vucc/band.php new file mode 100644 index 000000000..4802da125 --- /dev/null +++ b/application/views/awards/vucc/band.php @@ -0,0 +1,32 @@ +| Band | +Grids worked | +Grids confirmed | +
| '. $band .' | '; + echo '' . $vucc['worked'] . ' | '; + echo '' . $vucc['confirmed'] . ' | '; + echo '