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
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

@@ -0,0 +1,143 @@
.livespell_redwiggle {
background-image:url(wiggle.png);
background-repeat:repeat-x;
background-position:bottom;
cursor: default;
}
.livespell_greenwiggle {
background-image:url(gwiggle.png);
background-repeat:repeat-x;
background-position:bottom;
cursor: default;
}
.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;
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 {
text-align:left;
margin: 0;
padding: 0;
position: absolute;
z-index:2000;
overflow:visible;
}
#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;
-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 !important; /* Major browsers other than IE 6 and below respect the importance immediately */
padding: 2px;
padding-right: 11px;
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-top: 0;
border-bottom: 1px dotted #999;
margin: 3px 0px 3px 0px;
padding:0;
}
#livespell___contextmenu a {
padding: 2px;
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;
}
@@ -0,0 +1,397 @@
#LivespellDialogBody {
color: #333333;
font-family:Tahoma, Arial, Helvetica, sans-serif;
font-size:11px;
background-color: #E0DFE3;
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
#ajaxLoader{
background-image:url(ajax-loader.gif);
background-repeat:no-repeat;
width:50px;
height:20px;
}
#multiLangForm{
display:none;
}
#multiLangForm{
display:none;
}
#fldTextInput{
width:330px;
height:81px;
position:absolute;
top:20px;
left:5px;
font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:12px;
border-style:inset;
border-width:1px;
}
#TextShow{
cursor:text;
padding:2px;
width:330px;
height:81px;
position:absolute;
top:20px;
left:5px;
font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:12px;
z-index:2;
overflow:auto;
background-color:#FFFFFF;
border-style:inset;
border-width:1px;
}
#lMeaning{
display:none;
position:absolute;
top:112px;
left:252px;
}
#multiLangForm{
display:none;
position:absolute;
top:15px;
left:15px;
}
#fldLanguageMultiple{
width:438px;
font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:11px;
}
#lMeaning a{
color:#009;
}
#lMeaning a:active{
color:#009;
}
#fldSuggestions{
width:336px;
height:84px;
position:absolute;
top:127px;
left:5px;
font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:11px;
}
#fldLanguage{
width:211px;
position:absolute;
top:216px;
left:129px;
font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:11px;
}
#highlight{
font-weight:bold;
color:#FF0000;
}
#highlightGrammar{
font-weight:bold;
color:#008000;
}
#fldTextInputLab{
position:absolute;
top:5px;
left:6px;
z-index:1;
}
#SuggestionsLab{
position:absolute;
top:112px;
left:6px;
z-index:1;
}
#fldLanguageLab{
position:absolute;
top:218px;
left:7px;
z-index:1;
}
#CheckGrammarLab{
position:absolute;
top:234px;
left:4px;
z-index:1;
}
#optSentence{
margin-right:1px;
}
#btnIgnore{
position:absolute;
top:20px;
left:352px;
width:100px;;
font-family:Tahoma, Arial, Helvetica, sans-serif;
font-size:11px;
height:22px;
}
#btnUndoManualEdit{
position:absolute;
top:20px;
left:352px;
width:100px;;
font-family:Tahoma, Arial, Helvetica, sans-serif;
font-size:11px;
height:22px;
z-index:2;
display:none;
}
#btnIgnoreAll{
position:absolute;
top:54px;
left:352px;
width:100px;;
font-family:Tahoma, Arial, Helvetica, sans-serif;
font-size:11px;
height:22px;
}
#btnAddToDict{
position:absolute;
top:85px;
left:352px;
width:100px;;
font-family:Tahoma, Arial, Helvetica, sans-serif;
font-size:11px;
height:22px;
}
#btnChange{
position:absolute;
top:127px;
left:352px;
width:100px;;
font-family:Tahoma, Arial, Helvetica, sans-serif;
font-size:11px;
height:22px;
}
#btnChangeAll{
position:absolute;
top:159px;
left:352px;
width:100px;;
font-family:Tahoma, Arial, Helvetica, sans-serif;
font-size:11px;
height:22px;
}
#btnAutoCorrect{
position:absolute;
top:190px;
left:352px;
width:100px;;
font-family:Tahoma, Arial, Helvetica, sans-serif;
font-size:11px;
height:22px;
}
#btnCancel{
position:absolute;
top:256px;
left:352px;
width:100px;;
font-family:Tahoma, Arial, Helvetica, sans-serif;
font-size:11px;
height:22px;
}
#btnUndo{
position:absolute;
top:256px;
left:242px;
width:100px;;
font-family:Tahoma, Arial, Helvetica, sans-serif;
font-size:11px;
height:22px;
}
#awayMessage
{
display:none;
color: #999999;
position:absolute;
text-align: center;
top:40%;
left:0%;
width:100%;
font-family:Tahoma, Arial, Helvetica, sans-serif;
font-size:12px;
font-weight:bold;
}
#btnShowOptions{
position:absolute;
top:256px;
left:128px;
width:100px;;
font-family:Tahoma, Arial, Helvetica, sans-serif;
font-size:11px;
height:22px;
}
#MainForm{
display:block;
}
#doneForm{
display:none;
}
#optForm{
display:none;
}
#tOpt{
position:absolute;
top:15px;
left:12px;
z-index:1;
}
#tOla{
position:absolute;
top:170px;
left:12px;
z-index:1;
}
#btnOptionsOK{
position:absolute;
top:256px;
left:352px;
width:100px;;
font-family:Tahoma, Arial, Helvetica, sans-serif;
font-size:11px;
height:22px;
z-index:2;
}
#btnOptionsCancel{
position:absolute;
top:256px;
left:242px;
width:100px;;
font-family:Tahoma, Arial, Helvetica, sans-serif;
font-size:11px;
height:22px;
}
#btnLangOK{
position:absolute;
top:241px;
left:337px;
width:100px;;
font-family:Tahoma, Arial, Helvetica, sans-serif;
font-size:11px;
height:22px;
z-index:2;
}
#btnLangCancel{
position:absolute;
top:241px;
left:226px;
width:100px;;
font-family:Tahoma, Arial, Helvetica, sans-serif;
font-size:11px;
height:22px;
}
#btnResetDict{
font-family:Tahoma, Arial, Helvetica, sans-serif;
font-size:11px;
height:22px;
width:80px;
}
#btnResetAutoCorrect{
font-family:Tahoma, Arial, Helvetica, sans-serif;
font-size:11px;
height:22px;
width:80px;
}
#btnResetDictLab{
position:absolute;
top:115px;
left:100px;
z-index:1;
}
#btnResetAutoCorrectLab{
position:absolute;
top:140px;
left:100px;
z-index:1;
}
#optCaseSensitiveLab{
position:absolute;
top:15px;
left:95px;
z-index:1;
}
#optAllCapsLab{
position:absolute;
top:35px;
left:95px;
z-index:1;
}
#optNumericLab{
position:absolute;
top:55px;
left:95px;
z-index:1;
}
#optSentenceLab{
position:absolute;
top:75px;
left:95px;
z-index:1;
}
#optLanguages{
width:211px;
height:82px;
position:absolute;
top:170px;
left:95px;
font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:11px;
}
#tSum{
position:absolute;
top:15px;
left:15px;
}
#sdivider{
width:100%;
position:absolute;
top:35px;
}
#tWrd{
position:absolute;
top:75px;
left:15px;
}
#tDoc{
position:absolute;
top:55px;
left:15px;
}
#tEdi{
position:absolute;
top:95px;
left:15px;
}
#btnAllDone{
position:absolute;
top:256px;
left:352px;
width:100px;;
font-family:Tahoma, Arial, Helvetica, sans-serif;
font-size:11px;
height:22px;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 124 B

@@ -0,0 +1,41 @@
#livespell___contextmenu ul {
font-family:"Tahoma MS","Tahoma", Arial, sans-serif;
color:#333;
font-size:8px;
background-color: #eee;
}
#livespell___contextmenu a {
font-family:"Tahoma MS","Tahoma", Arial, sans-serif;
font-size:11px;
}
#livespell___contextmenu ul select {
background-color: #e8e8e8;
}
#context__back{
background-color:#8e8e8e;
}
#context__front{
position:relative;
background-color:#e8e8e8;
top :-2px;
left:-2px;
}
#livespell___contextmenu select {
height:18px;
}
#livespell___contextmenu hr {
border-bottom: 1px solid #666;
}
#livespell___contextmenu a:hover {
background-color:#3258f6;
}
#livespell___contextmenu select {
font-family:"Tahoma MS","Tahoma", Arial, sans-serif;
font-size:11px;
border:none;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB