T ToutadminDocumentatie

Twee edities, één product

Toutadmin bestaat in twee exemplaren: het ene draait op Node.js, het andere op PHP. Het zijn geen twee producten, en evenmin een uitgeklede en een volledige versie. Het zijn dezelfde 51 ruimtes, hetzelfde schema van 142 tabellen, dezelfde 16 talen, dezelfde schermen. Deze pagina zegt wat hen werkelijk scheidt — en dat is weinig.

Waarom twee#

Een bedrijfsproduct moet te installeren zijn waar het bedrijf al zit. Sommige hebben een server, een systemd en een beheerder; andere hebben gedeelde hosting voor vier euro per maand en een FTP-account. De Node-editie richt zich op de eerste, de PHP-editie op de tweede. De tweede afwijzen zou betekenen dat je de helft van de bedrijven afwijst die een beheertool het hardst nodig hebben.

Wat strikt identiek is#

OnderdeelNodePHP
Werkruimtes5151
Tabellen in de database142142
Kolommen13111311
Interfacetalen1616
Vertaalsleutels27652792
Optionele modules77
Webhook-gebeurtenissen88
API-bronnen99

Omdat het schema hetzelfde is, gaat een database zonder conversie van de ene editie naar de andere: stop de ene, kopieer app.sqlite en de bestandsmappen, start de andere. De wachtwoorden blijven werken — beide edities lezen hetzelfde hashformaat. Dat is de eerlijkste paritietstest die er is, en hij slaagt.

Wat verschilt#

De vorm van een paar adressen#

531 routes aan de Node-kant, 513 aan de PHP-kant. Het verschil is geen tekort: het zijn dezelfde functies, compacter geschreven.

  • De API. Node declareert zijn negen bronnen stuk voor stuk (/api/v1/collaborateurs, /api/v1/services…); PHP bedient ze onder één route met parameter. Alle negen antwoorden, de wortel kondigt alle negen aan, en een test roept ze één voor één aan om het te bewijzen.
  • De installatie. Node leidt je door vijf stappen, PHP past op één pagina en één verzending. Er wordt om dezelfde vijf gegevens gevraagd: taal, vereisten, onderneming, jaarlijkse verlofdagen, beheerdersaccount.
  • De overkoepelende rechten. Node heeft één route per recht, PHP één route met parameter /admin/droits/{flag}.

Deze achtentwintig vormverschillen worden niet uit het hoofd beweerd: het bestand tests/test_parity.php oefent ze allemaal, één voor één.

De periodieke ronde#

Node draagt zijn eigen planner: de server draait permanent en wekt zichzelf. PHP leeft alleen tijdens een aanvraag: dezelfde acht bewerkingen lopen via tools/cron.php, aangeroepen door de cron van de hoster. Dezelfde bedrijfslogica, hetzelfde effect, een andere aanleiding.

De datums#

Node schrijft zijn datums met Intl, ingebouwd in V8. PHP doet hetzelfde zodra de uitbreiding intl aanwezig is — dezelfde ICU-motor, tot op het teken dezelfde uitkomst. Ontbreekt ze, dan komen dag- en maandnamen uit de vertaalwoordenboeken: de datum blijft juist en vertaald, maar de volgorde van de onderdelen kan in een paar talen afwijken.

Wat niet verschilt, terwijl je dat wel zou denken#

OnderwerpIn beide edities
QR-codes (tweefactor)Aan de PHP-kant met de hand geschreven codeerder, byte voor byte getoetst aan de bibliotheek die aan de Node-kant wordt gebruikt, over zestien tekstlengtes.
Back-uparchievenAan beide kanten zonder enige afhankelijkheid geschreven tar.gz, dezelfde inhoud, dezelfde SHA-256-waarden.
IMAP-boekhoudpostvakAan beide kanten een IMAP-cliënt die in het product zelf staat.
PDF, CSV, importIn het product geschreven, dezelfde bestanden eruit.
AuditlogboekIdentieke ketening van hashes: één gewijzigde regel breekt de ketting, aan beide kanten.
HTTP-beveiligingsbeleidDezelfde headers, dezelfde CSP met nonce, dezelfde afwezigheid van onmisbare JavaScript.

Welke kiezen#

Uw situatieDe editie
Gedeelde hosting, FTP-toegang, geen opdrachtregelPHP — precies het beoogde geval
Een eigen server, systemd, een beheerderNode
U kunt er al één beherenDie. De pariteit maakt de keuze omkeerbaar.
Veel mensen tegelijkNode — één blijvend proces, de database al open
U twijfeltPHP — minder onderdelen om te onderhouden, en overstappen naar Node blijft bestanden kopiëren

Hoe de pariteit wordt vastgehouden#

Het is geen voornemen, het is een controle. Bij elke wijziging lopen vier vergelijkingen:

  1. De routes — aan beide kanten uitgelezen en vergeleken; elk verschil moet een gedocumenteerd verschil zijn.
  2. De functies — de namen die elke module naar buiten brengt, module voor module vergeleken.
  3. Het schema — tabellen en kolommen uit beide databases gelezen en vergeleken.
  4. De schermen — beide edities naast elkaar gestart en door een echte browser doorlopen, pagina voor pagina, met vergelijking van antwoordcode en structuur.

Deze vier rondes hebben echte gebreken gevonden — waaronder twee die beide edities troffen. Dat is wat ze nuttig maakt: een pariteit die je niet meet, is een pariteit die je ongemerkt kwijt bent.

Daarbij komen de testsuites: 802 gevallen aan de Node-kant, 572 aan de PHP-kant, samen 1374.

Toutadmin-documentatie — gebouwd op 2026-09-13. Zelfstandige site, onafhankelijk van de software.