[Logbook Advanced] Fixed mode listing and search

pull/1874/head
Andreas 2022-12-27 18:56:04 +01:00
rodzic e16e7ed18a
commit 3ab8204009
3 zmienionych plików z 33 dodań i 68 usunięć

Wyświetl plik

@ -35,21 +35,6 @@ class Logbookadvanced extends CI_Controller {
}
ksort($deOptions);
$deOptions = array_keys($deOptions);
$modes = [];
if ($stationIds !== []) {
foreach ($this->logbookadvanced_model->get_worked_modes($stationIds) as $mode) {
$key = $mode['mode'];
if ($mode['submode'] != null) {
$key .= "|" . $mode['submode'];
}
if ($mode['submode'] == null) {
$modes[$key] = $mode['mode'];
} else {
$modes[$key] = $mode['mode'] . " | ".$mode['submode'];
}
}
}
$data = [];
$data['page_title'] = "Advanced logbook";
@ -58,7 +43,7 @@ class Logbookadvanced extends CI_Controller {
$pageData = [];
$pageData['datePlaceholder'] = 'DD/MM/YYYY';
$pageData['deOptions'] = $deOptions;
$pageData['modes'] = $modes;
$pageData['modes'] = $this->logbookadvanced_model->get_modes();
$pageData['dxccarray'] = $this->logbook_model->fetchDxcc();
$pageData['iotaarray'] = $this->logbook_model->fetchIota();

Wyświetl plik

@ -2,48 +2,6 @@
use Cloudlog\QSLManager\QSO;
class Logbookadvanced_model extends CI_Model {
/**
* Returns worked modes in the supplied stations as a simple array
* @param array $stationIds
* @return array
*/
function get_worked_modes(array $stationIds): array {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$ids = "'".implode("','",$stationIds)."'";
$sql = "
SELECT distinct COL_MODE, COL_SUBMODE
FROM `" . $this->config->item('table_name') . "` qsos
WHERE qsos.station_id IN (".$ids.")
ORDER BY COL_MODE, COL_SUBMODE";
$data = $this->db->query($sql);
$results = [];
foreach ($data->result() as $row) {
if(!empty($row->COL_SUBMODE)) {
$results[] = [
'mode' => $row->COL_MODE,
'submode' => $row->COL_SUBMODE
];
} else {
// if mode is not already in the results array
if (!in_array($row->COL_MODE, array_column($results, 'mode'))) {
$results[] = [
'mode' => $row->COL_MODE,
'submode' => null
];
}
}
}
return $results;
}
/*
* @param array $searchCriteria
* @return array
@ -73,15 +31,9 @@ class Logbookadvanced_model extends CI_Model {
$binding[] = '%' . trim($searchCriteria['dx']) . '%';
}
if ($searchCriteria['mode'] !== '') {
list ($mode, $subMode) = explode("|", trim($searchCriteria['mode']));
$mode = trim($mode);
$subMode = trim($subMode);
$conditions[] = "COL_MODE = ?";
$binding[] = $mode;
if ($subMode !== '') {
$conditions[] = "COL_SUBMODE = ?";
$binding[] = $subMode;
}
$conditions[] = "(COL_MODE = ? or COL_SUBMODE = ?)";
$binding[] = $searchCriteria['mode'];
$binding[] = $searchCriteria['mode'];
}
if ($searchCriteria['band'] !== '') {
if($searchCriteria['band'] != "SAT") {
@ -237,4 +189,32 @@ class Logbookadvanced_model extends CI_Model {
return false;
}
function get_modes() {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
return null;
}
$modes = array();
$this->db->select('distinct col_mode, coalesce(col_submode, "") col_submode', FALSE);
$this->db->where_in('station_id', $logbooks_locations_array);
$this->db->order_by('col_mode, col_submode', 'ASC');
$query = $this->db->get($this->config->item('table_name'));
foreach($query->result() as $mode){
if ($mode->col_submode == null || $mode->col_submode == "") {
array_push($modes, $mode->col_mode);
} else {
array_push($modes, $mode->col_submode);
}
}
return $modes;
}
}

Wyświetl plik

@ -84,7 +84,7 @@
<option value="">All</option>
<?php
foreach($modes as $modeId => $mode){
?><option value="<?php echo htmlentities($modeId);?>"><?php echo htmlspecialchars($mode);?></option><?php
?><option value="<?php echo htmlspecialchars($mode);?>"><?php echo htmlspecialchars($mode);?></option><?php
}
?>
</select>