Commit Graph
7 Commits
Author SHA1 Message Date
admin.juergenandClaude Opus 5.5 0ca1503129 Show German date format (DD.MM.YYYY) in the event edit form
flatpickr now uses an alternative display input with altFormat d.m.Y,
typed input is parsed in that format as well. The submitted value stays
ISO (Y-m-d), so form handling and validation are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 17:47:25 +01:00
admin.juergenandClaude Opus 5.5 23cccf170a Unique and stable event aliases from the frontend form
The frontend form built the alias from date + first 20 title characters
without checking for existing aliases and recalculated it on every save.
Duplicating an event and saving the copy with the same title and date
(or entering an event twice) produced the same alias, so only one of
the events was reachable.

- aliases are made unique (-2, -3, ...)
- existing events keep their alias on update (stable URLs); only an
  empty alias, e.g. of a fresh copy, is generated
- migration renames existing duplicates; the oldest event keeps its
  alias and URL

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 17:24:50 +01:00
admin.juergenandClaude Opus 5.5 7df08b9017 Sitemap lastmod and handling of past events
- SitemapListener: <lastmod> for event detail pages (event tstamp) and
  regular pages; events that ended more than 12 months ago are removed
  from the sitemap
- PastEventPolicy: events stay indexable for 12 months after they end
  (recurring events are searched before the next date), afterwards the
  detail page gets noindex,follow but stays reachable as archive
- detail template data: is_past and next_occurrence (next published
  event with the same title) for a notice with a link to the next date

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 17:19:46 +01:00
admin.juergenandClaude Opus 5.5 5bf31e5043 SEO: event meta title with date, Open Graph defaults, cache invalidation
- event detail pages: <title> is "Title – 03.12.2026" (multi-day ranges
  supported) so recurring events with the same name stay distinguishable;
  H1 and lists keep the editor's title
- meta description fallback for events without teaser/description (date,
  time, location); a teaser that is only an insert tag (shared series
  text) also falls back, so a series does not share one description
- EventOpenGraphProvider for numero2/contao-opengraph3 (registered only
  when the bundle is installed, priority above its CalendarEventsProvider):
  og:title with date, og:description from teaser, event image as og:image
- FrontendCacheInvalidator: frontend event/organization edits write via
  DBAL, so invalidate the same cache tags the backend uses; tag the map
  and organization listing, invalidate the generic organization tag on
  backend saves

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 16:58:33 +01:00
admin.juergenandClaude Opus 5.5 bdc8988e28 Always open the event detail page instead of redirecting to the external URL
Events with a URL were saved with source "external", so Contao linked
lists straight to the external site and redirected the detail page.
The URL is now kept in the url field and only shown as a button on the
detail page.

- frontend form saves source "default" for every event
- backend: source option "external" removed, url field relabelled
  "Externer Link", obsolete target field dropped from the palette
- migration switches existing source="external" events to "default"

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 16:16:33 +01:00
admin.juergenandClaude Opus 5.5 ff8fa50360 Use GeoSN aerial imagery via own proxy instead of Esri for satellite mode
Esri World Imagery (Maxar) is not freely licensed for commercial
projects. Satellite mode now uses the official GeoSN orthophotos
(Saxony, 20 cm) through the cache proxy on maps.mummert.media, so
visitors never connect to Esri or geodienste.sachsen.de.

- raster layer below the first base symbol layer, labels and event
  markers stay on top; Esri road/label overlays removed
- labels recoloured for the aerial view (white text, dark halo),
  POIs, address labels and oneway arrows hidden; originals restored
  when switching back
- attribution "© GeoSN, dl-de/by-2-0"
- bump map-module.js cache buster

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 15:49:22 +01:00
admin.juergenandClaude Opus 5.5 5aeeee0ee5 Detect Kulturhauptdorf events by tag name instead of tag ID 21
The event detail template data set has_tag_21 to drive the
Kulturhauptdorf logo, but tag 21 is "Feste & Märkte", so the logo
showed on every market/festival event. Add is_kulturhauptdorf, which
checks for a tag named "Kulturhauptdorf" (case-insensitive), and keep
has_tag_21 as deprecated for backwards compatibility.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 15:32:11 +01:00