# wt-shared-libs

> Gemeinsame PHP-Bibliothek für benutzerdefinierte webtrees-Module

---

![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)
![webtrees major version](https://img.shields.io/badge/webtrees-v2.2|v2.3-green)

`wt-shared-libs` ist die gemeinsame PHP-Bibliothek hinter den benutzerdefinierten Modulen [LinkEnhancer](../linkenhancer) und [Cronjob](../cronjob). Sie sorgt dafür, dass zwei webtrees-Hauptversionen (2.2 und 2.3) nebeneinander funktionieren: versionsabhängige Klassen, Methoden und Signaturen werden hier einmal gekapselt, statt in jedem Modul dupliziert.

Teile und insbesondere die Laderoutine sind von dem ähnlichen Paket [Jefferson49/webtrees-common](https://github.com/Jefferson49/webtrees-common) inspiriert.

## Was ist drin

Alles liegt unter der PSR-4-Root `Schwendinger\Webtrees\`. Die vollständige Methoden-API ist im Repository dokumentiert — diese Seite dient nur als Überblick:

| Komponente | Namespace | Funktion |
| --- | --- | --- |
| <a href="https://codeberg.org/bschwede/wt-shared-libs/src/branch/main/src/Helpers/Functions.php" target="_blank" rel="noopener"><code>Functions.php</code></a>
 | `Helpers` | 15 versionsabhängige Static-Helper — Versionsprüfung, Routen, privatisierte Daten, DataTables-Normalisierung, HTTP-Statuscodes |
| <a href="https://codeberg.org/bschwede/wt-shared-libs/src/branch/main/src/Helpers/ClassName.php" target="_blank" rel="noopener"><code>ClassName.php</code></a>
 | `Helpers` | versionsunabhängige webtrees-Klassennamen — `get` / `isInstanceOf` + 2.2/2.3-Konstanten |
| <a href="https://codeberg.org/bschwede/wt-shared-libs/src/branch/main/src/Helpers/MoreI18N.php" target="_blank" rel="noopener"><code>MoreI18N.php</code></a>
 | `Helpers` | Übersetzung — `translate` für eigene Strings, `xlate` für Strings, die bereits vom webtrees-Core abgedeckt sind |
| <a href="https://codeberg.org/bschwede/wt-shared-libs/src/branch/main/src/Services/CliBootstrap.php" target="_blank" rel="noopener"><code>CliBootstrap.php</code></a>
 | `Services` | CLI-Bootstrap — `boot` / `guard` + Offline-Erkennung |
| <a href="https://codeberg.org/bschwede/wt-shared-libs/src/branch/main/src/Services/ModuleLog.php" target="_blank" rel="noopener"><code>ModuleLog.php</code></a>
 | `Services` | Modul-Singleton-Logger — `error` / `debug` / `trace` |
| <a href="https://codeberg.org/bschwede/wt-shared-libs/src/branch/main/src/Traits/ModuleCustomTrait.php" target="_blank" rel="noopener"><code>ModuleCustomTrait.php</code></a>
 | `Traits` | Custom-Module-Metadaten — Autor, Version, URLs, `customTranslations` |
| <a href="https://codeberg.org/bschwede/wt-shared-libs/src/branch/main/autoload.php" target="_blank" rel="noopener"><code>autoload.php</code></a>
 | – | der Loader (siehe unten) |

> Vollständige Methoden-API: <a href="https://codeberg.org/bschwede/wt-shared-libs/src/branch/main/docs/reference.md" target="_blank" rel="noopener"><code>reference.md</code></a>
 im Repository.

## So funktioniert der Loader

<a href="https://codeberg.org/bschwede/wt-shared-libs/src/branch/main/autoload.php" target="_blank" rel="noopener"><code>autoload.php</code></a>
 ist ein **skew-toleranter Loader**: Er vergleicht die vom Modul mitgelieferte Lib-Version mit der im webtrees-Root installierten Version und lässt immer die **neueste** Kopie gewinnen — so kann eine veraltete, gebündelte Kopie eine neuere Site-Ebene niemals überschatten. Eine Regel für Konsumenten: die Lib **nicht** im `__construct()` der Modul-Klasse laden — das kann die Autoload-Reihenfolge verändern. Die vollständigen Prämissen und der Beweis stehen in <a href="https://codeberg.org/bschwede/wt-shared-libs/src/branch/main/docs/reference.md" target="_blank" rel="noopener"><code>reference.md</code></a>
.

## Schnellstart (als konsumierendes Modul)

Ein Path-Repository im `composer.json` des Moduls ergänzen und den Loader in der eigenen Lade-Routine registrieren (nach den anderen Composer-Libraries):

```json
"repositories": [
    { "type": "path", "url": "../wt-shared-libs", "options": { "symlink": false } }
],
"require": {
    "bschwede/wt-shared-libs": "^1.0"
},
"config": {
    "prepend-autoloader": false
}
```

## Releases

Releases werden per Git-Tag versioniert; das Tag entspricht immer dem `version`-Feld im `composer.json` (ohne `v`-Präfix). Siehe <a href="https://codeberg.org/bschwede/wt-shared-libs/src/branch/main/CHANGELOG.md" target="_blank" rel="noopener"><code>CHANGELOG.md</code></a>
.

## Weiterführende Links

- API-Referenz — <a href="https://codeberg.org/bschwede/wt-shared-libs/src/branch/main/docs/reference.md" target="_blank" rel="noopener"><code>reference.md</code></a>

- Mitwirken / neue Klasse — <a href="https://codeberg.org/bschwede/wt-shared-libs/src/branch/main/docs/contributing.md" target="_blank" rel="noopener"><code>contributing.md</code></a>

- Changelog — <a href="https://codeberg.org/bschwede/wt-shared-libs/src/branch/main/CHANGELOG.md" target="_blank" rel="noopener"><code>CHANGELOG.md</code></a>

- [Issues & PRs auf Codeberg](https://codeberg.org/bschwede/wt-shared-libs)
