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
+131
View File
@@ -0,0 +1,131 @@
{if $smarty.session.login == "valid"}
<h2>Diese Einstellungen gelten nur für Ihren Benutzer.</h2>
<br />
<div class='widthlimiter'>
<form method='POST' id='mainform' action='?action=settings&amp;formsent=1'>
<div id="tabs">
{* ANZEIGE PANE *}
<ul>
<li><a href="#tabs-1" class='noloading'>Design</a></li>
<li><a href="#tabs-2" class='noloading'>Kunden</a></li>
<li><a href="#tabs-3" class='noloading'>Termine</a></li>
<li><a href="#tabs-4" class='noloading'>Dokumente</a></li>
<li><a href="#tabs-5" class='noloading'>Suche</a></li>
{if $superadmin}
<li><a href="#tabs-6" class='noloading'>Benutzer</a></li>
{/if}
</ul>
<div id="tabs-1">
<label>Design</label>
{html_options name=style options=$styles selected=$smarty.session.style class='preim' title='Bitte wählen Sie hier das gewünschte Programmdesign aus.'}
<br />
</div>
{* KUNDEN PANE *}
<div id="tabs-2">
</div>
{* TERMINE PANE *}
<div id="tabs-3">
</div>
{* DOKUMENTE PANE *}
<div id="tabs-4">
<fieldset>
<legend>Buchungskonten:</legend>
<a href="?action=settings&do=buchKto&add=1"><span class="add" title="Neues Buchungskonto anlegen"></span></a>
<table>
<tr><th>Konto:</th><th>Name:</th><th>Beschreibung:</th></tr>
{section name=rows loop=$buchKto}
<tr style='background-color: #{cycle values="f0f0f0,e2e2e2"}'>
<td>{$buchKto[rows].kto}</td>
<td>{$buchKto[rows].name}</td>
<td>{$buchKto[rows].descr}</td>
</tr>
{/section}
</table>
</fieldset>
<fieldset>
<legend>Zahlungsziele:</legend>
<a href="?action=settings&do=zahlziel&add=1"><span class="add" title="Neues Zahlungsziel anlegen"></span></a>
<table>
<tr><th>Zahlungsziel</th></tr>
{section name=rows loop=$zahlziele}
<tr style='background-color: #{cycle values="f0f0f0,e2e2e2"}'>
<td>{$zahlziele[rows].ziel}</td>
</tr>
{/section}
</table>
</fieldset>
{if $show_sks}
<label>SKS Artikel bei Kundendetails auflisten</label><input type='checkbox' id='show_sks' name='show_sks' value='1' checked='checked'></input>
{else}
<label>SKS Artikel bei Kundendetails auflisten</label><input type='checkbox' id='show_sks' name='show_sks' value='1'></input>
{/if}
<br />
</div>
{* SUCHE PANE *}
<div id="tabs-5">
</div>
{if $superadmin}
{* USER PANE *}
<div id="tabs-6">
<h3>Benutzer</h3>
<table class='userlist' cellpadding='0' cellspacing='0'>
<tr><th>Benutzer:</th><th colspan = '2'>Wochenstd.: &nbsp;&nbsp;</th><th>Urlaubstage: </th><th>RFID: </th><th>Zeiterfassung ab: </th><th>Rechte:</th><th></th></tr>
<tr><th></th><th>Mo-Fr</th><th>Sa</th><th></th><th></th><th></th><th></th></tr>
{if $superadmin == "add" || $superadmin == "change"}
{foreach $users as $user}
{if $user.blocked}
<tr class='blocked'><td>{$user.nick} ({$user.vname} {$user.nname})</td><td>{$user.weekhours|string_format:"%.1f"}</td><td>{$user.sahours|string_format:"%.1f"}</td><td>{$user.vacationdays|string_format:"%.1f"}</td><td>{$user.rfid}</td><td>{$user.timelog_start}</td><td>{$user.rights}</td><td><a href="?action=useradd&amp;id={$user.id}"><span class="edit" title="Benutzerdaten ändern"></span></a><a href="?action=useradd&amp;id={$user.id}&amp;block=tgl"><span class="deblock" title="Benutzer freigeben"></span></a></td></tr>
{else}
<tr><td>{$user.nick} ({$user.vname} {$user.nname})</td>
<td>{$user.weekhours|string_format:"%.1f"}</td>
<td>{$user.sahours|string_format:"%.1f"}</td>
<td>{$user.vacationdays|string_format:"%.1f"}</td>
<td>{$user.rfid}</td><td>{$user.timelog_start}</td>
<td>{$user.rights}</td>
<td><a href="?action=useradd&amp;id={$user.id}"><span class="edit" title="Benutzerdaten ändern"></span></a>
<a href="?action=useradd&amp;id={$user.id}&amp;block=tgl"><span class="block" title="Benutzer blockieren"></span></a>
<a href="?action=userkeys&amp;id={$user.id}"><span class="key" title="Passkeys verwalten"></span></a>
</td></tr>
{/if}
{/strip}
{/foreach}
{else}
{foreach $users as $user}
{strip}
{if $user.blocked}
<tr class='blocked'><td>{$user.nick} ({$user.vname} {$user.nname})</td><td>{$user.rights}</td><td></td></tr>
{else}
<tr><td>{$user.nick} ({$user.vname} {$user.nname})</td><td>{$user.rights}</td><td></td></tr>
{/if}
{/foreach}
{/if}
</table>
{if $superadmin == "add"}
<br />
<button type="button" onClick="window.location='?action=useradd';">Neuen Benutzer anlegen</button>
<br />
{/if}
</div>
{/if}
</div>
<input type="submit">
</form>
</div>
<script>
$(function() {
$( "#tabs" ).tabs();
});
</script>
<br />
{/if}