Refactored variable names for clarity and added detailed logging for Clublog realtime upload results. Now resets user credentials if a 403 error is returned by the Clublog API, and includes HTTP status code in the response for better error handling.
Replaces individual QSO update queries with a new mark_lotw_sent_batch() method in Logbook_model for improved performance during LoTW uploads. Updates Lotw controller to use batch updates within a transaction, reducing database load and increasing efficiency for large QSO uploads.
Added validation and default values for result limits in Logbookadvanced_model and Oqrs_model to prevent invalid or empty limits. Updated views to set default selected options for result limits in logbook advanced and OQRS request pages. Also fixed SQL order by column alias typos in Logbookadvanced_model.
Added extensive debug output and error handling to LoTW upload and download processes for easier troubleshooting. Refactored SQL queries in Logbook_model and Logbookadvanced_model to simplify and optimize data retrieval, replacing subqueries with more direct joins and query builder usage. Removed migration 217_add_performance_indexes.php.
Refactored SQL queries in Logbook_model and Logbookadvanced_model to use subqueries for filtering and pagination, improving performance and accuracy. Updated joins and selected fields for consistency and to avoid duplicate results, especially when limiting and ordering large datasets.
Added server-side validation for callsign and station_id inputs in Oqrs controller to prevent invalid data and potential abuse. Updated Oqrs_model to use parameterized queries instead of string concatenation, improving security against SQL injection. Callsigns are now consistently uppercased before querying.
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.
Added support for additional LF, MF, UHF, SHF, and EHF amateur radio bands in Bands model and bandmap view. Updated band ranges and ordering, and improved band name formatting in the bandmap UI for better clarity and consistency across all supported bands.
Introduces an optimized API endpoint to fetch all pending radio commands for a user in a single call, along with a maintenance endpoint for cleaning up expired and old commands. Updates the documentation to reflect these new endpoints and usage patterns. Adds a QSY endpoint to Dxcluster for queuing frequency/mode commands from the bandmap, and integrates client-side JavaScript to send QSY commands to the selected radio with user feedback. Enhances backend models to support user-scoped cleanup of expired and old commands.
Introduces a new radio command queueing system with API endpoints and a user interface for sending, viewing, and managing radio commands. Adds migration for the radio_commands table, extends the Cat model with command-related methods, and implements new controllers and views for both API and web interfaces. This enables integration with desktop apps and provides users with tools to send, track, and cancel radio commands.
The bandmap now displays only the bands configured for the current user, using a new Bands model method to retrieve and order them. The band selection dropdown in the bandmap view is dynamically generated based on user bands, with a fallback to defaults. Additionally, the selected radio is now persisted in localStorage and synchronized across selects, and the bandmap window width was adjusted for better display.
Added input type checks and sanitization for band and mode parameters. Refactored SQL query construction to use CodeIgniter's Query Builder for safer, parameterized queries and proper escaping of location values. These changes enhance security and reliability of the get_initials and get_initials_data methods.
Enhanced the DXCC lookup in Logbook_model to include latitude and longitude in the returned array. Updated API controller to utilize these new fields when returning recent QSOs and callsign lookups, providing more detailed location data in API responses.
The recent_qsos API endpoint now validates and sanitizes the $limit parameter, enforcing a default of 10, a minimum of 1, and a maximum of 50. Additionally, get_last_qsos in Logbook_model ensures $num is always an integer to prevent SQL injection.
Changed the SQL query in get_last_qsos to use LEFT JOIN for station_profile instead of JOIN. This ensures that QSOs are returned even if there is no matching station_profile, improving data completeness.
Removed the limit parameter validation and sanitization from Api.php, delegating limit handling elsewhere. Changed the SQL query in Logbook_model.php to use LEFT JOIN for station_profile, ensuring all logbook records are included even if no matching station_profile exists.
Expanded the REGEXP pattern in SQL queries to include '/R' suffix when filtering and grouping col_call values. This ensures callsigns ending with '/R' are handled consistently with other suffixes.
Updates SQL logic to group callsigns by their base identifier, stripping suffixes like /P, /MM, /AM, /QRP, /LH, and /BCN. This ensures contacts are aggregated correctly for operators using such suffixes.
Introduces a new 'Most Worked Callsigns' page, controller, model, and view to display callsigns worked multiple times from the active logbook. Adds language support for this feature in multiple languages and updates the navigation menu to include a link to the new page. Also includes DataTables integration and filter options for bands, modes, satellites, date range, and minimum QSOs.
Added 'archived' => 0 to the queries in lotw_cert_expired and lotw_cert_expiring methods to ensure only active certificates are considered when checking for expired or expiring LOTW certificates.
Introduces an 'archived' boolean column to the lotw_certs table via migration, adds model and controller logic to toggle archive status, and updates the view to display and allow archiving/unarchiving of certificates. This enables users to mark LoTW certificates as archived for better management.
Introduces a new 'public_radio_status' field to station logbooks, allowing users to enable or disable the display of radio status on public logbook pages. Updates migration, controllers, model, views, and language files to support this feature and provide UI controls for toggling the option.
Standardized code formatting and indentation throughout Logbook_model.php for improved readability and maintainability. No functional changes were made; only whitespace, comment alignment, and consistent brace placement were updated.
Refines how DXCC ID is set based on country and input values, ensuring correct assignment when country is provided and dxcc_id is zero. This helps prevent incorrect DXCC ID values during logbook entry creation.
Updated country name formatting to support both array and object types for the entity returned by get_entity. This ensures compatibility with different data structures and prevents errors when accessing the country name.
Introduces batch processing of IOTA worked/confirmed status in the controller and model, and updates the DXCC list view to display IOTA badges with status and links. Enhances visibility of IOTA information for each DXCC entry.
Introduces 'workedViaSatellite' status to DXCC tracking in both controller and model, including batch queries for satellite contacts. Updates the DXCC list view to show a badge when a country has been worked via satellite, improving visibility of satellite achievements.
Updated SQL queries in Workabledxcc controller and model to use case-insensitive matching for DXCC country names by comparing UPPER(COL_COUNTRY) to UPPER(?). This resolves issues where country names with different cases were not matched correctly.
Updated batchWorkedQuery and related logic to perform case-insensitive matching for DXCC entities using UPPER() in SQL WHERE conditions. This ensures entities are matched regardless of case, improving reliability of lookups.
Refactored Workabledxcc controller and model to batch DXCC entity and worked/confirmed status lookups for improved performance. Added migration to create composite indexes on DXCC-related columns to further speed up queries. Updated migration version to 205.
Added 'callsign' property to plot data in Logbook_model and updated custom_date.php to use only the 'callsign' for map labels. Simplified and removed aggressive CSS targeting for tooltip classes, ensuring consistent font size and cleaner label rendering.
Introduces a button and supporting logic to toggle callsign labels on the map using Leaflet DivIcons. Also updates the Logbook model to include gridsquare in plot data for potential label use and enhances CSS for callsign label styling.
Initialize bandcalls and modecalls arrays with default zero values in Stats.php to prevent undefined index errors. Update qsotable.php and uniquetable.php views to display 0 when mode or band totals are not set.
Replaced multiple individual queries in Dashboard controller with consolidated methods for setup counts and country statistics. Added getAllSetupCounts to Setup_model and get_countries_statistics_consolidated to Logbook_model to improve performance and reduce database load.
Optimized SQL query by pre-calculating today's date in PHP and improved result handling by returning a consistent array with integer values. Simplified logic for default values and removed unnecessary variable assignments for better readability and maintainability.
Refactored Dashboard controller to load common models in the constructor and optimize dashboard options processing using associative arrays for faster lookups. Replaced DXCC entity counting logic with a new get_total_dxcc_count() method in the Dxcc model to avoid loading all records, improving performance.
Replaced multiple individual queries for QSO statistics in Dashboard controller with a single consolidated query in Logbook_model. This improves performance by reducing database calls when fetching today's, total, monthly, and yearly QSO counts.
Updated the query to use or_like on COL_VUCC_GRIDS instead of applying SUBSTRING, ensuring proper matching of the grid prefix. This resolves issues with grid searches not returning expected results.