Projektstruktur

Verzeichnislayout, Abhängigkeiten und Datenbank-Schema

Verzeichnislayout

linkenhancer/
├── module.php            ← webtrees-Entry-Point
├── autoload.php          ← PSR-4-Autoloader
├── cron-jobs.php         ← Self-Registration-Manifest für cronjob
├── latest-version.txt    ← aktuelle Version (mit LinkEnhancerModule.php synchron)
├── composer.json         ← PHP-Abhängigkeiten (wt-shared-libs, phpstan)
├── package.json          ← JS-Abhängigkeiten (gulp, rollup, mocha)
├── gulpfile.mjs          ← Build-Tasks
├── phpstan.neon          ← Konfiguration der statischen Analyse
├── phpstan-bootstrap.php ← PSR-4-Bootstrap für PHPStan
├── phpstan-baseline.neon ← bekannte Probleme
├── src/                  ← PHP (PSR-4)
│   ├── LinkEnhancerModule.php
│   ├── LinkEnhancerModuleExt.php
│   ├── LinkEnhancerUtils.php
│   ├── SettingInterface.php
│   ├── CommonMark/       ← CommonMark-Extensionen
│   ├── DataFix/          ← Datenkorrektur-Handler + Dispatcher
│   ├── Factories/        ← CustomMarkdownFactory
│   ├── Http/             ← Request-Handler
│   ├── Schema/           ← Migrations + SeedHelpTable
│   └── Services/         ← Geschäftslogik
├── resources/
│   ├── js/               ← JS-Quellcode (src/) + Build-Ausgabe (bundle-*)
│   ├── css/              ← CSS-Quellcode + Build-Ausgabe
│   ├── lang/             ← .pot / .po / .php (Übersetzungen)
│   ├── views/            ← PHTML-Views
│   └── img/              ← Screenshots
├── cli/                  ← CLI-Wartungsskripte
├── tests/                ← Standalone- + Smoke-Tests
└── util/                 ← Build-/Wartungs-Shell-Skripte

Abhängigkeiten

Datenbank-Schema

Das Modul besitzt fünf Tabellen (Präfix le_), die inkrementell durch src/Schema/Migration#.php erstellt werden. Jede Migration ist additiv und idempotent, sodass das Schema bei jedem Modul-Load konvergiert.

le_route_help_map

Ordnet eine webtrees-Route (path / handler / method) einem Hilfe-Eintrag zu — der Speicher für die kontextsensitive Handbuch-Hilfe. Wird von SeedHelpTable befüllt.

SpalteTypHinweise
idint, PK (auto)
pathvarchar(255)Routen-Pfad
handlervarchar(150)vollqualifizierte Handler-Klasse
handler_keyvarchar(150), indexversionsneutrale Key (2.2.6 + 2.3 kompatibel)
methodvarchar(20)
extrasvarchar(60)
subcontextvarchar(250)
categoryvarchar(60)standard / custom module / generic …
orderint, Default 10
urlvarchar(250)
updated_attimestamp, nullable

Index auf (path, handler) und auf handler_key.

le_record_scan

Eine Zeile pro gescanntem GEDCOM-Datensatz, mit einem MD5-Fingerprint des Datensatztextes — lässt dem CLI-Index eine inkrementelle Diff-Prüfung zu.

SpalteTypHinweise
fileintBaum-ID (Teil des PK)
xrefvarchar(20)(Teil des PK)
rectypevarchar(15)GEDCOM-Tag, z.B. INDI, OBJE (Teil des PK)
hashvarchar(32)MD5 des Datensatztextes
scanned_attimestamp, nullable

Primärschlüssel (file, xref, rectype).

Eine Zeile pro (Link, Ziel) in einem Datensatz — das Fundament für die geplante Backlink-Funktion.

SpalteTypHinweise
idint, PK (auto)
fileintBaum-ID
xrefvarchar(20)
rectypevarchar(15)
tag_pathvarchar(255)wo der Link im Datensatz sitzt
link_classvarchar(10)xref / ext / pic / classic / other
tokentextdas rohe Link-Token
snippettext, nullablezum Build-Zeitpunkt erfasster Anzeigekontext
target_xrefvarchar(20), nullableXREF-Link-Ziel
target_treevarchar(255), nullable
target_uidvarchar(255), nullable, indexUID-Link-Ziel (per Längen-Heuristik befüllt)

Indizes auf (file, xref, rectype), target_xref und target_uid.

le_uid_index

Eine Zeile pro in einem Datensatz gefundenem UID-Tag (Datensatz- und Fakt-Ebene). Kein Unique-Constraint — UIDs sind nicht eindeutig garantiert.

SpalteTypHinweise
idint, PK (auto)
fileintBaum-ID
xrefvarchar(20)
uidvarchar(255), indexUID-Wert wörtlich (ohne Normalisierung)
rectypevarchar(15)
tag_pathvarchar(255)
hashvarchar(32)MD5-Fingerprint (inkrementelle Änderungsprüfung)

Indizes auf uid und (file, xref, rectype).

le_index_meta

Eine einzelne Zeile (id = 1) mit dem Frische-Zustand von beiden — dem Link-Index und dem UID-Index.

SpalteTypHinweise
idint, PK, Default 1einzelne Zeile
last_runtimestamp, nullableletzter vollständiger Link-Index-Lauf
rowsint, Default 0Zeilenzahl des Link-Index
uid_last_runtimestamp, nullableletzter vollständiger UID-Index-Lauf
uid_rowsint, Default 0Zeilenzahl des UID-Index
Zuletzt geändert 05.11.2026: added cross-links (9b8168b)