From 9f89e078abffb7a1fbf34bbdb958718d733d41d0 Mon Sep 17 00:00:00 2001 From: Andreas Kristiansen <6977712+AndreasK79@users.noreply.github.com> Date: Sat, 3 Jan 2026 11:07:00 +0100 Subject: [PATCH] Added dropdown for sort direction --- application/controllers/Logbookadvanced.php | 6 ++-- application/models/Logbookadvanced_model.php | 34 +++++++++++++------- application/views/logbookadvanced/index.php | 16 ++++++--- assets/js/sections/logbookadvanced.js | 3 +- assets/js/sections/logbookadvanced_map.js | 2 ++ 5 files changed, 41 insertions(+), 20 deletions(-) diff --git a/application/controllers/Logbookadvanced.php b/application/controllers/Logbookadvanced.php index 4975a7ac8..e597d29b3 100644 --- a/application/controllers/Logbookadvanced.php +++ b/application/controllers/Logbookadvanced.php @@ -159,7 +159,8 @@ class Logbookadvanced extends CI_Controller { 'qrzSent' => xss_clean($this->input->post('qrzSent')), 'qrzReceived' => xss_clean($this->input->post('qrzReceived')), 'distance' => xss_clean($this->input->post('distance')), - 'sortorder' => xss_clean($this->input->post('sortorder')) + 'sortcolumn' => xss_clean($this->input->post('sortcolumn')), + 'sortdirection' => xss_clean($this->input->post('sortdirection')) ); } @@ -390,7 +391,8 @@ class Logbookadvanced extends CI_Controller { 'qrzReceived' => '', 'ids' => json_decode(xss_clean($this->input->post('ids'))), 'qsoids' => xss_clean($this->input->post('qsoids')), - 'sortorder' => 'qsotimedesc' + 'sortcolumn' => 'qsotime', + 'sortdirection' => 'desc' ); $result = $this->logbookadvanced_model->getSearchResultArray($searchCriteria); diff --git a/application/models/Logbookadvanced_model.php b/application/models/Logbookadvanced_model.php index 80e6445b9..ee85f82a1 100644 --- a/application/models/Logbookadvanced_model.php +++ b/application/models/Logbookadvanced_model.php @@ -604,26 +604,36 @@ class Logbookadvanced_model extends CI_Model { $sortorder = ''; - if ($searchCriteria['sortorder'] !== '') { - switch($searchCriteria['sortorder']) { - case 'qsotimedesc': - $sortorder .= ' ORDER BY qsos.COL_TIME_ON desc, qsos.COL_PRIMARY_KEY desc'; - break; - case 'qsotimeasc': - $sortorder .= ' ORDER BY qsos.COL_TIME_ON asc, qsos.COL_PRIMARY_KEY asc'; + $sortColumn = ''; + $sortDirection = isset($searchCriteria['sortdirection']) && strtolower($searchCriteria['sortdirection']) === 'asc' ? 'asc' : 'desc'; + + if ($searchCriteria['sortcolumn'] !== '') { + switch($searchCriteria['sortcolumn']) { + case 'qsotime': + $sortColumn = 'qsos.COL_TIME_ON'; break; case 'band': - $sortorder .= ' ORDER BY qsos.COL_BAND asc, qsos.COL_PRIMARY_KEY asc'; + $sortColumn = 'qsos.COL_BAND'; break; case 'mode': - $sortorder .= ' ORDER BY qsos.COL_MODE asc, qsos.COL_SUBMODE asc, qsos.COL_PRIMARY_KEY asc'; + $sortColumn = 'qsos.COL_MODE'; break; - case 'qso_modifieddesc': - $sortorder .= ' ORDER BY qsos.last_modified desc, qsos.COL_PRIMARY_KEY desc'; + case 'qsomodified': + $sortColumn = 'qsos.last_modified'; break; default: - $sortorder .= ' ORDER BY qsos.COL_TIME_ON desc, qsos.COL_PRIMARY_KEY desc'; + $sortColumn = 'qsos.COL_TIME_ON'; } + + $secondarySort = $sortDirection === 'asc' ? 'asc' : 'desc'; + $sortorder .= " ORDER BY $sortColumn $sortDirection"; + + // Add secondary sorts for mode column + if ($searchCriteria['sortdirection'] === 'mode') { + $sortorder .= ", qsos.COL_SUBMODE $sortDirection"; + } + + $sortorder .= ", qsos.COL_PRIMARY_KEY $secondarySort"; } $sql = " diff --git a/application/views/logbookadvanced/index.php b/application/views/logbookadvanced/index.php index 134ea17ee..589f86426 100644 --- a/application/views/logbookadvanced/index.php +++ b/application/views/logbookadvanced/index.php @@ -509,13 +509,19 @@ $options = json_decode($options);
- - + - + + +
+
+ +
diff --git a/assets/js/sections/logbookadvanced.js b/assets/js/sections/logbookadvanced.js index d05b3d4d2..5aa76e50a 100644 --- a/assets/js/sections/logbookadvanced.js +++ b/assets/js/sections/logbookadvanced.js @@ -764,7 +764,8 @@ $(document).ready(function () { qrzSent: this.qrzSent.value, qrzReceived: this.qrzReceived.value, distance: this.distance.value, - sortorder: this.sortorder.value + sortcolumn: this.sortcolumn.value, + sortdirection: this.sortdirection.value }, dataType: 'json', success: function (data) { diff --git a/assets/js/sections/logbookadvanced_map.js b/assets/js/sections/logbookadvanced_map.js index 7f48662d3..753b5b96a 100644 --- a/assets/js/sections/logbookadvanced_map.js +++ b/assets/js/sections/logbookadvanced_map.js @@ -550,6 +550,8 @@ function getFormData(form) { qrzSent: form.qrzSent.value, qrzReceived: form.qrzReceived.value, distance: form.distance.value, + sortcolumn: form.sortcolumn.value, + sortdirection: form.sortdirection.value }; }