diff --git a/application/controllers/Logbookadvanced.php b/application/controllers/Logbookadvanced.php index 62e561667..30c9a0c19 100644 --- a/application/controllers/Logbookadvanced.php +++ b/application/controllers/Logbookadvanced.php @@ -161,7 +161,8 @@ class Logbookadvanced extends CI_Controller { 'qrzReceived' => xss_clean($this->input->post('qrzReceived')), 'distance' => xss_clean($this->input->post('distance')), 'sortcolumn' => xss_clean($this->input->post('sortcolumn')), - 'sortdirection' => xss_clean($this->input->post('sortdirection')) + 'sortdirection' => xss_clean($this->input->post('sortdirection')), + 'duration' => xss_clean($this->input->post('duration')) ); } @@ -394,7 +395,8 @@ class Logbookadvanced extends CI_Controller { 'ids' => json_decode(xss_clean($this->input->post('ids'))), 'qsoids' => xss_clean($this->input->post('qsoids')), 'sortcolumn' => 'qsotime', - 'sortdirection' => 'desc' + 'sortdirection' => 'desc', + 'duration' => '*' ); $result = $this->logbookadvanced_model->getSearchResultArray($searchCriteria); @@ -622,6 +624,7 @@ class Logbookadvanced extends CI_Controller { $json_string['frequency']['show'] = $this->def_boolean($this->input->post('frequency')); $json_string['dcl']['show'] = $this->def_boolean($this->input->post('dcl')); $json_string['last_modification']['show'] = $this->def_boolean($this->input->post('last_modification')); + $json_string['duration']['show'] = $this->def_boolean($this->input->post('duration')); $obj['column_settings']= json_encode($json_string); diff --git a/application/models/Logbookadvanced_model.php b/application/models/Logbookadvanced_model.php index d2d249123..70b28d9f6 100644 --- a/application/models/Logbookadvanced_model.php +++ b/application/models/Logbookadvanced_model.php @@ -534,6 +534,11 @@ class Logbookadvanced_model extends CI_Model { $conditions[] = "coalesce(COL_DISTANCE, '') = ''"; } + if ($searchCriteria['duration'] !== '*' && $searchCriteria['duration'] !== '') { + $conditions[] = "TIMESTAMPDIFF(MINUTE, COL_TIME_ON, COL_TIME_OFF) >= ?"; + $binding[] = $searchCriteria['duration']; + } + if (($searchCriteria['propmode'] ?? '') == 'None') { $conditions[] = "(trim(COL_PROP_MODE) = '' OR COL_PROP_MODE is null)"; } elseif ($searchCriteria['propmode'] !== '') { diff --git a/application/views/logbookadvanced/index.php b/application/views/logbookadvanced/index.php index 6e0521ed7..eff0a0601 100644 --- a/application/views/logbookadvanced/index.php +++ b/application/views/logbookadvanced/index.php @@ -128,6 +128,7 @@ \"frequency\":{\"show\":\"true\"}, \"dcl\":{\"show\":\"true\"}, \"last_modification\":{\"show\":\"false\"}, + \"duration\":{\"show\":\"false\"}, }"; } $current_opts = json_decode($options); @@ -240,6 +241,10 @@ echo "\nvar o_template = { last_modification: {show: 'false'}};"; echo "\nuser_options={...user_options, ...o_template};"; } + if (!isset($current_opts->duration)) { + echo "\nvar o_template = { duration: {show: 'false'}};"; + echo "\nuser_options={...user_options, ...o_template};"; + } foreach ($mapoptions as $mo) { if ($mo != null) { @@ -506,6 +511,10 @@ $options = json_decode($options);
distance->show ?? "true") == "false") { echo 'style="display:none"'; } ?> class="mb-3 col-lg-2 col-md-2 col-sm-3 col-xl"> "> +
+
duration->show ?? "true") == "false") { echo 'style="display:none"'; } ?> class="mb-3 col-lg-2 col-md-2 col-sm-3 col-xl"> + + ">
@@ -892,6 +901,9 @@ $options = json_decode($options); datetime->show ?? "true") == "true") { echo '' . __("Date/Time") . ''; + } ?> + duration->show ?? "false") == "true") { + echo '' . __("Duration") . ''; } ?> last_modification->show ?? "false") == "true") { echo '' . __("Last modified") . ''; diff --git a/application/views/logbookadvanced/useroptions.php b/application/views/logbookadvanced/useroptions.php index 43ddf06cc..6c1618856 100644 --- a/application/views/logbookadvanced/useroptions.php +++ b/application/views/logbookadvanced/useroptions.php @@ -22,6 +22,12 @@
+
+
+ duration->show ?? "false") == "true") { echo 'checked'; } ?>> + +
+
de->show ?? "true") == "true") { echo 'checked'; } ?>> diff --git a/assets/js/sections/logbookadvanced.js b/assets/js/sections/logbookadvanced.js index 49f9d65d0..2d1ef914b 100644 --- a/assets/js/sections/logbookadvanced.js +++ b/assets/js/sections/logbookadvanced.js @@ -63,6 +63,9 @@ function updateRow(qso) { if ((user_options.datetime.show ?? 'true') == "true"){ cells.eq(c++).text(qso.qsoDateTime); } + if ((user_options.duration.show ?? 'true') == "true"){ + cells.eq(c++).text(qso.duration); + } if ((user_options.last_modification.show ?? 'true') == "true"){ cells.eq(c++).text(qso.last_modified); } @@ -283,6 +286,9 @@ function loadQSOTable(rows) { data.push(qso.qsoDateTime); } } + if ((user_options.duration.show ?? 'true') == "true"){ + data.push(qso.duration); + } if ((user_options.last_modification.show ?? 'true') == "true"){ data.push(qso.last_modified); } @@ -765,7 +771,8 @@ $(document).ready(function () { qrzReceived: this.qrzReceived.value, distance: this.distance.value, sortcolumn: this.sortcolumn.value, - sortdirection: this.sortdirection.value + sortdirection: this.sortdirection.value, + duration: this.duration.value, }, dataType: 'json', success: function (data) { @@ -1816,6 +1823,7 @@ function saveOptions() { type: 'post', data: { datetime: $('input[name="datetime"]').is(':checked') ? true : false, + duration: $('input[name="duration"]').is(':checked') ? true : false, last_modification: $('input[name="last_modification"]').is(':checked') ? true : false, de: $('input[name="de"]').is(':checked') ? true : false, dx: $('input[name="dx"]').is(':checked') ? true : false, diff --git a/assets/js/sections/logbookadvanced_map.js b/assets/js/sections/logbookadvanced_map.js index 753b5b96a..16ebfde7d 100644 --- a/assets/js/sections/logbookadvanced_map.js +++ b/assets/js/sections/logbookadvanced_map.js @@ -551,7 +551,8 @@ function getFormData(form) { qrzReceived: form.qrzReceived.value, distance: form.distance.value, sortcolumn: form.sortcolumn.value, - sortdirection: form.sortdirection.value + sortdirection: form.sortdirection.value, + duration: form.duration.value }; } diff --git a/src/QSLManager/QSO.php b/src/QSLManager/QSO.php index c4b87d9ab..b5cdc8aba 100644 --- a/src/QSLManager/QSO.php +++ b/src/QSLManager/QSO.php @@ -11,6 +11,7 @@ class QSO { private string $qsoID; private string $qsoDateTime; + private string $duration; private string $de; private string $profilename; private string $dx; @@ -303,8 +304,19 @@ class QSO $this->measurement_base = $measurement_base; + $this->duration = $this->calculateDuration($data['COL_TIME_ON'], $data['COL_TIME_OFF']); + } + function calculateDuration($start, $end) { + if ($start == null || $end == null) { + return ''; + } + $start = new DateTime($start); + $end = new DateTime($end); + $interval = $end->diff($start); + return $interval->format('%H:%I:%S'); + } /** * @return string */ @@ -1310,6 +1322,7 @@ class QSO 'qth' => $this->qth, 'frequency' => $this->getFormattedFrequency(), 'last_modified' => $this->last_modified, + 'duration' => $this->duration ]; }