2126 lines
67 KiB
PHP
2126 lines
67 KiB
PHP
<?php
|
||
// admin/bootstrap.php
|
||
ob_start(); // fängt zufälligen Output ab, verhindert "headers already sent" Folgeschäden
|
||
if (session_status() !== PHP_SESSION_ACTIVE) {
|
||
session_start();
|
||
}
|
||
|
||
require_once(__DIR__ . "/../inc/config.inc.php");
|
||
require_once(__DIR__ . "/../inc/functions.inc.php");
|
||
|
||
$user = check_admin_user();
|
||
$internUserId = (int)$_SESSION['auth']['id'];
|
||
include("templates/header.inc.php");
|
||
if (!$user) { echo "<div class='container main-container'><h3>Erst anmelden: <a href=login.php>Login</a></h3><br>";
|
||
|
||
include("templates/footer.inc.php");
|
||
exit; }
|
||
?>
|
||
<script src="/admin/js/tinymce/tinymce.min.js" referrerpolicy="origin"></script>
|
||
<div class="container main-container">
|
||
<?php
|
||
##test2
|
||
echo '<div style="float: right; width: 200px; ">';
|
||
echo "<form action='". $_SERVER['PHP_SELF'] . "' id='formbenutzersuche' method=POST>";
|
||
echo '<input type="hidden" name="aktion" value="benutzersuche" />';
|
||
echo '<input type="hidden" name="userid_input" id="userid_input" />';
|
||
echo '<label>Benutzersuche Anfragen:</label>
|
||
<input type="text" id="user_input" name="skill_input" width="48"/>';
|
||
//echo '<input type="submit" class="btn btn-primary" id="submitbox" value="" />';
|
||
echo "</form>";
|
||
echo '</div>';
|
||
?>
|
||
<h2>Administration - Anfragen</h2>
|
||
|
||
Hallo <?php echo htmlentities($user['vorname']); ?>,<br>
|
||
Herzlich Willkommen im internen Bereich!<br><br>
|
||
|
||
|
||
|
||
|
||
|
||
<?php
|
||
|
||
if(!check_worker()){
|
||
echo "<div class='container main-container'><h3>Erst anmelden: <a href=login.php>Login</a></h3><br>";
|
||
echo $_SESSION['userid'];
|
||
|
||
}else{
|
||
|
||
if (($_POST["aktion"] ?? '') == "1") {
|
||
|
||
|
||
echo "<header><h2>Anfragen bearbeiten</h2></header>";
|
||
echo "</div><div class='container main-container' style='background-color:white;'>";
|
||
|
||
echo '<div style="float: left;padding: 20px;">
|
||
<form action="' . $_SERVER["PHP_SELF"] .'" method=POST>
|
||
<input type=hidden name=aktion value="1">
|
||
<input type=hidden name=art value="1">
|
||
<input type=submit class="btn btn-primary btn-sm" value="Unbeantworte Anfragen">
|
||
</form>
|
||
</div>';
|
||
echo '<div style="float: left;padding: 20px;">
|
||
<form action="' . $_SERVER["PHP_SELF"] .'" method=POST>
|
||
<input type=hidden name=aktion value="1">
|
||
<input type=hidden name=art value="2">
|
||
<input type=submit class="btn btn-primary btn-sm" value="Letzten 100 Anfragen">
|
||
</form>
|
||
</div>';
|
||
echo '<div style="float: left;padding: 20px;">
|
||
<form action="' . $_SERVER["PHP_SELF"] .'" method=POST>
|
||
<input type=hidden name=aktion value="1">
|
||
<input type=hidden name=art value="3">
|
||
<input type=submit class="btn btn-primary btn-sm" value="Letzten 500 Anfragen">
|
||
</form>
|
||
</div>';
|
||
echo '<div style="float: left;padding: 20px;">
|
||
<form action="' . $_SERVER["PHP_SELF"] .'" method=POST>
|
||
<input type=hidden name=aktion value="1">
|
||
<input type=hidden name=art value="4">
|
||
<input type=submit class="btn btn-primary btn-sm" value="Alle Anfragen">
|
||
</form>
|
||
</div>';
|
||
echo "<br><br><br><br>";
|
||
|
||
|
||
//<br><br><input type="button" class='btn btn btn-secondary' value="Zum Hauptmenü" onClick="location.href='index.php'"> <br>
|
||
?>
|
||
|
||
|
||
<?php
|
||
|
||
|
||
|
||
|
||
$art = $_POST["art"] ?? "1";
|
||
|
||
// Default
|
||
$sql = "
|
||
SELECT
|
||
a.*,
|
||
p.vorname, p.nachname, p.email, p.tele, p.geburtstag,
|
||
p.ort, p.plz, p.strasse,
|
||
aa.artname
|
||
FROM anfragen a
|
||
JOIN persons p ON a.requester_person_id = p.person_id
|
||
JOIN anfrageart aa ON a.anforderungart = aa.artid
|
||
";
|
||
|
||
$params = [];
|
||
|
||
switch ($art) {
|
||
case "1":
|
||
$sql .= " WHERE a.beantwortet = 0 AND (a.checked = 0 OR a.checked = 1)
|
||
ORDER BY a.create_time";
|
||
break;
|
||
|
||
case "2":
|
||
$sql .= " WHERE a.beantwortet IN (0,1)
|
||
ORDER BY a.create_time DESC
|
||
LIMIT 100";
|
||
break;
|
||
|
||
case "3":
|
||
$sql .= " WHERE a.beantwortet IN (0,1)
|
||
ORDER BY a.create_time DESC
|
||
LIMIT 500";
|
||
break;
|
||
|
||
case "4":
|
||
$sql .= " WHERE a.beantwortet IN (0,1)
|
||
ORDER BY a.create_time DESC";
|
||
break;
|
||
|
||
default:
|
||
$sql .= " WHERE a.beantwortet = 0 AND (a.checked = 0 OR a.checked = 1)
|
||
ORDER BY a.create_time";
|
||
$art = "1";
|
||
break;
|
||
}
|
||
|
||
$stmt = $pdo->prepare($sql);
|
||
$stmt->execute($params);
|
||
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||
|
||
|
||
if($art == "1"){
|
||
echo "<table width= 100% border='1' id='tableanfragen' class='display'>";
|
||
}else{
|
||
echo "<table width= 100% border='1' id='tableanfragendesc' class='display'>";
|
||
}
|
||
echo "<thead><tr><th>Person</th><th>Adresse</th><th>Anfrageart/Infos</th><th>Erstellung</th><th>Status</th><th>Aktion</th></tr></thead><tbody>";
|
||
|
||
foreach ($rows as $row) {
|
||
|
||
|
||
|
||
$anfrageid = $row["anfrageid"];
|
||
$userid = $row["userid"];
|
||
$checked = $row["checked"];
|
||
$workerid = $row["workerid"];
|
||
$date_created = $row["create_time"];
|
||
$update_time = $row["update_time"];
|
||
|
||
$vorname = $row["vorname"];
|
||
$nachname = $row["nachname"];
|
||
$mail = $row["email"];
|
||
$tel = $row["tele"];
|
||
$beantwortet = $row["beantwortet"];
|
||
|
||
$geburtstag = $row["geburtstag"];
|
||
$ausgabegeburstag = $geburtstag;
|
||
|
||
$ort = $row["ort"];
|
||
$plz = $row["plz"];
|
||
$strasse = $row["strasse"];
|
||
|
||
$nachricht = $row["nachricht"];
|
||
$medikamenteins = $row["medikament1"];
|
||
$medikamentzwei = $row["medikament2"];
|
||
$medikamentdrei = $row["medikament3"];
|
||
$medikamentvier = $row["medikament4"];
|
||
$medikamentfuenf = $row["medikament5"];
|
||
$medikamentsechs = $row["medikament6"];
|
||
$dateiname = $row["dateiname"];
|
||
|
||
|
||
$anfrageart = $row["artname"];
|
||
$ordnungsid = $row["ordnungsid"];
|
||
$ordnungsstring = GetOrdnungsid($ordnungsid);
|
||
$WeitereInfos= "";
|
||
$sicherenachricht = $row["sicherenachricht"];
|
||
if($sicherenachricht == "1"){
|
||
$WeitereInfos .= "Interne Anfrage<br>";
|
||
}else{
|
||
$WeitereInfos .= "Mailanfrage<br>";
|
||
}
|
||
if($medikamenteins){
|
||
$WeitereInfos .= "Medikament1: $medikamenteins<br>";
|
||
}
|
||
if($medikamentzwei){
|
||
$WeitereInfos .= "Medikament2: $medikamentzwei<br>";
|
||
}
|
||
if($medikamentdrei){
|
||
$WeitereInfos .= "Medikament3: $medikamentdrei<br>";
|
||
}
|
||
if($medikamentvier){
|
||
$WeitereInfos .= "Medikament4: $medikamentvier<br>";
|
||
}
|
||
if($medikamentfuenf){
|
||
$WeitereInfos .= "Medikament5: $medikamentfuenf<br>";
|
||
}
|
||
if($medikamentsechs){
|
||
$WeitereInfos .= "Medikament6: $medikamentsechs<br>";
|
||
}
|
||
if($nachricht){
|
||
$WeitereInfos .= "Nachricht: $nachricht";
|
||
}
|
||
if($dateiname){
|
||
$WeitereInfos .= "<br>Dateiname: $dateiname";
|
||
}
|
||
|
||
#$datumausgabe= date("Y-m-d H:i", strtotime($date_created ));
|
||
$currentDate = new DateTime($date_created);
|
||
$datumausgabe = $currentDate->format('Y-m-d H:i');
|
||
|
||
$ausgabeworker = GetWorkerName($workerid);
|
||
$farbe = GetStatusFarbe($checked);
|
||
$checkausgabe = GetStatus($checked);
|
||
|
||
$userausgabe = $vorname . " " . $nachname . "<br>" . $ausgabegeburstag;
|
||
$adresse = $plz . " " . $ort . "<br>" . $strasse ;
|
||
$adresse = $adresse;
|
||
echo "<tr style='background-color:". $farbe. ";'><td>$userausgabe <br> $mail <br>Tel:<a href='tel:".$tel."'>$tel</a></td><td>$adresse</td><td>$ordnungsstring - $anfrageart <br>$WeitereInfos</td><td>$datumausgabe</td><td>$update_time<br>$checkausgabe<br>$ausgabeworker</td><td>
|
||
<div style='float: left;margin:15px; height: 20px;'>
|
||
<form action='". $_SERVER["PHP_SELF"] ."' method=POST>
|
||
<input type=hidden name=aktion value=2>
|
||
<input type=hidden name=anfrageid value=$anfrageid>
|
||
<input type=submit class='btn btn-primary' value='Antworten'>
|
||
</form>
|
||
</div>
|
||
<div style='float: left;margin:15px; height: 20px;'>
|
||
<form action='". $_SERVER["PHP_SELF"] ."' method=POST>
|
||
<input type=hidden name=aktion value=20>
|
||
<input type=hidden name=anfrageid value=$anfrageid>
|
||
<input type=submit class='btn btn-primary' value='Telefonisch beantwortet'>
|
||
</form>
|
||
</div>
|
||
<div style='float: left;margin:15px; height: 20px;'>
|
||
<form action='". $_SERVER["PHP_SELF"] ."' method=POST>
|
||
<input type=hidden name=aktion value=8>
|
||
<input type=hidden name=anfrageid value=$anfrageid>
|
||
<input type=submit class='btn btn-primary' value='Löschen'>
|
||
</form>
|
||
</div>";
|
||
if($beantwortet){
|
||
echo "
|
||
<div style='float: left;margin:15px; height: 20px;'>
|
||
<form action='". $_SERVER["PHP_SELF"] ."' method=POST>
|
||
<input type=hidden name=aktion value=11>
|
||
<input type=hidden name=anfrageid value=$anfrageid>
|
||
<input type=submit class='btn btn-primary' value='Antwort einsehen'>
|
||
</form>
|
||
</div>
|
||
";
|
||
}
|
||
|
||
|
||
echo" </td></tr>
|
||
";
|
||
|
||
}
|
||
|
||
echo "</tbody></table>";
|
||
|
||
|
||
// Benutzer nachtragen
|
||
}else if (($_POST["aktion"] ?? '') == "2") {
|
||
|
||
echo "<form action='". $_SERVER['PHP_SELF'] . "' method=POST>";
|
||
|
||
|
||
$anfrageid = (int)($_POST["anfrageid"] ?? 0);
|
||
if ($anfrageid <= 0) {
|
||
die("Ungültige Anfrage-ID");
|
||
}
|
||
|
||
$sql = "
|
||
SELECT
|
||
a.*,
|
||
p.vorname, p.nachname, p.email, p.tele, p.geburtstag,
|
||
p.ort, p.plz, p.strasse,
|
||
aa.artname
|
||
FROM anfragen a
|
||
INNER JOIN persons p ON a.requester_person_id = p.person_id
|
||
INNER JOIN anfrageart aa ON a.anforderungart = aa.artid
|
||
WHERE a.anfrageid = ?
|
||
LIMIT 1
|
||
";
|
||
|
||
$stmt = $pdo->prepare($sql);
|
||
$stmt->execute([$anfrageid]);
|
||
$row = $stmt->fetch(PDO::FETCH_ASSOC);
|
||
|
||
if (!$row) {
|
||
echo "Anfrage nicht gefunden.";
|
||
exit;
|
||
}
|
||
|
||
// Ticket und Antwort ansehen.
|
||
$abholort = $row["abholort"] ?? null;
|
||
$sicherenachricht = $row["sicherenachricht"] ?? null;
|
||
|
||
$anfrageid = $row["anfrageid"];
|
||
$checked = $row["checked"];
|
||
$workerid = $row["workerid"];
|
||
$antwortid = $row["antwortid"] ?? null;
|
||
$date_created = $row["create_time"];
|
||
|
||
$vorname = $row["vorname"];
|
||
$nachname = $row["nachname"];
|
||
$mail = $row["email"];
|
||
$tel = $row["tele"];
|
||
|
||
$geburtstag = $row["geburtstag"];
|
||
$ausgabegeburstag = $geburtstag;
|
||
|
||
$ort = $row["ort"];
|
||
$plz = $row["plz"];
|
||
$strasse = $row["strasse"];
|
||
|
||
$ordnungsid = $row["ordnungsid"];
|
||
$ordnungsstring = GetOrdnungsid($ordnungsid);
|
||
|
||
$nachricht = $row["nachricht"];
|
||
|
||
$medikamenteins = $row["medikament1"];
|
||
$medikamentzwei = $row["medikament2"];
|
||
$medikamentdrei = $row["medikament3"];
|
||
$medikamentvier = $row["medikament4"];
|
||
$medikamentfuenf = $row["medikament5"];
|
||
$medikamentsechs = $row["medikament6"];
|
||
|
||
$anfrageart = $row["artname"];
|
||
$antworttext = $row["antworttext"] ?? null;
|
||
|
||
$WeitereInfos = "";
|
||
if ($medikamenteins) $WeitereInfos .= "Medikament1: $medikamenteins<br>";
|
||
if ($medikamentzwei) $WeitereInfos .= "Medikament2: $medikamentzwei<br>";
|
||
if ($medikamentdrei) $WeitereInfos .= "Medikament3: $medikamentdrei<br>";
|
||
if ($medikamentvier) $WeitereInfos .= "Medikament4: $medikamentvier<br>";
|
||
if ($medikamentfuenf) $WeitereInfos .= "Medikament5: $medikamentfuenf<br>";
|
||
if ($medikamentsechs) $WeitereInfos .= "Medikament6: $medikamentsechs<br>";
|
||
if ($nachricht) $WeitereInfos .= "Nachricht: $nachricht";
|
||
|
||
|
||
#$datumausgabe= date("d.m.Y H:i", strtotime($date_created ));
|
||
$currentDate = new DateTime($date_created);
|
||
$datumausgabe = $currentDate->format('d.m.Y H:i');
|
||
|
||
$ausgabeworker = GetWorkerName($workerid);
|
||
$farbe = GetStatusFarbe($checked);
|
||
$checkausgabe = GetStatus($checked);
|
||
|
||
$userausgabe = $vorname . " " . $nachname;
|
||
$adresse = $plz . " " . $ort . ", " . $strasse ;
|
||
#$body = iconv('CP1252//IGNORE', 'UTF-8' , $antworttext);
|
||
|
||
|
||
echo "<b>Person:</b><br>$userausgabe <br> $mail <br><br><b>Anfrageinformationen:</b><br>$ordnungsstring - $anfrageart <br>$WeitereInfos<br><br>";
|
||
|
||
|
||
if($sicherenachricht == 1){
|
||
echo '<div class="alert alert-success" role="alert">Interne Anfrage - Sozialdaten könnten angegeben werden.</div>';
|
||
}else{
|
||
echo '<div class="alert alert-danger" role="alert">Mail Anfrage - Sozialdaten sollten nicht angegeben werden.</div>';
|
||
}
|
||
|
||
|
||
if($abholort == "1"){
|
||
$selectid = "20";
|
||
}elseif($abholort == "2"){
|
||
$selectid = "21";
|
||
}
|
||
|
||
|
||
|
||
echo "Wählen Sie die gewünschte Mailvorlage aus:<br><br>";
|
||
|
||
$stmt = $pdo->prepare("
|
||
SELECT name, templetid
|
||
FROM mailtemplates
|
||
WHERE mailbearbeitung = 1
|
||
ORDER BY name
|
||
");
|
||
$stmt->execute();
|
||
$templates = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||
|
||
echo "<input name='aktion' type='hidden' value='3'>";
|
||
echo "<select class='form-control' name='templetid' id='templetid' onchange='templateUpdate()'>";
|
||
echo "<option value=''>Bitte auswählen</option>";
|
||
|
||
foreach ($templates as $row) {
|
||
$tid = trim((string)$row["templetid"]);
|
||
$nameRaw = (string)$row["name"];
|
||
$nameUtf8 = iconv('CP1252//IGNORE', 'UTF-8', $nameRaw);
|
||
|
||
if ($tid === "") continue;
|
||
|
||
$selected = (!empty($selectid) && (string)$selectid === $tid) ? " selected" : "";
|
||
|
||
echo "<option value='" . htmlspecialchars($tid, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8') . "'$selected>" .
|
||
htmlspecialchars($nameRaw, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8') .
|
||
"</option>";
|
||
}
|
||
|
||
echo "</select><br><br>";
|
||
|
||
|
||
|
||
// E-Mail Vorlage laden
|
||
|
||
$templetid = $_POST["templetid"] ?? "";
|
||
$templetid = trim($templetid);
|
||
|
||
$body = $betreff = $name = "";
|
||
|
||
if ($templetid !== "") {
|
||
$stmt = $pdo->prepare("
|
||
SELECT betreff, body, name
|
||
FROM mailtemplates
|
||
WHERE templetid = ?
|
||
LIMIT 1
|
||
");
|
||
$stmt->execute([$templetid]);
|
||
$rowconfig = $stmt->fetch(PDO::FETCH_ASSOC);
|
||
|
||
if ($rowconfig) {
|
||
$body = $rowconfig["body"] ?? "";
|
||
$betreff = $rowconfig["betreff"] ?? "";
|
||
$name = $rowconfig["name"] ?? "";
|
||
|
||
// Nur wenn du WIRKLICH CP1252 in der DB hast:
|
||
// (bei utf8mb4 brauchst du das NICHT!)
|
||
#$name = iconv('CP1252//IGNORE', 'UTF-8', $name);
|
||
#$betreff = iconv('CP1252//IGNORE', 'UTF-8', $betreff);
|
||
#$body = iconv('CP1252//IGNORE', 'UTF-8', $body);
|
||
}
|
||
}
|
||
|
||
|
||
echo "<h1>E-Mail bearbeiten</h1><br>";
|
||
|
||
echo "<form action='". $_SERVER['PHP_SELF'] . "' method=POST>";
|
||
echo "Betreff:<br>";
|
||
echo "<input class='form-control' name=betreff type=text value='$betreff' id='betreff' onclick='checkTemplate()'><br>";
|
||
echo '<textarea height=400 name="body" id="trumbowyg-demo" ></textarea>';
|
||
echo "<input name=aktion type=hidden value=3>";
|
||
echo "<input name=anfrageid type=hidden value='". $_POST["anfrageid"] ."' id='anfrageid'><br><br>";
|
||
echo "<input type=submit class='btn btn-primary' value='Mail versenden'><br>";
|
||
echo '</form>';
|
||
echo "<br><br>";
|
||
echo "<br><br>";
|
||
ZuruckzumAnfrageOverView();
|
||
|
||
?>
|
||
|
||
<script type="text/javascript">
|
||
tinymce.init({
|
||
selector: '#mytextarea',
|
||
height: 800,
|
||
plugins: ' advcode casechange formatpainter linkchecker autolink lists checklist media pageembed table advtable ',
|
||
toolbar: 'checklist code table',
|
||
toolbar_mode: 'floating',
|
||
});
|
||
|
||
window.addEventListener("load",function(){
|
||
templateUpdate();
|
||
},false);
|
||
|
||
</script>
|
||
<?php
|
||
}else if (($_POST["aktion"] ?? '') == "3") {
|
||
|
||
$anfrageid = (int)($_POST["anfrageid"] ?? 0);
|
||
$templetid = (int)($_POST["templetid"] ?? 0);
|
||
|
||
if ($anfrageid <= 0) {
|
||
die("Ungültige Anfrage-ID");
|
||
}
|
||
|
||
// 1) Empfänger + sicherenachricht laden
|
||
$stmt = $pdo->prepare("
|
||
SELECT acc.email, a.sicherenachricht
|
||
FROM anfragen a
|
||
LEFT JOIN persons acc ON acc.person_id = a.requester_person_id
|
||
WHERE a.anfrageid = :anfrageid
|
||
LIMIT 1
|
||
");
|
||
$stmt->execute([':anfrageid' => $anfrageid]);
|
||
$rowuser = $stmt->fetch(PDO::FETCH_ASSOC);
|
||
|
||
if (!$rowuser) {
|
||
die("Anfrage nicht gefunden.");
|
||
}
|
||
|
||
$empfaenger = (string)$rowuser["email"];
|
||
$sicherenachricht = (int)$rowuser["sicherenachricht"];
|
||
|
||
// 2) Betreff + Body aus POST
|
||
// Du speicherst in der DB offenbar CP1252 (weil du später iconv auf CP1252 machst)
|
||
$betreff_cp1252 = $_POST["betreff"] ?? "";
|
||
$body_cp1252 = $_POST["body"] ?? "";
|
||
|
||
// 3) Anfrage updaten (mit prepared statement!)
|
||
$stmt = $pdo->prepare("
|
||
UPDATE anfragen
|
||
SET
|
||
beantwortet = 1,
|
||
checked = 10,
|
||
workerid = :workerid,
|
||
antwortid = :antwortid,
|
||
antworttext = :antworttext,
|
||
mailtime = :mailtime
|
||
WHERE anfrageid = :anfrageid
|
||
");
|
||
|
||
$ok = $stmt->execute([
|
||
':workerid' => (int)$user["id"],
|
||
':antwortid' => $templetid,
|
||
':antworttext' => $body_cp1252,
|
||
':mailtime' => date("Y-m-d H:i:s"),
|
||
':anfrageid' => $anfrageid,
|
||
]);
|
||
|
||
try {
|
||
// 1) Mail senden
|
||
$mailOk = false;
|
||
|
||
if ((int)$sicherenachricht === 1) {
|
||
SendMailMessageVorlage($pdo, "3", $anfrageid, "43"); // muss true/false liefern
|
||
$mailOk = true;
|
||
} else {
|
||
$mailOk = SendMailMessage($pdo, $empfaenger, $_POST["betreff"], $_POST["body"]); // true/false
|
||
}
|
||
|
||
if (!$mailOk) {
|
||
throw new RuntimeException("E-Mail konnte nicht versendet werden.");
|
||
}
|
||
|
||
// 2) DB erst jetzt updaten
|
||
$stmt = $pdo->prepare("
|
||
UPDATE anfragen
|
||
SET beantwortet = 1,
|
||
checked = 10,
|
||
workerid = :workerid,
|
||
antwortid = :antwortid,
|
||
antworttext = :antworttext,
|
||
mailtime = :mailtime
|
||
WHERE anfrageid = :anfrageid
|
||
");
|
||
$stmt->execute([
|
||
':workerid' => (int)$user["id"],
|
||
':antwortid' => (int)$templetid,
|
||
':antworttext' => $body_cp1252,
|
||
':mailtime' => date("Y-m-d H:i:s"),
|
||
':anfrageid' => (int)$anfrageid,
|
||
]);
|
||
|
||
echo "<h3>Mail wurde versendet</h3>";
|
||
|
||
} catch (Throwable $e) {
|
||
echo "<h3>Fehler</h3>";
|
||
echo "E-Mailversand fehlgeschlagen – es wurde nichts gespeichert.<br>";
|
||
}
|
||
|
||
}else if (($_POST["aktion"] ?? '') == "4") {
|
||
echo "<h3>Urlaubsplanung</h3>";
|
||
echo "Während des Urlaubs können keine Anfragen an das Praxis Team gestellt werden.<br><br>";
|
||
|
||
echo '<div class="alert alert-danger" role="alert"><h4>Wichtige Hinweise</h4>
|
||
Nur an Tagen, die hier aufgeführt werden, können keine Anfragen gestellt werden.<br>
|
||
<br>
|
||
<b>Telefonanlage</b><br>
|
||
Die Telefonanlage wird auch über dieses Formular gesteuert.<br><br>
|
||
<b>Überprüfung</b><br>
|
||
Bitte die Setzung für die Telefonanlage hier überprüfen:<br>
|
||
<a href="https://praxis-creutzburg.de/ical/urlaub_generator.php" target="_blank">Terminüberprüfung</a>
|
||
|
||
</div>';
|
||
|
||
try {
|
||
$heute = date("Y-m-d");
|
||
|
||
$stmt = $pdo->prepare("
|
||
SELECT urlaubid, start, ende, vertretung, vertretertelefon, vertreteradresse, vertreterurl
|
||
FROM urlaub
|
||
WHERE ende >= :heute
|
||
ORDER BY start ASC
|
||
");
|
||
$stmt->execute([':heute' => $heute]);
|
||
|
||
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||
|
||
echo "<h3>Aktuell gibt es folgende Urlaubseinträge</h3>";
|
||
echo "Soll der Urlaub deaktiviert / gelöscht werden, dann das Anfangs- und Enddatum in die Vergangenheit legen und den Eintrag speichern.<br><br>";
|
||
echo "<h4>Eintragungshinweis</h4>";
|
||
echo "Bei der Einrichtung bedenken, dass freie Tage (Wochenende, Feiertage) nicht erkannt werden. <br>
|
||
So sollten Sie bei Urlaub ab Montag hier den Starttermin auf Freitag oder Samstag stellen. <br>
|
||
Gleiches gilt für ein Ende an einem Freitag. Tragen Sie dann hier als Ende Sonntag ein.<br><br><br>";
|
||
|
||
echo '<form action="' . htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8') . '" method="POST">';
|
||
|
||
foreach ($rows as $row) {
|
||
$start = (string)$row["start"];
|
||
$ende = (string)$row["ende"];
|
||
|
||
$vertretung = (string)$row["vertretung"];
|
||
$vertretertelefon = (string)$row["vertretertelefon"];
|
||
$vertreteradresse = (string)$row["vertreteradresse"];
|
||
$vertreterurl = (string)$row["vertreterurl"];
|
||
$urlaubid = (int)$row["urlaubid"];
|
||
|
||
echo "Start: <input class='form-control' name='Starttime[]' type='date' value='" . htmlspecialchars($start, ENT_QUOTES, 'UTF-8') . "'>
|
||
Ende: <input class='form-control' name='Endetime[]' type='date' value='" . htmlspecialchars($ende, ENT_QUOTES, 'UTF-8') . "'><br>
|
||
Vertretung: <input class='form-control' name='vertretung[]' type='text' value='" . htmlspecialchars($vertretung, ENT_QUOTES, 'UTF-8') . "'>";
|
||
|
||
echo "<br>Vertretung Telefon: <input class='form-control' name='vertretertelefon[]' type='text' value='" . htmlspecialchars($vertretertelefon, ENT_QUOTES, 'UTF-8') . "'>
|
||
<br>Vertretung Adresse: <input class='form-control' name='vertreteradresse[]' type='text' value='" . htmlspecialchars($vertreteradresse, ENT_QUOTES, 'UTF-8') . "'>";
|
||
|
||
echo "<br>Vertretung Webseite: <input class='form-control' name='vertreterurl[]' type='text' value='" . htmlspecialchars($vertreterurl, ENT_QUOTES, 'UTF-8') . "'>";
|
||
|
||
echo "<input name='urlaubid[]' type='hidden' value='" . $urlaubid . "'><br>";
|
||
}
|
||
|
||
echo '<div id="neuerUrlaub"></div>';
|
||
echo "<br><br>";
|
||
echo "<input name='aktion' type='hidden' value='5'>";
|
||
|
||
// Fix: href="javascript:..." war falsch geschrieben (fehlendes =)
|
||
echo '<a class="btn btn-primary" href="javascript:void(0);" onclick="AddneueTermine()">Neuer Zeitslot</a>';
|
||
|
||
} catch (PDOException $e) {
|
||
// Kein echo vom SQL direkt ins Frontend in Prod – aber zum Debuggen ok:
|
||
die("Datenbankfehler: " . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8'));
|
||
}
|
||
|
||
|
||
|
||
echo "<br><br><input type=submit class='btn btn-primary' name=eintragspeichern value='Einträge speichern'></form>";
|
||
|
||
|
||
|
||
|
||
}else if (($_POST["aktion"] ?? '') == "5") {
|
||
// Termine in DB speichern.
|
||
$i =0;
|
||
foreach ($_POST['Starttime'] as $Starttime) {
|
||
//echo $datum . "<br>";
|
||
if($_POST["Starttime"][$i] != "0000-00-00"){
|
||
//echo $_POST["urlaubid"][$i] . "<br>";
|
||
$stmt = $pdo->prepare("
|
||
INSERT INTO urlaub
|
||
(urlaubid, vertretung, start, ende, vertretertelefon, vertreteradresse, vertreterurl)
|
||
VALUES
|
||
(:urlaubid, :vertretung, :start, :ende, :telefon, :adresse, :url)
|
||
ON DUPLICATE KEY UPDATE
|
||
vertretung = VALUES(vertretung),
|
||
start = VALUES(start),
|
||
ende = VALUES(ende),
|
||
vertretertelefon = VALUES(vertretertelefon),
|
||
vertreteradresse = VALUES(vertreteradresse),
|
||
vertreterurl = VALUES(vertreterurl)
|
||
");
|
||
|
||
$ok = $stmt->execute([
|
||
':urlaubid' => (int)$_POST['urlaubid'][$i], // 0 = INSERT, >0 = UPDATE
|
||
':vertretung' => $_POST['vertretung'][$i],
|
||
':start' => $_POST['Starttime'][$i],
|
||
':ende' => $_POST['Endetime'][$i],
|
||
':telefon' => $_POST['vertretertelefon'][$i],
|
||
':adresse' => $_POST['vertreteradresse'][$i],
|
||
':url' => $_POST['vertreterurl'][$i],
|
||
]);
|
||
|
||
if (!$ok) {
|
||
throw new RuntimeException("Fehler beim Eintragen in der Datenbank.");
|
||
}
|
||
}
|
||
$i++;
|
||
}
|
||
echo "Einträge wurden in der Datenbank gespeichert!<br><br>";
|
||
|
||
}else if (($_POST["aktion"] ?? '') == "6") {
|
||
echo "<h3>Notfallsprechstunde</h3>";
|
||
echo "Während der Notfallsprechstunde gibt es einen Hinweisfeld auf der Hauptseite, aber es können noch Anfragen an das Praxis Team gestellt werden.<br>";
|
||
echo "Wird Urlaub aktiviert, dann gibt es keinen Hinweis auf die Notfallsprechstunde<br>";
|
||
// Check connection
|
||
try {
|
||
$heute = date("Y-m-d");
|
||
|
||
$stmt = $pdo->prepare("
|
||
SELECT *
|
||
FROM notfallsprechstunde
|
||
WHERE ende >= :heute
|
||
ORDER BY ende ASC
|
||
");
|
||
$stmt->execute([':heute' => $heute]);
|
||
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||
|
||
} catch (PDOException $e) {
|
||
die("Datenbankfehler: " . $e->getMessage());
|
||
}
|
||
|
||
echo "<h3>Aktuell gibt es folgende Einträge für die Notfallsprechstunde</h3>";
|
||
echo "Soll die Notfallsprechstunde deaktiviert / gelöscht werden, dann das Anfangs- und Enddatum in die Vergangenheit legen und den Eintrag speichern.<br><br><br>";
|
||
|
||
echo '<form action="' . htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8') . '" method="POST">';
|
||
|
||
foreach ($rows as $row) {
|
||
$start = $row["start"];
|
||
$ende = $row["ende"];
|
||
$hinweis = $row["hinweis"];
|
||
$notfallid = (int)$row["notfallid"];
|
||
|
||
echo "<h3>Termin " . htmlspecialchars($start, ENT_QUOTES, 'UTF-8') . " - " . htmlspecialchars($ende, ENT_QUOTES, 'UTF-8') . "</h3>";
|
||
|
||
echo "Start: <input class='form-control' name='Starttime[]' type='date' value='" . htmlspecialchars($start, ENT_QUOTES, 'UTF-8') . "'> ";
|
||
echo "Ende: <input class='form-control' name='Endetime[]' type='date' value='" . htmlspecialchars($ende, ENT_QUOTES, 'UTF-8') . "'><br>";
|
||
|
||
echo "<br>Hinweis: (Dieser Hinweis wird eins zu eins auf der Hauptseite angezeigt!):<br>";
|
||
echo "<textarea height='300' name='hinweis[]' id='trumbowyg-demo'>" . htmlspecialchars($hinweis, ENT_QUOTES, 'UTF-8') . "</textarea>";
|
||
|
||
echo "<input name='notfallid[]' type='hidden' value='" . $notfallid . "'><br>";
|
||
}
|
||
|
||
echo "<div id='neuerUrlaub'></div>";
|
||
echo "<br><br>";
|
||
echo "<input name='aktion' type='hidden' value='7'>";
|
||
echo '<a class="btn btn-primary" href="javascript:void(0);" onclick="AddneueTermineNotfall()">Neuer Zeitslot</a>';
|
||
|
||
|
||
|
||
echo "<br><br><input type=submit class='btn btn-primary' name=eintragspeichern value='Einträge speichern'></form>";
|
||
|
||
|
||
|
||
|
||
}else if (($_POST["aktion"] ?? '') == "7") {
|
||
// Termine in DB speichern.
|
||
try {
|
||
$pdo->beginTransaction();
|
||
|
||
$insertStmt = $pdo->prepare("
|
||
INSERT INTO notfallsprechstunde (start, ende, hinweis)
|
||
VALUES (:start, :ende, :hinweis)
|
||
");
|
||
|
||
$updateStmt = $pdo->prepare("
|
||
UPDATE notfallsprechstunde
|
||
SET start = :start,
|
||
ende = :ende,
|
||
hinweis = :hinweis
|
||
WHERE notfallid = :notfallid
|
||
");
|
||
|
||
foreach (($_POST['Starttime'] ?? []) as $i => $start) {
|
||
|
||
$start = (string)$start;
|
||
$ende = (string)($_POST['Endetime'][$i] ?? '');
|
||
$hinweis = (string)($_POST['hinweis'][$i] ?? '');
|
||
$notfallid = (int)($_POST['notfallid'][$i] ?? 0);
|
||
|
||
// Skip leere / ungültige Datumseinträge
|
||
if ($start === '' || $start === '0000-00-00') {
|
||
continue;
|
||
}
|
||
|
||
if ($notfallid === 0) {
|
||
$insertStmt->execute([
|
||
':start' => $start,
|
||
':ende' => $ende,
|
||
':hinweis' => $hinweis,
|
||
]);
|
||
} else {
|
||
$updateStmt->execute([
|
||
':start' => $start,
|
||
':ende' => $ende,
|
||
':hinweis' => $hinweis,
|
||
':notfallid' => $notfallid,
|
||
]);
|
||
}
|
||
}
|
||
|
||
$pdo->commit();
|
||
echo "Einträge wurden in der Datenbank gespeichert!<br><br>";
|
||
|
||
} catch (PDOException $e) {
|
||
if ($pdo->inTransaction()) {
|
||
$pdo->rollBack();
|
||
}
|
||
die("Fehler beim Eintragen in der Datenbank: " . $e->getMessage());
|
||
}
|
||
echo' <form action="'. $_SERVER["PHP_SELF"] .'" method=POST>
|
||
<input type=hidden name=aktion value=6>
|
||
<input type=submit class="btn btn-primary" value="Zurück">
|
||
</form>';
|
||
|
||
}
|
||
else if (($_POST["aktion"] ?? '') == "8") {
|
||
|
||
$anfrageid = (int)($_POST["anfrageid"] ?? 0);
|
||
|
||
$stmt = $pdo->prepare("
|
||
SELECT *
|
||
FROM anfragen a
|
||
INNER JOIN persons p ON p.person_id = a.requester_person_id
|
||
WHERE a.anfrageid = :anfrageid
|
||
LIMIT 1
|
||
");
|
||
|
||
$stmt->execute([
|
||
':anfrageid' => $anfrageid
|
||
]);
|
||
|
||
$rowtime = $stmt->fetch(PDO::FETCH_ASSOC);
|
||
|
||
if (!$rowtime) {
|
||
die("Anfrage nicht gefunden");
|
||
}
|
||
|
||
$vorname = $rowtime["vorname"];
|
||
$nachname = $rowtime["nachname"];
|
||
$userausgabe = $vorname . " " . $nachname;
|
||
|
||
|
||
echo "Name:<br>$userausgabe<br>Anforderung: $impfstofftext<br>";
|
||
echo "Wollen Sie wirklich diesen Eintrag löschen?<br>Dieses ist nicht rückgängig zu machen!<br>Dann bestätigen Sie die Abmeldung:<br>";
|
||
echo "<form action='". $_SERVER['PHP_SELF'] . "' method=POST>";
|
||
echo '<input type="hidden" name="aktion" id="aktion" value="9" />';
|
||
echo '<input type="hidden" name="anfrageid" id="anfrageid" value="'. $anfrageid .'" /><br>';
|
||
echo '<input type="submit" class="btn btn-primary" id="submitbox" value="Anforderung löschen (mit Mail)" />';
|
||
echo "<br>";
|
||
echo "<form action='". $_SERVER['PHP_SELF'] . "' method=POST>";
|
||
echo '<input type="hidden" name="aktion" id="aktion" value="10" />';
|
||
echo '<input type="hidden" name="anfrageid" id="anfrageid" value="'. $anfrageid .'" /><br>';
|
||
echo '<input type="submit" class="btn btn-primary" id="submitbox" value="Anforderung löschen (ohne Mail)" />';
|
||
echo "</form>";
|
||
echo "<br><br>";
|
||
echo "<br><br>";
|
||
ZuruckzumAnfrageOverView();
|
||
// Benutzer absagen bestätigen?
|
||
}else if (($_POST["aktion"] ?? '') == "9") {
|
||
|
||
$anfrageid = (int)($_POST["anfrageid"] ?? 0);
|
||
if ($anfrageid <= 0) {
|
||
die("Ungültige Anfrage-ID");
|
||
}
|
||
|
||
try {
|
||
$pdo->beginTransaction();
|
||
|
||
// sicherstellen, dass Anfrage existiert
|
||
$stmt = $pdo->prepare("SELECT anfrageid FROM anfragen WHERE anfrageid = :anfrageid LIMIT 1");
|
||
$stmt->execute([':anfrageid' => $anfrageid]);
|
||
if (!$stmt->fetch(PDO::FETCH_ASSOC)) {
|
||
throw new RuntimeException("Anfrage nicht gefunden");
|
||
}
|
||
|
||
// Update vorbereiten/ausführen
|
||
$stmt = $pdo->prepare("
|
||
UPDATE anfragen
|
||
SET beantwortet = 1,
|
||
checked = 30,
|
||
workerid = :workerid,
|
||
antwortid = 0
|
||
WHERE anfrageid = :anfrageid
|
||
");
|
||
$stmt->execute([
|
||
':workerid' => (int)($user["id"] ?? 0),
|
||
':anfrageid' => $anfrageid,
|
||
]);
|
||
|
||
// Mail senden (muss true liefern oder Exception werfen)
|
||
$mailOk = SendMailMessageVorlage($pdo, "3", $anfrageid, "5");
|
||
$mailOk = true;
|
||
if ($mailOk !== true) {
|
||
throw new RuntimeException("E-Mailversand fehlgeschlagen");
|
||
}
|
||
|
||
$pdo->commit();
|
||
|
||
echo "<h4>Die Anfrage wurde erfolgreich gelöscht!</h4><br>";
|
||
echo "Der Kunde erhält gleich eine schriftliche Bestätigung per E-Mail<br>";
|
||
|
||
} catch (Throwable $e) {
|
||
if ($pdo->inTransaction()) {
|
||
$pdo->rollBack();
|
||
}
|
||
echo "<h4>Fehler:</h4> " . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8');
|
||
}
|
||
|
||
echo "<br>";
|
||
echo "<br><br><br>";
|
||
ZuruckzumAnfrageOverView();
|
||
|
||
|
||
|
||
//Termin für den Benutzerraussuchen
|
||
}else if (($_POST["aktion"] ?? '') == "10") {
|
||
|
||
$anfrageid = (int)($_POST["anfrageid"] ?? 0);
|
||
if ($anfrageid <= 0) {
|
||
die("Ungültige Anfrage-ID");
|
||
}
|
||
|
||
// 1) Anfrage + Person laden (JOIN persons statt user)
|
||
$stmt = $pdo->prepare("
|
||
SELECT
|
||
a.anfrageid,
|
||
a.checked,
|
||
a.timeid,
|
||
a.requester_person_id,
|
||
|
||
p.vorname,
|
||
p.nachname,
|
||
p.mail,
|
||
p.tele,
|
||
p.jahrgang
|
||
FROM anfragen a
|
||
INNER JOIN persons p ON p.person_id = a.requester_person_id
|
||
WHERE a.anfrageid = :anfrageid
|
||
LIMIT 1
|
||
");
|
||
$stmt->execute([':anfrageid' => $anfrageid]);
|
||
$row = $stmt->fetch(PDO::FETCH_ASSOC);
|
||
|
||
if (!$row) {
|
||
die("Anfrage nicht gefunden");
|
||
}
|
||
|
||
$requesterPersonId = (int)$row["requester_person_id"];
|
||
$checked = (int)$row["checked"];
|
||
$timeid = $row["timeid"]; // kann NULL sein
|
||
|
||
$vorname = $row["vorname"];
|
||
$nachname = $row["nachname"];
|
||
$mail = $row["mail"];
|
||
$tel = $row["tele"];
|
||
$jahrgang = $row["jahrgang"];
|
||
|
||
$userausgabe = $vorname . " " . $nachname;
|
||
|
||
// Debug wie vorher (falls du es noch brauchst)
|
||
echo htmlspecialchars((string)$timeid, ENT_QUOTES, 'UTF-8');
|
||
|
||
// 2) Anfrage “löschen/abschließen” (ohne Mail)
|
||
$stmt = $pdo->prepare("
|
||
UPDATE anfragen
|
||
SET beantwortet = 1,
|
||
checked = 31,
|
||
workerid = :workerid,
|
||
antwortid = 0
|
||
WHERE anfrageid = :anfrageid
|
||
");
|
||
$ok = $stmt->execute([
|
||
':workerid' => (int)($user["id"] ?? 0),
|
||
':anfrageid' => $anfrageid,
|
||
]);
|
||
|
||
if ($ok) {
|
||
echo "<h4>Der Termin wurde erfolgreich gelöscht!</h4><br>";
|
||
echo "Der Kunde erhält keine schriftliche Bestätigung per E-Mail<br><br><br>";
|
||
} else {
|
||
echo "<h4>Fehler beim Update.</h4>";
|
||
}
|
||
|
||
echo "<br><br><br>";
|
||
ZuruckzumAnfrageOverView();
|
||
|
||
}else if (($_POST["aktion"] ?? '') == "11") {
|
||
|
||
$anfrageid_post = (int)($_POST["anfrageid"] ?? 0);
|
||
if ($anfrageid_post <= 0) {
|
||
die("Ungültige Anfrage-ID");
|
||
}
|
||
|
||
$stmt = $pdo->prepare("
|
||
SELECT
|
||
a.anfrageid,
|
||
a.checked,
|
||
a.workerid,
|
||
a.antwortid,
|
||
a.antworttext,
|
||
a.create_time,
|
||
a.ordnungsid,
|
||
a.nachricht,
|
||
a.medikament1,
|
||
a.medikament2,
|
||
a.sicherenachricht,
|
||
a.abholort,
|
||
|
||
p.person_id,
|
||
p.vorname,
|
||
p.nachname,
|
||
p.email,
|
||
p.tele,
|
||
p.geburtstag,
|
||
p.ort,
|
||
p.plz,
|
||
p.strasse,
|
||
|
||
aa.artname AS anfrageart_name
|
||
FROM anfragen a
|
||
INNER JOIN persons p ON p.person_id = a.requester_person_id
|
||
INNER JOIN anfrageart aa ON a.anforderungart = aa.artid
|
||
WHERE a.anfrageid = :anfrageid
|
||
LIMIT 1
|
||
");
|
||
$stmt->execute([':anfrageid' => $anfrageid_post]);
|
||
$row = $stmt->fetch(PDO::FETCH_ASSOC);
|
||
|
||
if (!$row) {
|
||
die("Anfrage nicht gefunden.");
|
||
}
|
||
|
||
/* --- Werte aus DB --- */
|
||
$anfrageid = (int)$row["anfrageid"];
|
||
$checked = (int)$row["checked"];
|
||
$workerid = (int)$row["workerid"];
|
||
$antwortid = (int)($row["antwortid"] ?? 0);
|
||
$dateCreated = $row["create_time"] ?? null;
|
||
|
||
$vorname = $row["vorname"] ?? "";
|
||
$nachname = $row["nachname"] ?? "";
|
||
$mail = $row["email"] ?? "";
|
||
$tel = $row["tele"] ?? "";
|
||
|
||
$geburtstag = $row["geburtstag"] ?? "";
|
||
$ausgabegeburstag = $geburtstag;
|
||
|
||
$ort = $row["ort"] ?? "";
|
||
$plz = $row["plz"] ?? "";
|
||
$strasse = $row["strasse"] ?? "";
|
||
|
||
$ordnungsid = $row["ordnungsid"] ?? null;
|
||
$ordnungsstring = GetOrdnungsid($ordnungsid);
|
||
|
||
$nachricht = $row["nachricht"] ?? "";
|
||
$medikamenteins = $row["medikament1"] ?? "";
|
||
$medikamentzwei = $row["medikament2"] ?? "";
|
||
|
||
$anfrageart = $row["anfrageart_name"] ?? "";
|
||
$antworttext = $row["antworttext"] ?? "";
|
||
|
||
/* --- Anzeige-Strings --- */
|
||
$WeitereInfos = "";
|
||
if (!empty($medikamenteins)) {
|
||
$WeitereInfos .= "Medikament1: " . htmlspecialchars($medikamenteins, ENT_QUOTES, 'UTF-8') . "<br>";
|
||
}
|
||
if (!empty($medikamentzwei)) {
|
||
$WeitereInfos .= "Medikament2: " . htmlspecialchars($medikamentzwei, ENT_QUOTES, 'UTF-8') . "<br>";
|
||
}
|
||
if (!empty($nachricht)) {
|
||
// Wenn $nachricht HTML enthalten darf: NICHT htmlspecialchars verwenden!
|
||
// Sonst XSS-Risiko. Dann lieber erlaubte Tags mit strip_tags whitelist.
|
||
$WeitereInfos .= "Nachricht: " . nl2br(htmlspecialchars($nachricht, ENT_QUOTES, 'UTF-8'));
|
||
}
|
||
|
||
$datumausgabe = "";
|
||
if (!empty($dateCreated)) {
|
||
$currentDate = new DateTime($dateCreated);
|
||
$datumausgabe = $currentDate->format('d.m.Y H:i');
|
||
}
|
||
|
||
$ausgabeworker = GetWorkerName($workerid);
|
||
$farbe = GetStatusFarbe($checked);
|
||
$checkausgabe = GetStatus($checked);
|
||
|
||
$userausgabe = trim($vorname . " " . $nachname);
|
||
$adresse = trim($plz . " " . $ort . ", " . $strasse);
|
||
|
||
/* --- Betreff + Body der Antwortvorlage laden (optional) --- */
|
||
$betreff = "";
|
||
$templateBody = "";
|
||
if ($antwortid > 0) {
|
||
$stmtT = $pdo->prepare("
|
||
SELECT betreff, body
|
||
FROM mailtemplates
|
||
WHERE templetid = :tid
|
||
LIMIT 1
|
||
");
|
||
$stmtT->execute([':tid' => $antwortid]);
|
||
$tpl = $stmtT->fetch(PDO::FETCH_ASSOC);
|
||
|
||
if ($tpl) {
|
||
// DB ist bei dir oft CP1252 gespeichert:
|
||
$betreff = iconv('CP1252//IGNORE', 'UTF-8', $tpl["betreff"] ?? "");
|
||
$templateBody = iconv('CP1252//IGNORE', 'UTF-8', $tpl["body"] ?? "");
|
||
}
|
||
}
|
||
|
||
// Falls du statt Template den gespeicherten Antworttext anzeigen willst:
|
||
$body = iconv('CP1252//IGNORE', 'UTF-8', $antworttext);
|
||
|
||
/* --- Output --- */
|
||
echo "<b>Person:</b><br>" .
|
||
htmlspecialchars($userausgabe, ENT_QUOTES, 'UTF-8') . "<br>" .
|
||
htmlspecialchars($mail, ENT_QUOTES, 'UTF-8') . "<br>" .
|
||
htmlspecialchars($tel, ENT_QUOTES, 'UTF-8') . "<br><br>" .
|
||
|
||
"<b>Adresse:</b><br>" .
|
||
htmlspecialchars($adresse, ENT_QUOTES, 'UTF-8') . "<br><br>" .
|
||
|
||
"<b>Anfrageinformationen:</b><br>" .
|
||
htmlspecialchars($ordnungsstring, ENT_QUOTES, 'UTF-8') . " - " .
|
||
htmlspecialchars($anfrageart, ENT_QUOTES, 'UTF-8') . "<br>" .
|
||
$WeitereInfos . "<br><br>" .
|
||
|
||
"<b>Status der Anfrage:</b><br>" .
|
||
htmlspecialchars($checkausgabe, ENT_QUOTES, 'UTF-8') . " - " .
|
||
htmlspecialchars($datumausgabe, ENT_QUOTES, 'UTF-8') . "<br>" .
|
||
htmlspecialchars($ausgabeworker, ENT_QUOTES, 'UTF-8');
|
||
|
||
echo "<br><br>";
|
||
echo "<b>Vorlage der Antwortmail:</b><br>";
|
||
echo "Betreff: " . htmlspecialchars($betreff, ENT_QUOTES, 'UTF-8') . "<br>";
|
||
echo "Inhalt:<br>";
|
||
echo $body . "<br>"; // bewusst NICHT escaped, wenn HTML im Body erlaubt ist
|
||
echo "<br><br>";
|
||
|
||
ZuruckzumAnfrageOverView();
|
||
|
||
|
||
|
||
|
||
}else if (($_POST["aktion"] ?? '') == "benutzersuche") {
|
||
#echo '<pre>';
|
||
#print_r($_POST);
|
||
#echo '</pre>';
|
||
echo "<h3>Anfragenübersicht</h3>";
|
||
|
||
if(is_null($_POST["userid_input"]) || $_POST["userid_input"] == "" ){
|
||
|
||
echo "Sie haben keinen Benutzer über die Autovervollständigung ausgewählt.<br>
|
||
Deswegen wählen Sie aus diesem Drop-Down-Menü aus.<br><br>";
|
||
|
||
$term = trim(strip_tags($_POST["skill_input"]));
|
||
$like = "%" . $term . "%";
|
||
|
||
$sql = "
|
||
SELECT person_id, vorname, nachname, geburtstag, email, tele
|
||
FROM persons
|
||
WHERE vorname LIKE :term
|
||
OR nachname LIKE :term
|
||
OR email LIKE :term
|
||
OR tele LIKE :term
|
||
ORDER BY nachname, vorname
|
||
";
|
||
|
||
$stmt = $pdo->prepare($sql);
|
||
$stmt->execute([':term' => $like]);
|
||
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||
|
||
echo "<form action='" . $_SERVER['PHP_SELF'] . "' id='formbenutzersuche' method='POST'>";
|
||
echo '<input type="hidden" name="aktion" value="benutzersuche" />';
|
||
echo '<label>Benutzersuche:</label>';
|
||
echo '<select class="form-control" name="userid_input" required>';
|
||
|
||
foreach ($rows as $row) {
|
||
$person_id = $row['person_id'];
|
||
$name = htmlspecialchars($row['nachname'], ENT_QUOTES, 'UTF-8');
|
||
$vorname = htmlspecialchars($row['vorname'], ENT_QUOTES, 'UTF-8');
|
||
$geburtstag = htmlspecialchars($row['geburtstag'], ENT_QUOTES, 'UTF-8');
|
||
|
||
echo "<option value='$person_id'>$name, $vorname - $geburtstag</option>";
|
||
}
|
||
|
||
echo '</select>';
|
||
echo "<br><br>";
|
||
echo "<input type=submit class='btn btn-primary' value='Benutzer aufrufen'>";
|
||
echo "</form>";
|
||
|
||
|
||
|
||
|
||
}else{
|
||
?>
|
||
|
||
<p>Hier finden Sie die letzten 20 Anfragen des Benutzers.</p>
|
||
|
||
|
||
|
||
<?php
|
||
|
||
$personId = (int)($_POST["userid_input"] ?? 0);
|
||
if ($personId <= 0) {
|
||
die("Ungültige Person-ID");
|
||
}
|
||
|
||
$stmtPerson = $pdo->prepare("
|
||
SELECT
|
||
person_id,
|
||
vorname,
|
||
nachname,
|
||
email,
|
||
tele,
|
||
geburtstag
|
||
FROM persons
|
||
WHERE person_id = :pid
|
||
LIMIT 1
|
||
");
|
||
$stmtPerson->execute([':pid' => $personId]);
|
||
$rowperson = $stmtPerson->fetch(PDO::FETCH_ASSOC);
|
||
|
||
if (!$rowperson) {
|
||
die("Person nicht gefunden.");
|
||
}
|
||
|
||
$vorname = $rowperson["vorname"] ?? "";
|
||
$nachname = $rowperson["nachname"] ?? "";
|
||
$mail = $rowperson["email"] ?? "";
|
||
$tel = $rowperson["tele"] ?? "";
|
||
$geburtstag = $rowperson["geburtstag"] ?? "";
|
||
|
||
|
||
$ausgabegeburstag = ($geburtstag === "0000-00-00" || $geburtstag === "" || $geburtstag === null)
|
||
? $jahrgang
|
||
: $geburtstag;
|
||
|
||
echo "Benutzer " . htmlspecialchars($vorname, ENT_QUOTES, 'UTF-8') . " " . htmlspecialchars($nachname, ENT_QUOTES, 'UTF-8') . "<br><br>";
|
||
|
||
$stmt = $pdo->prepare("
|
||
SELECT
|
||
a.anfrageid,
|
||
a.requester_person_id,
|
||
a.checked,
|
||
a.workerid,
|
||
a.create_time,
|
||
a.nachricht,
|
||
a.ordnungsid,
|
||
a.medikament1,
|
||
a.medikament2,
|
||
a.medikament3,
|
||
a.medikament4,
|
||
a.medikament5,
|
||
a.medikament6,
|
||
|
||
aa.artname AS anfrageart_name,
|
||
|
||
p.vorname,
|
||
p.nachname,
|
||
p.email,
|
||
p.tele,
|
||
p.geburtstag,
|
||
p.ort,
|
||
p.plz,
|
||
p.strasse
|
||
FROM anfragen a
|
||
INNER JOIN persons p ON p.person_id = a.requester_person_id
|
||
INNER JOIN anfrageart aa ON aa.artid = a.anforderungart
|
||
WHERE a.requester_person_id = :pid
|
||
ORDER BY a.create_time DESC
|
||
LIMIT 20
|
||
");
|
||
$stmt->execute([':pid' => $personId]);
|
||
|
||
echo '<table class="table">';
|
||
echo '<thead><tr><th scope="col">Person/Adresse</th><th scope="col">Anfrage/Status</th><th scope="col">Aktion</th></tr></thead>';
|
||
echo "<tbody>";
|
||
|
||
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
|
||
|
||
$anfrageid = (int)$row["anfrageid"];
|
||
$checked = (int)$row["checked"];
|
||
$workerid = (int)$row["workerid"];
|
||
$dateCreated = $row["create_time"] ?? "";
|
||
|
||
$vorname = $row["vorname"] ?? "";
|
||
$nachname = $row["nachname"] ?? "";
|
||
$mail = $row["email"] ?? "";
|
||
$tel = $row["tele"] ?? "";
|
||
|
||
$geburtstag = $row["geburtstag"] ?? "";
|
||
$jahrgang = $row["jahrgang"] ?? "";
|
||
$ausgabegeburstag = ($geburtstag === "0000-00-00" || $geburtstag === "" || $geburtstag === null)
|
||
? $jahrgang
|
||
: $geburtstag;
|
||
|
||
$ort = $row["ort"] ?? "";
|
||
$plz = $row["plz"] ?? "";
|
||
$strasse = $row["strasse"] ?? "";
|
||
|
||
$nachricht = $row["nachricht"] ?? "";
|
||
$med1 = $row["medikament1"] ?? "";
|
||
$med2 = $row["medikament2"] ?? "";
|
||
$med3 = $row["medikament3"] ?? "";
|
||
$med4 = $row["medikament4"] ?? "";
|
||
$med5 = $row["medikament5"] ?? "";
|
||
$med6 = $row["medikament6"] ?? "";
|
||
|
||
$anfrageart = $row["anfrageart_name"] ?? "";
|
||
|
||
$ordnungsid = $row["ordnungsid"] ?? null;
|
||
$ordnungsstring = GetOrdnungsid($ordnungsid);
|
||
|
||
$WeitereInfos = "";
|
||
if (!empty($med1)) $WeitereInfos .= "Medikament1: " . htmlspecialchars($med1, ENT_QUOTES, 'UTF-8') . "<br>";
|
||
if (!empty($med2)) $WeitereInfos .= "Medikament2: " . htmlspecialchars($med2, ENT_QUOTES, 'UTF-8') . "<br>";
|
||
if (!empty($med3)) $WeitereInfos .= "Medikament3: " . htmlspecialchars($med3, ENT_QUOTES, 'UTF-8') . "<br>";
|
||
if (!empty($med4)) $WeitereInfos .= "Medikament4: " . htmlspecialchars($med4, ENT_QUOTES, 'UTF-8') . "<br>";
|
||
if (!empty($med5)) $WeitereInfos .= "Medikament5: " . htmlspecialchars($med5, ENT_QUOTES, 'UTF-8') . "<br>";
|
||
if (!empty($med6)) $WeitereInfos .= "Medikament6: " . htmlspecialchars($med6, ENT_QUOTES, 'UTF-8') . "<br>";
|
||
|
||
if (!empty($nachricht)) {
|
||
$WeitereInfos .= "Nachricht: " . nl2br(htmlspecialchars($nachricht, ENT_QUOTES, 'UTF-8'));
|
||
}
|
||
|
||
$userausgabe = trim($vorname . " " . $nachname) . "<br>" . htmlspecialchars((string)$ausgabegeburstag, ENT_QUOTES, 'UTF-8');
|
||
$adresse = trim($plz . " " . $ort . "<br>" . $strasse);
|
||
|
||
$farbe = GetStatusFarbe($checked);
|
||
$checkausgabe = GetStatus($checked);
|
||
|
||
echo "<tr>";
|
||
echo "<td>"
|
||
. htmlspecialchars(trim($vorname . " " . $nachname), ENT_QUOTES, 'UTF-8')
|
||
. "<br>" . htmlspecialchars($mail, ENT_QUOTES, 'UTF-8')
|
||
. "<br>Tel: <a href='tel:" . htmlspecialchars($tel, ENT_QUOTES, 'UTF-8') . "'>" . htmlspecialchars($tel, ENT_QUOTES, 'UTF-8') . "</a>"
|
||
. "<br>" . htmlspecialchars($plz . " " . $ort . ", " . $strasse, ENT_QUOTES, 'UTF-8')
|
||
. "</td>";
|
||
|
||
echo "<td>"
|
||
. htmlspecialchars($ordnungsstring, ENT_QUOTES, 'UTF-8') . " - " . htmlspecialchars($anfrageart, ENT_QUOTES, 'UTF-8')
|
||
. "<br><br>" . $WeitereInfos
|
||
. "<br><br><span style='background-color:" . htmlspecialchars($farbe, ENT_QUOTES, 'UTF-8') . "; padding:2px 6px;'>"
|
||
. htmlspecialchars($checkausgabe, ENT_QUOTES, 'UTF-8')
|
||
. "</span>"
|
||
. "<br>" . htmlspecialchars($dateCreated, ENT_QUOTES, 'UTF-8')
|
||
. "</td>";
|
||
|
||
echo "<td>
|
||
<form action='" . $_SERVER["PHP_SELF"] . "' method='POST'>
|
||
<input type='hidden' name='aktion' value='11'>
|
||
<input type='hidden' name='anfrageid' value='" . (int)$anfrageid . "'>
|
||
<button type='submit' class='btn btn-primary btn-sm'>Antwort einsehen</button>
|
||
</form>
|
||
</td>";
|
||
|
||
echo "</tr>";
|
||
}
|
||
|
||
echo "</tbody></table>";
|
||
//echo "</div>";
|
||
echo "<br><br>";
|
||
echo "<h3>Impfübersicht Benutzer</h3>";
|
||
|
||
$personId = (int)($_POST["userid_input"] ?? 0);
|
||
if ($personId <= 0) {
|
||
die("Ungültige Person-ID");
|
||
}
|
||
|
||
// Person laden (persons statt user)
|
||
$stmtPerson = $pdo->prepare("
|
||
SELECT
|
||
person_id,
|
||
vorname,
|
||
nachname,
|
||
email,
|
||
tele,
|
||
geburtstag
|
||
FROM persons
|
||
WHERE person_id = :pid
|
||
LIMIT 1
|
||
");
|
||
$stmtPerson->execute([':pid' => $personId]);
|
||
$rowperson = $stmtPerson->fetch(PDO::FETCH_ASSOC);
|
||
|
||
if (!$rowperson) {
|
||
die("Person nicht gefunden.");
|
||
}
|
||
|
||
$vorname = $rowperson["vorname"] ?? "";
|
||
$nachname = $rowperson["nachname"] ?? "";
|
||
$mail = $rowperson["email"] ?? "";
|
||
$tel = $rowperson["tele"] ?? "";
|
||
$geburtstag = $rowperson["geburtstag"] ?? "";
|
||
|
||
|
||
$ausgabegeburstag = ($geburtstag === "0000-00-00" || $geburtstag === "" || $geburtstag === null)
|
||
? $jahrgang
|
||
: $geburtstag;
|
||
|
||
echo "Benutzer " . htmlspecialchars($vorname, ENT_QUOTES, "UTF-8") . " " . htmlspecialchars($nachname, ENT_QUOTES, "UTF-8") . "<br>";
|
||
|
||
// Umbuchen-Form (person_id weitergeben)
|
||
echo "
|
||
<form action='" . $_SERVER["PHP_SELF"] . "' method='POST'>
|
||
<input type='hidden' name='aktion' value='umbuchen'>
|
||
<input type='hidden' name='person_id' value='" . (int)$personId . "'>
|
||
<input type='submit' class='btn btn-primary btn-sm' value='Neuer Termin'>
|
||
</form>
|
||
";
|
||
|
||
// --- Impftermine zählen (prepared statt query)
|
||
$sqlImpftermine = "
|
||
SELECT
|
||
it.*,
|
||
ts.*
|
||
FROM impftermin it
|
||
INNER JOIN timeslots ts ON it.timeid = ts.timeid
|
||
WHERE it.userid = :pid
|
||
ORDER BY ts.date DESC, ts.start
|
||
";
|
||
|
||
$stmt = $pdo->prepare($sqlImpftermine);
|
||
$stmt->execute([':pid' => $personId]);
|
||
$count = $stmt->rowCount();
|
||
|
||
echo "<h4>Impftermine</h4>";
|
||
if ($count == 0) {
|
||
echo "Der Benutzer hat keine Impftermine.<br><br>";
|
||
} else {
|
||
// Wenn deine Funktion SQL-String erwartet:
|
||
// Achtung: dann müsste ShowImpfTerminTab intern selbst mit PDO arbeiten
|
||
// Besser: du gibst ihr $personId und lässt sie selber abfragen.
|
||
|
||
$sqlImpftermine = "
|
||
SELECT
|
||
it.*,
|
||
ts.*
|
||
FROM impftermin it
|
||
INNER JOIN timeslots ts ON it.timeid = ts.timeid
|
||
WHERE it.userid = $personId
|
||
ORDER BY ts.date DESC, ts.start
|
||
";
|
||
|
||
|
||
|
||
ShowImpfTerminTab($sqlImpftermine); // falls du es so erweitern kannst
|
||
// Alternativ (wenn ShowImpfTerminTab nur String kann): du musst die Funktion anpassen.
|
||
}
|
||
|
||
echo "<br><br><h4>Warteliste</h4>";
|
||
|
||
$sqlWarte = "
|
||
SELECT *
|
||
FROM warteliste
|
||
WHERE userid = :pid
|
||
";
|
||
$stmtW = $pdo->prepare($sqlWarte);
|
||
$stmtW->execute([':pid' => $personId]);
|
||
$countW = $stmtW->rowCount();
|
||
|
||
if ($countW == 0) {
|
||
echo "Der Benutzer hat keinen Wartelistenplatz.<br><br>";
|
||
} else {
|
||
ShowWartelisteTab($sqlWarte, [':pid' => $personId]); // falls du es so erweitern kannst
|
||
}
|
||
|
||
}
|
||
|
||
|
||
}else if (($_POST["aktion"] ?? '') == "12") {
|
||
// Auswertung von Anfragen
|
||
echo "Hier wird eine Auswertung über alle Tickets angezeigt:<br><br>";
|
||
|
||
$today = date('Y-m-d');
|
||
#$siebentagezurueck = date('Y-m-d 00:00:00', strtotime($today . ' -7 day'));
|
||
$currentDate = new DateTime();
|
||
//Use the subtract function to subtract a DateInterval
|
||
$yesterdayTime = $currentDate->sub(new DateInterval('P7D'));
|
||
//Get yesterday date
|
||
$siebentagezurueck = $yesterdayTime->format('Y-m-d 00:00:00');
|
||
$currentDate = new DateTime();
|
||
//Use the subtract function to subtract a DateInterval
|
||
$yesterdayTime = $currentDate->sub(new DateInterval('P1Y'));
|
||
//Get yesterday date
|
||
$letzterjahrstring = $yesterdayTime->format('Y-m-d 00:00:00');
|
||
$currentDate = new DateTime();
|
||
//Use the subtract function to subtract a DateInterval
|
||
$yesterdayTime = $currentDate->sub(new DateInterval('P1M'));
|
||
//Get yesterday date
|
||
$letztermonatstring = $yesterdayTime->format('Y-m-d 00:00:00');
|
||
#$letztermonatstring = date('Y-m-01 00:00:00', strtotime($today . ' - 1 month'));
|
||
#$letzterjahrstring = date('Y-01-01 00:00:00', strtotime($today . ' - 1 year'));
|
||
$diesesjahrzurueck = date('Y-01-01 00:00:00');
|
||
$diesesmonatstring = date('Y-m-01 00:00:00');
|
||
|
||
$sql = "
|
||
SELECT
|
||
u.vorname,
|
||
u.nachname,
|
||
a.workerid,
|
||
COUNT(*) AS alltimenum,
|
||
|
||
SUM(CASE WHEN a.create_time >= :diesesjahrzurueck THEN 1 ELSE 0 END) AS allyeartime,
|
||
SUM(CASE WHEN a.create_time >= :diesesmonatstring THEN 1 ELSE 0 END) AS thismonthtime,
|
||
|
||
SUM(CASE WHEN a.create_time >= :letzterjahrstring AND a.create_time <= :diesesjahrzurueck THEN 1 ELSE 0 END) AS lastyeartime,
|
||
SUM(CASE WHEN a.create_time >= :letztermonatstring AND a.create_time <= :diesesmonatstring THEN 1 ELSE 0 END) AS lastmonthtime,
|
||
|
||
SUM(CASE WHEN a.create_time >= :siebentagezurueck THEN 1 ELSE 0 END) AS lastweektime,
|
||
|
||
MIN(a.create_time) AS begintime
|
||
FROM anfragen a
|
||
INNER JOIN users_worker uw ON a.workerid = uw.workerid
|
||
INNER JOIN users u ON uw.userid = u.id
|
||
WHERE a.workerid != 0
|
||
GROUP BY a.workerid
|
||
ORDER BY u.nachname, u.vorname
|
||
";
|
||
|
||
$stmt = $pdo->prepare($sql);
|
||
$stmt->execute([
|
||
':diesesjahrzurueck' => $diesesjahrzurueck,
|
||
':diesesmonatstring' => $diesesmonatstring,
|
||
':letzterjahrstring' => $letzterjahrstring,
|
||
':letztermonatstring' => $letztermonatstring,
|
||
':siebentagezurueck' => $siebentagezurueck,
|
||
]);
|
||
|
||
echo "<table width='100%' border='1' class='table table-striped'>";
|
||
echo "<tr>
|
||
<th scope='col'>Person</th>
|
||
<th scope='col'>letzten 7 Tage</th>
|
||
<th scope='col'>Dieses Monat</th>
|
||
<th scope='col'>Letzter Monat</th>
|
||
<th scope='col'>Dieses Jahr</th>
|
||
<th scope='col'>Letztes Jahr</th>
|
||
<th scope='col'>Seit Beginn</th>
|
||
</tr>";
|
||
|
||
$gesamtletztewoche = 0;
|
||
$gesamtletztenmonat = 0;
|
||
$gesamtdiesenmonat = 0;
|
||
$gesamtdiesesjahr = 0;
|
||
$gesamtletztesjahr = 0;
|
||
$gesamtgesamt = 0;
|
||
|
||
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
|
||
|
||
$begintime = $row["begintime"] ?? null;
|
||
if ($begintime) {
|
||
$currentDate = new DateTime($begintime);
|
||
$begintime = $currentDate->format('d.m.Y');
|
||
} else {
|
||
$begintime = "-";
|
||
}
|
||
|
||
$workerid = (int)($row["workerid"] ?? 0);
|
||
$alltimenum = (int)($row["alltimenum"] ?? 0);
|
||
$allyeartime = (int)($row["allyeartime"] ?? 0);
|
||
$lastweektime = (int)($row["lastweektime"] ?? 0);
|
||
$thismonthtime = (int)($row["thismonthtime"] ?? 0);
|
||
$lastmonthtime = (int)($row["lastmonthtime"] ?? 0);
|
||
$lastyeartime = (int)($row["lastyeartime"] ?? 0);
|
||
|
||
// Summen
|
||
$gesamtletztewoche += $lastweektime;
|
||
$gesamtletztenmonat += $lastmonthtime;
|
||
$gesamtdiesenmonat += $thismonthtime;
|
||
$gesamtdiesesjahr += $allyeartime;
|
||
$gesamtletztesjahr += $lastyeartime;
|
||
$gesamtgesamt += $alltimenum;
|
||
|
||
$vorname = htmlspecialchars($row["vorname"] ?? "", ENT_QUOTES, 'UTF-8');
|
||
$nachname = htmlspecialchars($row["nachname"] ?? "", ENT_QUOTES, 'UTF-8');
|
||
|
||
echo "
|
||
<tr>
|
||
<td>$nachname, $vorname</td>
|
||
<td>$lastweektime</td>
|
||
<td>$thismonthtime</td>
|
||
<td>$lastmonthtime</td>
|
||
<td>$allyeartime</td>
|
||
<td>$lastyeartime</td>
|
||
<td>$alltimenum seit $begintime</td>
|
||
</tr>
|
||
";
|
||
}
|
||
echo "
|
||
<tr style='font-weight:bold'>
|
||
<td>Gesamt:</td>
|
||
<td>$gesamtletztewoche</td>
|
||
<td>$gesamtdiesenmonat</td>
|
||
<td>$gesamtletztenmonat</td>
|
||
<td>$gesamtdiesesjahr</td>
|
||
<td>$gesamtletztesjahr</td>
|
||
<td>$gesamtgesamt</td>
|
||
</tr>
|
||
|
||
";
|
||
echo "</table>";
|
||
|
||
echo "<h3>Auswertung durchschnittliche Bearbeitungszeit</h3>";
|
||
|
||
$sql = "
|
||
SELECT
|
||
AVG(DATEDIFF(mailtime, create_time)) AS dauer,
|
||
COUNT(*) AS anzahl
|
||
FROM anfragen
|
||
WHERE create_time >= :siebentage
|
||
AND mailtime IS NOT NULL
|
||
";
|
||
|
||
$stmtAvg = $pdo->prepare($sql);
|
||
$stmtAvg->execute([
|
||
':siebentage' => $siebentagezurueck
|
||
]);
|
||
|
||
$row = $stmtAvg->fetch(PDO::FETCH_ASSOC);
|
||
|
||
$dauer = (float)($row["dauer"] ?? 0);
|
||
$anzahl = (int)($row["anzahl"] ?? 0);
|
||
$dauerstunden = ceil($dauer * 24);
|
||
|
||
echo "
|
||
Es wurden $anzahl Anfragen in den letzten sieben Tagen bearbeitet.<br>
|
||
Die Bearbeitung erfolgt durchschnittlich nach <b>$dauerstunden Stunden</b>.<br>
|
||
";
|
||
|
||
|
||
|
||
}else if (($_POST["aktion"] ?? '') == "13") {
|
||
//Infomail über Impfung versenden
|
||
|
||
$impfstoff = (int)($_POST["impfstoff"] ?? -1);
|
||
|
||
// Mapping: welche Kombination aus impfenangebot + impfstoff soll gezogen werden?
|
||
// (entspricht deiner alten Logik, nur korrekt geklammert)
|
||
switch ($impfstoff) {
|
||
case 0:
|
||
$impfenangebot = 1;
|
||
$zielImpfstoff = 1;
|
||
break;
|
||
case 1:
|
||
$impfenangebot = 1;
|
||
$zielImpfstoff = 2;
|
||
break;
|
||
case 2:
|
||
$impfenangebot = 2;
|
||
$zielImpfstoff = 1;
|
||
break;
|
||
case 3:
|
||
$impfenangebot = 2;
|
||
$zielImpfstoff = 2;
|
||
break;
|
||
default:
|
||
die("Ungültiger Impfstoff-Parameter");
|
||
}
|
||
|
||
// 1) Warteliste holen (max 30)
|
||
// Wichtig: Klammern, sonst falsche Treffer durch OR/AND
|
||
$sql = "
|
||
SELECT
|
||
w.warteid,
|
||
w.userid AS person_id,
|
||
w.timeid,
|
||
w.hash
|
||
FROM warteliste w
|
||
WHERE w.impfenangebot = :angebot
|
||
AND (w.impfstoff = 0 OR w.impfstoff = :zielImpfstoff)
|
||
LIMIT 30
|
||
";
|
||
|
||
$stmt = $pdo->prepare($sql);
|
||
$stmt->execute([
|
||
':angebot' => $impfenangebot,
|
||
':zielImpfstoff'=> $zielImpfstoff
|
||
]);
|
||
|
||
$wartelisteRows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||
|
||
foreach ($wartelisteRows as $row) {
|
||
$personId = (int)$row["person_id"];
|
||
$warteid = (int)$row["warteid"];
|
||
$timeid = $row["timeid"]; // falls vorhanden
|
||
$hash = $row["hash"]; // falls vorhanden
|
||
|
||
// Wenn du debuggen willst:
|
||
// echo htmlspecialchars((string)$timeid, ENT_QUOTES, 'UTF-8') . "<br>";
|
||
|
||
// 2) Person aus persons laden
|
||
$stmtPerson = $pdo->prepare("
|
||
SELECT vorname, nachname, email, tele
|
||
FROM persons
|
||
WHERE person_id = :pid
|
||
LIMIT 1
|
||
");
|
||
$stmtPerson->execute([':pid' => $personId]);
|
||
$person = $stmtPerson->fetch(PDO::FETCH_ASSOC);
|
||
|
||
if (!$person) {
|
||
// Wenn es Alt-Daten gibt, die noch keine Person haben:
|
||
// überspringen statt crashen
|
||
continue;
|
||
}
|
||
|
||
$vorname = $person["vorname"] ?? "";
|
||
$nachname = $person["nachname"] ?? "";
|
||
$mail = $person["email"] ?? "";
|
||
$tel = $person["tele"] ?? "";
|
||
|
||
$userausgabe = trim($vorname . " " . $nachname);
|
||
|
||
// 3) Mail rausschicken (deine Funktion nutzt schon PDO)
|
||
// (Wenn die Vorlage die Persondaten selbst lädt: ok.)
|
||
SendMailMessageVorlage($pdo, "2", $warteid, "7");
|
||
}
|
||
|
||
|
||
//Bearbeitung der Mailvorlagen ermöglichen
|
||
}else if (($_POST["aktion"] ?? '') == "14") {
|
||
?>
|
||
|
||
<script type="text/javascript">
|
||
tinymce.init({
|
||
selector: '#mytextarea',
|
||
height: 800,
|
||
plugins: ' advcode casechange formatpainter linkchecker autolink lists checklist media pageembed table advtable ',
|
||
toolbar: 'checklist code table',
|
||
toolbar_mode: 'floating',
|
||
});
|
||
</script>
|
||
<?php
|
||
// E-Mail Vorlage laden
|
||
|
||
$templetid = (int)($_POST["templetid"] ?? 0);
|
||
|
||
$stmt = $pdo->prepare("
|
||
SELECT betreff, body, name
|
||
FROM mailtemplates
|
||
WHERE templetid = :tid
|
||
LIMIT 1
|
||
");
|
||
$stmt->execute([':tid' => $templetid]);
|
||
$rowconfig = $stmt->fetch(PDO::FETCH_ASSOC);
|
||
|
||
if (!$rowconfig) {
|
||
die("Mailtemplate nicht gefunden.");
|
||
}
|
||
|
||
$body = $rowconfig["body"];
|
||
$betreff = $rowconfig["betreff"];
|
||
$name = $rowconfig["name"];
|
||
$betreff = iconv('CP1252//IGNORE', 'UTF-8' , $betreff);
|
||
//$body = iconv('CP1252//IGNORE', 'UTF-8' , $body);
|
||
$name = iconv('CP1252//IGNORE', 'UTF-8' , $name);
|
||
|
||
echo "<h1>E-Mailvorlage bearbeiten</h1><br>";
|
||
echo "Vorlage: $name<br>";
|
||
echo "<br>Folgende Variablen können Sie nutzen:";
|
||
echo "<br>%BENUTZERVORNAME% für Vorname des Patienten";
|
||
echo "<br>%BENUTZERNACHNAME% für Nachname des Patienten";
|
||
echo "<br>%BENUTZERGEBURTSTAG% für Geburtstag des Patienten";
|
||
echo "<br>%BENUTZERADRESSE% für Adresse (Ort PLZ, Straße) des Patienten";
|
||
echo "<br>%REZEPTART% für die Art der Anfrage";
|
||
echo "<br>%MEDIKAMENTNUMMEREINS% für Medikament 1";
|
||
echo "<br>%MEDIKAMENTNUMMERZWEI% für Medikament 2";
|
||
echo "<br>%ANFRAGENACHRICHT% für die vom Patienten eingegebene Nachricht (max. 150 Zeichen)";
|
||
echo "<br>%ANFRAGENLOGIN% für den Bestätigungslink/ Überprüfungslink der Anfrage. Achtung: Muss mindestens ein Mal an den Patienten versendet werden.";
|
||
|
||
|
||
echo "<br><br>";
|
||
|
||
echo "<form action='". $_SERVER['PHP_SELF'] . "' method=POST>";
|
||
echo "Betreff:<br>";
|
||
echo "<input class='form-control' name=betreff type=text value='". $betreff . "'> <br>";
|
||
echo '<textarea height=200 name="body" id="mytextarea"> '. $body . '</textarea>';
|
||
echo "<input name=aktion type=hidden value=15>";
|
||
echo "<input name=templetid type=hidden value=$templetid><br><br>";
|
||
echo "<input type=submit class='btn btn-primary' value='Speichern'><br>";
|
||
echo '</form>';
|
||
|
||
// Speichern der E-Mail Vorlagen
|
||
} else if (($_POST["aktion"] ?? '') == "15") {
|
||
|
||
$templetid = (int)($_POST["templetid"] ?? 0);
|
||
|
||
$betreff = iconv('UTF-8', 'CP1252//IGNORE', $_POST["betreff"] ?? "");
|
||
$body = iconv('UTF-8', 'CP1252//IGNORE', $_POST["body"] ?? "");
|
||
|
||
$stmt = $pdo->prepare("
|
||
UPDATE mailtemplates
|
||
SET betreff = :betreff,
|
||
body = :body
|
||
WHERE templetid = :tid
|
||
");
|
||
$stmt->execute([
|
||
':betreff' => $betreff,
|
||
':body' => $body,
|
||
':tid' => $templetid
|
||
]);
|
||
|
||
echo "Speicherung der Vorlage erfolgt!<br><br>";
|
||
|
||
// Auswahl der E-Mail Vorlagen
|
||
} else if (($_POST["aktion"] ?? '') == "16") {
|
||
|
||
echo "<form action='" . $_SERVER['PHP_SELF'] . "' method='POST'>";
|
||
echo "Wählen Sie die zu bearbeitende Mailvorlage aus:<br><br>";
|
||
|
||
$stmt = $pdo->prepare("
|
||
SELECT name, templetid
|
||
FROM mailtemplates
|
||
WHERE mailbearbeitung = 1
|
||
ORDER BY name
|
||
");
|
||
$stmt->execute();
|
||
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||
|
||
echo "<input name='aktion' type='hidden' value='14'>";
|
||
echo "<select class='form-control' name='templetid'>";
|
||
|
||
foreach ($rows as $row) {
|
||
$name = iconv('CP1252//IGNORE', 'UTF-8', $row["name"]);
|
||
echo '<option value="' . (int)$row["templetid"] . '">'
|
||
. htmlspecialchars($name, ENT_QUOTES, 'UTF-8')
|
||
. '</option>';
|
||
}
|
||
|
||
echo "</select><br><br>";
|
||
echo "<input type='submit' class='btn btn-primary' value='Bearbeiten'><br><br><br>";
|
||
|
||
|
||
// Sperrliste E-Mails
|
||
} else if (($_POST["aktion"] ?? '') == "17") {
|
||
|
||
$stmt = $pdo->prepare("SELECT email FROM user_block");
|
||
$stmt->execute();
|
||
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||
|
||
echo "<h3>Sperrliste</h3>";
|
||
echo "Aktuell sind folgende Benutzer auf der Sperrliste:<br><br>";
|
||
|
||
foreach ($rows as $row) {
|
||
echo htmlspecialchars($row["email"], ENT_QUOTES, 'UTF-8') . "<br>";
|
||
}
|
||
|
||
echo "<br><br>";
|
||
|
||
//Bearbeitung der Mailvorlagen ermöglichen
|
||
}else if (($_POST["aktion"] ?? '') == "18") {
|
||
?>
|
||
|
||
<script type="text/javascript">
|
||
tinymce.init({
|
||
selector: '#mytextarea',
|
||
height: 800,
|
||
plugins: ' advcode casechange formatpainter linkchecker autolink lists checklist media pageembed table advtable ',
|
||
toolbar: 'checklist code table',
|
||
toolbar_mode: 'floating',
|
||
});
|
||
</script>
|
||
<?php
|
||
|
||
echo "<h1>E-Mailvorlage anlegen</h1><br>";
|
||
echo "<br>Folgende Variablen können Sie nutzen:";
|
||
echo "<br>%BENUTZERVORNAME% für Vorname des Patienten";
|
||
echo "<br>%BENUTZERNACHNAME% für Nachname des Patienten";
|
||
echo "<br>%BENUTZERGEBURTSTAG% für Geburtstag des Patienten";
|
||
echo "<br>%BENUTZERADRESSE% für Adresse (Ort PLZ, Straße) des Patienten";
|
||
echo "<br>%REZEPTART% für die Art der Anfrage";
|
||
echo "<br>%MEDIKAMENTNUMMEREINS% für Medikament 1";
|
||
echo "<br>%MEDIKAMENTNUMMERZWEI% für Medikament 2";
|
||
echo "<br>%ANFRAGENACHRICHT% für die vom Patienten eingegebene Nachricht (max. 150 Zeichen)";
|
||
echo "<br>%ANFRAGENLOGIN% für den Bestätigungslink/ Überprüfungslink der Anfrage. ";
|
||
|
||
echo "<br><br>";
|
||
|
||
echo "<form action='". $_SERVER['PHP_SELF'] . "' method=POST>";
|
||
echo "Name der Vorlage:<br>";
|
||
echo "<input class='form-control' name=name type=text value='$name' required><br>";
|
||
echo "Betreff:<br>";
|
||
echo "<input class='form-control' name=betreff type=text value='$betreff' required><br>";
|
||
echo "Inhalt:<br>";
|
||
echo '<textarea height=200 name="body" id="mytextarea" >' . $body .'</textarea>';
|
||
echo "<input name=aktion type=hidden value=19>";
|
||
echo "<br><br>";
|
||
echo "<input type=submit class='btn btn-primary' value='Speichern'><br>";
|
||
echo '</form>';
|
||
|
||
// Speichern der E-Mail Vorlagen
|
||
}else if (($_POST["aktion"] ?? '') == "19") {
|
||
$name = iconv('UTF-8', 'CP1252//IGNORE', $_POST["name"] ?? "");
|
||
$betreff = iconv('UTF-8', 'CP1252//IGNORE', $_POST["betreff"] ?? "");
|
||
$body = iconv('UTF-8', 'CP1252//IGNORE', $_POST["body"] ?? "");
|
||
|
||
$stmt = $pdo->prepare("
|
||
INSERT INTO mailtemplates (betreff, body, name, mailbearbeitung)
|
||
VALUES (:betreff, :body, :name, 1)
|
||
");
|
||
|
||
$stmt->execute([
|
||
':betreff' => $betreff,
|
||
':body' => $body,
|
||
':name' => $name
|
||
]);
|
||
echo "Speicherung der Vorlage erfolgt!<br><br>";
|
||
|
||
}else if (($_POST["aktion"] ?? '') == "20") {
|
||
|
||
$anfrageid = (int)($_POST["anfrageid"] ?? 0);
|
||
if ($anfrageid <= 0) {
|
||
die("Ungültige Anfrage-ID");
|
||
}
|
||
|
||
// optional: prüfen ob Anfrage existiert (entspricht deinem SELECT)
|
||
$stmtCheck = $pdo->prepare("SELECT anfrageid FROM anfragen WHERE anfrageid = :id LIMIT 1");
|
||
$stmtCheck->execute([':id' => $anfrageid]);
|
||
if (!$stmtCheck->fetch(PDO::FETCH_ASSOC)) {
|
||
die("Anfrage nicht gefunden");
|
||
}
|
||
|
||
// Mail verschicken (bei dir schon auf PDO umgestellt)
|
||
SendMailMessageVorlage($pdo, "3", $anfrageid, "42");
|
||
|
||
// Anfrage updaten
|
||
$stmt = $pdo->prepare("
|
||
UPDATE anfragen
|
||
SET beantwortet = 1,
|
||
checked = 29,
|
||
workerid = :workerid,
|
||
antwortid = 0
|
||
WHERE anfrageid = :id
|
||
");
|
||
$ok = $stmt->execute([
|
||
':workerid' => (int)$user["id"],
|
||
':id' => $anfrageid
|
||
]);
|
||
|
||
if ($ok && $stmt->rowCount() > 0) {
|
||
echo "<h4>Die Anfrage wurde erfolgreich gelöscht!</h4><br>";
|
||
echo "Der Kunde erhält gleich eine schriftliche Bestätigung per E-Mail<br>";
|
||
} else {
|
||
echo "<h4>Update fehlgeschlagen oder keine Zeile geändert.</h4>";
|
||
}
|
||
echo "<br>";
|
||
echo "<br><br><br>";
|
||
ZuruckzumAnfrageOverView();
|
||
|
||
}else{
|
||
|
||
echo '<h3>Welche Aktion möchtest du durchführen?</h3>
|
||
<table width=100%><tr><td width=40%>
|
||
|
||
<form action="'. $_SERVER["PHP_SELF"] .'" method=POST>
|
||
<input type=hidden name=aktion value=1>
|
||
<input type=submit class="btn btn-primary btn-lg" value="Formular-Anfragen bearbeiten">
|
||
</form>
|
||
</td></tr>
|
||
<tr><td><br><br>
|
||
<form action="'. $_SERVER["PHP_SELF"] .'" method=POST>
|
||
<input type=hidden name=aktion value=18>
|
||
<input type=submit class="btn btn-primary" value="Mailvorlagen anlegen">
|
||
</form>
|
||
</td></tr>
|
||
<tr><td><br><br>
|
||
<form action="'. $_SERVER["PHP_SELF"] .'" method=POST>
|
||
<input type=hidden name=aktion value=12>
|
||
<input type=submit class="btn btn-primary" value="Formular Auswertung">
|
||
</form>
|
||
</td></tr>
|
||
<tr><td><br><br>
|
||
<form action="'. $_SERVER["PHP_SELF"] .'" method=POST>
|
||
<input type=hidden name=aktion value=16>
|
||
<input type=submit class="btn btn-primary" value="Mailvorlagen anpassen">
|
||
</form>
|
||
</td></tr><br><br><br><br>
|
||
<tr></tr>
|
||
<tr><td><h3>Urlaub / Hinweis planen</h3></td><td></td></tr>
|
||
<tr><td>
|
||
<form action="'. $_SERVER["PHP_SELF"] .'" method=POST>
|
||
<input type=hidden name=aktion value=4>
|
||
<input type=submit class="btn btn-primary btn-lg" value="Urlaub eintragen">
|
||
</form>
|
||
</td></tr>
|
||
<tr><td><br><br>
|
||
<form action="'. $_SERVER["PHP_SELF"] .'" method=POST>
|
||
<input type=hidden name=aktion value=6>
|
||
<input type=submit class="btn btn-primary" value="Notfallsprechstunde eintragen">
|
||
</form>
|
||
</tr>
|
||
</table>
|
||
<br><br>
|
||
';
|
||
|
||
}
|
||
|
||
|
||
|
||
$stmt = $pdo->prepare("
|
||
SELECT impfid, impfname
|
||
FROM impfstoff
|
||
WHERE aktivtermin = 1
|
||
");
|
||
$stmt->execute();
|
||
|
||
$javascriptimpfstoff = "";
|
||
|
||
while ($rowimpf = $stmt->fetch(PDO::FETCH_ASSOC)) {
|
||
$impfid = (int)$rowimpf["impfid"];
|
||
$impfstofftext = htmlspecialchars($rowimpf["impfname"], ENT_QUOTES, 'UTF-8');
|
||
|
||
$javascriptimpfstoff .= "<option value=\"$impfid\">$impfstofftext</option>";
|
||
}
|
||
|
||
}
|
||
?>
|
||
|
||
<br><br><br><input type="button" class='btn btn-secondary' value="Zum Hauptmenü" onClick="location.href='<?php echo $_SERVER['PHP_SELF'];?>'">
|
||
|
||
</section>
|
||
|
||
<script>
|
||
function onSubmit(token) {
|
||
document.getElementById("submit").submit();
|
||
}
|
||
</script>
|
||
|
||
<script type="text/javascript">
|
||
|
||
function AddneueTermine(){
|
||
|
||
var div = document.getElementById('neuerUrlaub');
|
||
|
||
div.innerHTML += "Start: <input name=Starttime[] type=date class='form-control' > Ende: <input name=Endetime[] type=date class='form-control' >Vertretung: <input type=text name=vertretung[] weight=100 class='form-control'> Vertretung Telefon: <input type=text name=vertretertelefon[] weight=100 class='form-control'> Vertretung Adresse: <input type=text name=vertreteradresse[] weight=100 class='form-control'> Vertretung Webseite: <input type=text name=vertreterurl[] weight=100 class='form-control'> <input name=urlaubid[] type=hidden value='0'> <br>";
|
||
//Public: <select name=aktiv[] id='aktiv' required ><option value='1' >Ja</option> <option value='0'>Nein</option></select>
|
||
|
||
//document.getElementById('neueTermine').innerHTML = div;
|
||
|
||
}
|
||
|
||
function AddneueTermineNotfall(){
|
||
|
||
var div = document.getElementById('neuerUrlaub');
|
||
|
||
div.innerHTML += "<h3>Neuer Termin</h3>Start: <input name=Starttime[] type=date class='form-control' > Ende: <input name=Endetime[] type=date class='form-control' > <br> Anleitung: Der Hinweistext kann erst angelegt werden, wenn der Termin einmal gespeichert wurde. Speichern Sie den neuen Termin. Klicken Sie dannach auf 'Zurück' und fügen Sie den Hinweistext ein.<br> <input name=urlaubid[] type=hidden value='0'> <br>";
|
||
//Public: <select name=aktiv[] id='aktiv' required ><option value='1' >Ja</option> <option value='0'>Nein</option></select>
|
||
|
||
|
||
|
||
|
||
}
|
||
|
||
|
||
function templateUpdate() {
|
||
|
||
var betreff = document.getElementById('betreff');
|
||
var bodytext = document.getElementById('trumbowyg-demo');
|
||
|
||
var templetid = document.getElementById('templetid').value;
|
||
var anfrageid = document.getElementById('anfrageid').value;
|
||
|
||
$.ajax({
|
||
type: 'POST',
|
||
url: 'mailtemplate.php',
|
||
data: {
|
||
templetid: templetid,
|
||
anfrageid: anfrageid
|
||
},
|
||
dataType: 'json',
|
||
success: function (data) {
|
||
|
||
if (data.error) {
|
||
alert("Fehler: " + data.error);
|
||
return;
|
||
}
|
||
|
||
betreff.value = data.betreff;
|
||
$('#trumbowyg-demo').trumbowyg('html', data.body);
|
||
}
|
||
});
|
||
}
|
||
function checkTemplate(){
|
||
|
||
var templetid = document.getElementById('templetid').value;
|
||
if(templetid == ""){
|
||
alert("Macht es dir einfacher!\nNutze eine Vorlage. Du kannst diese jederzeit wechseln. \n\nFür eine allgemeine Vorlage nutze 'Allgemeine Anfrage'.");
|
||
}
|
||
|
||
}
|
||
|
||
</script>
|
||
|
||
<style>
|
||
select {
|
||
width: auto;
|
||
display: inline;
|
||
height: auto;
|
||
|
||
|
||
|
||
}
|
||
td {
|
||
padding-top:5px;
|
||
padding-bottom:5px;
|
||
padding-right:5px;
|
||
vertical-align:top;
|
||
}
|
||
tr {
|
||
padding-top:5px;
|
||
padding-bottom:5px;
|
||
padding-right:5px;
|
||
vertical-align:top;
|
||
|
||
}
|
||
th {
|
||
padding-top:5px;
|
||
padding-bottom:5px;
|
||
padding-right:5px;
|
||
vertical-align:top;
|
||
}
|
||
</style>
|
||
|
||
|
||
|
||
</div>
|
||
|
||
<?php
|
||
|
||
|
||
include("templates/footer.inc.php")
|
||
?>
|