T ToutadminDokumentation

Zwei Editionen, ein Produkt

Toutadmin gibt es in zwei Ausfertigungen: die eine läuft auf Node.js, die andere auf PHP. Das sind weder zwei Produkte noch eine abgespeckte und eine vollständige Fassung. Es sind dieselben 51 Bereiche, dasselbe Schema mit 142 Tabellen, dieselben 16 Sprachen, dieselben Masken. Diese Seite sagt, was sie wirklich trennt — und das ist wenig.

Warum zwei#

Ein Unternehmensprodukt muss sich dort installieren lassen, wo das Unternehmen bereits ist. Manche haben einen Server, ein systemd und eine Administration; andere haben ein Shared Hosting für vier Euro im Monat und einen FTP-Zugang. Die Node-Edition richtet sich an die ersten, die PHP-Edition an die zweiten. Die zweiten abzuweisen hätte geheißen, die Hälfte der Unternehmen abzuweisen, die ein Verwaltungswerkzeug am nötigsten brauchen.

Was strikt identisch ist#

MerkmalNodePHP
Fachbereiche5151
Tabellen in der Datenbank142142
Spalten13111311
Oberflächensprachen1616
Übersetzungsschlüssel27652792
Optionale Module77
Webhook-Ereignisse88
API-Ressourcen99

Weil das Schema dasselbe ist, wandert eine Datenbank ohne Umwandlung von einer Edition in die andere: die eine anhalten, app.sqlite und die Dateiordner kopieren, die andere starten. Die Passwörter funktionieren weiter — beide Editionen lesen dasselbe Hash-Format. Das ist der ehrlichste Paritätstest, den es gibt, und er ist bestanden.

Was sich unterscheidet#

Die Form einiger Adressen#

531 Routen auf der Node-Seite, 513 auf der PHP-Seite. Der Unterschied ist kein Mangel: es sind dieselben Funktionen, nur knapper geschrieben.

  • Die API. Node deklariert seine neun Ressourcen einzeln (/api/v1/collaborateurs, /api/v1/services…); PHP bedient sie über eine parametrisierte Route. Alle neun antworten, die Wurzel kündigt alle neun an, und ein Test ruft sie einzeln auf, um es zu belegen.
  • Die Installation. Node führt in fünf Schritten, PHP passt auf eine Seite und ein einziges Absenden. Es werden dieselben fünf Angaben verlangt: Sprache, Voraussetzungen, Unternehmen, Jahresurlaubstage, Administrationskonto.
  • Die übergreifenden Rechte. Node hat eine Route je Recht, PHP eine einzige parametrisierte Route /admin/droits/{flag}.

Diese achtundzwanzig Formunterschiede werden nicht aus dem Gedächtnis behauptet: die Datei tests/test_parity.php übt sie alle durch, einen nach dem anderen.

Der periodische Durchlauf#

Node bringt seinen eigenen Planer mit: der Server läuft dauerhaft, er weckt sich selbst. PHP lebt nur während einer Anfrage: dieselben acht Vorgänge laufen über tools/cron.php, aufgerufen vom Cron des Hosters. Gleicher Fachcode, gleiche Wirkung, anderer Auslöser.

Die Datumsangaben#

Node schreibt seine Daten mit Intl, in V8 eingebaut. PHP tut dasselbe, wenn die Erweiterung intl vorhanden ist — gleiche ICU-Maschine, aufs Zeichen gleiche Ergebnisse. Fehlt sie, kommen Tages- und Monatsnamen aus den Übersetzungswörterbüchern: das Datum bleibt richtig und übersetzt, die Reihenfolge der Bestandteile kann in einigen Sprachen abweichen.

Was sich nicht unterscheidet, obwohl man es erwarten würde#

ThemaIn beiden Editionen
QR-Codes (Zweifaktor)Auf der PHP-Seite von Hand geschriebener Kodierer, Byte für Byte gegen die auf der Node-Seite verwendete Bibliothek geprüft, über sechzehn Textlängen.
SicherungsarchiveAuf beiden Seiten ohne Abhängigkeit geschriebenes tar.gz, gleicher Inhalt, gleiche SHA-256-Prüfsummen.
IMAP-BuchhaltungspostfachAuf beiden Seiten ein im Produkt geschriebener IMAP-Client.
PDF, CSV, ImportIm Produkt geschrieben, gleiche Dateien als Ergebnis.
PrüfprotokollGleiche Verkettung von Prüfsummen: eine geänderte Zeile bricht die Kette, auf beiden Seiten.
HTTP-SicherheitsrichtlinieGleiche Header, gleiche CSP mit Nonce, gleiche Abwesenheit von unverzichtbarem JavaScript.

Welche wählen#

Ihre LageDie Edition
Shared Hosting, FTP-Zugang, keine KommandozeilePHP — genau dieser Fall war gemeint
Eigener Server, systemd, eine AdministrationNode
Sie können eine der beiden bereits verwaltenDiese. Die Parität macht die Wahl umkehrbar.
Viele gleichzeitige BenutzerNode — ein dauerhafter Prozess, die Datenbank bereits geöffnet
Sie sind unschlüssigPHP — weniger Teile zu pflegen, und der Wechsel zu Node bleibt ein Kopieren von Dateien

Wie die Parität gehalten wird#

Sie ist keine Absicht, sondern eine Prüfung. Bei jeder Änderung laufen vier Vergleiche:

  1. Die Routen — auf beiden Seiten ausgelesen und verglichen; jede Abweichung muss ein dokumentierter Unterschied sein.
  2. Die Funktionen — die von jedem Modul ausgegebenen Namen, Modul für Modul verglichen.
  3. Das Schema — Tabellen und Spalten aus beiden Datenbanken gelesen und verglichen.
  4. Die Masken — beide Editionen nebeneinander gestartet und von einem echten Browser Seite für Seite durchlaufen, mit Vergleich von Antwortcode und Struktur.

Diese vier Durchgänge haben echte Mängel gefunden — darunter zwei, die beide Editionen betrafen. Genau das macht sie nützlich: eine Parität, die man nicht misst, ist eine Parität, die man unbemerkt verloren hat.

Dazu kommen die Testsuiten: 802 Fälle auf der Node-Seite, 572 auf der PHP-Seite, zusammen 1374.

Toutadmin-Dokumentation — erstellt am 2026-09-13. Eigenständige Website, unabhängig von der Software.