Kalender, Terminliste, Terminformular und Terminzettel laufen ueber db_abfrage() mit Platzhaltern; das Anlegen einer mehrtaegigen Terminreihe liegt in einer Transaktion. Die Logik steckt jetzt in incs/termin.php, sites/termin*.php rufen sie nur noch auf. Dabei behoben: - SQL-Injektion ueber die Suchbegriffe der Terminliste, ueber die Mehrfachauswahl (Ankreuzfelder del<N>/erl<N> gingen roh in DELETE bzw. UPDATE), ueber die Wiedervorlage-Tage (INTERVAL $folgedays DAY) und ueber ?action=terminshow&id=... in maketerminarray(), maketerminadresse(), maketelnrn() und makegooglestring() - gespeichertes XSS: Beschreibung, Notiz, Termintyp, Ort, Kundenname und Mitarbeiterfarbe im Kalender, in der Terminliste und im Formular - "or $err=error(...)" stand innerhalb des Abfrage-Strings, dadurch wurden die Nebenzeilen einer Terminreihe beim Loeschen nie entfernt - die Abfrage zum Folgetermin las eine Spalte typ_id, die es in termin nicht gibt; Typ und Wiedervorlage fehlten deshalb beim Bearbeiten - ein Folgetermin wurde mit termtime='' und termdauer='' angelegt, ein Termin ohne Folgetermin mit followed_by='' - im strikten Modus Fehler - ein Termin ohne Datum landete auf dem 01.01.1970 und gab dabei "NICHTTERMINIERT!!" mitten in die Seite aus - die Ueberschneidungspruefung verglich ab dem zweiten Tag gegen das Ende des ersten Tages - eine unbekannte Registerkarte der Terminliste ergab ein leeres WHERE und damit einen SQL-Fehler; jetzt gilt die Standardansicht - terminshow.php pruefte den Typ mit = statt == - der Kalender haengt nicht mehr an der Locale de_DE (strftime) Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
92 lines
2.2 KiB
PHP
92 lines
2.2 KiB
PHP
<?php
|
|
require_once "incs/termin.php";
|
|
|
|
/*
|
|
* Termin anlegen, ändern, löschen oder als erledigt markieren.
|
|
*
|
|
* Die Terminliste kann mehrere Termine auf einmal abhaken oder löschen;
|
|
* dafür kommt id=multi und je Zeile ein Ankreuzfeld erl<N> bzw. del<N>.
|
|
*/
|
|
|
|
/* Die angekreuzten Termine einer Mehrfachauswahl */
|
|
function angekreuzteTermine($praefix)
|
|
{
|
|
$ids = array();
|
|
$anzahl = isset($_POST["pagesize"]) ? (int)$_POST["pagesize"] : 0;
|
|
for($i = 1; $i <= $anzahl; $i++)
|
|
if(!empty($_POST[$praefix.$i]))
|
|
$ids[] = (int)$_POST[$praefix.$i];
|
|
return $ids;
|
|
}
|
|
|
|
$mehrfach = isset($_GET["id"]) && $_GET["id"] === "multi";
|
|
$terminid = parameterGanzzahl("id");
|
|
$adressid = parameterGanzzahl("adressid");
|
|
$err = 0;
|
|
|
|
if(($mehrfach || $terminid) && parameterGanzzahl("del") == 1)
|
|
{
|
|
foreach($mehrfach ? angekreuzteTermine("del") : array($terminid) as $id)
|
|
if(!$err)
|
|
$err = loescheTerminreihe($dbconn, $id);
|
|
if(!$err)
|
|
{
|
|
doneNreturn("Erfolgreich gelöscht");
|
|
return;
|
|
}
|
|
}
|
|
elseif(($mehrfach || $terminid) && !empty($_GET["done"]))
|
|
{
|
|
$erledigt = $_GET["done"] != "no";
|
|
foreach($mehrfach ? angekreuzteTermine("erl") : array($terminid) as $id)
|
|
if(!$err)
|
|
$err = setzeTerminErledigt($dbconn, $id, $erledigt);
|
|
if(!$err)
|
|
{
|
|
doneNreturn("Erfolgreich geändert!");
|
|
return;
|
|
}
|
|
}
|
|
|
|
$kunde = terminAdresse($dbconn, $adressid);
|
|
if(empty($kunde["partner_id"]))
|
|
$adressid = 0;
|
|
|
|
if(!$err && parameterGanzzahl("formsent") == 1)
|
|
{
|
|
$err = speichereTermin($dbconn, $terminid, $adressid);
|
|
if(!$err)
|
|
{
|
|
doneNreturn("Erfolgreich eingetragen");
|
|
return;
|
|
}
|
|
// bei einem Fehler die Eingaben im Formular stehen lassen
|
|
$smarty->assign("termin", $_POST);
|
|
}
|
|
|
|
terminAuswahllisten($dbconn, $smarty);
|
|
$smarty->assign("kunde", $kunde);
|
|
$smarty->assign("user", parameterGanzzahl("user"));
|
|
|
|
if($terminid && !$err)
|
|
{
|
|
$termin = terminZumBearbeiten($dbconn, $terminid);
|
|
if(!$termin)
|
|
$err = error("Dieser Termin existiert nicht!");
|
|
else
|
|
{
|
|
$smarty->assign("termin", $termin);
|
|
$smarty->assign("heading", $adressid ? "Termin ändern" : "Urlaub / Krankheit ändern");
|
|
}
|
|
}
|
|
elseif(!$terminid)
|
|
{
|
|
if(!$err)
|
|
$smarty->assign("termin", $_POST);
|
|
$smarty->assign("heading", $adressid ? "Neuer Termin" : "Neuer Urlaub / Krankheitstag");
|
|
}
|
|
|
|
$smarty->display("heading.tpl");
|
|
$smarty->display("addtermin.tpl");
|
|
?>
|