kopia lustrzana https://github.com/magicbug/Cloudlog
252 wiersze
8.7 KiB
PHP
252 wiersze
8.7 KiB
PHP
<?php
|
|
|
|
class DOK extends CI_Model {
|
|
|
|
function get_dok_array($bands, $postdata, $location_list) {
|
|
$doks = array();
|
|
|
|
$list = $this->getDoksFromDB($location_list);
|
|
foreach ($this->getSdoksFromDB($location_list) as $sdok) {
|
|
$list[] = $sdok;
|
|
}
|
|
foreach ($list as $dok) {
|
|
$doks[$dok->COL_DARC_DOK]['count'] = 0;
|
|
}
|
|
|
|
$qsl = "";
|
|
if ($postdata['confirmed'] != NULL) {
|
|
if ($postdata['qsl'] != NULL ) {
|
|
$qsl .= "Q";
|
|
}
|
|
if ($postdata['lotw'] != NULL ) {
|
|
$qsl .= "L";
|
|
}
|
|
if ($postdata['eqsl'] != NULL ) {
|
|
$qsl .= "E";
|
|
}
|
|
}
|
|
|
|
foreach ($bands as $band) {
|
|
foreach ($list as $dok) {
|
|
$bandDok[$dok->COL_DARC_DOK][$band] = '-';
|
|
}
|
|
|
|
if ($postdata['worked'] != NULL) {
|
|
$dokBand = $this->getDokWorked($location_list, $band, $postdata);
|
|
foreach ($dokBand as $line) {
|
|
if (array_key_exists($line->COL_DARC_DOK, $bandDok)) { /* For now ignore DOKs which are logged but not existing in the official lists any more */
|
|
$bandDok[$line->COL_DARC_DOK][$band] = '<div class="bg-danger awardsBgDanger"><a href=\'javascript:displayContacts("' . $line->COL_DARC_DOK . '","' . $band . '","' . $postdata['mode'] . '","DOK", "")\'>W</a></div>';
|
|
$doks[$line->COL_DARC_DOK]['count']++;
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($postdata['confirmed'] != NULL) {
|
|
$dokBand = $this->getDokConfirmed($location_list, $band, $postdata);
|
|
foreach ($dokBand as $line) {
|
|
if (array_key_exists($line->COL_DARC_DOK, $bandDok)) { /* For now ignore DOKs which are logged but not existing in the official lists any more */
|
|
$bandDok[$line->COL_DARC_DOK][$band] = '<div class="bg-success awardsBgSuccess"><a href=\'javascript:displayContacts("' . $line->COL_DARC_DOK . '","' . $band . '","' . $postdata['mode'] . '","DOK", "'.$qsl.'")\'>C</a></div>';
|
|
$doks[$line->COL_DARC_DOK]['count']++;
|
|
}
|
|
}
|
|
}
|
|
|
|
// We want to remove the worked DOKs in the list, since we do not want to display them
|
|
if ($postdata['worked'] == NULL) {
|
|
$dokBand = $this->getDokWorked($location_list, $postdata['band'], $postdata);
|
|
foreach ($dokBand as $line) {
|
|
unset($bandDok[$line->COL_DARC_DOK]);
|
|
}
|
|
}
|
|
|
|
// We want to remove the worked DOKs in the list, since we do not want to display them
|
|
if ($postdata['confirmed'] == NULL) {
|
|
$dokBand = $this->getDokConfirmed($location_list, $postdata['band'], $postdata);
|
|
foreach ($dokBand as $line) {
|
|
unset($bandDok[$line->COL_DARC_DOK]);
|
|
}
|
|
}
|
|
}
|
|
|
|
foreach ($list as $dok) {
|
|
if($doks[$dok->COL_DARC_DOK]['count'] == 0) {
|
|
unset($bandDok[$dok->COL_DARC_DOK]);
|
|
}
|
|
}
|
|
|
|
// We want to hide NM as marking not having a DOK at all
|
|
if (isset($bandDok['NM'])) {
|
|
unset($bandDok['NM']);
|
|
}
|
|
|
|
if (isset($bandDok)) {
|
|
return $bandDok;
|
|
} else {
|
|
return 0;
|
|
}
|
|
|
|
}
|
|
|
|
function getDokWorked($location_list, $band, $postdata) {
|
|
$sql = "SELECT DISTINCT COL_DARC_DOK FROM " . $this->config->item('table_name') . " thcv
|
|
WHERE station_id IN (" . $location_list . ") AND COL_DARC_DOK <> '' AND COL_DARC_DOK <> 'NM'";
|
|
|
|
if ($postdata['mode'] != 'All') {
|
|
$sql .= " AND (COL_MODE = '" . $postdata['mode'] . "' OR COL_SUBMODE = '" . $postdata['mode'] . "')";
|
|
}
|
|
$sql .= $this->addDokTypeToQuery($postdata['doks']);
|
|
$sql .= $this->addBandToQuery($band);
|
|
$sql .= " AND NOT EXISTS (SELECT 1 from " . $this->config->item('table_name') .
|
|
" WHERE station_id in (" . $location_list .
|
|
") AND COL_DARC_DOK = thcv.COL_DARC_DOK AND COL_DARC_DOK <> '' AND COL_DARC_DOK <> 'NM' ";
|
|
$sql .= $this->addDokTypeToQuery($postdata['doks']);
|
|
$sql .= $this->addBandToQuery($band);
|
|
$sql .= $this->addQslToQuery($postdata);
|
|
$sql .= ")";
|
|
$query = $this->db->query($sql);
|
|
|
|
return $query->result();
|
|
|
|
}
|
|
|
|
function getDokConfirmed($location_list, $band, $postdata) {
|
|
$sql = "SELECT DISTINCT COL_DARC_DOK FROM " . $this->config->item('table_name') . " thcv
|
|
WHERE station_id IN (" . $location_list . ") AND COL_DARC_DOK <> '' AND COL_DARC_DOK <> '' AND COL_DARC_DOK <> 'NM'";
|
|
if ($postdata['mode'] != 'All') {
|
|
$sql .= " AND (COL_MODE = '" . $postdata['mode'] . "' or COL_SUBMODE = '" . $postdata['mode'] . "')";
|
|
}
|
|
$sql .= $this->addDokTypeToQuery($postdata['doks']);
|
|
$sql .= $this->addBandToQuery($band);
|
|
$sql .= $this->addQslToQuery($postdata);
|
|
$query = $this->db->query($sql);
|
|
return $query->result();
|
|
}
|
|
|
|
function addQslToQuery($postdata) {
|
|
$sql = '';
|
|
$qsl = array();
|
|
if ($postdata['lotw'] != NULL || $postdata['qsl'] != NULL || $postdata['eqsl'] != NULL) {
|
|
$sql .= ' and (';
|
|
if ($postdata['qsl'] != NULL) {
|
|
array_push($qsl, "col_qsl_rcvd = 'Y'");
|
|
}
|
|
if ($postdata['lotw'] != NULL) {
|
|
array_push($qsl, "col_lotw_qsl_rcvd = 'Y'");
|
|
}
|
|
if ($postdata['eqsl'] != NULL) {
|
|
array_push($qsl, "col_eqsl_qsl_rcvd = 'Y'");
|
|
}
|
|
$sql .= implode(' or ', $qsl);
|
|
$sql .= ')';
|
|
}
|
|
return $sql;
|
|
}
|
|
|
|
function addBandToQuery($band) {
|
|
$sql = '';
|
|
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 $sql;
|
|
}
|
|
|
|
function addDokTypeToQuery($doks) {
|
|
$sql = '';
|
|
if ($doks == 'dok') {
|
|
$sql .= " AND COL_DARC_DOK REGEXP '^[A-Z][0-9]{2}$'";
|
|
} else if ($doks == 'sdok') {
|
|
$sql .= " AND COL_DARC_DOK NOT REGEXP '^[A-Z][0-9]{2}$'";
|
|
}
|
|
return $sql;
|
|
}
|
|
|
|
function get_dok_summary($bands, $postdata, $location_list) {
|
|
foreach ($bands as $band) {
|
|
$worked = $this->getSummaryByBand($band, $postdata, $location_list);
|
|
$confirmed = $this->getSummaryByBandConfirmed($band, $postdata, $location_list);
|
|
$dokSummary['worked'][$band] = $worked[0]->count;
|
|
$dokSummary['confirmed'][$band] = $confirmed[0]->count;
|
|
}
|
|
|
|
|
|
$workedTotal = $this->getSummaryByBand($postdata['band'], $postdata, $location_list);
|
|
$confirmedTotal = $this->getSummaryByBandConfirmed($postdata['band'], $postdata, $location_list);
|
|
|
|
$dokSummary['worked']['Total'] = $workedTotal[0]->count;
|
|
$dokSummary['confirmed']['Total'] = $confirmedTotal[0]->count;
|
|
|
|
return $dokSummary;
|
|
}
|
|
|
|
function getSummaryByBand($band, $postdata, $location_list) {
|
|
$sql = "SELECT count(distinct thcv.COL_DARC_DOK) AS count FROM " . $this->config->item('table_name') . " thcv";
|
|
$sql .= " WHERE station_id IN (" . $location_list . ') AND COL_DARC_DOK != "" AND COL_DARC_DOK <> "NM"';
|
|
if ($band == 'SAT') {
|
|
$sql .= " AND thcv.COL_PROP_MODE ='" . $band . "'";
|
|
} else if ($band == 'All') {
|
|
$this->load->model('bands');
|
|
$bandslots = $this->bands->get_worked_bands('dok');
|
|
$bandslots_list = "'".implode("','",$bandslots)."'";
|
|
$sql .= " AND thcv.COL_BAND in (" . $bandslots_list . ")";
|
|
} else {
|
|
$sql .= " AND thcv.COL_PROP_MODE !='SAT'";
|
|
$sql .= " AND thcv.COL_BAND ='" . $band . "'";
|
|
}
|
|
if ($postdata['doks'] == 'dok') {
|
|
$sql .= " AND COL_DARC_DOK REGEXP '^[A-Z][0-9]{2}$'";
|
|
} else if ($postdata['doks'] == 'sdok') {
|
|
$sql .= " AND COL_DARC_DOK NOT REGEXP '^[A-Z][0-9]{2}$'";
|
|
}
|
|
$query = $this->db->query($sql);
|
|
return $query->result();
|
|
}
|
|
|
|
function getSummaryByBandConfirmed($band, $postdata, $location_list){
|
|
$sql = "SELECT count(distinct thcv.COL_DARC_DOK) AS count FROM " . $this->config->item('table_name') . " thcv";
|
|
$sql .= " WHERE station_id IN (" . $location_list . ') AND COL_DARC_DOK != "" AND COL_DARC_DOK <> "NM"';
|
|
if ($band == 'SAT') {
|
|
$sql .= " AND thcv.COL_PROP_MODE ='" . $band . "'";
|
|
} else if ($band == 'All') {
|
|
$this->load->model('bands');
|
|
$bandslots = $this->bands->get_worked_bands('dok');
|
|
$bandslots_list = "'".implode("','",$bandslots)."'";
|
|
$sql .= " AND thcv.COL_BAND in (" . $bandslots_list . ")";
|
|
} else {
|
|
$sql .= " AND thcv.COL_PROP_MODE !='SAT'";
|
|
$sql .= " AND thcv.COL_BAND ='" . $band . "'";
|
|
}
|
|
if ($postdata['doks'] == 'dok') {
|
|
$sql .= " AND COL_DARC_DOK REGEXP '^[A-Z][0-9]{2}$'";
|
|
} else if ($postdata['doks'] == 'sdok') {
|
|
$sql .= " AND COL_DARC_DOK NOT REGEXP '^[A-Z][0-9]{2}$'";
|
|
}
|
|
$sql .= $this->addQslToQuery($postdata);
|
|
$query = $this->db->query($sql);
|
|
return $query->result();
|
|
}
|
|
|
|
function getDoksFromDB($location_list) {
|
|
$sql = 'SELECT DISTINCT `COL_DARC_DOK` FROM '.$this->config->item('table_name');
|
|
$sql .= " WHERE station_id IN (" . $location_list . ') AND COL_DARC_DOK != "" AND COL_DARC_DOK <> "NM"';
|
|
$sql .= " AND COL_DARC_DOK REGEXP '^[A-Z][0-9]{2}$'";
|
|
$sql .= " ORDER BY COL_DARC_DOK ASC";
|
|
$query = $this->db->query($sql);
|
|
return $query->result();
|
|
}
|
|
|
|
function getSdoksFromDB($location_list) {
|
|
$sql = 'SELECT DISTINCT `COL_DARC_DOK` FROM '.$this->config->item('table_name');
|
|
$sql .= " WHERE station_id IN (" . $location_list . ') AND COL_DARC_DOK != "" AND COL_DARC_DOK <> "NM"';
|
|
$sql .= " AND COL_DARC_DOK NOT REGEXP '^[A-Z][0-9]{2}$'";
|
|
$sql .= " ORDER BY COL_DARC_DOK ASC";
|
|
$query = $this->db->query($sql);
|
|
return $query->result();
|
|
}
|
|
}
|
|
?>
|