| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- <?php
- declare(strict_types=1);
- // Vorlage für MANAGE_UPDATE_POST_HOOK.
- //
- // Wird nach jedem erfolgreichen Update ausgeführt – auch dann, wenn keine
- // Migration gelaufen ist. Läuft NACH den Migrationen und wird übersprungen,
- // wenn eine Migration fehlgeschlagen ist.
- //
- // In manage-client/config.php eintragen:
- //
- // define("MANAGE_UPDATE_POST_HOOK", [
- // "file" => MANAGE_APP_ROOT . "/includes/after-update.php",
- // "callback" => "myProjectAfterUpdate",
- // ]);
- //
- // Diese Datei muss Teil des Release-Pakets sein, sonst fehlt sie nach dem
- // ersten Update.
- /**
- * @param array $context app_root, instance, from_version, to_version,
- * backup_dir, run_id, migrations, ggf. pdo
- */
- function myProjectAfterUpdate(array $context): void
- {
- // 1. Kompilierte Templates und Caches verwerfen.
- foreach (glob($context["app_root"] . "/data/cache/*.php") ?: [] as $file) {
- @unlink($file);
- }
- // 2. Verzeichnisse anlegen, die ein neues Release voraussetzt.
- $newDir = $context["app_root"] . "/data/exports";
- if (!is_dir($newDir) && !mkdir($newDir, 02775, true) && !is_dir($newDir)) {
- throw new RuntimeException("Verzeichnis konnte nicht angelegt werden: " . $newDir);
- }
- // 3. Für die Nachvollziehbarkeit protokollieren.
- @file_put_contents(
- $context["app_root"] . "/data/update-history.log",
- sprintf(
- "%s %s -> %s (Migrationen: %s)%s",
- date(DATE_ATOM),
- $context["from_version"] !== "" ? $context["from_version"] : "unbekannt",
- $context["to_version"],
- $context["migrations"] === [] ? "keine" : implode(", ", $context["migrations"]),
- PHP_EOL,
- ),
- FILE_APPEND | LOCK_EX,
- );
- // Fehler melden: Exception werfen, false zurückgeben oder
- // return ["success" => false, "error" => "…"].
- }
|