Commit graph

18 commits

Author SHA1 Message Date
Peter Goodhall
9113aae3bf Add public station-diary search
Adds searching for public Station Diary entries by callsign. Introduces a new route for /search and implements Stationdiary::search() which validates the callsign, resolves the public user, handles the q GET parameter, redirects on empty queries, and sets up pagination. Adds Note model methods count_public_station_diary_search_results() and search_public_station_diary_entries() to perform the search, attach images, and prepare entries. Updates public_index view to include a search form in the top nav, display search result metadata, and show a contextual message when no matches are found.
2026-04-15 11:38:38 +01:00
Peter Goodhall
fcd1b6242e Remove QSO count from View QSO List summary
Removed the dynamic contact count from the 'View QSO List' summary in application/views/station_diary/public_index.php. The inline '<span class="qso-count">' count display was removed, leaving only the static summary text; data attributes and table markup remain unchanged.
2026-04-06 11:21:06 +01:00
Peter Goodhall
e904595a9d Lazy-load QSO lists; add time index migration
Bump migration version to 265 and add a migration (265_add_station_time_on_index) that creates idx_station_time_on on (station_id, COL_TIME_ON) for faster time-based queries. Introduce lazy QSO loading: controller now sets defer_qso_list and uses a new POST endpoint get_filtered_qsos to fetch filtered QSO lists and summaries; also updated cache keys/render version and added per-entry cache deletion. Note model: add include_qso_list flag, memoize QSO summaries/lists and station IDs, replace DATE(COL_TIME_ON) filters with half-open datetime ranges (start inclusive, end exclusive) via helper methods to improve index use and performance. View: update public_index to render QSO list containers with data attributes, add JS to fetch and render QSO rows on demand, and support highlight DX updates. Overall changes optimize QSO queries and enable deferred loading to reduce initial page load and DB cost.
2026-04-06 11:11:03 +01:00
Peter Goodhall
9bbc58d805 Use COL_VUCC_GRIDS as fallback for grids
Prefer COL_GRIDSQUARE when present and fall back to COL_VUCC_GRIDS when building grid information. Added COL_VUCC_GRIDS to select lists in Note model queries and updated Logbook_model to set plot HTML to VUCC grids if gridsquare is missing. Also updated the public station diary view to display VUCC grids in the table when COL_GRIDSQUARE is empty. Files changed: Logbook_model.php, Note.php, public_index.php.
2026-03-29 14:12:25 +01:00
Peter Goodhall
7ba915e29c Add public QSO map to station diary
Add interactive QSO map support for public station diary entries. Controller: add stationdiary::get_qso_map_data() to return JSON map data for a given entry/date range/logbook with station location. Models: Note::get_public_entry_user_id() to resolve the entry owner; Logbook_model: get_qsos_for_public_map() to query QSOs for the map, set a default stn_loc fallback, and skip markers with invalid 0,0 coordinates. View: public_index.php includes Leaflet CSS/JS, a Show/Hide QSO Map toggle, map container per entry, client-side map initialization and marker/popups loaded via POST to the new endpoint. These changes ensure public diary entries can display QSO locations and the station marker while avoiding bogus markers and limiting results to the correct user/logbook context.
2026-03-09 13:50:34 +00:00
Peter Goodhall
a4d284a0c0 Add reactions to station diary entries
Introduce a reactions feature for public station diary entries. Adds a migration to create station_diary_reactions with indexes and a unique (diary_id, visitor_hash) constraint; bumps migration version to 257 and registers a new route for /entry/:id/react. Controller: implements visitor token/hash creation, a react() endpoint to accept POSTed reactions (like, love, fire), increments/updates reactions, invalidates cache and returns totals and visitor reaction. Model: new methods to get totals, fetch visitor reaction and save/update reactions. View: UI, styles and client-side JS for reaction buttons, counts, and copy/share enhancements; integrates totals and visitor state into the single-entry view.
2026-03-09 13:29:14 +00:00
Peter Goodhall
da4c4201ca Support public QSO datetime format & sharing
Add handling for public QSO datetime formatting and single-entry sharing. Introduce get_public_qso_datetime_format() in Stationdiary controller (defaults and appends time if missing) and pass qso_datetime_format, is_single_entry and current_entry_permalink to the public view. Update Note model to select and return user_date_format from auth table so user preferences flow through. Update public_index view to use the public QSO datetime format for QSO rows and add social share buttons (Facebook, X, Bluesky) when viewing a single entry.
2026-03-09 11:00:21 +00:00
Peter Goodhall
0b07e5ac18 Add public diary entry view and routing
Add support for viewing individual public Station Diary entries. Adds a new route for /station-diary/:callsign/entry/:id, a Stationdiary::entry controller method with caching (per-call sign + entry + cache version, 86400s TTL), and a Note model method get_public_station_diary_entry() that loads images and optional QSO summaries/lists. Update public_index view to link entry titles to their permalink and include entry IDs in article IDs, and update RSS feed to use the entry permalink/guid. Also include small CSS tweaks for entry title links.
2026-03-09 10:57:38 +00:00
Peter Goodhall
92df3b0fc2 Show satellite name in band column
When a QSO is a satellite contact (PROP_MODE 'SAT' or COL_SAT_NAME present), display the satellite name (or 'SAT' if no name) in the Band column instead of the RF band. Changes apply to both server-side PHP rendering and the client-side JS template, with existing fallbacks ('-' when no band) and HTML-escaping preserved for safety.
2026-03-08 17:49:43 +00:00
Peter Goodhall
b364db4234 Clean up empty <p><br> and redundant <br> in notes
Strip empty <p><br></p> tags and remove stray <br> between paragraphs in station diary views. public_index.php: after processing image shortcodes, remove empty paragraph placeholders and collapse <br> placed between </p> and <p>. rss.php: process image shortcodes for each entry (using $entry->images ?? []), clean the note content the same way, and output the cleaned content in the RSS <description>. This prevents extraneous blank lines and redundant breaks in rendered HTML and RSS feeds.
2026-03-08 14:50:55 +00:00
Peter Goodhall
f8dffa8776 Add image shortcodes and caption editing
Support inline diary images via shortcodes and improve notes UI. Introduces a Note::process_image_shortcodes() method (ID/caption lookup and modifiers like left/right/center/small/medium/large), and updates station diary rendering to process shortcodes and avoid duplicate image output. Adds an AJAX endpoint notes/update_image_caption with ownership checks to save image captions, plus client-side JS to edit/save captions from the note edit view. Refactors notes add/edit views: reorganized form into sections/accordion, Quill editor min-height, image upload tips, improved buttons and layout, and QSO summary layout tweaks.
2026-03-08 14:36:56 +00:00
Peter Goodhall
af756c3c88 Update public_index.php 2026-03-08 14:16:37 +00:00
Peter Goodhall
58b6ae86c1 Close article tag and move pagination outside
Add a closing </article> and adjust the surrounding conditionals so the pagination nav is rendered outside the entry loop. This fixes HTML nesting and ensures the HR/summary/images remain part of each entry while pagination appears once below the list in the station diary public index view.
2026-03-08 13:41:41 +00:00
Peter Goodhall
d31b3f9517 Render diary separator conditionally
Only output the diary <hr> divider when the entry has content to separate: either include_qso_summary is enabled and qso_summary.total_qsos > 0, or the entry has images. This avoids showing an unnecessary rule for empty entries and includes a small whitespace cleanup.
2026-03-08 13:40:22 +00:00
Peter Goodhall
a4dd03b24d Show divider only when QSO summary exists
Moved the <hr> divider into the QSO summary conditional so the rule is rendered only when include_qso_summary is true and qso_summary.total_qsos > 0. This prevents an empty divider from appearing when no QSO summary is present.
2026-03-08 13:39:38 +00:00
Peter Goodhall
50c24aede1 Add public station diary & QSO filters
Introduce Public Station Diary feature and QSO filtering support.

- Add migrations: 255 adds public_station_diary_enabled option (default enabled), 256 adds qso_date_start, qso_date_end, qso_satellite_only columns to notes.
- Bump migration version to 256.
- Add controller actions (Options::public_diary, public_diary_save) and new options view to manage the public diary setting; add sidebar link.
- Extend Note model to persist QSO filter fields and provide new methods to fetch QSO lists/summaries for date ranges and satellite-only filtering; wire filter usage into summary generation.
- Update notes add/edit views to include QSO Summary Filters (date range + satellite-only).
- Add translations for the new options keys across multiple language files.
- Update public station diary listing view styling/path and minor content cleanup; other views updated to support feature.
- Remove obsolete cache files (.htaccess, index.html).

These changes enable admins to toggle a public station diary and let note authors control which QSOs are included in summaries via date ranges and SAT-only filtering.
2026-03-08 13:34:31 +00:00
Peter Goodhall
babcdf87d1 Add RSS feed_url and update fonts/styles
Controller: pass a 'feed_url' value into the RSS view (site_url for the feed). RSS view: compute the current request URL (respecting HTTPS) and use it for the atom:link self href. Public view: load Google Fonts (Merriweather & Lora), add preconnect hints, switch typography to the new fonts, increase line-height and adjust font-weights/sizes for headings and body to improve readability.
2026-03-08 12:07:51 +00:00
Peter Goodhall
5d034d0963 Add public Station Diary with images & RSS
Introduce public Station Diary functionality: add global config flag, routes, controller, model changes, views and DB migrations. New migrations (252-254) add is_public/include_qso_summary, diary_images table and logbook_id on notes. Notes model updated to handle public flags, diary images, qso summaries, caching (per-user cache version), and helper methods for listing/counting public diary entries. New Stationdiary controller serves paginated public pages and RSS feed with caching. Notes controller updated to handle image uploads, attach images to diary entries, and provide an AJAX endpoint to delete images. Views updated to support public visibility options, logbook selector, image upload UI and Quill editor assets; routes and migration version bumped accordingly. Includes file upload example added to uploads/diary.
2026-03-08 11:42:41 +00:00