diff --git a/application/controllers/Radio.php b/application/controllers/Radio.php index 9bec10799..83003c661 100644 --- a/application/controllers/Radio.php +++ b/application/controllers/Radio.php @@ -88,6 +88,8 @@ class Radio extends CI_Controller { echo "- / -"; } elseif (empty($row->frequency_rx) || $row->frequency_rx == "0") { echo "" . $this->frequency->qrg_conversion($row->frequency) . ""; + } elseif ($this->frequency->frequencies_are_equal($row->frequency, $row->frequency_rx)) { + echo "" . $this->frequency->qrg_conversion($row->frequency) . ""; } else { echo "" . $this->frequency->qrg_conversion($row->frequency_rx) . " / " . $this->frequency->qrg_conversion($row->frequency) . ""; } diff --git a/application/controllers/Widgets.php b/application/controllers/Widgets.php index 4ca159bbe..3c4cbeae2 100644 --- a/application/controllers/Widgets.php +++ b/application/controllers/Widgets.php @@ -501,6 +501,14 @@ class Widgets extends CI_Controller { ); $mode_string = empty($cat_data->mode) ? "" : $cat_data->mode; + return trim(sprintf("%s %s", $tx_frequency, $mode_string)); + } elseif ($this->frequency->frequencies_are_equal($cat_data->frequency, $cat_data->frequency_rx)) { + // Frequencies are equal, show only one + $tx_frequency = $this->frequency->qrg_conversion( + $cat_data->frequency, $r_option, $source_unit, $target_unit + ); + $mode_string = empty($cat_data->mode) ? "" : $cat_data->mode; + return trim(sprintf("%s %s", $tx_frequency, $mode_string)); } else { $rx_frequency = $this->frequency->qrg_conversion( diff --git a/application/libraries/Frequency.php b/application/libraries/Frequency.php index 1b62663bd..42f9348ad 100644 --- a/application/libraries/Frequency.php +++ b/application/libraries/Frequency.php @@ -337,5 +337,25 @@ class Frequency { } return $unit; } + + /** + * Check if two frequencies are equal (handles different formats and empty values) + * + * @param mixed $freq1 First frequency (TX) + * @param mixed $freq2 Second frequency (RX) + * @return bool True if frequencies are equal or if one is empty/zero + */ + function frequencies_are_equal($freq1, $freq2) { + // Treat empty, null, or zero as "not set" + if (empty($freq1) || $freq1 === '0' || $freq1 === 0) { + return true; + } + if (empty($freq2) || $freq2 === '0' || $freq2 === 0) { + return true; + } + + // Compare as floats to handle different string representations + return (float)$freq1 === (float)$freq2; + } } /* End of file Frequency.php */ diff --git a/application/views/qslprint/qsolist.php b/application/views/qslprint/qsolist.php index 4e3386abd..9c8b3e749 100644 --- a/application/views/qslprint/qsolist.php +++ b/application/views/qslprint/qsolist.php @@ -41,8 +41,24 @@ if ($qsos->result() != NULL) { echo ''; $timestamp = strtotime($qsl->COL_TIME_ON); echo date($custom_date_format, $timestamp); echo ''; echo ''; $timestamp = strtotime($qsl->COL_TIME_ON); echo date('H:i', $timestamp); echo ''; echo ''; echo $qsl->COL_SUBMODE==null?$qsl->COL_MODE:$qsl->COL_SUBMODE; echo ''; - echo ''; if($qsl->COL_SAT_NAME != null) { echo __("SAT") . ' ' . $qsl->COL_SAT_NAME . ' '. strtolower($qsl->COL_BAND) . '/' . strtolower($qsl->COL_BAND_RX); } else { echo strtolower($qsl->COL_BAND); }; echo ''; - echo ''; if($qsl->COL_SAT_NAME != null) { echo __("SAT") . ' ' . $qsl->COL_SAT_NAME . ' ' . $this->frequency->qrg_conversion($qsl->COL_FREQ) . '/' . $this->frequency->qrg_conversion($qsl->COL_FREQ_RX); } else { echo $this->frequency->qrg_conversion($qsl->COL_FREQ); }; echo ''; + echo ''; if($qsl->COL_SAT_NAME != null) { + $band_rx = strtolower($qsl->COL_BAND_RX ?? ''); + $band = strtolower($qsl->COL_BAND); + if ($band_rx && $band && $band_rx != $band) { + echo __("SAT") . ' ' . $qsl->COL_SAT_NAME . ' ' . $band . '/' . $band_rx; + } else { + echo __("SAT") . ' ' . $qsl->COL_SAT_NAME . ' ' . $band; + } + } else { echo strtolower($qsl->COL_BAND); }; echo ''; + echo ''; if($qsl->COL_SAT_NAME != null) { + $freq_rx = $qsl->COL_FREQ_RX ?? 0; + $freq = $qsl->COL_FREQ ?? 0; + if ($freq_rx && $freq && !$this->frequency->frequencies_are_equal($freq, $freq_rx)) { + echo __("SAT") . ' ' . $qsl->COL_SAT_NAME . ' ' . $this->frequency->qrg_conversion($freq) . '/' . $this->frequency->qrg_conversion($freq_rx); + } else { + echo __("SAT") . ' ' . $qsl->COL_SAT_NAME . ' ' . $this->frequency->qrg_conversion($freq); + } + } else { echo $this->frequency->qrg_conversion($qsl->COL_FREQ); }; echo ''; echo '' . $qsl->COL_RST_SENT . ''; echo '' . $qsl->COL_RST_RCVD . ''; echo '' . $qsl->station_callsign . ''; diff --git a/src/QSLManager/QSO.php b/src/QSLManager/QSO.php index b5cdc8aba..62b5b1fba 100644 --- a/src/QSLManager/QSO.php +++ b/src/QSLManager/QSO.php @@ -1426,9 +1426,12 @@ class QSO } if ($this->frequencyRX && $this->frequency) { - $converted_rx = $this->CI->frequency->qrg_conversion($this->frequencyRX); - if ($converted_rx) { - $label .= "/" . $converted_rx; + // Only show RX frequency if it's different from TX + if (!$this->CI->frequency->frequencies_are_equal($this->frequency, $this->frequencyRX)) { + $converted_rx = $this->CI->frequency->qrg_conversion($this->frequencyRX); + if ($converted_rx) { + $label .= "/" . $converted_rx; + } } }