Termine auf Prepared Statements umgebaut
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>
This commit is contained in:
+14
-137
@@ -1,148 +1,25 @@
|
||||
<?php
|
||||
require_once("incs/users.php");
|
||||
$_SESSION["camefrom"] = "termin&show=".$_GET["show"]."&page=".$_GET["page"];
|
||||
require_once "incs/termin.php";
|
||||
require_once "incs/users.php";
|
||||
|
||||
if($_GET["show"] == "list")
|
||||
$seite = parameterGanzzahl("page");
|
||||
$_SESSION["camefrom"] = "termin&show=".(isset($_GET["show"]) && $_GET["show"] == "list" ? "list" : "")."&page=".$seite;
|
||||
|
||||
if(isset($_GET["show"]) && $_GET["show"] == "list")
|
||||
{
|
||||
|
||||
$smarty->assign("heading","Terminliste");
|
||||
if($_GET["tabs"])
|
||||
$smarty->assign("tabs",$_GET["tabs"]);
|
||||
else
|
||||
$smarty->assign("tabs",$_SESSION["termtyp"]);
|
||||
$smarty->assign("heading", "Terminliste");
|
||||
$smarty->assign("tabs", parameterGanzzahl("tabs") ?: ($_SESSION["termtyp"] ?? 1));
|
||||
$smarty->display("heading.tpl");
|
||||
$smarty->display("termlist.tpl");
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
$smarty->assign("heading","Termine");
|
||||
$smarty->assign("heading", "Termine");
|
||||
$smarty->display("heading.tpl");
|
||||
|
||||
//$colors = array("#f00","#0c0","#ff0","#90c","#0bb","#066","#09f","#f60","#00f","#f09");
|
||||
|
||||
//$weather = GetWeather();
|
||||
//$smarty->assign("weather",$weather);
|
||||
$start = $_GET["page"]*8 - 1;
|
||||
$end = $_GET["page"]*8 + 7;
|
||||
|
||||
for($i=$start; $i<$end; $i++)
|
||||
{
|
||||
$qry = mysqli_query($dbconn,"SELECT user.vname,user.nname, user.color,
|
||||
case MAX(zeiten.gehen)
|
||||
when MAX(zeiten.kommen) then 0
|
||||
else 1 end AS complete
|
||||
FROM user
|
||||
LEFT JOIN zeiten ON user.id = zeiten.ma_id
|
||||
WHERE DATE_FORMAT(kommen,'%Y%m%d') = '".date("Ymd",strtotime("+".$i." days"))."'
|
||||
GROUP BY user.id ORDER BY user.nname ASC") or $err=error("fehler beim ermitteln der anwesenden Mitarbeiter<br />".mysqli_error($dbconn));
|
||||
$ma_check=array();
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
$ma_check[] = $res;
|
||||
}
|
||||
|
||||
|
||||
$qry = mysqli_query($dbconn,"SELECT termin.id,termtyp.typ, termin.head, termtime, termdauer, user, user2, user3, user4, done, partner_id, termin.id, main_id, str, ort, ortsteil, plz, hnr, adresse.vname as vname, adresse.nname as nname,
|
||||
user.vname as uservname, user.nname as usernname,
|
||||
user2.vname as uservname2, user2.nname as usernname2,
|
||||
user3.vname as uservname3, user3.nname as usernname3,
|
||||
user4.vname as uservname4, user4.nname as usernname4,
|
||||
firma, vname2, nname2
|
||||
FROM termin
|
||||
LEFT JOIN termtyp ON termin.typ = termtyp.id
|
||||
LEFT JOIN adresse ON termin.adresse_id = adresse.id
|
||||
LEFT JOIN partner ON adresse.partner_id = partner.id
|
||||
LEFT JOIN strasse ON adresse.str_id = strasse.id
|
||||
LEFT JOIN ort ON strasse.ort_id = ort.id
|
||||
LEFT JOIN user ON termin.user = user.id
|
||||
LEFT JOIN user AS user2 ON termin.user2 = user2.id
|
||||
LEFT JOIN user AS user3 ON termin.user3 = user3.id
|
||||
LEFT JOIN user AS user4 ON termin.user4 = user4.id
|
||||
WHERE DATE_FORMAT(termtime,'%Y%m%d') = '".date("Ymd",strtotime("+".$i." days"))."' AND termdauer > '12:00:00'
|
||||
ORDER BY termtime ASC") or $err=error("fehler beim ermitteln der termine<br />".mysqli_error($dbconn));
|
||||
$fulldaytermine=array();
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
$fulldaytermine[] = $res;
|
||||
}
|
||||
|
||||
$termine=array();
|
||||
if($_SESSION["firma"] == "Ingenieurbüro Wagner"){
|
||||
$qry = mysqli_query($dbconn,"SELECT work.id, project.id AS projectid, work.bezeichn AS head, work.rechn AS done, project.name AS projectname, work.datetime AS termtime, work.std AS termdauer, project.changeuser AS user, project.partner_id,
|
||||
adresse.vname as vname, adresse.nname as nname, adresse.firma AS firma
|
||||
FROM work
|
||||
LEFT JOIN project ON work.project_id = project.id
|
||||
LEFT JOIN partner ON project.partner_id = partner.id
|
||||
LEFT JOIN adresse ON adresse.partner_id = partner.id
|
||||
LEFT JOIN user ON work.changeuser = user.id
|
||||
WHERE adresse.typ_id = 1 AND DATE_FORMAT(work.datetime,'%Y%m%d') = '".date("Ymd",strtotime("+".$i." days"))."'
|
||||
ORDER BY work.datetime ASC") or $err=error("fehler beim ermitteln der termine<br />".mysqli_error($dbconn));
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
$termine[] = $res;
|
||||
}
|
||||
}
|
||||
|
||||
$qry = mysqli_query($dbconn,"SELECT termin.id,termtyp.typ, termin.head, termtime, termdauer, user, user2, user3, user4, done, partner_id, termin.id, main_id, str, ort, ortsteil, plz, hnr, adresse.vname as vname, adresse.nname as nname,
|
||||
user.vname as uservname, user.nname as usernname,
|
||||
user2.vname as uservname2, user2.nname as usernname2,
|
||||
user3.vname as uservname3, user3.nname as usernname3,
|
||||
user4.vname as uservname4, user4.nname as usernname4,
|
||||
firma, vname2, nname2
|
||||
FROM termin
|
||||
LEFT JOIN termtyp ON termin.typ = termtyp.id
|
||||
LEFT JOIN adresse ON termin.adresse_id = adresse.id
|
||||
LEFT JOIN partner ON adresse.partner_id = partner.id
|
||||
LEFT JOIN strasse ON adresse.str_id = strasse.id
|
||||
LEFT JOIN ort ON strasse.ort_id = ort.id
|
||||
LEFT JOIN user ON termin.user = user.id
|
||||
LEFT JOIN user AS user2 ON termin.user2 = user2.id
|
||||
LEFT JOIN user AS user3 ON termin.user3 = user3.id
|
||||
LEFT JOIN user AS user4 ON termin.user4 = user4.id
|
||||
WHERE DATE_FORMAT(termtime,'%Y%m%d') = '".date("Ymd",strtotime("+".$i." days"))."' AND termdauer < '12:00:00'
|
||||
ORDER BY termtime ASC") or $err=error("fehler beim ermitteln der termine<br />".mysqli_error($dbconn));
|
||||
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
$termine[] = $res;
|
||||
}
|
||||
|
||||
|
||||
$feiertag = feiertag_bayern(idate("d",strtotime("+".$i." days")),idate("m",strtotime("+".$i." days")),idate("Y",strtotime("+".$i." days")));
|
||||
if($feiertag){
|
||||
$weekdays[]=array( "weekday"=>date("d.m.Y",strtotime("+".$i." days"))."<br/>",
|
||||
"date"=>strftime("%Y%m%d",strtotime("+".$i." days")),
|
||||
"termine"=>$termine,
|
||||
"fulldaytermine"=>$fulldaytermine,
|
||||
"numfulldaytermine" => 0,
|
||||
"ma_check"=>$ma_check,
|
||||
"feiertag" => $feiertag
|
||||
);
|
||||
}
|
||||
else{
|
||||
$weekdays[]=array( "weekday"=>strftime("%A",strtotime("+".$i." days"))."<br/>".date("d.m.Y",strtotime("+".$i." days")),
|
||||
"date"=>strftime("%Y%m%d",strtotime("+".$i." days")),
|
||||
"termine"=>$termine,
|
||||
"fulldaytermine"=>$fulldaytermine,
|
||||
"numfulldaytermine" => 0,
|
||||
"ma_check"=>$ma_check,
|
||||
"feiertag" => ""
|
||||
);
|
||||
}
|
||||
}
|
||||
$smarty->assign("page",$_GET["page"]);
|
||||
$smarty->assign("weekdays",$weekdays);
|
||||
|
||||
$qry=mysqli_query($dbconn,"SELECT id, vname, nname, color FROM user WHERE blocked = 0 AND nick != 'ALL'");
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
//$res["color"] = $colors[$res["id"]];
|
||||
$res["openvacation"] = urlaub_remaining($dbconn, $res["id"]);
|
||||
$users[$res["id"]] = $res;
|
||||
}
|
||||
|
||||
$smarty->assign("users",$users);
|
||||
|
||||
|
||||
$smarty->assign("page", $seite);
|
||||
$smarty->assign("weekdays", kalenderTage($dbconn, $seite));
|
||||
$smarty->assign("users", kalenderBenutzer($dbconn));
|
||||
$smarty->display("calendar.tpl");
|
||||
}
|
||||
?>
|
||||
|
||||
+76
-407
@@ -1,422 +1,91 @@
|
||||
<?php
|
||||
<?php
|
||||
require_once "incs/termin.php";
|
||||
|
||||
if($_GET["id"] && $_GET["del"] == 1)
|
||||
/*
|
||||
* 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)
|
||||
{
|
||||
if($_GET["id"] == "multi"){
|
||||
for( $i=1; $i<=$_POST["pagesize"]; $i++){
|
||||
mysqli_query($dbconn,"DELETE FROM termin WHERE id='".$_POST["del".$i]."'") or $err=error("Konnte Haupttermin nicht löschen<br />".mysqli_error($dbconn));
|
||||
mysqli_query($dbconn,"DELETE FROM termin WHERE main_id='".$_POST["del".$i]."'" or $err=error("Konnte Nebentermine nicht löschen<br />".mysqli_error($dbconn)));
|
||||
}
|
||||
if(!$err)
|
||||
doneNreturn("Erfolgreich gelöscht");
|
||||
}
|
||||
else{
|
||||
$qry = mysqli_query($dbconn,"SELECT * FROM termin WHERE id='".mysqli_escape_string($dbconn,$_GET["id"])."'");
|
||||
$res = mysqli_fetch_assoc($qry);
|
||||
if(!$res)
|
||||
$err = error("Dieser Termin existiert nicht!");
|
||||
|
||||
mysqli_query($dbconn,"DELETE FROM termin WHERE id='".$res["id"]."'") or $err=error("Konnte Haupttermin nicht löschen<br />".mysqli_error($dbconn));
|
||||
mysqli_query($dbconn,"DELETE FROM termin WHERE main_id='".$res["id"]."'" or $err=error("Konnte Nebentermine nicht löschen<br />".mysqli_error($dbconn)));
|
||||
$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)
|
||||
doneNreturn("Erfolgreich gelöscht");
|
||||
$err = loescheTerminreihe($dbconn, $id);
|
||||
if(!$err)
|
||||
{
|
||||
doneNreturn("Erfolgreich gelöscht");
|
||||
return;
|
||||
}
|
||||
}
|
||||
elseif($_GET["id"] && $_GET["done"])
|
||||
elseif(($mehrfach || $terminid) && !empty($_GET["done"]))
|
||||
{
|
||||
if($_GET["id"] == "multi"){
|
||||
for( $i=1; $i<=$_POST["pagesize"]; $i++){
|
||||
mysqli_query($dbconn,"UPDATE termin SET done = 1 WHERE id='".$_POST["erl".$i]."'") or $err+=error("Konnte Haupttermin nicht als erledigt markieren<br />".mysqli_error($dbconn));
|
||||
mysqli_query($dbconn,"UPDATE termin SET done = 1 WHERE main_id='".$_POST["erl".$i]."'") or $err+=error("Konnte Nebentermine nicht als erledigt markieren<br />".mysqli_error($dbconn));
|
||||
}
|
||||
$erledigt = $_GET["done"] != "no";
|
||||
foreach($mehrfach ? angekreuzteTermine("erl") : array($terminid) as $id)
|
||||
if(!$err)
|
||||
doneNreturn("Erfolgreich geändert!");
|
||||
}
|
||||
else{
|
||||
$qry = mysqli_query($dbconn,"SELECT * FROM termin WHERE id='".mysqli_escape_string($dbconn,$_GET["id"])."'");
|
||||
$res = mysqli_fetch_assoc($qry);
|
||||
if(!$res)
|
||||
$err = error("Dieser Termin existiert nicht!");
|
||||
|
||||
if($_GET["done"] == "yes")
|
||||
{
|
||||
mysqli_query($dbconn,"UPDATE termin SET done = 1 WHERE id='".$res["id"]."'") or $err=error("Konnte Haupttermin nicht als erledigt markieren<br />".mysqli_error($dbconn));
|
||||
mysqli_query($dbconn,"UPDATE termin SET done = 1 WHERE main_id='".$res["id"]."'") or $err=error("Konnte Nebentermine nicht als erledigt markieren<br />".mysqli_error($dbconn));
|
||||
}
|
||||
elseif($_GET["done"] == "no")
|
||||
{
|
||||
mysqli_query($dbconn,"UPDATE termin SET done = 0 WHERE id='".$res["id"]."'") or $err=error("Konnte Haupttermin nicht als nicht erledigt markieren<br />".mysqli_error($dbconn));
|
||||
mysqli_query($dbconn,"UPDATE termin SET done = 0 WHERE main_id='".$res["id"]."'") or $err=error("Konnte Nebentermine nicht als nicht erledigt markieren<br />".mysqli_error($dbconn));
|
||||
}
|
||||
if(!$err)
|
||||
doneNreturn("Erfolgreich geändert!");
|
||||
$err = setzeTerminErledigt($dbconn, $id, $erledigt);
|
||||
if(!$err)
|
||||
{
|
||||
doneNreturn("Erfolgreich geändert!");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$qry = mysqli_query($dbconn,"SELECT plz, ortsteil, ort, str, hnr, vname, partner_id, nname, vname2, nname2, firma, adresse.id, land, anrede_id, titel_id, anrede2_id, titel2_id
|
||||
FROM adresse
|
||||
LEFT JOIN strasse ON str_id = strasse.id
|
||||
LEFT JOIN ort ON ort_id = ort.id
|
||||
LEFT JOIN land ON land_id = land.id
|
||||
WHERE adresse.id='".mysql_escape_string($_GET["adressid"])."'
|
||||
ORDER BY typ_id ASC") or $err = error("Fehler beim abrufen der Daten ".mysqli_error($dbconn));
|
||||
$kdnres=mysqli_fetch_assoc($qry);
|
||||
if($_GET["user"])
|
||||
$smarty->assign("user",$_GET["user"]);
|
||||
|
||||
if(!$kdnres["partner_id"])
|
||||
$kunde = terminAdresse($dbconn, $adressid);
|
||||
if(empty($kunde["partner_id"]))
|
||||
$adressid = 0;
|
||||
|
||||
if(!$err && parameterGanzzahl("formsent") == 1)
|
||||
{
|
||||
$_GET["adressid"] = 0;
|
||||
$err = speichereTermin($dbconn, $terminid, $adressid);
|
||||
if(!$err)
|
||||
{
|
||||
doneNreturn("Erfolgreich eingetragen");
|
||||
return;
|
||||
}
|
||||
// bei einem Fehler die Eingaben im Formular stehen lassen
|
||||
$smarty->assign("termin", $_POST);
|
||||
}
|
||||
if($_GET["formsent"] == 1)
|
||||
{
|
||||
$head = mysql_escape_string(trim($_POST["head"]));
|
||||
$user = mysql_escape_string(trim($_POST["user"]));
|
||||
$user2 = mysql_escape_string(trim($_POST["user2"]));
|
||||
$user3 = mysql_escape_string(trim($_POST["user3"]));
|
||||
$user4 = mysql_escape_string(trim($_POST["user4"]));
|
||||
$text = mysql_escape_string(trim($_POST["text"]));
|
||||
$typ = mysql_escape_string(trim($_POST["typ"]));
|
||||
$done = mysql_escape_string(trim($_POST["done"]));
|
||||
$folge = mysql_escape_string(trim($_POST["folge"]));
|
||||
$folgetyp = mysql_escape_string(trim($_POST["folgetyp"]));
|
||||
$folgedays = mysql_escape_string(trim($_POST["folgedays"]));
|
||||
$datetime_start = dispdate_to_mysql_date(mysql_escape_string(trim($_POST["datetime_start"])),0);
|
||||
$datetime_end = dispdate_to_mysql_date(mysql_escape_string(trim($_POST["datetime_end"])),1);
|
||||
$_POST["termtime"] = $datetime_start;
|
||||
$_POST["termend"] = $datetime_end;
|
||||
$dauer = $_POST["termdauer"] = mysql_dauer($datetime_start,$datetime_end);
|
||||
$days = 1;
|
||||
$split_dauer = explode(":",$dauer);
|
||||
if($split_dauer[0]>12 || $typ == 0)
|
||||
{
|
||||
$days = ceil($dauer/24);
|
||||
$dauer = "24:00:00";
|
||||
$_POST["termtime"] = $datetime_start = substr($datetime_start,0,11)."00:00:00";
|
||||
$_POST["termend"] = $datetime_end = substr($datetime_start,0,11)."23:59:00";
|
||||
}
|
||||
$datetime_start_tmp =$datetime_start;
|
||||
|
||||
if($days > 1 && $_GET["id"])
|
||||
{
|
||||
mysqli_query($dbconn,"DELETE FROM termin WHERE id='".mysqli_escape_string($dbconn,$_GET["id"])."'");
|
||||
mysqli_query($dbconn,"DELETE FROM termin WHERE main_id='".mysqli_escape_string($dbconn,$_GET["id"])."'");
|
||||
|
||||
$_GET["id"] = "";
|
||||
}
|
||||
else
|
||||
mysqli_query($dbconn,"DELETE FROM termin WHERE main_id='".mysqli_escape_string($dbconn,$_GET["id"])."' AND id != '".mysqli_escape_string($dbconn,$_GET["id"])."'");
|
||||
if($done == 0){
|
||||
for($i=0;$i<$days;$i++)
|
||||
{
|
||||
$datetime_start_tmp = date("Y-m-d H:i:s",strtotime("+".$i." day",strtotime($datetime_start)));
|
||||
|
||||
$qry = mysqli_query($dbconn,"SELECT * FROM
|
||||
( SELECT id,user, user2, user3, user4, termtime,
|
||||
DATE_ADD(termtime,INTERVAL CONCAT(HOUR(termdauer),' ',MINUTE(termdauer)) HOUR_MINUTE)as termend
|
||||
FROM termin WHERE termtime != '0000-00-00 00:00:00' AND done = 0)
|
||||
as subselect
|
||||
WHERE
|
||||
(user='$user' OR user2='$user' OR user3='$user' OR user4='$user') AND
|
||||
(
|
||||
('$datetime_start_tmp' >= termtime AND '$datetime_start_tmp' < termend) OR
|
||||
('$datetime_end' > termtime AND '$datetime_end' <= termend) OR
|
||||
('$datetime_start_tmp' <= termtime AND '$datetime_end' >= termend)
|
||||
)") or $err=error("Fehler beim überprüfen von Überlappungen<br />".mysqli_error($dbconn));
|
||||
$res=mysqli_fetch_assoc($qry);
|
||||
if(!$res && $user2)
|
||||
{
|
||||
$qry = mysqli_query($dbconn,"SELECT * FROM
|
||||
( SELECT id,user, user2, user3, user4, termtime,
|
||||
DATE_ADD(termtime,INTERVAL CONCAT(HOUR(termdauer),' ',MINUTE(termdauer)) HOUR_MINUTE)as termend
|
||||
FROM termin WHERE termtime != '0000-00-00 00:00:00' AND done = 0)
|
||||
as subselect
|
||||
WHERE
|
||||
(user='$user2' OR user2='$user2' OR user3='$user2' OR user4='$user2') AND
|
||||
(
|
||||
('$datetime_start_tmp' >= termtime AND '$datetime_start_tmp' < termend) OR
|
||||
('$datetime_end' > termtime AND '$datetime_end' <= termend) OR
|
||||
('$datetime_start_tmp' <= termtime AND '$datetime_end' >= termend)
|
||||
)") or $err=error("Fehler beim überprüfen von Überlappungen<br />".mysqli_error($dbconn));
|
||||
$res=mysqli_fetch_assoc($qry);
|
||||
}
|
||||
if(!$res && $user3)
|
||||
{
|
||||
$qry = mysqli_query($dbconn,"SELECT * FROM
|
||||
( SELECT id,user, user2, user3, user4, termtime,
|
||||
DATE_ADD(termtime,INTERVAL CONCAT(HOUR(termdauer),' ',MINUTE(termdauer)) HOUR_MINUTE)as termend
|
||||
FROM termin WHERE termtime != '0000-00-00 00:00:00' AND done = 0)
|
||||
as subselect
|
||||
WHERE
|
||||
(user='$user3' OR user2='$user3' OR user3='$user3' OR user4='$user3') AND
|
||||
(
|
||||
('$datetime_start_tmp' >= termtime AND '$datetime_start_tmp' < termend) OR
|
||||
('$datetime_end' > termtime AND '$datetime_end' <= termend) OR
|
||||
('$datetime_start_tmp' <= termtime AND '$datetime_end' >= termend)
|
||||
)") or $err=error("Fehler beim überprüfen von Überlappungen<br />".mysqli_error($dbconn));
|
||||
$res=mysqli_fetch_assoc($qry);
|
||||
}
|
||||
if(!$res && $user4)
|
||||
{
|
||||
$qry = mysqli_query($dbconn,"SELECT * FROM
|
||||
( SELECT id,user, user2, user3, user4, termtime,
|
||||
DATE_ADD(termtime,INTERVAL CONCAT(HOUR(termdauer),' ',MINUTE(termdauer)) HOUR_MINUTE)as termend
|
||||
FROM termin WHERE termtime != '0000-00-00 00:00:00' AND done = 0)
|
||||
as subselect
|
||||
WHERE
|
||||
(user='$user4' OR user2='$user4' OR user3='$user4' OR user4='$user4') AND
|
||||
(
|
||||
('$datetime_start_tmp' >= termtime AND '$datetime_start_tmp' < termend) OR
|
||||
('$datetime_end' > termtime AND '$datetime_end' <= termend) OR
|
||||
('$datetime_start_tmp' <= termtime AND '$datetime_end' >= termend)
|
||||
)") or $err=error("Fehler beim überprüfen von Überlappungen<br />".mysqli_error($dbconn));
|
||||
$res=mysqli_fetch_assoc($qry);
|
||||
}
|
||||
if($res && $res["id"] != $_GET["id"])
|
||||
{
|
||||
$err=error("Dieser Mitarbeiter hat zu der Zeit bereits einen Termin, er kann nicht an zwei Orten gleichzeitig sein.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!$err)
|
||||
{
|
||||
|
||||
for($i=0;$i<$days;$i++)
|
||||
{
|
||||
$datetime_start_tmp = date("Y-m-d H:i:s",strtotime("+".$i." day",strtotime($datetime_start)));
|
||||
if(strstr($datetime_start_tmp,"1970")){
|
||||
echo "NICHTTERMINIERT!!";
|
||||
$datetime_start_tmp = "0000-00-00 00:00:00";
|
||||
}
|
||||
if($_GET["id"])
|
||||
{
|
||||
$qry=mysqli_query($dbconn,"SELECT * FROM termin WHERE id = '".mysqli_escape_string($dbconn,($_GET["id"]))."'");
|
||||
if ($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
if($done && $folge && !$res["followed_by"] && !$i)
|
||||
{
|
||||
mysqli_query($dbconn,"INSERT INTO termin SET head='$head',
|
||||
text='',
|
||||
adresse_id='".mysqli_escape_string($dbconn,$_GET["adressid"])."',
|
||||
typ='$folgetyp',
|
||||
changetime=NOW(),
|
||||
datetime=NOW(),
|
||||
done='0',
|
||||
termtime='',
|
||||
termdauer='',
|
||||
user='$user',
|
||||
user2='$user2',
|
||||
user3='$user3',
|
||||
user4='$user4',
|
||||
changeuser='".$_SESSION["user"]."',
|
||||
act_date=DATE_ADD(CURDATE(),INTERVAL $folgedays DAY)") or $err=error("Fehler beim anlegen des Folgetermins<br />".mysqli_error($dbconn));
|
||||
$res["followed_by"] = mysqli_insert_id($dbconn);
|
||||
mysqli_query($dbconn,"UPDATE termin SET main_id = '".$res["followed_by"]."' WHERE id='".$res["followed_by"]."'");
|
||||
}
|
||||
if(!$i)
|
||||
{
|
||||
mysqli_query($dbconn,"UPDATE termin SET head='$head',
|
||||
text='$text',
|
||||
adresse_id='".mysqli_escape_string($dbconn,$_GET["adressid"])."',
|
||||
typ='$typ',
|
||||
changetime=NOW(),
|
||||
done='$done',
|
||||
termtime='$datetime_start_tmp',
|
||||
termdauer='$dauer',
|
||||
changeuser='".$_SESSION["user"]."',
|
||||
user='$user',
|
||||
user2='$user2',
|
||||
user3='$user3',
|
||||
user4='$user4',
|
||||
followed_by='".$res["followed_by"]."'
|
||||
WHERE id='".mysqli_escape_string($dbconn,$_GET["id"])."'") or $err=error("Fehler beim ändern des Termins<br />".mysqli_error($dbconn));
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
$err=error("dieser Termin existiert nicht!");
|
||||
}
|
||||
else
|
||||
{
|
||||
if($done && $folge && !$err && !$i)
|
||||
{
|
||||
mysqli_query($dbconn,"INSERT INTO termin SET head='$head',
|
||||
text='',
|
||||
adresse_id='".mysqli_escape_string($dbconn,$_GET["adressid"])."',
|
||||
typ='$folgetyp',
|
||||
changetime=NOW(),
|
||||
datetime=NOW(),
|
||||
done='0',
|
||||
termtime='',
|
||||
termdauer='',
|
||||
changeuser='".$_SESSION["user"]."',
|
||||
user='$user',
|
||||
user2='$user2',
|
||||
user3='$user3',
|
||||
user4='$user4',
|
||||
act_date=DATE_ADD(CURDATE(),INTERVAL $folgedays DAY)") or $err=error("Fehler beim anlegen des Folgetermins<br />".mysqli_error($dbconn));
|
||||
$res["followed_by"] = mysqli_insert_id($dbconn);
|
||||
mysqli_query($dbconn,"UPDATE termin SET main_id = '".$res["followed_by"]."' WHERE id='".$res["followed_by"]."'");
|
||||
}
|
||||
if(!$err)
|
||||
{
|
||||
if(!$i)
|
||||
{
|
||||
mysqli_query($dbconn,"INSERT INTO termin SET head='$head',
|
||||
text='$text',
|
||||
adresse_id='".mysqli_escape_string($dbconn,$_GET["adressid"])."',
|
||||
typ='$typ',
|
||||
changetime=NOW(),
|
||||
datetime=NOW(),
|
||||
done='$done',
|
||||
termtime='$datetime_start_tmp',
|
||||
termdauer='$dauer',
|
||||
changeuser='".$_SESSION["user"]."',
|
||||
user='$user',
|
||||
user2='$user2',
|
||||
user3='$user3',
|
||||
user4='$user4',
|
||||
followed_by='".$res["followed_by"]."'") or $err=error("Fehler beim anlegen des Termins<br />".mysqli_error($dbconn));
|
||||
$main_id = mysqli_insert_id($dbconn);
|
||||
mysqli_query($dbconn,"UPDATE termin SET main_id = '$main_id' WHERE id='$main_id'");
|
||||
}
|
||||
else
|
||||
{
|
||||
mysqli_query($dbconn,"INSERT INTO termin SET head='$head',
|
||||
text='$text',
|
||||
adresse_id='".mysqli_escape_string($dbconn,$_GET["adressid"])."',
|
||||
typ='$typ',
|
||||
changetime=NOW(),
|
||||
datetime=NOW(),
|
||||
done='$done',
|
||||
termtime='$datetime_start_tmp',
|
||||
termdauer='$dauer',
|
||||
changeuser='".$_SESSION["user"]."',
|
||||
user='$user',
|
||||
user2='$user2',
|
||||
user3='$user3',
|
||||
user4='$user4',
|
||||
main_id='$main_id',
|
||||
followed_by='".$res["followed_by"]."'") or $err=error("Fehler beim anlegen des Termins<br />".mysqli_error($dbconn));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!$err)
|
||||
{
|
||||
doneNreturn("Erfolgreich eingetragen");
|
||||
}
|
||||
}
|
||||
if($err){
|
||||
$smarty->assign("termin",$_POST);
|
||||
}
|
||||
//elseif(!$head)
|
||||
// $err=error("Bitte geben Sie eine Terminbeschreibung an!");
|
||||
}
|
||||
|
||||
|
||||
$qry = mysqli_query($dbconn,"SELECT id, typ
|
||||
FROM termtyp WHERE id > 0") or $err = error("Fehler beim abrufen der Termintypen<br />".mysqli_error($dbconn));
|
||||
while($res = mysqli_fetch_assoc($qry))
|
||||
{
|
||||
$typids[] =$res["id"];
|
||||
$typs[] = $res["typ"];
|
||||
}
|
||||
$smarty->assign("typs",$typs);
|
||||
$smarty->assign("typids",$typids);
|
||||
|
||||
$typids=array();
|
||||
$typs=array();
|
||||
$qry = mysqli_query($dbconn,"SELECT id, vname, nname
|
||||
FROM user WHERE blocked = 0 AND id > 0") or $err = error("Fehler beim abrufen der Benutzer<br />".mysqli_error($dbconn));
|
||||
while($res = mysqli_fetch_assoc($qry))
|
||||
{
|
||||
$typids[] =$res["id"];
|
||||
$typs[] = $res["vname"]." ".$res["nname"];
|
||||
}
|
||||
$smarty->assign("users",$typs);
|
||||
$smarty->assign("userids",$typids);
|
||||
$typs[]="Keiner";
|
||||
$typids[]=0;
|
||||
$smarty->assign("optusers",$typs);
|
||||
$smarty->assign("optuserids",$typids);
|
||||
|
||||
$smarty->assign("days",array(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40));
|
||||
$smarty->assign("kunde",$kdnres);
|
||||
if($_GET["id"])
|
||||
{
|
||||
$qry=mysqli_query($dbconn,"SELECT MIN(termtime) AS termtime,
|
||||
SEC_TO_TIME(SUM(TIME_TO_SEC(termdauer))) AS termdauer,
|
||||
head,
|
||||
followed_by,
|
||||
MIN(id) AS id,
|
||||
main_id,
|
||||
typ,adresse_id,
|
||||
done,
|
||||
user,
|
||||
user2,
|
||||
user3,
|
||||
user4,
|
||||
changeuser,
|
||||
act_date,
|
||||
text
|
||||
FROM termin WHERE main_id = '".mysqli_escape_string($dbconn,$_GET["id"])."' GROUP BY main_id");
|
||||
if ($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
|
||||
if($res["followed_by"] > 0)
|
||||
{
|
||||
$qry2=mysqli_query($dbconn, "SELECT DATE_FORMAT(act_date,'%Y-%m-%d'), typ_id FROM termin WHERE id = '".$res["followed_by"]."'");
|
||||
$res2=mysqli_fetch_assoc($qry2);
|
||||
$days = (strtotime($res2["act_date"]) - strtotime(date("Y-m-d"))) / (60 * 60 * 24);
|
||||
$res["folgetyp"]= $res2["typ_id"];
|
||||
if($days > 0)
|
||||
$res["folgedays"] = $days;
|
||||
}
|
||||
$res["termend"] = dauer_to_date($res["termtime"], $res["termdauer"]);
|
||||
if(strstr($res["termend"],"00:00:00")){
|
||||
$res["termend"] = date("Y-m-d H:i:s",strtotime("-1 minutes",strtotime($res["termend"])));
|
||||
}
|
||||
$smarty->assign("termin",$res);
|
||||
if($_GET["adressid"])
|
||||
$smarty->assign("heading","Termin ändern");
|
||||
else
|
||||
$smarty->assign("heading","Urlaub / Krankheit ändern");
|
||||
}
|
||||
else
|
||||
{
|
||||
$err=error("Dieser Termin existiert nicht!");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
$smarty->assign("termin",$_POST);
|
||||
|
||||
if($_GET["adressid"]){
|
||||
$smarty->assign("heading","Neuer Termin");
|
||||
}
|
||||
else{
|
||||
$smarty->assign("heading","Neuer Urlaub / Krankheitstag");
|
||||
$typids=array();
|
||||
$typs=array();
|
||||
$qry = mysqli_query($dbconn,"SELECT id, typ
|
||||
FROM termtyp WHERE typ = 'Urlaub' OR typ = 'Krankheit'") or $err = error("Fehler beim abrufen der Termintypen<br />".mysqli_error($dbconn));
|
||||
while($res = mysqli_fetch_assoc($qry))
|
||||
{
|
||||
$typids[] =$res["id"];
|
||||
$typs[] = $res["typ"];
|
||||
}
|
||||
$smarty->assign("vac_types_id",$typids);
|
||||
$smarty->assign("vac_types_name",$typs);
|
||||
|
||||
}
|
||||
}
|
||||
$smarty->display("heading.tpl");
|
||||
$smarty->display("addtermin.tpl");
|
||||
|
||||
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");
|
||||
?>
|
||||
|
||||
+38
-64
@@ -1,71 +1,45 @@
|
||||
<?php
|
||||
// GET: id OR date;type
|
||||
<?php
|
||||
/*
|
||||
* Terminzettel als PDF: eine Seite je Termin, einmal zum Abheften und
|
||||
* einmal mit Anfahrtsskizze. Aufruf entweder mit id (ein Termin) oder mit
|
||||
* date (alle Termine eines Tages).
|
||||
*/
|
||||
require_once "incs/termin.php";
|
||||
include("incs/makepdf.php");
|
||||
|
||||
$pdf = makerawPDFcopy(0);
|
||||
if($_GET["id"] && !$_GET["date"])
|
||||
{
|
||||
$termin=maketerminarray($dbconn, $_GET["id"]);
|
||||
$adresse=maketerminadresse($dbconn, $_GET["id"]);
|
||||
$telnrn=maketelnrn($dbconn,$_GET["id"]);
|
||||
makesingleterminpage($pdf,$termin,$adresse,$telnrn,0);
|
||||
}
|
||||
elseif($_GET["date"])
|
||||
{
|
||||
$qry=mysqli_query($dbconn,"SELECT id FROM termin WHERE adresse_id AND DATE_FORMAT(termtime,'%Y%m%d') = '".date("Ymd",strtotime($_GET["date"]))."' ORDER BY termtime ASC");
|
||||
if($_GET["type"]="singlepages")
|
||||
{
|
||||
$prevpage=0;
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
if($prevpage)
|
||||
$pdf->addpage();
|
||||
$prevpage=1;
|
||||
$termin=maketerminarray($dbconn, $res["id"]);
|
||||
$adresse=maketerminadresse($dbconn, $res["id"]);
|
||||
$telnrn=maketelnrn($dbconn,$res["id"]);
|
||||
makesingleterminpage($pdf,$termin,$adresse,$telnrn,0);
|
||||
}
|
||||
}
|
||||
}
|
||||
$tmppdfname = str_replace(array(" ","."),array("_","_"),microtime());
|
||||
savePDF($pdf,"./temp/pdftemp/$tmppdfname.pdf");
|
||||
$smarty->assign("pdffile","./temp/pdftemp/$tmppdfname.pdf");
|
||||
$terminid = parameterGanzzahl("id");
|
||||
$datum = isset($_GET["date"]) && is_string($_GET["date"]) ? date("Y-m-d", strtotime($_GET["date"])) : "";
|
||||
|
||||
$pdf = makerawPDFanfahrt(0);
|
||||
if($_GET["id"] && !$_GET["date"])
|
||||
$ids = array();
|
||||
if($terminid && !$datum)
|
||||
$ids[] = $terminid;
|
||||
elseif($datum)
|
||||
{
|
||||
$termin=maketerminarray($dbconn, $_GET["id"]);
|
||||
$adresse=maketerminadresse($dbconn, $_GET["id"]);
|
||||
$googleadresse=makegooglestring($dbconn, $_GET["id"]);
|
||||
$telnrn=maketelnrn($dbconn,$_GET["id"]);
|
||||
makesingleterminpage($pdf,$termin,$adresse,$telnrn,1,$googleadresse);
|
||||
$zeilen = db_zeilen($dbconn, "SELECT id FROM termin WHERE adresse_id != 0 AND DATE(termtime) = ? ORDER BY termtime ASC", array($datum));
|
||||
foreach((array)$zeilen as $z)
|
||||
$ids[] = $z["id"];
|
||||
}
|
||||
elseif($_GET["date"])
|
||||
{
|
||||
$qry=mysqli_query($dbconn,"SELECT id FROM termin WHERE adresse_id AND DATE_FORMAT(termtime,'%Y%m%d') = '".date("Ymd",strtotime($_GET["date"]))."' ORDER BY termtime ASC");
|
||||
if($_GET["type"]="singlepages")
|
||||
{
|
||||
$prevpage=0;
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
if($prevpage)
|
||||
$pdf->addpage();
|
||||
$prevpage=1;
|
||||
$termin=maketerminarray($dbconn, $res["id"]);
|
||||
$adresse=maketerminadresse($dbconn, $res["id"]);
|
||||
$googleadresse=makegooglestring($dbconn,$res["id"]);
|
||||
$telnrn=maketelnrn($dbconn,$res["id"]);
|
||||
makesingleterminpage($pdf,$termin,$adresse,$telnrn,1,$googleadresse);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
$tmppdfname = str_replace(array(" ","."),array("_","_"),microtime());
|
||||
savePDF($pdf,"./temp/pdftemp/$tmppdfname.pdf");
|
||||
$smarty->assign("pdffile2","./temp/pdftemp/$tmppdfname.pdf");
|
||||
|
||||
/* $anfahrt = 0 für den Terminzettel, 1 für die Seite mit der Karte */
|
||||
function terminzettel($dbconn, $ids, $anfahrt)
|
||||
{
|
||||
$pdf = $anfahrt ? makerawPDFanfahrt(0) : makerawPDFcopy(0);
|
||||
$erste = true;
|
||||
foreach($ids as $id)
|
||||
{
|
||||
if(!$erste)
|
||||
$pdf->addpage();
|
||||
$erste = false;
|
||||
$googleadresse = $anfahrt ? makegooglestring($dbconn, $id) : "";
|
||||
makesingleterminpage($pdf, maketerminarray($dbconn, $id), maketerminadresse($dbconn, $id),
|
||||
maketelnrn($dbconn, $id), $anfahrt, $googleadresse);
|
||||
}
|
||||
$name = str_replace(array(" ", "."), array("_", "_"), microtime());
|
||||
savePDF($pdf, "./temp/pdftemp/$name.pdf");
|
||||
return "./temp/pdftemp/$name.pdf";
|
||||
}
|
||||
|
||||
$smarty->assign("pdffile", terminzettel($dbconn, $ids, 0));
|
||||
$smarty->assign("pdffile2", terminzettel($dbconn, $ids, 1));
|
||||
$smarty->display("terminshow.tpl");
|
||||
|
||||
|
||||
?>
|
||||
?>
|
||||
|
||||
Reference in New Issue
Block a user