From 3ab82040093e0349898ab654e462395a0f21797e Mon Sep 17 00:00:00 2001 From: Andreas <6977712+AndreasK79@users.noreply.github.com> Date: Tue, 27 Dec 2022 18:56:04 +0100 Subject: [PATCH] [Logbook Advanced] Fixed mode listing and search --- application/controllers/Logbookadvanced.php | 17 +--- application/models/Logbookadvanced_model.php | 82 ++++++++------------ application/views/logbookadvanced/index.php | 2 +- 3 files changed, 33 insertions(+), 68 deletions(-) diff --git a/application/controllers/Logbookadvanced.php b/application/controllers/Logbookadvanced.php index b1f23f47..89b6b0e4 100644 --- a/application/controllers/Logbookadvanced.php +++ b/application/controllers/Logbookadvanced.php @@ -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(); diff --git a/application/models/Logbookadvanced_model.php b/application/models/Logbookadvanced_model.php index 5ca9bba0..f2b3fb31 100644 --- a/application/models/Logbookadvanced_model.php +++ b/application/models/Logbookadvanced_model.php @@ -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; + } } \ No newline at end of file diff --git a/application/views/logbookadvanced/index.php b/application/views/logbookadvanced/index.php index 1d2f3c1d..2e1101d4 100644 --- a/application/views/logbookadvanced/index.php +++ b/application/views/logbookadvanced/index.php @@ -84,7 +84,7 @@ $mode){ - ?>