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
@@ -0,0 +1,136 @@
.livespell_redwiggle {
background-color:#FF0;
cursor:pointer;
}
.livespell_greenwiggle {
background-color:#0F0;
cursor:pointer;
}
.livespell_textarea {
border:1px solid #999;
background-color:#FFF;
width:173px;
height:100px;
font-size:13px;
padding:3px;
margin:0px;
overflow:auto;
font-family: monospace;
display:inline-block;
line-height:13.5px;
overflow:auto;
white-space: pre-wrap;
overflow-y: auto;
overflow-x: auto;
word-wrap:break-word;
display:inline-block;
zoom:1; *display: inline; _height: 30px;
clear:both;
}
.livespell_textarea p
{
margin-top:0;
margin-bottom:0;
}
#livespell___contextmenu {
margin: 0;
padding: 0;
position: absolute;
z-index:2000;
overflow:visible;
text-align:left;
}
#livespell___contextmenu ul {
width:155px;
-moz-border-radius-topleft:6px;
-moz-border-radius-topright:6px;
-moz-border-radius-bottomleft:6px;
-moz-border-radius-bottomright:6px;
-moz-border-radius-bottomright: 6px;
-webkit-border-bottom-right-radius: 6px;
-webkit-border-top-right-radius: 6px;
-webkit-border-bottom-left-radius: 6px;
-webkit-border-top-left-radius: 6px;
-moz-box-shadow:0px 5px 20px #ccc;
cursor:default;
border:1px solid #999;
margin: 0;
padding: 5px;
padding-right: 10px;
padding-bottom: 7px;
list-style-type: none;
font-size:smaller;
background-color:#fff;
color:#111;
font-family:"Lucida Grande","Tahoma", Arial, sans-serif;
}
#livespell___contextmenu hr {
border: 0;
margin: 0;
border-bottom: 1px solid #999;
margin: 3px 0px 3px 0px;
padding:0;
}
#livespell___contextmenu a {
padding-left: 5px;
padding-right: 5px;
cursor:default;
display:block;
width:100%;
color:#000;
text-decoration:none;
padding-left:1px;
font-size:13px;
}
#livespell___contextmenu a:hover {
background-color:#3d60f5;
color:#FFF;
}
#livespell___contextmenu select {
border:none;
color:#333;
font-size:12px;
width:98%;
}
#livespell___contextmenu input {
border:none;
color:#333;
font-size:smaller;
}
#livespell___contextmenu label {
font-size:smaller;
margin:0;
padding:0;
height:15px;
border-collapse:collapse;
border:none;
color:#333;
background-color:#fff;
}
#livespell_contextmenu_multilang_container_noscroll {
width:140px;
border: 1px dotted #ccc;
margin-top:5px;
}
.livespell_contextmenu_multilang_container_scroll {
width:140px;
overflow:auto;
height:115px;
border: 1px dotted #ccc;
margin-top:5px;
}
.livespell_invisible {
filter:alpha(opacity=0);
-moz-opacity:0;
-khtml-opacity: 0;
opacity: 0;
}