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);