Cloudlog/application/models/Dok.php

252 lines
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();
}
}
?>