Prevent caching for the HTMX endpoint and move polling into the component. Qso controller now sets Cache-Control/Pragma/Expires headers for the component_past_contacts endpoint to ensure fresh data. The previous_contacts view was updated to self-poll (hx-get with page param, hx-trigger every 5s, hx-target="this", and hx-vals timestamp) to include a cache-busting timestamp. The main qso index removed the redundant recurring poll (now only triggers on load) to avoid duplicate requests.
Ensure satellite fields are cleared whenever propagation mode is not 'SAT' and when the QSO form is reset. In Qso.php, sat_name and sat_mode are set to empty strings if prop_mode != 'SAT' (added in two handling points). In assets/js/sections/qso.js, added clearSatelliteFields() to clear sat_name, sat_mode, satellite_modes_list and related state, call it from reset_fields(), and invoke the form reset flow to ensure no stale satellite data remains after resetting or changing propagation mode.
Introduce an AJAX-based QSO save flow: add QSO::ajax_saveqso() in the controller to validate input, set session/cookies, create the QSO and return JSON success/error payloads. Update the QSO view to include a data-ajax-save-url on the form and add a notice-alerts container location. Enhance the qso.js client: add isSubmitting guard, showQsoNotice helper, intercept form submit to POST serialized form data to the AJAX endpoint, handle success (reset form, show notice, refresh recent QSOs via htmx), display validation/server errors, and restore UI state when complete. These changes avoid full page reloads on save and provide inline validation feedback.
Introduce a frontend QRA utilities module and switch QSO locator/bearing/distance logic to run client-side. Added assets/js/qra-utils.js (ported from the PHP Qra library), injected measurement_base and station_gridsquares into the QSO view, and updated application/controllers/Qso.php to provide the measurement_base for the frontend. Footer now loads qra-utils.js before qso.js. Modified assets/js/sections/qso.js to debounce locator input, place map markers from local grid→lat/lng math, and compute bearing/distance via QraUtils (removes several AJAX calls to server endpoints). This reduces server round-trips and keeps frontend behavior consistent with the PHP implementation.
Introduce a DX Cluster tab to the QSO view and user settings. This change:
- Enables a new qso_form option 'dxcluster_tab' in controllers (Qso.php, User.php) so the tab can be toggled per-user.
- Adds a user preference toggle in the user edit view to show/hide the DX Cluster tab.
- Implements the DX Cluster UI in the QSO index view: tab button, controls (band select, hide RBN), spot table and click-to-fill behavior.
- Adds client-side JS to manage a WebSocket to wss://dxc.cloudlog.org, maintain and render recent spots in a DataTable, persist filter preferences, sync band selection with the QSO form/radio, and batch-check worked status via the dxcluster/check_worked endpoint.
Files changed: application/controllers/Qso.php, application/controllers/User.php, application/views/qso/index.php, application/views/user/edit.php.
Introduce per-user visibility settings for QSO form fields and tabs. Load qso_form options in QSO and User controllers (with sensible defaults), apply them to the qso view to conditionally render fields/tabs, and save changes from the user edit form. Add a QSO Form accordion in user/edit.php exposing switches for each field/tab, update user save logic to persist each option, and include client-side JS in qso/index.php to toggle USA state/county and DOK fields based on DXCC selection. Files changed: application/controllers/Qso.php, application/controllers/User.php, application/views/qso/index.php, application/views/user/edit.php.
Implement server-side pagination for previous contacts and add a DXCC Summary tab. Controller Qso now uses last_custom_paginated and exposes total_rows/total_pages/current_page/limit. Logbook_model gained last_custom_paginated and last_custom_count to support paged queries. The previous_contacts view was updated with HTMX pagination controls and wrapping for a scrollable table; qso/index was refactored to a tabbed UI (Previous Contacts / DXCC Summary). Lookup result display was improved: responsive table, sticky header, consolidation of LSB/USB into SSB and filtering out empty modes. JS and CSS updates load DXCC HTML into the new tab, hide legacy dxccsummary elements, and add form reset / Escape handling to return focus to the previous contacts tab.
Replaced checks for QSO accessibility with stricter write permission checks across controllers and models. Added a new check_qso_is_writable method to Logbook_model to ensure only authorized users can modify or delete QSOs, including shared logbook scenarios. Updated QSO, Qsl_model, and Sstv_model to use the new permission logic for all write operations.
Replaced usage of session 'station_profile_id' with the active station profile ID retrieved from the stations model. Improved error handling and messaging when no active station profile is set. This ensures consistency and accuracy when accessing or updating station-specific data.
Changed several controller methods in Qso.php from implicit or default visibility to explicit 'public' for better clarity and consistency. Also fixed indentation in cwmacrosave for improved readability.
Enhanced the Qso controller with better error handling, input validation, and user/session checks for CW macro operations. Added a new cwmacros_test method for testing session data. Updated the footer JS to check for the message element before adding event listeners, preventing errors if the element is missing. Improved error handling in winkey.js when fetching macros to handle HTTP errors more gracefully.
Enhanced macro saving with better input sanitization, error handling, and user feedback in Qso.php and Winkey.php. Updated modal forms to display save responses in a dedicated area. Improved JavaScript to handle default macro values and update button labels more robustly. Removed unnecessary WebSocket polling for CW speed in the footer.
Squashed commit of the following:
commit 595f620d9e
Author: phl0 <github@florian-wolters.de>
Date: Wed Nov 1 13:58:05 2023 +0100
Update languages
commit f670a06059
Author: phl0 <github@florian-wolters.de>
Date: Wed Nov 1 13:55:04 2023 +0100
Added user option for enabling QSO end time logging
commit 36d9a95ebb
Merge: 54d5bb53352931b1
Author: phl0 <github@florian-wolters.de>
Date: Wed Nov 1 12:18:39 2023 +0100
Merge branch 'dev' into qsoTime
commit 54d5bb535b
Author: phl0 <github@florian-wolters.de>
Date: Fri Oct 27 10:14:58 2023 +0200
start/end times for other languages
commit c5f6bb0cab
Author: phl0 <github@florian-wolters.de>
Date: Fri Oct 27 10:14:42 2023 +0200
Hide end time if only differs in seconds as we only display minutes
anyway ...
commit d519d88604
Author: phl0 <github@florian-wolters.de>
Date: Fri Oct 27 10:14:29 2023 +0200
use start as end time if end is not set separately
commit f2588ad132
Author: phl0 <github@florian-wolters.de>
Date: Fri Oct 27 10:13:43 2023 +0200
reset timers on form reset
commit 2b7ee4e48c
Author: phl0 <github@florian-wolters.de>
Date: Fri Oct 27 10:13:27 2023 +0200
Strip seconds from session time variable
commit e0c35aa0cf
Author: phl0 <github@florian-wolters.de>
Date: Fri Oct 27 10:13:11 2023 +0200
Adapt contest logging
commit 5368ef25f3
Author: phl0 <github@florian-wolters.de>
Date: Fri Oct 27 10:12:50 2023 +0200
Make date field a little smaller
commit ad2d7e756c
Author: phl0 <github@florian-wolters.de>
Date: Fri Oct 27 10:12:30 2023 +0200
Add button to reset start time
commit f56e031946
Author: phl0 <github@florian-wolters.de>
Date: Fri Oct 27 10:11:09 2023 +0200
Copy start to end time on focus out
commit b741d0428d
Author: phl0 <github@florian-wolters.de>
Date: Fri Oct 27 10:10:45 2023 +0200
Only min and sec for post QSO template
commit 77314edd31
Author: phl0 <github@florian-wolters.de>
Date: Fri Oct 27 10:08:49 2023 +0200
Basics for QSO end time logging