v1.0.0
Erstes stabiles, öffentliches Release. Funktional auf dem Stand der bisherigen
internen Entwicklung (Phasen 1–4), nun als stabil deklariert und mit
Qualitätssicherung abgesichert: statische Analyse (PHPStan, Level 5) und
75 automatisierte Tests.
Phase 4 — Orts-Hygiene-Cockpit (Merge / Rename / Undo)
- Sidecar-Vereinigung beim Merge: Notizen, Kirchenbücher, GOV-Verknüpfung,
Aufgaben und Digitalisate des Quell-Orts wandern ins Ziel statt zu verwaisen
(PlaceSidecarMerger). Behebt den bisherigenmergePlaceMeta-Crash
(PK-Duplicate). Backup-Format v2 + Undo-Restore der Sidecar-Schicht. - Rename-ohne-Merge: einen Ort umbenennen (propagiert auf alle Ereignisse);
existiert der neue Name bereits → Hinweis, stattdessen zu mergen. - Reversibles Undo mit Stale-Schutz: bricht ab, wenn ein betroffener Datensatz
seit der Operation geändert wurde (überschreibt keine späteren Edits). - GOV-Statusspalte in der Ortsliste (verknüpft / nicht).
- Wächter & Warnungen: degenerierter-Merge-Hinweis („X" vs „X."), Warnung bei
großen Merges (Single-Transaction), GOV-/Koordinaten-Konflikt-Hinweise im Modal. - Robuste AJAX-Fehlerbehandlung: Geschäftsfehler als HTTP 200 +
success:false
(kein „JSON.parse"-Crash mehr), UTF-8-tolerantesjson_encodein allen Handlern. - UI-Fixes: Font-Awesome-Subset-konforme Icons, voller Hierarchie-Pfad in der
Liste (macht namensgleiche Orte unterscheidbar), dismissbarer Endorte-Hinweis. - Tests:
GedcomPlaceMergeEdgeCasesTest(Compound-PLAC, Suffix-Over-Capture,
Trailing-Dot, Substring-Falle). PHP-8.5-Lauf: alle 75 Tests grün, Lint sauber. - Englische + niederländische Lokalisierung: vollständige
en.poundnl.po
(je 167 Strings, Deutsch→Englisch bzw. Deutsch→Niederländisch),de.poauf den
aktuellen String-Satz resynct.msgfmt --check-formatgrün für alle (Format-
Platzhalter konsistent).I18nServicemapptnl/nl_NL/nl_BE→nl.po.
.mowerden zur Laufzeit kompiliert (git-ignored).
Hinzugefügt
- Merge-Operation für Orte:
PlaceOperationServicemit analyzeMerge /
executeMerge / undoMerge. Opake Subtag-Übernahme, Konflikt-Resolve-Modal,
Backup-JSON pro Operation, Suffix-Match über mittlere Hierarchie-Ebenen. - Hierarchie-Filter in der Liste: „Alle Ebenen" vs. „Nur Endorte" (Blätter
ohne Place-Kinder). Persistiert pro User. Default „Alle Ebenen". - Koordinaten-Import:
MAP/LATI/LONG-Subtags aus PLAC-Strukturen werden
in die webtrees-Standardtabelleplace_locationübertragen. Adressiert
Ahnenblatt/Gramps/FTM/MyHeritage-Exporte, deren Koordinaten webtrees
sonst ignoriert. Idempotent — überschreibt keine vorhandenen Koordinaten. - Merge-Spalte einklappbar via „Merge-Modus"-Button. Standard-Ansicht
kompakt, Auswahl-Radios nur bei expliziter Aktivierung. - DB-Tabellen
ortsregister_place_meta(leer, Vorbereitung Phase 4) und
ortsregister_merge_log(Operations-Historie). - PHPUnit-11-Test-Suite mit Tests für
GedcomPlaceManipulatorund
GedcomCoordinateExtractor. - GOV-Integration (Phase 3A): manuelles Linking von Places mit GOV-IDs
(gov.genealogy.net).GovApiClientmit Cache (7d TTL),GovObject-DTO,
GovLinkingService. Pro Ort ein Modal mit GOV-ID-Eingabe + Verifikation.
Neue Spalteortsregister_place_meta.gov_id(Migration SCHEMA_VERSION 2). - GOV-Hierarchie auf Detailseite (Phase 3E): bei verknüpftem Ort wird
diepart-of-Kette aus GOV rekursiv aufgelöst (max. 10 Stufen, Cycle-Safe,
via gecachtemGovApiClient) und als Breadcrumb angezeigt — verlinkt direkt
auf gov.genealogy.net. Bei nicht-verknüpften Orten zeigt der Block die
PLAC-Komma-Hierarchie + „Jetzt mit GOV verknüpfen"-Button (öffnet das
bestehende GOV-Modal direkt auf der Detailseite). - Detailseite kompakter + aussagekräftiger (Phase 3F):
- Statistik-Karten splitten Ereignisse nach Typ (Geburten / Heiraten /
Todesfälle / Weitere) statt aggregiert.PlaceEventCounterparsiert
die GEDCOM-Blobs der verknüpften INDI/FAM-Records. - Lange Listen werden gekappt: Personen 10, Medien 5, Bilder-Grid 12 —
Rest in Bootstrap-Collapse mit „Alle N anzeigen"-Button.
- Statistik-Karten splitten Ereignisse nach Typ (Geburten / Heiraten /
- Admin-Konfiguration (Phase 3L): neuer Bereich
Verwaltung → Module → Ortsregister. Konfigurierbar:- Wikimedia-Lookup an/aus
- Max. Distanz Wikidata ↔ GOV-Koordinaten (default 30 km)
- Cache-TTLs für Wikimedia + GOV separat
- Sichtbare Listen-Längen (Personen / Medien / Bilder)
ImplementiertModuleConfigInterface. Defaults bleiben bei
ungesetzten Werten erhalten — Update bricht nichts.
- Wikimedia-Integration (Phase 3J-1): zu jedem Ort wird Wikidata
nach dem Ortsnamen durchsucht (max. 5 Kandidaten), gegen die GOV-
Koordinaten geo-validiert (max. 30 km Abstand — verwirft Namensgleiche
in fremden Regionen). Bei Treffer wird Wikidata-P18 als Hauptbild
geladen (Fallback wenn kein webtrees-Headerbild gepflegt ist) und
zusätzlich eine Commons-Galerie aus passenden File-Treffern (max. 6,
ohne SVG/PNG). Lizenz-Hinweise pro Bild. Neue Services:
WikimediaPlaceClient, DTOsWikiImageundWikimediaPlaceData.
Cache 7 Tage, vier API-Calls pro Ort beim ersten Aufruf. - GOV-Hierarchie mit Zeitspannen (Phase 3H-1): pro Hierarchie-Stufe
wird die Zeitspanne der part-of-Zugehörigkeit angezeigt
(„Württemberg (1806–1813)"). Lead-Hinweis oben im Block zeigt die
Epoche der unmittelbaren Elternstufe, damit klar wird, dass die
Hierarchie historisch ist und für andere Epochen abweichen kann.
GovHierarchyResolver::resolveWithEdges()liefert pro Stufe begin/end
der Edge zur vorherigen Stufe;GovObject.partOfMetacached die
Zeitspannen je Ref-ID aus der GOV-API. - Detailseite visuell aufgewertet (Phase 3G) — Patterns aus Nachbar-Modul
„Sammlungen" adaptiert:- Medien-Liste mit farbigen Format-Badges (PDF rot, Video/Audio,
Word/Excel etc.) statt nur Text-Link. - Bilder-Galerie: dichter Grid (3/4/5/6 Cols responsive), Tiles
streng quadratisch (aspect-ratio: 1/1) mit Hover-Overlay
(Caption + Lift-Schatten). - Lightbox für Galerie-Bilder: Click → großes Modal mit
Prev/Next-Navigation, Pfeiltasten-Support, Position-Indikator,
Link „In webtrees öffnen". Vanilla JS, ~80 Zeilen inline.
- Medien-Liste mit farbigen Format-Badges (PDF rot, Video/Audio,
Geändert
- GOV-ID-Format: kompakte IDs wie
HABCHTJN49MCwerden zusätzlich zum
Legacy-Formatobject_NNNakzeptiert (Regex[A-Za-z0-9_]{3,40}). - GOV-Externsuche-URL:
/search/name?name=statt veraltetem
/search/simple?placename=(404 seit Juni 2026). - Help-Text zu GOV-ID-Format: keine falschen Typ-Behauptungen mehr
am ID-Prefix (GOV-Typ steht imtype-Feld der API-Antwort).
Full Changelog: https://github.com/thobgg/webtrees-ortsregister/commits/v1.0.0