Seit dem 02.09.2026 legt die Telefonanlage Anfragen mit source='telefon' an. Von 309 solchen Zeilen haben 207 keine requester_person_id, weil der Anrufer nicht zugeordnet werden konnte - darunter alle 33 offenen. Saemtliche Anzeigepfade haengen per INNER JOIN an persons, wodurch genau diese Zeilen kommentarlos aus dem Ergebnis fielen. Die Ansicht "Unbeantwortete Anfragen" zeigte dadurch 2 statt 35 Eintraege. Bei mail- und portal-Anfragen konnte das nicht auffallen: die Formulare legen die Person vorher in persons an und brechen sonst ab (rezepte.php), entsprechend hat dort keine einzige Zeile eine fehlende Person. personid und userid stehen zwar auch bei mail auf 0, sind aber tote Legacy-Spalten und tragen den Personenbezug nicht. Die Anzeigepfade verwenden jetzt LEFT JOIN und zeigen ohne Treffer "Kein Patient zugeordnet" statt einer leeren Zeile: Liste, Antworten, Loesch-Dialog, Loeschen ohne Mail und Antwort einsehen. Die beiden Knoepfe, die zwingend eine Mailadresse brauchen - Antworten und Loeschen mit Mail - erscheinen nur noch mit zugeordneter Person; wer das Antwortformular direkt aufruft, bekommt einen Hinweis samt Transkript statt eines Abbruchs. "Telefonisch beantwortet" brauchte keine Aenderung, dieser Weg fragt nur die anfrageid ab. Der Mailversand in functions.inc.php und die patientenbezogene Historie behalten ihren INNER JOIN - dort ist eine Person Voraussetzung. Neu ist GetAnfrageHerkunft(). Die Liste leitete die Herkunft bisher aus sicherenachricht ab, was Telefonanfragen mangels Wert als "Mailanfrage" etikettierte. Nur dieser dritte Fall kommt aus source. Die Unterscheidung intern/Mail bleibt bewusst an sicherenachricht haengen, weil insertAnfrage() kein source setzt und 304 interne Anfragen deshalb als source='mail' in der Tabelle stehen; ueber source vergeben haette das Label 9871 Bestandszeilen umetikettiert, darunter die datenschutzrelevante Unterscheidung. Nachgeprueft gegen die Datenbank: die Ansicht liefert statt 2 nun 35 Zeilen mit allen 33 offenen Telefon-Anfragen. Der Renderblock ueber alle 12784 Zeilen simuliert, error_reporting=E_ALL als Exception, ohne Warnung; das Herkunfts-Label bleibt fuer 12475 Bestandszeilen unveraendert und aendert sich nur fuer die 309 Telefon-Zeilen. Alle fuenf von der Liste erreichbaren Aktionen laden fuer eine Zeile ohne Person. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2209 lines
70 KiB
PHP
2209 lines
70 KiB
PHP
<?php
|
||
|
||
// WICHTIG: Pfade aus /admin heraus korrekt auflösen
|
||
require_once __DIR__ . "/../inc/config.inc.php";
|
||
require_once __DIR__ . "/../inc/functions.inc.php";
|
||
require_once __DIR__ . "/../inc/company_holiday_sync.inc.php";
|
||
|
||
// Login prüfen
|
||
$user = check_admin_user();
|
||
|
||
include __DIR__ . "/templates/header.inc.php";
|
||
|
||
$user = check_admin_user();
|
||
$internUserId = (int)$_SESSION['auth']['id'];
|
||
|
||
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">
|
||
<div style="display:flex; justify-content:space-between; align-items:flex-start; gap:20px; flex-wrap:wrap;">
|
||
<div>
|
||
<h2>Administration - Anfragen</h2>
|
||
Hallo <?php echo htmlentities($user['vorname']); ?>,<br>
|
||
Herzlich Willkommen im internen Bereich!<br><br>
|
||
</div>
|
||
<div style="width:200px;">
|
||
<form action="<?php echo self_action(); ?>" id="formbenutzersuche" method="POST">
|
||
<input type="hidden" name="aktion" value="benutzersuche" />
|
||
<input type="hidden" name="userid_input" id="userid_input" />
|
||
<label>Benutzersuche Anfragen:</label>
|
||
<input type="text" id="user_input" name="skill_input" width="48" />
|
||
</form>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
<?php
|
||
|
||
$aktion = $_POST["aktion"] ?? $_GET["aktion"] ?? '';
|
||
$artRequest = $_POST["art"] ?? $_GET["art"] ?? "1";
|
||
|
||
if ($aktion !== '') {
|
||
$_POST["aktion"] = $aktion;
|
||
}
|
||
|
||
if ($artRequest !== '') {
|
||
$_POST["art"] = $artRequest;
|
||
}
|
||
|
||
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 ($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="' . self_action() .'" 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="' . self_action() .'" 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="' . self_action() .'" 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="' . self_action() .'" 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 = $artRequest;
|
||
|
||
// 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
|
||
LEFT JOIN persons p ON a.requester_person_id = p.person_id
|
||
LEFT 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"];
|
||
|
||
// Alle vom Patienten stammenden Felder werden hier maskiert.
|
||
// Sie landen weiter unten unveraendert in einem HTML-String;
|
||
// ohne e() koennte ein Anfragetext Skriptcode in den Browser
|
||
// der Mitarbeiterin einschleusen.
|
||
$vorname = e((string)$row["vorname"]);
|
||
$nachname = e((string)$row["nachname"]);
|
||
$mail = e((string)$row["email"]);
|
||
$tel = e((string)$row["tele"]);
|
||
$beantwortet = $row["beantwortet"];
|
||
|
||
$geburtstag = e((string)$row["geburtstag"]);
|
||
$ausgabegeburstag = $geburtstag;
|
||
|
||
$ort = e((string)$row["ort"]);
|
||
$plz = e((string)$row["plz"]);
|
||
$strasse = e((string)$row["strasse"]);
|
||
|
||
$nachricht = e((string)$row["nachricht"]);
|
||
$medikamenteins = e((string)$row["medikament1"]);
|
||
$medikamentzwei = e((string)$row["medikament2"]);
|
||
$medikamentdrei = e((string)$row["medikament3"]);
|
||
$medikamentvier = e((string)$row["medikament4"]);
|
||
$medikamentfuenf = e((string)$row["medikament5"]);
|
||
$medikamentsechs = e((string)$row["medikament6"]);
|
||
$dateiname = e((string)$row["dateiname"]);
|
||
|
||
|
||
// artname kann seit dem LEFT JOIN leer sein.
|
||
$anfrageart = e((string)($row["artname"] ?? ""));
|
||
if($anfrageart === ""){
|
||
$anfrageart = "unbekannte Art";
|
||
}
|
||
$ordnungsid = $row["ordnungsid"];
|
||
$ordnungsstring = GetOrdnungsid($ordnungsid);
|
||
$WeitereInfos= "";
|
||
$sicherenachricht = $row["sicherenachricht"];
|
||
// Telefonanfragen liessen sicherenachricht NULL und wurden
|
||
// dadurch faelschlich als Mailanfrage etikettiert.
|
||
$WeitereInfos .= GetAnfrageHerkunft($row["source"] ?? "mail", $sicherenachricht) . "<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);
|
||
|
||
// Ohne Treffer im LEFT JOIN gibt es keine Personendaten -
|
||
// typisch fuer Telefonanfragen, deren Anrufer nicht zugeordnet
|
||
// werden konnte. Frueher fielen diese Zeilen durch den INNER
|
||
// JOIN komplett aus der Liste.
|
||
$hatPerson = ($row["vorname"] !== null || $row["nachname"] !== null);
|
||
if($hatPerson){
|
||
$userausgabe = $vorname . " " . $nachname . "<br>" . $ausgabegeburstag;
|
||
$adresse = $plz . " " . $ort . "<br>" . $strasse ;
|
||
$kontakt = "$mail <br>Tel:<a href='tel:$tel'>$tel</a>";
|
||
}else{
|
||
$userausgabe = "<i>Kein Patient zugeordnet</i>";
|
||
$adresse = "-";
|
||
$kontakt = "<i>Kontaktdaten siehe Nachricht</i>";
|
||
}
|
||
echo "<tr style='background-color:". $farbe. ";'><td>$userausgabe <br> $kontakt</td><td>$adresse</td><td>$ordnungsstring - $anfrageart <br>$WeitereInfos</td><td>$datumausgabe</td><td>$update_time<br>$checkausgabe<br>$ausgabeworker</td><td>";
|
||
// "Antworten" verschickt eine Mailvorlage. Ohne zugeordnete Person
|
||
// gibt es keine Adresse, der Knopf wuerde ins Leere laufen.
|
||
if($hatPerson){
|
||
echo "
|
||
<div style='float: left;margin:15px; height: 20px;'>
|
||
<form action='". self_action() ."' 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>";
|
||
}
|
||
echo "
|
||
<div style='float: left;margin:15px; height: 20px;'>
|
||
<form action='". self_action() ."' 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='". self_action() ."' 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='". self_action() ."' 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='". self_action() . "' 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
|
||
LEFT JOIN persons p ON a.requester_person_id = p.person_id
|
||
LEFT 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;
|
||
}
|
||
|
||
// Ohne zugeordnete Person gibt es keine Mailadresse - die
|
||
// Antwortvorlagen unten wuerden ins Leere laufen. Betrifft vor
|
||
// allem Telefonanfragen ohne erkannten Anrufer.
|
||
if ($row["vorname"] === null && $row["nachname"] === null) {
|
||
echo "<div class='alert alert-warning' role='alert'>";
|
||
echo "<b>Dieser Anfrage ist kein Patient zugeordnet.</b><br>";
|
||
echo "Herkunft: " . e(GetAnfrageHerkunft($row["source"] ?? "mail", $row["sicherenachricht"] ?? null)) . "<br>";
|
||
echo "Eine Antwort per Mail ist deshalb nicht moeglich. ";
|
||
echo "Bitte telefonisch beantworten und die Anfrage anschliessend ";
|
||
echo "ueber <b>Telefonisch beantwortet</b> abschliessen.";
|
||
echo "</div>";
|
||
echo "<b>Nachricht:</b><br>" . nl2br(e((string)$row["nachricht"])) . "<br><br>";
|
||
ZuruckzumAnfrageOverView();
|
||
echo "</form>";
|
||
include(__DIR__ . "/templates/footer.inc.php");
|
||
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"];
|
||
|
||
// Patientendaten maskieren - sie werden unten in HTML-Strings
|
||
// eingesetzt und ausgegeben.
|
||
$vorname = e((string)$row["vorname"]);
|
||
$nachname = e((string)$row["nachname"]);
|
||
$mail = e((string)$row["email"]);
|
||
$tel = e((string)$row["tele"]);
|
||
|
||
$geburtstag = e((string)$row["geburtstag"]);
|
||
$ausgabegeburstag = $geburtstag;
|
||
|
||
$ort = e((string)$row["ort"]);
|
||
$plz = e((string)$row["plz"]);
|
||
$strasse = e((string)$row["strasse"]);
|
||
|
||
$ordnungsid = $row["ordnungsid"];
|
||
$ordnungsstring = GetOrdnungsid($ordnungsid);
|
||
|
||
$nachricht = e((string)$row["nachricht"]);
|
||
|
||
$medikamenteins = e((string)$row["medikament1"]);
|
||
$medikamentzwei = e((string)$row["medikament2"]);
|
||
$medikamentdrei = e((string)$row["medikament3"]);
|
||
$medikamentvier = e((string)$row["medikament4"]);
|
||
$medikamentfuenf = e((string)$row["medikament5"]);
|
||
$medikamentsechs = e((string)$row["medikament6"]);
|
||
|
||
$anfrageart = e((string)$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='". self_action() . "' 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='". (int)($_POST["anfrageid"] ?? 0) ."' 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 "Der E-Mailversand ist fehlgeschlagen.<br>";
|
||
echo "Die Anfrage wurde bereits als beantwortet gespeichert, der Patient hat aber keine Benachrichtigung erhalten.<br>";
|
||
echo "Bitte den Vorgang erneut ausführen.<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="' . self_action() . '" 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' required value='" . htmlspecialchars($vertretung, ENT_QUOTES, 'UTF-8') . "'>";
|
||
|
||
echo "<br>Vertretung Telefon: <input class='form-control' name='vertretertelefon[]' type='text' required value='" . htmlspecialchars($vertretertelefon, ENT_QUOTES, 'UTF-8') . "'>
|
||
<br>Vertretung Adresse: <input class='form-control' name='vertreteradresse[]' type='text' required value='" . htmlspecialchars($vertreteradresse, ENT_QUOTES, 'UTF-8') . "'>";
|
||
|
||
echo "<br>Vertretung Webseite: <input class='form-control' name='vertreterurl[]' type='text' required 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;
|
||
$pdo->beginTransaction();
|
||
try {
|
||
foreach ($_POST['Starttime'] as $Starttime) {
|
||
if($_POST["Starttime"][$i] != "0000-00-00"){
|
||
$vertretung = trim((string)($_POST['vertretung'][$i] ?? ''));
|
||
$vertretertelefon = trim((string)($_POST['vertretertelefon'][$i] ?? ''));
|
||
$vertreteradresse = trim((string)($_POST['vertreteradresse'][$i] ?? ''));
|
||
$vertreterurl = trim((string)($_POST['vertreterurl'][$i] ?? ''));
|
||
|
||
if ($vertretung === '' || $vertretertelefon === '' || $vertreteradresse === '' || $vertreterurl === '') {
|
||
throw new RuntimeException("Bitte alle Vertreterinformationen fuer jeden Urlaubseintrag vollstaendig ausfuellen.");
|
||
}
|
||
|
||
$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' => $vertretung,
|
||
':start' => $_POST['Starttime'][$i],
|
||
':ende' => $_POST['Endetime'][$i],
|
||
':telefon' => $vertretertelefon,
|
||
':adresse' => $vertreteradresse,
|
||
':url' => $vertreterurl,
|
||
]);
|
||
|
||
if (!$ok) {
|
||
throw new RuntimeException("Fehler beim Eintragen in der Datenbank.");
|
||
}
|
||
|
||
$urlaubId = (int)$_POST['urlaubid'][$i];
|
||
if ($urlaubId <= 0) {
|
||
$urlaubId = (int)$pdo->lastInsertId();
|
||
}
|
||
if ($urlaubId > 0) {
|
||
vacationSyncCompanyHolidayFromUrlaub($pdo, $urlaubId, $internUserId);
|
||
}
|
||
}
|
||
$i++;
|
||
}
|
||
$pdo->commit();
|
||
} catch (Throwable $e) {
|
||
if ($pdo->inTransaction()) {
|
||
$pdo->rollBack();
|
||
}
|
||
throw $e;
|
||
}
|
||
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="' . self_action() . '" 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="'. self_action() .'" 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
|
||
LEFT 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"];
|
||
// Telefonanfragen ohne erkannten Anrufer haben keine Person.
|
||
$hatPerson = ($vorname !== null || $nachname !== null);
|
||
$userausgabe = $hatPerson ? ($vorname . " " . $nachname) : "Kein Patient zugeordnet";
|
||
|
||
|
||
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>";
|
||
// Loeschen mit Mail setzt eine Mailadresse voraus.
|
||
if ($hatPerson) {
|
||
echo "<form action='". self_action() . "' 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 "</form>";
|
||
echo "<br>";
|
||
}
|
||
echo "<form action='". self_action() . "' 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.requester_person_id,
|
||
|
||
p.vorname,
|
||
p.nachname,
|
||
p.email,
|
||
p.tele,
|
||
p.geburtstag
|
||
FROM anfragen a
|
||
LEFT 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"];
|
||
|
||
$vorname = $row["vorname"];
|
||
$nachname = $row["nachname"];
|
||
$mail = $row["email"];
|
||
$tel = $row["tele"];
|
||
$jahrgang = $row["geburtstag"];
|
||
|
||
$userausgabe = $vorname . " " . $nachname;
|
||
|
||
// 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
|
||
LEFT JOIN persons p ON p.person_id = a.requester_person_id
|
||
LEFT 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='" . self_action() . "' 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='" . self_action() . "' 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='" . self_action() . "' 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='". self_action() . "' 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='" . self_action() . "' 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='". self_action() . "' 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");
|
||
}
|
||
|
||
// Telefonisch beantwortete Anfragen werden bewusst NICHT per Mail
|
||
// bestaetigt - es geht keinerlei Nachricht an den Patienten raus.
|
||
|
||
// 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 als telefonisch beantwortet markiert!</h4><br>";
|
||
echo "Es wurde keine E-Mail an den Patienten versendet.<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="'. self_action() .'" 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="'. self_action() .'" 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="'. self_action() .'" 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="'. self_action() .'" 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="'. self_action() .'" 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="'. self_action() .'" 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 self_action();?>'">
|
||
|
||
</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' required> Vertretung Telefon: <input type=text name=vertretertelefon[] weight=100 class='form-control' required> Vertretung Adresse: <input type=text name=vertreteradresse[] weight=100 class='form-control' required> Vertretung Webseite: <input type=text name=vertreterurl[] weight=100 class='form-control' required> <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,
|
||
csrf_token: "<?php echo csrf_token(); ?>"
|
||
},
|
||
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")
|
||
?>
|