Commit graph

214 commits

Author SHA1 Message Date
Peter Goodhall
fd49056a98 Enforce plugin read-only policy and show alerts
Add server-side read-only policy checks for plugins and surface security alerts to admins. Plugin_manager now validates plugin code (collects PHP files and scans for forbidden file/system/exec functions) during install and before enabling; installs are blocked or plugins auto-disabled on violation with a security alert returned. Plugins controller updated to use session validation for login, enforce admin (user_type 99) access, store/display security alerts via a flash session key, and pass a CSRF token to the view. The plugins index view now renders a warning banner for plugin security alerts. Documentation updated to link and include a new QSO Hooks plugin guide for third-party sync plugins.
2026-04-30 23:03:29 +01:00
Peter Goodhall
d2d8123754 Auto-disable plugins on runtime failures
Automatically disable plugins when runtime errors or invalid plugin entry/metadata are detected. Adds a disable_plugin_after_failure helper to both Cloudlog_hooks and Plugin_manager that marks the plugin as 'disabled' in plugins_model and logs the reason. Cloudlog_hooks now disables plugins for missing hook methods, exceptions in filters/actions, invalid entry paths/class names, include failures, and construction failures. Plugin_manager disables plugins for invalid award method names, instantiation failures, missing award methods, award render exceptions, and include failures. Documentation updated to mention the new auto-disable behavior.
2026-04-29 22:44:10 +01:00
Peter Goodhall
4cfab6fe4e Add plugin system and Plugin Manager
Introduce a plugin framework and management UI: adds Plugin Manager controller, Plugin_awards controller, Plugin_manager and Cloudlog_hooks libraries, Plugins_model, migration (268) to create the plugins table, and views for plugin manager and award pages. Integrates hooks into Logbook_model (qso.filter.before_save, qso.action.after_save, qso.action.after_edit), updates header to show award plugin entries and a Plugin Manager menu link, and bumps migration_version to 268. Also adds .gitignore rules, plugin index placeholder, docs and example plugin packages. The Plugin Manager supports uploading/installing ZIP packages, safe extraction, manifest validation, enable/disable/delete actions, and CSRF protection.
2026-04-29 22:33:22 +01:00
Peter Goodhall
4c1dd7a42d Add Cabrillo export modal & format improvements
Add a full Cabrillo export workflow and harden Cabrillo/QSO formatting. Introduces a modal UI to export contest logs (new button + modal form with fields for location, category time, operators, club, soapbox, date range and other Cabrillo categories). Controller updates pass the new fields to the export action. Cabrilloformat library extended to accept and emit LOCATION and CATEGORY-TIME, improve header field ordering and presence checks, map ADIF modes to the five Cabrillo modes (CW/PH/FM/RY/DG), fix a band label (2.4G -> 2.3G), and emit placeholders for missing received exchanges to preserve column alignment. Contesting_model: more robust date parsing with UTC fallback, ensure session QSO marker only persists when timestamp valid, and build start timestamp when LIVE mode omits start_date/start_time. Frontend JS: setSession() now returns the ajax promise so callers can await it; several callers updated to await setSession and re-fetch session data before refreshing the QSO table; restore full table search on callsign blur and when suggestions are cleared. Misc: small form/input fixes (club field type, default overlay option) and additional server-supplied data loaded into the contesting view (active station id, contest session, station profile). These changes add required Cabrillo fields for certain contests and make exports and session handling more reliable.
2026-03-27 00:04:21 +00:00
Peter Goodhall
66900a9f86 Add MY_NAME to ADIF exports from user profile (#3391) 2026-03-23 22:43:44 +00:00
Peter Goodhall
44f15d5f55 Use primary key for eQSL batch updates
Refactor eQSL batch update to operate on resolved primary keys instead of re-matching QSOs by time/callsign/band/mode. Eqslmethods_model now queries current eQSL status by COL_PRIMARY_KEY, builds update batches keyed by primary key, and returns updated_ids and duplicate_ids. This avoids re-querying with un-normalized ADIF modes, improves reliability (avoids CI3 affected_rows() pitfalls), and makes duplicate detection deterministic. EqslImporter was updated to enqueue qso_id for batch updates and to mark QSOs as Updated or Already received based on the returned ID lists.
2026-03-18 15:29:10 +00:00
Peter Goodhall
b9d842ca47 Use correct eQSL received flag field
Fixes a bug where the wrong array key was checked when determining if an eQSL was received. The code previously used $record['qsl_sent']; it now checks $record['eqsl_qsl_rcvd'] to set $qsl_rcvd (or an empty string) using config['eqsl_rcvd_mark'], ensuring imports correctly mark received eQSLs.
2026-03-07 14:35:45 +00:00
Peter Goodhall
d4a7e4cfac Batch eQSL updates and add indexes
Add batch processing for eQSL imports/exports and introduce performance indexes. Bump migration_version to 248 and add Migration_add_eqsl_performance_indexes to create idx_eqsl_qslrdate and idx_eqsl_confirmation_match indexes to speed up eQSL queries and batch matching. Modify Eqsl controller to collect successful uploads and perform a single batch mark-as-sent update. Update EqslImporter to queue confirmations and run a single batch update at the end. Implement eqsl_update_batch() and eqsl_mark_sent_batch() in Eqslmethods_model to perform efficient batch DB operations and logging, reducing per-record queries for large eQSL operations.
2026-02-11 11:32:25 +00:00
Peter Goodhall
de3f72c536 Improve SOTA CSV download and parsing logic
Refactors the SOTA CSV download process to stream data directly to a temporary file using cURL, improving memory efficiency and error handling. Replaces the previous string-based CSV extraction with a file-based approach, and adds more robust error messages for file and download failures.
2026-01-13 13:40:00 +00:00
Peter Goodhall
8b819d2177 Refactor and enhance SOTA awards support
Replaces the old SOTA model with a new Sota_model, adds CSV-based summit metadata caching, and introduces new controller endpoints and view components for SOTA table, stats, and map fragments. The SOTA award page now supports filtering, improved statistics, and interactive mapping using summit coordinates. Updates .gitignore to include the new SOTA CSV, and refactors SOTA data refresh logic for reliability and maintainability.
2026-01-13 13:35:11 +00:00
Peter Goodhall
0c7b919e4f Update satellite mapping in lotw_satellite_map
Added mappings for SONATE-2, ASRTU-1 (AO-123), and TEVEL2-3 satellites to improve satellite name resolution in the lotw_satellite_map function.
2026-01-03 18:31:24 +00:00
Peter Goodhall
6a8f8a85f3 Fix indentation for lotw_satellite_map comment block
Corrected the indentation of the comment block for the lotw_satellite_map function to improve code readability and maintain consistent formatting.
2026-01-03 18:28:59 +00:00
Peter Goodhall
fb5afabed9 Remove strict type check in satellite name search
The third parameter in array_search was set to true, enforcing strict type comparison. This has been removed to allow non-strict comparison, which may improve matching for satellite names.
2026-01-03 18:28:08 +00:00
Peter Goodhall
2bd503cdcd Add support for managed email configuration
Introduces logic to detect and enforce centrally managed email settings. When managed, email options are displayed as read-only and cannot be changed by users; attempts to save changes are blocked with a notice. The email options view now conditionally renders a read-only summary and test email form if management is enabled.
2025-12-09 16:09:15 +00:00
Peter Goodhall
0848a9b4c0 Add open registration and public signup feature
Introduces open registration settings in the options area, allowing administrators to enable or disable public user signup. Adds a registration options page, updates sidebar navigation, and implements a public signup form and controller logic. Also refines user model to ensure correct data types for user fields and updates language strings for registration. The login page now links to signup when open registration is enabled.
2025-12-02 18:10:37 +00:00
cats-shadow
a39cd9b9c6 Replaced if by switch 2024-06-14 12:08:26 +03:00
cats-shadow
59a71acdd5 Added missing DXCC codes for RDA export 2024-06-13 17:44:49 +03:00
cats-shadow
6fb6a21898 Quick fix for rda support. 2024-06-10 19:20:24 +03:00
cats-shadow
2555f5ff90 MY_CNTY and MY_STATE support for ADIF export RDA data 2024-06-10 18:59:03 +03:00
Emiliano Macedonio
121e5f7981 Added flags to QSO tables and in detail 2024-05-24 16:43:32 +02:00
Peter Goodhall
c6716ab57a [WAB] Added ability to store WAB reference in Station Locations
Added ability to store WAB reference in Station Locations and also its exported in ADIF with the custom tag of "APP_CLOUDLOG_MY_WAB"
2024-05-14 15:25:10 +01:00
Peter Goodhall
94f3ebf53d [Clublog] Remap Sat names to conform with LoTW names
This addresses issue where Clublog uses the SAT_NAMES from LOTW rather than the real names/oscar numbers.

It also adds a parameter to the AdifHelper library to accept satellite_remap to rename them
2024-02-26 15:10:32 +00:00
Peter Goodhall
ab7a93181c Sec times a charm 2024-02-19 15:48:24 +00:00
Christoph Kottke
1d11d00ea8 add stations_id to eqsl functions 2024-02-05 21:59:52 +01:00
phl0
0352d01366
Also take care of existing VUCC_GRIDS stored with whitespace 2024-01-16 00:16:58 +01:00
Hugo Silva
95379af925 convert SIG_INFO WWFF to WWFF_REF and same for MY_ 2024-01-06 10:34:56 +00:00
Hugo Silva
ae41772896 Handle WWFF's specific and sig fields on ADIF export 2024-01-03 14:11:27 +00:00
HB9HIL
5177239e23 fetched dxcc_id 2024-01-01 04:58:49 +01:00
phl0
68af856827
Add DXCC NONE (aka. 0) 2023-12-19 21:10:13 +01:00
phl0
7252985199
Correct flag order 2023-12-19 21:06:18 +01:00
phl0
48d7005a8b
Remove unneeded code 2023-12-19 18:02:52 +01:00
phl0
7dfc7765cb
Add country flags as icons to view QSO and Tweets/Toots 2023-12-19 17:57:53 +01:00
Ondřej Nový
d388e6dc4b Fix typo in COL_AWARD_SUMMITED column 2023-12-15 12:44:22 +01:00
int2001
e9af164c8a
trim gridlocator before parsing it. Some Exports consist of trailing whitespaces at gridlocator :( 2023-12-13 16:34:24 +00:00
Andreas Kristiansen
272c343a9c
Merge pull request #2821 from phl0/tenDigitGrids
Ten digit grids
2023-12-13 08:16:49 +01:00
phl0
235611cfd8
Consider up to 10 digits for qra2latlon calcs 2023-12-13 01:18:35 +01:00
phl0
eb301296b8
Allow grids up to 10 chars 2023-12-13 00:38:37 +01:00
phl0
6d647fe736
Add functions for secondary subdivisions 2023-12-12 14:31:39 +01:00
phl0
0fe31f2c23
Complete list of prim. subdivisions 2023-12-12 08:49:52 +01:00
phl0
e23ad8950d
Merge branch 'dev' into Subdivisions 2023-12-12 08:29:51 +01:00
phl0
c571bfc844
Fix endless running loop for b0rken ADIF tags 2023-12-05 10:14:46 +01:00
phl0
3fed1d33fd
More subdivision names 2023-12-04 16:02:38 +01:00
phl0
5b577a432a
PoC for subdivision naming 2023-12-04 14:43:07 +01:00
HB9HIL
349f2eecf5 fixed some lotw php errors 2023-11-25 22:07:51 +01:00
phl0
2817eee2cf
Disable debug output (spoiling logs) 2023-11-16 09:08:43 +01:00
phl0
e8bfe6ed7f
HamQTH Lookup for search 2023-11-15 17:11:45 +01:00
phl0
87437ca1fb
Pass error message given by qrz.com to the user 2023-11-11 21:30:45 +01:00
Andreas
39bb190fd2 Fix county format in ADIF export 2023-11-04 18:31:39 +01:00
abarrau
57dc71292d
eqsl: add date force update 2023-10-02 20:50:23 +02:00
abarrau
d750a6cd4b
eqsl: add date force update 2023-10-02 20:43:37 +02:00