Die Telefonanlage fuellt anfragen.anrufernummer inzwischen - die erste Anfrage damit ist #13037. Wenn die Anlage den Anrufer nicht selbst zuordnen konnte, wird die Nummer jetzt gegen persons.tele gesucht und der Treffer angezeigt. NormalisiereRufnummer() vergleicht ziffernweise und fuehrt +49 und 0049 auf die nationale Schreibweise mit fuehrender 0 zurueck. Nur so finden die Anzeige der Anlage und die von Hand gepflegten Nummern zusammen: von 2972 gepflegten Nummern stehen 2941 als reine Ziffern da, 22 mit Bindestrich, 6 international. Bewusst nur ein Vorschlag, keine Zuordnung. 521 der 2972 Nummern gehoeren zu mehr als einer Person - Familien teilen sich einen Anschluss, zwei Nummern haengen sogar an 16 bzw. 18 Personen. Bei mehreren Treffern werden deshalb die Namen aufgezaehlt statt einer ausgewaehlt, und auch der eindeutige Fall ist als "nicht bestaetigt - nur ueber die Rufnummer erkannt" ausgewiesen. Eine falsche Zuordnung haette die Daten des falschen Patienten neben die Anfrage gestellt. Nummern unter 7 Ziffern werden nicht gesucht: in persons stehen ein paar Platzhalter mit 1 bis 5 Ziffern, die sonst wahllos zusammenfallen. Der Index wird beim ersten Treffer einmal je Seitenaufruf aufgebaut und danach wiederverwendet - die Liste zeigt bis zu einige tausend Zeilen, eine Abfrage je Zeile waere zu teuer. Gemessen ueber 12800 Zeilen: genau eine Abfrage gegen persons. Ohne Telefonanfrage mit brauchbarer Nummer wird der Index gar nicht erst gebaut. Angezeigt in der Anfrageliste (Kontaktspalte), auf der Hinweisseite fuer Anfragen ohne zugeordneten Patienten und unter Antwort einsehen. Geprueft: Normalisierung gegen internationale, geklammerte und mit Leerzeichen geschriebene Nummern; Vorschlag bleibt aus bei Mail- und Portalanfragen, bei fehlender, zu kurzer und unterdrueckter Nummer sowie bei bereits zugeordnetem Patienten. Listenlogik ueber alle 12793 Anfragen mit erzwungenen Treffern durchgerechnet - der Vorschlag steht nie bei einer Anfrage, die schon einen Patienten hat. Fuer #13037 selbst gibt es keinen Treffer, die Nummer ist in persons nicht gepflegt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2234 lines
72 KiB
PHP
2234 lines
72 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>";
|
||
$WeitereInfos .= GetSprachnachrichtHinweis($row["source"] ?? "mail");
|
||
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);
|
||
// Die Anlage haelt die Rufnummer des Anrufers getrennt von den
|
||
// Stammdaten - sie kann von der hinterlegten abweichen.
|
||
$anruferzeile = GetAnruferZeile($row["source"] ?? "mail", $row["anrufernummer"] ?? null);
|
||
// Wer koennte angerufen haben? Nur ein Vorschlag anhand der
|
||
// Rufnummer, die Auswahl trifft die Mitarbeiterin.
|
||
$anrufervorschlag = GetPatientZuRufnummerAusgabe($pdo, $row["source"] ?? "mail", $row["anrufernummer"] ?? null, $row["requester_person_id"] ?? null);
|
||
if($hatPerson){
|
||
$userausgabe = $vorname . " " . $nachname . "<br>" . $ausgabegeburstag;
|
||
$adresse = $plz . " " . $ort . "<br>" . $strasse ;
|
||
$kontakt = "$mail <br>Tel:<a href='tel:$tel'>$tel</a>";
|
||
if($anruferzeile !== ""){
|
||
$kontakt .= "<br>" . $anruferzeile;
|
||
}
|
||
}else{
|
||
$userausgabe = "<i>Kein Patient zugeordnet</i>";
|
||
$adresse = "-";
|
||
$kontakt = ($anruferzeile !== "") ? $anruferzeile : "<i>Kontaktdaten siehe Nachricht</i>";
|
||
$kontakt .= $anrufervorschlag;
|
||
}
|
||
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 GetAnruferZeile($row["source"] ?? "mail", $row["anrufernummer"] ?? null);
|
||
echo GetPatientZuRufnummerAusgabe($pdo, $row["source"] ?? "mail", $row["anrufernummer"] ?? null, $row["requester_person_id"] ?? null);
|
||
echo GetSprachnachrichtHinweis($row["source"] ?? "mail");
|
||
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 = "";
|
||
$WeitereInfos .= GetAnruferZeile($row["source"] ?? "mail", $row["anrufernummer"] ?? null);
|
||
$WeitereInfos .= GetSprachnachrichtHinweis($row["source"] ?? "mail");
|
||
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,
|
||
a.source,
|
||
a.anrufernummer,
|
||
|
||
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 = "";
|
||
$WeitereInfos .= GetAnruferZeile($row["source"] ?? "mail", $row["anrufernummer"] ?? null);
|
||
$WeitereInfos .= GetPatientZuRufnummerAusgabe($pdo, $row["source"] ?? "mail", $row["anrufernummer"] ?? null, $row["person_id"] ?? null);
|
||
$WeitereInfos .= GetSprachnachrichtHinweis($row["source"] ?? "mail");
|
||
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,
|
||
a.source,
|
||
a.anrufernummer,
|
||
|
||
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 = "";
|
||
$WeitereInfos .= GetAnruferZeile($row["source"] ?? "mail", $row["anrufernummer"] ?? null);
|
||
$WeitereInfos .= GetSprachnachrichtHinweis($row["source"] ?? "mail");
|
||
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")
|
||
?>
|