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 e6eb55bc4b
2225 changed files with 1070301 additions and 0 deletions
+52
View File
@@ -0,0 +1,52 @@
<div class="widthlimiter">
<form action='?action=useradd&amp;formsent=1&amp;id={$id}' rel="#overlay" enctype="multipart/form-data" method='post'>
<fieldset>
<legend>Benutzerinformationen</legend>
<label>Vorname:</label><input name='vname' id='vname' value='{$vname|escape}' required='required' title='Bitte geben Sie hier den Vornamen des Benutzers an' /><br />
<label>Nachname:</label><input name='nname' id='nname' value='{$nname|escape}' required='required' title='Bitte geben Sie hier den Nachamen des Benutzers an' /><br />
<label>E-Mail Adresse:</label><input name='mail' id='mail' value='{$mail|escape}' title='Bitte geben Sie hier die E-Mail Adresse des Benutzers an' /><br />
<label>Telefon privat:</label><input name='telpriv' id='telpriv' value='{$telpriv|escape}' title='Bitte geben Sie hier die private Telefonnummer des Benutzers an' /><br />
<label>Telefon mobil:</label><input name='telmob' id='telmob' value='{$telmob|escape}' title='Bitte geben Sie hier die Mobilfunknummer des Benutzers an' /><br />
<label>Wochenarbeitsstunden (Mo.-Fr.)</label><input name='weekhours' id='weekhours' value='{$weekhours|escape}' title='Bitte geben Sie hier die die regulären Wochenarbeitsstunden von Mo. bis Fr. an' /><br />
<label>Wochenarbeiststunden (Sa.):</label><input name='sahours' id='sahours' value='{$sahours|escape}' title='Bitte geben Sie hier die die regulären Wochenarbeitsstunden an Samstagen an (Falls z.B. jeden zweiten Sa., dann den Durchnitt)' /><br />
<label>Urlaubstage (Jährl.):</label><input name='vacationdays' id='vacationdays' value='{$vacationdays|escape}' title='Bitte geben Sie hier die die Jährlich verfügbaren Urlaubstage an.' /><br />
<label>Beginn der Zeiterfassung:</label><input type='date' name='timelog_start' id='timelog_start' value='{$timelog_start|escape}' title='Bitte geben Sie hier Den ersten Arbeitstag an.' /><br />
<label>RFID:</label><input name='rfid' id='rfid' value='{$rfid|escape}' title='Bitte geben Sie hier die ID des Transponders an.' /><br />
</fieldset>
<fieldset>
<legend>Anmeldeinformationen</legend>
<label>Benutzername:</label><input name='nick' id='nick' required='required' value='{$nick|escape}' title='Bitte geben Sie hier den gewünschten Benutzernamen ein, der später zur Anmeldung verwendet wird.' /><br />
<label>Unterschrift:</label><input type='file' name='sign' id='sign' title='Hier kann die Unterschrift des Benutzers eingelesen werden, wählen Sie dazu eine Bilddatei mit der Größe von 300x100 Pixeln aus.' /><br />
{if $update}
{if $smarty.session.rights != 777777}
<label>Altes Passwort:</label><input name='oldpw' id='oldpw' value='' type='password' title='Bitte geben Sie hier das alte Passwort des Benutzers ein.' /><br />
{/if}
<label>Neues Passwort:</label><input name='newpw' id='newpw' value='' type='password' onkeyup="chkPass(this.value);" title='Bitte geben Sie hier das neue Passwort ein, achten Sie auf die unten stehende Anzeige und wählen sie ein möglichst starkes Passwort' /><br />
<label>Neues Passwort (Wiederholung):</label><input name='newpw2' id='newpw2' value='' type='password' title='Bitte geben Sie hier das neue Passwort erneut ein, um Tippfehler zu vermeiden' /><br />
{else}
<label>Passwort:</label><input name='newpw' id='newpw' value='' required='required' type='password' onkeyup="chkPass(this.value);" title='Bitte geben Sie hier das gewünschte Passwort ein, achten Sie auf die unten stehende Anzeige und wählen sie ein möglichst starkes Passwort' /><br />
<label>Passwort Wiederholung:</label><input name='newpw2' id='newpw2' value='' required='required' type='password' title='Bitte geben Sie hier das gewünschte Passwort erneut ein, um Tippfehler zu vermeiden' /><br />
{/if}
<div id="pwdscore">
<div id="scorebar">0%</div><div id="complexity">zu kurz</div><br />
</fieldset>
<fieldset>
<legend>Rechte</legend>
<label>Kunden:</label>
{html_options name=rkunden options=$rechte selected=$rkunden required='required' class='preim' title='Bitte vergeben Sie die gewünschten Rechte'}<br />
<label>Termine:</label>
{html_options name=rtermine options=$rechte selected=$rtermine required='required' class='preim' title='Bitte vergeben Sie die gewünschten Rechte'}<br />
<label>Rechnungen,Angebote,etc.:</label>
{html_options name=rrechnungen options=$rechte selected=$rrechnungen required='required' class='preim' title='Bitte vergeben Sie die gewünschten Rechte'}<br />
<label>Zulieferer:</label>
{html_options name=rliefer options=$rechte selected=$rliefer required='required' class='preim' title='Bitte vergeben Sie die gewünschten Rechte'}<br />
<label>Super Admin:</label>
{html_options name=radmin options=$rechte selected=$radmin required='required' class='preim' title='Bitte vergeben Sie die gewünschten Rechte'}<br />
</fieldset>
{if $update}
<input type='submit' value='ändern' />
{else}
<input type='submit' value='anlegen' />
{/if}
</form>
</div>