Erweitere VoTiAn NG um Fachfunktionen und verbessere die Listenoberfläche

Ergänze Auftragsbearbeitung, Disposition, Stammdaten, Kunden- und
Transporteurportale, Lagerverwaltung, Abrechnung, Exporte und Statistik.
Füge Kontoeinstellungen, Mitteilungen, Automatikdienste und Betriebsstatus
sowie die zugehörigen Tests und PHP-Abgleichsdokumentation hinzu.

Vergrößere die persönlichen Auftragslisten auf einheitliche Höhen und
richte Statusanzeigen sowie die Ranking-Vorschau-Steuerelemente bündig aus.

Validierung: 44 Frontendtests und Produktionsbuild erfolgreich.
Backend funktional unverändert gegenüber dem vollständigen Lauf mit 1.624
erfolgreichen und drei übersprungenen Tests. Layout im Browser und lokale
Bereitstellung geprüft.
This commit is contained in:
Sven committed 2026-10-20 11:19:43 +02:00
1 parent 363bc27c26
commit 781a2b82dc
1165 files changed
+74986 -1028

No files matched your search

+14
View File
@@ -0,0 +1,14 @@
import {test} from 'node:test';import assert from 'node:assert/strict';import {contactLinks} from '../src/contactLinks.mjs';
test('mail aliases produce one safe link per recipient and keep invalid old text visible',()=>{
assert.deepEqual(contactLinks('email_private','a+tag@example.test, b@example.org'),[{label:'a+tag@example.test',href:'mailto:a%2Btag%40example.test'},{label:'b@example.org',href:'mailto:b%40example.org'}]);
assert.deepEqual(contactLinks('mail_business','Altwert'),[{label:'Altwert',href:null}]);
assert.equal(contactLinks('email','a@example.test\r\nBcc:x@example.org')[0].href,null);
});
test('website fields open only absolute HTTP URLs without user information',()=>{
assert.equal(contactLinks('url_business','https://example.test/path?q=x')[0].href,'https://example.test/path?q=x');
for(const value of ['javascript:alert(1)','data:text/html,test','https://user:secret@example.test','https://example.test\r\n/','www.example.test'])assert.equal(contactLinks('url_business',value)[0].href,null);
});
test('phone aliases preserve dialable legacy separators without changing exponent-like numbers',()=>{
assert.equal(contactLinks('fax','+49 (30) 123/45')[0].href,'tel:+493012345');
for(const value of ['1e3','Infinity','0x20','kein Telefon'])assert.equal(contactLinks('phone_business',value)[0].href,null);
});