Initialer Commit: Kundenverwaltung (PHP/Smarty)

Bestehende Codebasis als Ausgangsstand aufgenommen.

- .gitignore: Kundendaten (uploads_*), Smarty-Compile-Cache
  (templates_c), Laufzeit-Temp und Datenbank-Dumps ausgeschlossen;
  Verzeichnisstruktur ueber .gitkeep erhalten
- .gitattributes: Zeilenenden normalisiert (LF im Repo),
  Binaerformate markiert
- db-backup.php: MySQL-Zugangsdaten kommen jetzt wie im Rest der
  Anwendung aus der externen Konfiguration statt hartkodiert aus der
  Datei; Passwort wird ueber eine temporaere Optionsdatei statt per
  Kommandozeile uebergeben, Fehler von mysqldump/gzip werden gemeldet,
  Aufraeumen aelterer Backups berechnet Jahr und Monat konsistent

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-28 16:41:18 +02:00
co-authored by Claude Opus 5
commit e2124220e5
2225 changed files with 1070301 additions and 0 deletions
@@ -0,0 +1,53 @@
NEOWAVE Winkeo FIDO2
--------------------
-----BEGIN CERTIFICATE-----
MIIDITCCAsegAwIBAgIUab0SAiC2Y7saeUC1s8ibcECXZ/4wCgYIKoZIzj0EAwIw
OjELMAkGA1UEBhMCQ0gxEDAOBgNVBAoMB1dJU2VLZXkxGTAXBgNVBAMMEFNlYWxT
USBJT1QgSUNBIDEwHhcNMjQxMDIxMTMzOTE0WhcNMzQxMDE5MTMzOTEzWjCByjEL
MAkGA1UEBhMCRlIxDTALBgNVBAgMBFBBQ0ExETAPBgNVBAcMCEdhcmRhbm5lMRAw
DgYDVQQKDAdORU9XQVZFMSIwIAYDVQQLDBlBdXRoZW50aWNhdG9yIEF0dGVzdGF0
aW9uMUAwPgYDVQQDDDdORU9XQVZFIEJhZGdlbyBGSURPMiAtIEZJRE8gVTJGIEF0
dGVzdGF0aW9uIENlcnRpZmljYXRlMSEwHwYJKoZIhvcNAQkBFhJjb250YWN0QG5l
b3dhdmUuZnIwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARPS6HZybQh3IrrZDQE
BZhtgd1oPI6rkg32Dtxn1Y8SfbXJlam1kanCXtscZofjYKiKTqJL+GYpirX4jmdX
ucAvo4IBGDCCARQwCQYDVR0TBAIwADAfBgNVHSMEGDAWgBSoMaOK9llZyMLkswZ8
OXx18xzF7DBLBggrBgEFBQcBAQQ/MD0wOwYIKwYBBQUHMAKGL2h0dHA6Ly9wdWJs
aWMud2lzZWtleS5jb20vY3J0L3NlYWxzcWlvdGljYTEuY2VyMBMGA1UdJQQMMAoG
CCsGAQUFBwMCMEAGA1UdHwQ5MDcwNaAzoDGGL2h0dHA6Ly9wdWJsaWMud2lzZWtl
eS5jb20vY3JsL3NlYWxzcWlvdGljYTEuY3JsMB0GA1UdDgQWBBTYAxkRrgkjZPYO
8h4yimpFrR2NCTAOBgNVHQ8BAf8EBAMCB4AwEwYLKwYBBAGC5RwCAQEEBAMCAAMw
CgYIKoZIzj0EAwIDSAAwRQIgT/9mM7ILaVMBrIrHhohMEW6dD71L07TgPCHLLht8
ue8CIQDBypDYC5l3WCjSaQQu5aIFk7fB3Ertg3xEnE5uVZS6GA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIB3jCCAYWgAwIBAgIUKyUDGrhRQbU3rmll+re1tYbRs94wCgYIKoZIzj0EAwIw
PDELMAkGA1UEBhMCQ0gxEDAOBgNVBAoMB1dJU2VLZXkxGzAZBgNVBAMMElNlYWxT
USBJT1QgUk9PVCBHQTAgFw0yNDA4MDkxMTA0MTRaGA8yMDY0MDczMDExMDQxM1ow
PDELMAkGA1UEBhMCQ0gxEDAOBgNVBAoMB1dJU2VLZXkxGzAZBgNVBAMMElNlYWxT
USBJT1QgUk9PVCBHQTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFyY6ONDluhn
j383MRw5JfwgMkJrnW0+ItlOTh42nDLtfZkrzRDFh9KFDaOF+21Z2m9KSNqr1MKk
qjOiRz2s4NijYzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUxTsfTKe5
JtH9tIUpP3R1ydOWzIkwHQYDVR0OBBYEFMU7H0ynuSbR/bSFKT90dcnTlsyJMA4G
A1UdDwEB/wQEAwIBhjAKBggqhkjOPQQDAgNHADBEAiBRJDH40iy8a7LNgZfLUduw
8bLDzkT9i0oIvVjeVeLkUgIgW5r3B84x6t8coLCJLoFLipZ75n+N+3m99zFLdRlv
IdM=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICdDCCAhmgAwIBAgIURpQLWQrmGDSMGg/o7x7x/7oUiZUwCgYIKoZIzj0EAwIw
PDELMAkGA1UEBhMCQ0gxEDAOBgNVBAoMB1dJU2VLZXkxGzAZBgNVBAMMElNlYWxT
USBJT1QgUk9PVCBHQTAeFw0yNDA4MDkxMTEwMTdaFw00OTA4MDMxMTEwMTZaMDox
CzAJBgNVBAYTAkNIMRAwDgYDVQQKDAdXSVNlS2V5MRkwFwYDVQQDDBBTZWFsU1Eg
SU9UIElDQSAxMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEB34bE9yPfQRcEoI0
YFB8ec0CSE0ujmGeCRFddBBBUJJ+63ZruVuorwPcopd1NVQZHfTVh3dV4Jp7V7mS
rH6hvqOB+jCB9zASBgNVHRMBAf8ECDAGAQH/AgEAMB8GA1UdIwQYMBaAFMU7H0yn
uSbR/bSFKT90dcnTlsyJME0GCCsGAQUFBwEBBEEwPzA9BggrBgEFBQcwAoYxaHR0
cDovL3B1YmxpYy53aXNla2V5LmNvbS9jcnQvc2VhbHNxaW90cm9vdGdhLmNlcjBC
BgNVHR8EOzA5MDegNaAzhjFodHRwOi8vcHVibGljLndpc2VrZXkuY29tL2NybC9z
ZWFsc3Fpb3Ryb290Z2EuY3JsMB0GA1UdDgQWBBSoMaOK9llZyMLkswZ8OXx18xzF
7DAOBgNVHQ8BAf8EBAMCAYYwCgYIKoZIzj0EAwIDSQAwRgIhALsB6zBbUVXuyj0n
2DMwHd8Fx1mzP0pR3n9SHxP2afS8AiEAzzawbyzY/oi8h1B14n9hqB3nzBeTnk6j
H5TxY6eSSik=
-----END CERTIFICATE-----