Updater-System (OpenNIT-Modell) im isolierten updater/-Ordner

Zieht Quellcode + DB-Migrationen über einen HTTP-Update-Proxy nach.
Vollständig isoliert: eigener Namespace Updater\, eigener Autoloader,
eigene Settings (updater/storage/updater-settings.json), eigenes
Migrations-System (_updater_migrations), eigener AuditLogger.

Komponenten (alle in updater/):
- UpdateManager: Version/.version, Maintenance, Progress, checkForUpdates,
  installUpdate (Staging + PROTECTED_PATHS + Migrationen + opcache + finally)
- MigrationRunner: MySQL-Tracking, string-/kommentar-bewusster SQL-Splitter,
  isIgnorableSqlError, 60s-Lockfile-Cache
- UpdateController + admin/update.php (dünner Entry-Shim), Inline-Admin-UI
  mit Channel-Selector, Update-Check, Progress-Bar, Migrations-Tab
- UpdaterFactory (zentraler Channel-Fallback), AuditLogger (audit_log)
- Templates: maintenance.html, update.php; routes.php (Doku)
- README.md mit vollständiger Rückbau-Anleitung

Einzige Bestandscode-Änderung: 4-Zeilen-Maintenance-Hook in index.php
(markiert mit "// Updater maintenance hook").

Proxy: update.loheide.eu/openvouchertool[-development]
This commit is contained in:
Claude 2026-06-05 18:51:51 +00:00
parent 3483da274f
commit 43149074c9
No known key found for this signature in database
14 changed files with 1374 additions and 0 deletions

29
updater/routes.php Normal file
View file

@ -0,0 +1,29 @@
<?php
/**
* Routen-Registrierung fuer den Updater.
*
* Dieses Projekt besitzt KEIN zentrales Routing-System (Slim/FastRoute/o.ae.)
* die Auslieferung erfolgt datei-basiert ueber den Webserver. Die Updater-Route
* `/admin/update` wird daher durch die reale Datei `admin/update.php`
* bereitgestellt (duenner Shim -> \Updater\UpdateController).
*
* Diese Datei existiert, um die Routing-Konvention der Vorlage zu erfuellen und
* dokumentiert die einzige Routing-Einklink-Stelle. Sollte das Projekt spaeter
* einen echten Router erhalten, koennen hier die Routen registriert werden:
*
* $router->get('/admin/update', fn() => (new \Updater\UpdateController($db, $auth))->handle());
* $router->post('/admin/update', fn() => (new \Updater\UpdateController($db, $auth))->handle());
*
* Aktuelle Endpunkte (alle ueber admin/update.php, Parameter `action`):
* GET /admin/update.php -> Admin-UI
* GET /admin/update.php?action=check -> Update-Pruefung (JSON)
* GET /admin/update.php?action=progress -> Fortschritt (JSON)
* GET /admin/update.php?action=migrations-> Migrations-Status (JSON)
* POST /admin/update.php action=install (+csrf_token)
* POST /admin/update.php action=set_channel (+csrf_token, channel)
*/
return [
['method' => 'GET', 'path' => '/admin/update', 'handler' => 'admin/update.php'],
['method' => 'POST', 'path' => '/admin/update', 'handler' => 'admin/update.php'],
];