Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 27 additions & 3 deletions application/controllers/Lookup.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,38 @@ function __construct()
$this->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()
{
$data['page_title'] = "Quick Lookup";
$this->load->model('logbook_model');
$data['dxcc'] = $this->logbook_model->fetchDxcc();
$data['iota'] = $this->logbook_model->fetchIota();
$this->load->view('lookup/index', $data);
}

public function search() {
$CI =& get_instance();
$CI->load->model('Stations');
$station_id = $CI->Stations->find_active();

$type = xss_clean($this->input->post('type'));
$dxcc = xss_clean($this->input->post('dxcc'));
$was = xss_clean($this->input->post('was'));
$cqz = xss_clean($this->input->post('cqz'));
$sota = xss_clean($this->input->post('sota'));
$grid = xss_clean($this->input->post('grid'));
$iota = xss_clean($this->input->post('iota'));

$this->load->model('lookup_model');

$data['bands'] = $this->lookup_model->get_Worked_Bands($station_id);
$data['result'] = $this->lookup_model->getSearchResult($station_id, $type, $dxcc, $was, $cqz, $sota, $grid, $iota, $data['bands']);
$this->load->view('lookup/result', $data);
}

public function scp($call) {

if($call) {
$uppercase_callsign = strtoupper($call);
}
Expand Down Expand Up @@ -78,7 +102,7 @@ public function scp($call) {
{
echo " " . $strCall . " ";
}

}

}
224 changes: 224 additions & 0 deletions application/models/Lookup_model.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,224 @@
<?php

class Lookup_model extends CI_Model{

function __construct(){
// Call the Model constructor
parent::__construct();
}

function getSearchResult($station_id, $type, $dxcc, $was, $cqz, $sota, $grid, $iota, $bands){
$modes = $this->get_worked_modes($station_id);

return $this->getResultFromDatabase($station_id, $type, $dxcc, $was, $cqz, $sota, $grid, $iota, $modes, $bands);
}

function getResultFromDatabase($station_id, $type, $dxcc, $was, $cqz, $sota, $grid, $iota, $modes, $bands) {
// Creating an empty array with all the bands and modes from the database
foreach ($modes as $mode) {
foreach ($bands as $band) {
$resultArray[$mode][$band] = '-';
}
}

// Populating array with worked band/mode combinations
$worked = $this->getQueryData($station_id, $type, $dxcc, $was, $cqz, $sota, $grid, $iota,'worked');
foreach ($worked as $w) {
$resultArray[$w->col_mode][$w->col_band] = 'W';
}

// Populating array with confirmed band/mode combinations
$confirmed = $this->getQueryData($station_id, $type, $dxcc, $was, $cqz, $sota, $grid, $iota,'confirmed');
foreach ($confirmed as $c) {
$resultArray[$c->col_mode][$c->col_band] = 'C';
}

return $resultArray;
}

/*
* Builds query depending on what we are searching for
*/
function getQueryData($station_id, $type, $dxcc, $was, $cqz, $sota, $grid, $iota, $confirmedtype) {
// If user inputs longer grid than 4 chars, we use only the first 4
if (strlen($grid) > 4) {
$fixedgrid = substr($grid, 0, 4);
}
else {
$fixedgrid = $grid;
}

$sql = "SELECT distinct col_band, lower(col_mode) as col_mode FROM " . $this->config->item('table_name') . " thcv";

$sql .= " where station_id = " . $station_id;

$sql .= " and coalesce(col_submode, '') = ''";

$sql .= " and col_prop_mode != 'SAT'";

switch ($type) {
case 'dxcc': $sql .= " and col_dxcc = " . $dxcc; break;
case 'iota': $sql .= " and col_iota = '" . $iota . "'"; break;
case 'grid': $sql .= " and (col_gridsquare like '%" . $fixedgrid . "%' or col_vucc_grids like '%" . $fixedgrid . "%')" ; break;
case 'cqz': $sql .= " and col_cqz = " . $cqz; break;
case 'was': $sql .= " and col_state = '" . $was . "' and COL_DXCC in ('291', '6', '110')";; break;
case 'sota': $sql .= " and col_sota_ref = '" . $sota . "'"; break;
default: break;
}

if ($confirmedtype == 'confirmed') {
$sql .= " and (col_qsl_rcvd = 'Y' or col_lotw_qsl_rcvd = 'Y')";
}

$sql .= " union SELECT distinct col_band, lower(col_submode) as col_mode FROM " . $this->config->item('table_name') . " thcv";

$sql .= " where station_id = " . $station_id;

$sql .= " and coalesce(col_submode, '') <> ''";

$sql .= " and col_prop_mode != 'SAT'";

switch ($type) {
case 'dxcc': $sql .= " and col_dxcc = " . $dxcc; break;
case 'iota': $sql .= " and col_iota = '" . $iota . "'"; break;
case 'grid': $sql .= " and (col_gridsquare like '%" . $fixedgrid . "%' or col_vucc_grids like '%" . $fixedgrid . "%')" ; break;
case 'cqz': $sql .= " and col_cqz = " . $cqz; break;
case 'was': $sql .= " and col_state = '" . $was . "' and COL_DXCC in ('291', '6', '110')";; break;
case 'sota': $sql .= " and col_sota_ref = '" . $sota . "'"; break;
default: break;
}

if ($confirmedtype == 'confirmed') {
$sql .= " and (col_qsl_rcvd = 'Y' or col_lotw_qsl_rcvd = 'Y')";
}

$sql .= " union SELECT distinct 'SAT' col_band, lower(col_mode) as col_mode FROM " . $this->config->item('table_name') . " thcv";

$sql .= " where station_id = " . $station_id;

$sql .= " and coalesce(col_submode, '') = ''";

$sql .= " and col_prop_mode = 'SAT'";

switch ($type) {
case 'dxcc': $sql .= " and col_dxcc = " . $dxcc; break;
case 'iota': $sql .= " and col_iota = '" . $iota . "'"; break;
case 'grid': $sql .= " and (col_gridsquare like '%" . $fixedgrid . "%' or col_vucc_grids like '%" . $fixedgrid . "%')" ; break;
case 'cqz': $sql .= " and col_cqz = " . $cqz; break;
case 'was': $sql .= " and col_state = '" . $was . "' and COL_DXCC in ('291', '6', '110')";; break;
case 'sota': $sql .= " and col_sota_ref = '" . $sota . "'"; break;
default: break;
}

if ($confirmedtype == 'confirmed') {
$sql .= " and (col_qsl_rcvd = 'Y' or col_lotw_qsl_rcvd = 'Y')";
}

$sql .= " union SELECT distinct 'SAT' col_band, lower(col_submode) as col_mode FROM " . $this->config->item('table_name') . " thcv";

$sql .= " where station_id = " . $station_id;

$sql .= " and coalesce(col_submode, '') <> ''";

$sql .= " and col_prop_mode = 'SAT'";

switch ($type) {
case 'dxcc': $sql .= " and col_dxcc = " . $dxcc; break;
case 'iota': $sql .= " and col_iota = '" . $iota . "'"; break;
case 'grid': $sql .= " and (col_gridsquare like '%" . $fixedgrid . "%' or col_vucc_grids like '%" . $fixedgrid . "%')" ; break;
case 'cqz': $sql .= " and col_cqz = " . $cqz; break;
case 'was': $sql .= " and col_state = '" . $was . "' and COL_DXCC in ('291', '6', '110')";; break;
case 'sota': $sql .= " and col_sota_ref= '" . $sota . "'"; break;
default: break;
}

if ($confirmedtype == 'confirmed') {
$sql .= " and (col_qsl_rcvd = 'Y' or col_lotw_qsl_rcvd = 'Y')";
}

$query = $this->db->query($sql);

return $query->result();
}

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,
);

/*
* Get's the worked bands from the log
*/
function get_worked_bands($station_id)
{
// 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;
}

/*
* Get's the worked modes from the log
*/
function get_worked_modes($station_id)
{
// get all worked modes from database
$data = $this->db->query(
"SELECT distinct LOWER(`COL_MODE`) as `COL_MODE` FROM `" . $this->config->item('table_name') . "` WHERE station_id = " . $station_id . " order by COL_MODE ASC"
);
$results = array();
foreach ($data->result() as $row) {
array_push($results, $row->COL_MODE);
}

$data = $this->db->query(
"SELECT distinct LOWER(`COL_SUBMODE`) as `COL_SUBMODE` FROM `" . $this->config->item('table_name') . "` WHERE station_id = " . $station_id . " and coalesce(COL_SUBMODE, '') <> '' order by COL_SUBMODE ASC"
);
foreach ($data->result() as $row) {
if (!in_array($row, $results)) {
array_push($results, $row->COL_SUBMODE);
}
}

return $results;
}
}
97 changes: 97 additions & 0 deletions application/views/interface_assets/footer.php
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,103 @@
}
});

// Here we capture ALT-L to invoice the Quick lookup
document.onkeyup = function(e) {
// ALT-W wipe
if (e.altKey && e.which == 76) {
spawnLookupModal();
}
};

// This displays the dialog with the form and it's where the resulttable is displayed
function spawnLookupModal() {
$.ajax({
url: base_url + 'index.php/lookup',
type: 'post',
success: function (html) {
BootstrapDialog.show({
title: 'Quick lookup',
size: BootstrapDialog.SIZE_WIDE,
cssClass: 'lookup-dialog',
nl2br: false,
message: html,
onshown: function(dialog) {
$('#quicklookuptype').change(function(){
var type = $('#quicklookuptype').val();
if (type == "dxcc") {
$('#quicklookupdxcc').show();
$('#quicklookupiota').hide();
$('#quicklookupcqz').hide();
$('#quicklookupwas').hide();
$('#quicklookuptext').hide();
} else if (type == "iota") {
$('#quicklookupiota').show();
$('#quicklookupdxcc').hide();
$('#quicklookupcqz').hide();
$('#quicklookupwas').hide();
$('#quicklookuptext').hide();
} else if (type == "grid") {
$('#quicklookuptext').show();
$('#quicklookupiota').hide();
$('#quicklookupdxcc').hide();
$('#quicklookupcqz').hide();
$('#quicklookupwas').hide();
} else if (type == "sota") {
$('#quicklookuptext').show();
$('#quicklookupiota').hide();
$('#quicklookupdxcc').hide();
$('#quicklookupcqz').hide();
$('#quicklookupwas').hide();
} else if (type == "cqz") {
$('#quicklookupcqz').show();
$('#quicklookupiota').hide();
$('#quicklookupdxcc').hide();
$('#quicklookupwas').hide();
$('#quicklookuptext').hide();
} else if (type == "was") {
$('#quicklookupwas').show();
$('#quicklookupcqz').hide();
$('#quicklookupiota').hide();
$('#quicklookupdxcc').hide();
$('#quicklookuptext').hide();
}
});
},
buttons: [{
label: 'Close',
action: function (dialogItself) {
dialogItself.close();
}
}]
});
}
});
}

// This function executes the call to the backend for fetching queryresult and displays the table in the dialog
function getLookupResult() {
$(".ld-ext-right").addClass('running');
$(".ld-ext-right").prop('disabled', true);
$.ajax({
url: base_url + 'index.php/lookup/search',
type: 'post',
data: {
type: $('#quicklookuptype').val(),
dxcc: $('#quicklookupdxcc').val(),
was: $('#quicklookupwas').val(),
grid: $('#quicklookuptext').val(),
cqz: $('#quicklookupcqz').val(),
iota: $('#quicklookupiota').val(),
sota: $('#quicklookuptext').val(),
},
success: function (html) {
$('#lookupresulttable').html(html);
$(".ld-ext-right").removeClass('running');
$(".ld-ext-right").prop('disabled', false);
}
});
}

</script>

<?php if ($this->uri->segment(1) == "map" && $this->uri->segment(2) == "custom") { ?>
Expand Down
Loading