after-update.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. declare(strict_types=1);
  3. // Vorlage für MANAGE_UPDATE_POST_HOOK.
  4. //
  5. // Wird nach jedem erfolgreichen Update ausgeführt – auch dann, wenn keine
  6. // Migration gelaufen ist. Läuft NACH den Migrationen und wird übersprungen,
  7. // wenn eine Migration fehlgeschlagen ist.
  8. //
  9. // In manage-client/config.php eintragen:
  10. //
  11. // define("MANAGE_UPDATE_POST_HOOK", [
  12. // "file" => MANAGE_APP_ROOT . "/includes/after-update.php",
  13. // "callback" => "myProjectAfterUpdate",
  14. // ]);
  15. //
  16. // Diese Datei muss Teil des Release-Pakets sein, sonst fehlt sie nach dem
  17. // ersten Update.
  18. /**
  19. * @param array $context app_root, instance, from_version, to_version,
  20. * backup_dir, run_id, migrations, ggf. pdo
  21. */
  22. function myProjectAfterUpdate(array $context): void
  23. {
  24. // 1. Kompilierte Templates und Caches verwerfen.
  25. foreach (glob($context["app_root"] . "/data/cache/*.php") ?: [] as $file) {
  26. @unlink($file);
  27. }
  28. // 2. Verzeichnisse anlegen, die ein neues Release voraussetzt.
  29. $newDir = $context["app_root"] . "/data/exports";
  30. if (!is_dir($newDir) && !mkdir($newDir, 02775, true) && !is_dir($newDir)) {
  31. throw new RuntimeException("Verzeichnis konnte nicht angelegt werden: " . $newDir);
  32. }
  33. // 3. Für die Nachvollziehbarkeit protokollieren.
  34. @file_put_contents(
  35. $context["app_root"] . "/data/update-history.log",
  36. sprintf(
  37. "%s %s -> %s (Migrationen: %s)%s",
  38. date(DATE_ATOM),
  39. $context["from_version"] !== "" ? $context["from_version"] : "unbekannt",
  40. $context["to_version"],
  41. $context["migrations"] === [] ? "keine" : implode(", ", $context["migrations"]),
  42. PHP_EOL,
  43. ),
  44. FILE_APPEND | LOCK_EX,
  45. );
  46. // Fehler melden: Exception werfen, false zurückgeben oder
  47. // return ["success" => false, "error" => "…"].
  48. }