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
+140
View File
@@ -0,0 +1,140 @@
<?php
require_once("incs/saveNchange.php");
$_SESSION["camefrom"] = "settings";
if($_GET["do"] == "zahlziel" && $_GET["add"] == 1)
{
if($_GET["formsent"] == 1)
{
$days = mysqli_escape_string($dbconn,$_POST["days"]);
$skontodays = mysqli_escape_string($dbconn,$_POST["skontodays"]);
$skonto = mysqli_escape_string($dbconn,$_POST["skonto"]);
if($days < 2)
$days = 0;
if($skontodays < 2)
$skontodays = 0;
if($skontodays > $days)
$err = error("Der Zeitraum für die Bezahlung mit skonto muss kürzer sein, als der Zeitraum für die reguläre Zahlung ohne Abzüge.");
if($skonto > 95)
$skonto = 95;
if(!$err)
{
if($days > 0)
$zahlziel = $days." Tage ohne Abzug";
else
$zahlziel = "sofort ohne Abzug";
if($skonto && $skontodays)
$zahlziel .= ", Skonto ".$skontodays." Tage ".$skonto."%";
elseif($skonto)
$zahlziel .= ", Skonto sofort ".$skonto."%";
$querystr="INSERT INTO zahlziel SET ziel = '$zahlziel'";
$qry = mysqli_query($dbconn,$querystr) or $err=error("Fehler beim Speichern des Zahlungsziels<br />".mysqli_error($dbconn));
$undoid=mysqli_insert_id($dbconn);
$undoquerystr="DELETE FROM zahlziel WHERE id = '$undoid'";
if(!$err)
{
$err = saveLog($dbconn,$querystr."[zahlziel neu]",$undoquerystr,"anlegen");
}
if(!$err)
doneNreturn("Erfolgreich angelegt");
}
}
$smarty->assign("days",$days);
$smarty->assign("skontodays",$skontodays);
$smarty->assign("skonto",$skonto);
$smarty->display("addzahlziel.tpl");
}
elseif($_GET["do"] == "buchKto" && $_GET["add"] == 1)
{
if($_GET["formsent"] == 1)
{
$kto = mysqli_escape_string($dbconn,$_POST["kto"]);
$name = mysqli_escape_string($dbconn,$_POST["name"]);
$descr = mysqli_escape_string($dbconn,$_POST["descr"]);
$querystr="INSERT INTO buchungsKontos SET kto = '$kto', name = '$name', descr='$descr'";
$qry = mysqli_query($dbconn,$querystr) or $err=error("Fehler beim Speichern des Buchungskontos<br />".mysqli_error($dbconn));
$undoid=mysqli_insert_id($dbconn);
$undoquerystr="DELETE FROM buchungsKontos WHERE id = '$undoid'";
if(!$err)
{
$err = saveLog($dbconn,$querystr."[Buchungskonto neu]",$undoquerystr,"anlegen");
}
if(!$err)
doneNreturn("Erfolgreich angelegt");
}
$smarty->assign("kto",$kto);
$smarty->assign("name",$name);
$smarty->assign("descr",$descr);
$smarty->display("addbuchKto.tpl");
}
else
{
if($_GET["formsent"] == 1)
{
if(is_file("./styles/".$_POST["style"]))
{
updateUserSetting($dbconn,"style", mysqli_real_escape_string($dbconn,$_POST["style"]), mysqli_real_escape_string($dbconn,$_SESSION["user"]));
$_SESSION["style"] = $_POST["style"];
}
updateUserSetting($dbconn,"show_sks", mysqi_real_escape_string($dbconn,$_POST["show_sks"]), mysqli_real_escape_string($dbconn,$_SESSION["user"]));
}
if(substr($_SESSION["rights"],RIGHTS_SUPERADMIN,1) & RIGHTS_CHANGE || substr($_SESSION["rights"],RIGHTS_SUPERADMIN,1) & RIGHTS_ADD)
$smarty->assign("superadmin","add");
elseif(substr($_SESSION["rights"],RIGHTS_SUPERADMIN,1) & RIGHTS_CHANGE)
$smarty->assign("superadmin","change");
elseif(substr($_SESSION["rights"],RIGHTS_SUPERADMIN,1) & RIGHTS_LOOK)
$smarty->assign("superadmin","look");
else
$smarty->assign("superadmin","");
$smarty->assign("heading","Einstellungen");
$smarty->display("heading.tpl");
//user list
$qry = mysqli_query($dbconn, "SELECT nick, vname, nname, blocked, rights, id, weekhours, vacationdays, sahours, rfid, timelog_start FROM user WHERE nick != 'ALL'");
while($res = mysqli_fetch_assoc($qry))
{
$res["rights"] = displayRights($res["rights"]);
$smarty->append("users",$res);
}
//style list
$styledir = opendir("./styles/");
$styles = Array();
while($res = readdir($styledir))
{
if(preg_match("!^.*\.css$!",$res) && $res != "pwdmeter.css")
{
$styles[$res] = substr($res,0,-4);
}
}
//buchKto list
$qry = mysqli_query($dbconn, "SELECT id, kto, name, descr FROM buchungsKontos");
while($res = mysqli_fetch_assoc($qry))
{
$smarty->append("buchKto",$res);
}
//zahlziel list
$qry = mysqli_query($dbconn, "SELECT ziel, id FROM zahlziel");
while($res = mysqli_fetch_assoc($qry))
{
$smarty->append("zahlziele",$res);
}
$show_sks = getUserSetting($dbconn,"show_sks", mysqli_real_escape_string($dbconn,$_SESSION["user"]), 1);
$smarty->assign("show_sks",$show_sks);
$smarty->assign("styles",$styles);
$smarty->display("settings.tpl");
}
?>