2976 lines
96 KiB
PHP
2976 lines
96 KiB
PHP
<?php
|
|
|
|
include_once("password.inc.php");
|
|
|
|
use PHPMailer\PHPMailer\PHPMailer;
|
|
use PHPMailer\PHPMailer\Exception;
|
|
|
|
require 'PHPMailer/src/Exception.php';
|
|
require 'PHPMailer/src/PHPMailer.php';
|
|
require 'PHPMailer/src/SMTP.php';
|
|
|
|
function SendMailMessage(PDO $pdo, string $empfaenger, string $betreff, string $body): bool
|
|
{
|
|
// 1) Mail-Config aus DB laden
|
|
$stmt = $pdo->prepare("SELECT * FROM config LIMIT 1");
|
|
$stmt->execute();
|
|
$rowconfig = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
if (!$rowconfig) {
|
|
// Keine Config gefunden
|
|
return false;
|
|
}
|
|
|
|
$mailserver = (string)$rowconfig["mailserver"];
|
|
$mailUsername = (string)$rowconfig["mailUsername"];
|
|
$mailPassword = (string)$rowconfig["mailPassword"];
|
|
$mailPort = (int)$rowconfig["mailPort"];
|
|
$mailFrom = (string)$rowconfig["mailFrom"];
|
|
$mailFromName = (string)$rowconfig["mailFromName"];
|
|
$mailSMTPSecure = (string)$rowconfig["mailSMTPSecure"]; // z.B. 'tls' oder 'ssl' oder leer
|
|
|
|
// 2) Mail senden (UTF-8)
|
|
$mail = new PHPMailer(true);
|
|
|
|
try {
|
|
$mail->SMTPDebug = 0;
|
|
$mail->isSMTP();
|
|
$mail->Host = $mailserver;
|
|
$mail->SMTPAuth = true;
|
|
$mail->Username = $mailUsername;
|
|
$mail->Password = $mailPassword;
|
|
|
|
if (!empty($mailSMTPSecure)) {
|
|
$mail->SMTPSecure = $mailSMTPSecure; // 'tls' oder 'ssl'
|
|
}
|
|
|
|
$mail->Port = $mailPort;
|
|
|
|
// Charset sauber setzen
|
|
$mail->CharSet = 'UTF-8';
|
|
|
|
// Absender / Empfänger
|
|
$mail->setFrom($mailFrom, $mailFromName);
|
|
$mail->addAddress($empfaenger);
|
|
|
|
// Inhalt
|
|
$mail->isHTML(true);
|
|
$mail->Subject = $betreff;
|
|
$mail->Body = $body;
|
|
|
|
// AltBody sinnvoll: HTML -> Text grob runterbrechen
|
|
$mail->AltBody = trim(html_entity_decode(strip_tags(str_replace(["<br>", "<br/>", "<br />"], "\n", $body)), ENT_QUOTES, 'UTF-8'));
|
|
|
|
$mail->send();
|
|
return true;
|
|
|
|
} catch (Exception $e) {
|
|
// Optional: Logging statt echo
|
|
// error_log("Mail error: " . $mail->ErrorInfo);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function SendMailMessageVorlage(PDO $pdo, string $config, int $terminid, string $vorlage)
|
|
{
|
|
// -----------------------------------------
|
|
// 1) LOGIN CONFIG AUSLESEN
|
|
// -----------------------------------------
|
|
$stmt = $pdo->prepare("SELECT * FROM config LIMIT 1");
|
|
$stmt->execute();
|
|
$rowconfig = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
if (!$rowconfig) {
|
|
throw new RuntimeException("config Tabelle leer / nicht gefunden");
|
|
}
|
|
|
|
$mailserver = $rowconfig["mailserver"] ?? null;
|
|
$mailUsername = $rowconfig["mailUsername"] ?? null;
|
|
$mailPassword = $rowconfig["mailPassword"] ?? null;
|
|
$mailPort = $rowconfig["mailPort"] ?? null;
|
|
$mailFrom = $rowconfig["mailFrom"] ?? null;
|
|
$mailFromName = $rowconfig["mailFromName"] ?? null;
|
|
$mailSMTPSecure = $rowconfig["mailSMTPSecure"] ?? null;
|
|
$logintermin = $rowconfig["logintermin"] ?? null;
|
|
$loginwarteliste = $rowconfig["loginwarteliste"] ?? null;
|
|
$logingrippetermin = $rowconfig["logingrippetermin"] ?? null;
|
|
$logingrippewarteliste = $rowconfig["logingrippewarteliste"] ?? null;
|
|
$anfragebestaetigung = $rowconfig["anfragebestaetigung"] ?? null;
|
|
|
|
// -----------------------------------------
|
|
// 2) E-Mail Vorlage laden
|
|
// -----------------------------------------
|
|
$stmt = $pdo->prepare("SELECT betreff, body FROM mailtemplates WHERE templetid = ?");
|
|
$stmt->execute([$vorlage]);
|
|
$tpl = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
if (!$tpl) {
|
|
throw new RuntimeException("Mailtemplate nicht gefunden: templetid=" . $vorlage);
|
|
}
|
|
|
|
$body = $tpl["body"];
|
|
$betreff = $tpl["betreff"];
|
|
|
|
// -----------------------------------------
|
|
// 3) Daten je nach $config laden
|
|
// -----------------------------------------
|
|
$vorname = $nachname = $geburtstag = $tele = $plz = $ort = $strasse = null;
|
|
$adresse = $empfaenger = $hash = null;
|
|
|
|
// Optional-Felder
|
|
$Zeitanzeige = null;
|
|
$impfstofftext = null;
|
|
$impforttext = null;
|
|
$terminlogin = null;
|
|
$grippeterminlogin = null;
|
|
$wartelistelogin = null;
|
|
$grippewartelistelogin = null;
|
|
$anfragenlogin = null;
|
|
|
|
$nachricht = null;
|
|
$medikamenteins = null;
|
|
$medikamentzwei = null;
|
|
$anforderungart = null;
|
|
$rezeptart = null;
|
|
|
|
if ($config === "1") {
|
|
|
|
// impftermin + timeslots + user (ALT: nutzt noch user)
|
|
// Wenn du später auch das migrierst: hier JOIN persons statt user.
|
|
$stmt = $pdo->prepare("
|
|
SELECT it.*, ts.*, p.*
|
|
FROM impftermin it
|
|
INNER JOIN timeslots ts ON it.timeid = ts.timeid
|
|
INNER JOIN persons p ON it.userid = p.person_id
|
|
WHERE it.terminid = ?
|
|
LIMIT 1
|
|
");
|
|
$stmt->execute([$terminid]);
|
|
$rowtime = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
if (!$rowtime) {
|
|
throw new RuntimeException("Termin nicht gefunden: terminid=" . $terminid);
|
|
}
|
|
|
|
$vorname = $rowtime["vorname"];
|
|
$nachname = $rowtime["nachname"];
|
|
$geburtstag = $rowtime["geburtstag"];
|
|
$tele = $rowtime["tele"];
|
|
$plz = $rowtime["plz"];
|
|
$ort = $rowtime["ort"];
|
|
$strasse = $rowtime["strasse"];
|
|
$adresse = trim($ort . " " . $plz . ", " . $strasse);
|
|
|
|
$empfaenger = $rowtime["email"];
|
|
$hash = $rowtime["hash"];
|
|
$impfortid = $rowtime["impfortid"] ?? null;
|
|
|
|
$date = new DateTime($rowtime["date"]);
|
|
$datum = $date->format('d.m.Y');
|
|
$start = substr($rowtime["start"], 0, 5);
|
|
$ende = substr($rowtime["ende"], 0, 5);
|
|
$Zeitanzeige = $datum . " " . $start . "-" . $ende;
|
|
|
|
$impfstoff = $rowtime["impfstoff"] ?? null;
|
|
|
|
if (!empty($impfstoff)) {
|
|
$stmt = $pdo->prepare("SELECT impfname FROM impfstoff WHERE impfid = ? LIMIT 1");
|
|
$stmt->execute([$impfstoff]);
|
|
$impfstofftext = $stmt->fetchColumn() ?: null;
|
|
}
|
|
|
|
$terminlogin = $logintermin . "?id=" . $hash;
|
|
$grippeterminlogin = $logingrippetermin . "?id=" . $hash;
|
|
|
|
if (!empty($impfortid)) {
|
|
$stmt = $pdo->prepare("SELECT adresse FROM impfort WHERE ortid = ? LIMIT 1");
|
|
$stmt->execute([$impfortid]);
|
|
$impforttext = $stmt->fetchColumn() ?: null;
|
|
}
|
|
|
|
} elseif ($config === "2") {
|
|
|
|
// warteliste + user (ALT: nutzt noch user)
|
|
$stmt = $pdo->prepare("
|
|
SELECT w.*, p.*
|
|
FROM warteliste w
|
|
INNER JOIN persons p ON w.userid = p.person_id
|
|
WHERE w.warteid = ?
|
|
LIMIT 1
|
|
");
|
|
$stmt->execute([$terminid]);
|
|
$rowtime = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
if (!$rowtime) {
|
|
throw new RuntimeException("Wartelisteneintrag nicht gefunden: warteid=" . $terminid);
|
|
}
|
|
|
|
$vorname = $rowtime["vorname"];
|
|
$nachname = $rowtime["nachname"];
|
|
$geburtstag = $rowtime["geburtstag"];
|
|
$tele = $rowtime["tele"];
|
|
$plz = $rowtime["plz"];
|
|
$ort = $rowtime["ort"];
|
|
$strasse = $rowtime["strasse"];
|
|
$adresse = trim($ort . " " . $plz . ", " . $strasse);
|
|
|
|
$empfaenger = $rowtime["email"];
|
|
$hash = $rowtime["hash"];
|
|
|
|
$wartelistelogin = $loginwarteliste . "?id=" . $hash;
|
|
$grippewartelistelogin = $logingrippewarteliste . "?id=" . $hash;
|
|
|
|
$impfstoff = $rowtime["impfstoff"] ?? null;
|
|
$impfangebot = $rowtime["impfenangebot"] ?? null;
|
|
|
|
if (!empty($impfstoff)) {
|
|
$stmt = $pdo->prepare("SELECT impfname FROM impfstoff WHERE impfid = ? LIMIT 1");
|
|
$stmt->execute([$impfstoff]);
|
|
$impfstofftextwarte = $stmt->fetchColumn() ?: null;
|
|
}
|
|
|
|
// deine Funktion:
|
|
// $impfangebottext = GetimpfenangebotName($impfangebot);
|
|
|
|
} elseif ($config === "3") {
|
|
|
|
// NEU: anfragen + persons (statt user)
|
|
$stmt = $pdo->prepare("
|
|
SELECT a.*, p.vorname, p.nachname, p.geburtstag, p.tele, p.plz, p.ort, p.strasse, p.email
|
|
FROM anfragen a
|
|
INNER JOIN persons p ON a.requester_person_id = p.person_id
|
|
WHERE a.anfrageid = ?
|
|
LIMIT 1
|
|
");
|
|
$stmt->execute([$terminid]);
|
|
$rowtime = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
if (!$rowtime) {
|
|
throw new RuntimeException("Anfrage nicht gefunden: anfrageid=" . $terminid);
|
|
}
|
|
|
|
$vorname = $rowtime["vorname"];
|
|
$nachname = $rowtime["nachname"];
|
|
$geburtstag = $rowtime["geburtstag"];
|
|
$tele = $rowtime["tele"];
|
|
$plz = $rowtime["plz"];
|
|
$ort = $rowtime["ort"];
|
|
$strasse = $rowtime["strasse"];
|
|
$adresse = trim($ort . " " . $plz . ", " . $strasse);
|
|
|
|
$empfaenger = $rowtime["email"];
|
|
$hash = $rowtime["hash"];
|
|
|
|
$anfragenlogin = $anfragebestaetigung . "?id=" . $hash;
|
|
|
|
$nachricht = $rowtime["nachricht"];
|
|
$medikamenteins = $rowtime["medikament1"];
|
|
$medikamentzwei = $rowtime["medikament2"];
|
|
$anforderungart = $rowtime["anforderungart"];
|
|
|
|
$stmt = $pdo->prepare("SELECT artname FROM anfrageart WHERE artid = ? LIMIT 1");
|
|
$stmt->execute([$anforderungart]);
|
|
$rezeptart = $stmt->fetchColumn() ?: null;
|
|
|
|
} elseif ($config === "4") {
|
|
|
|
// NEU: anfragen + persons (statt user), aber wie bei dir mit utf8_decode
|
|
$stmt = $pdo->prepare("
|
|
SELECT a.*, p.vorname, p.nachname, p.geburtstag, p.tele, p.plz, p.ort, p.strasse, p.email
|
|
FROM anfragen a
|
|
INNER JOIN persons p ON a.requester_person_id = p.person_id
|
|
WHERE a.anfrageid = ?
|
|
LIMIT 1
|
|
");
|
|
$stmt->execute([$terminid]);
|
|
$rowtime = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
if (!$rowtime) {
|
|
throw new RuntimeException("Anfrage nicht gefunden: anfrageid=" . $terminid);
|
|
}
|
|
|
|
$vorname = utf8_decode($rowtime["vorname"]);
|
|
$nachname = utf8_decode($rowtime["nachname"]);
|
|
$geburtstag = $rowtime["geburtstag"];
|
|
$tele = $rowtime["tele"];
|
|
$plz = $rowtime["plz"];
|
|
$ort = $rowtime["ort"];
|
|
$strasse = $rowtime["strasse"];
|
|
$adresse = trim($ort . " " . $plz . ", " . $strasse);
|
|
|
|
$empfaenger = $rowtime["email"];
|
|
$hash = $rowtime["hash"];
|
|
$anfragenlogin = $anfragebestaetigung . "?id=" . $hash;
|
|
|
|
$nachricht = utf8_decode($rowtime["nachricht"]);
|
|
|
|
} else {
|
|
throw new InvalidArgumentException("Unbekannter config-Wert: " . $config);
|
|
}
|
|
|
|
$body = str_replace("%BENUTZERVORNAME%", $vorname, $body);
|
|
$body = str_replace("%BENUTZERNACHNAME%", $nachname, $body);
|
|
$body = str_replace("%BENUTZERGEBURTSTAG%", $geburtstag, $body);
|
|
$body = str_replace("%BENUTZERADRESSE%", $adresse, $body);
|
|
$body = str_replace("%TERMINZEITVORGABE%", $Zeitanzeige, $body);
|
|
$body = str_replace("%TERMINIMPFSTOFF%", $impfstofftext, $body);
|
|
$body = str_replace("%TERMINIMPFORT%", $impforttext, $body);
|
|
$body = str_replace("%TERMINLOGIN%", $terminlogin, $body);
|
|
$body = str_replace("%GRIPPETERMINLOGIN%", $grippeterminlogin, $body);
|
|
$body = str_replace("%WARTELISTELOGIN%", $wartelistelogin, $body);
|
|
$body = str_replace("%GRIPPEWARTELISTELOGIN%", $grippewartelistelogin, $body);
|
|
$body = str_replace("%WARTELISTEIMPFSTOFF%", $impfstofftextwarte ?? null, $body);
|
|
$body = str_replace("%WARTELISTEIMPFANGEBOT%", GetimpfenangebotName((int)$impfangebot), $body);
|
|
$body = str_replace("%REZEPTART%", $rezeptart, $body);
|
|
$body = str_replace("%MEDIKAMENTNUMMEREINS%", $medikamenteins, $body);
|
|
$body = str_replace("%MEDIKAMENTNUMMERZWEI%", $medikamentzwei, $body);
|
|
$body = str_replace("%ANFRAGENACHRICHT%", $nachricht, $body);
|
|
$body = str_replace("%ANFRAGENLOGIN%", $anfragenlogin, $body);
|
|
//echo $body;
|
|
|
|
$mail = new PHPMailer(true);
|
|
try {
|
|
//Server settings
|
|
$mail->SMTPDebug = 0; // Enable verbose debug output
|
|
$mail->isSMTP(); // Set mailer to use SMTP
|
|
$mail->Host = $mailserver;
|
|
$mail->SMTPAuth = true; // Enable SMTP authentication
|
|
$mail->Username = $mailUsername;
|
|
$mail->Password = $mailPassword;
|
|
$mail->SMTPSecure = $mailSMTPSecure; // Enable TLS encryption, `ssl` also accepted
|
|
//$mail->Port = 587; // TCP port to connect to
|
|
$mail->Port = $mailPort;
|
|
//Recipients
|
|
$mail->setFrom($mailFrom , $mailFromName);
|
|
$mail->addAddress($empfaenger); // Name is optional
|
|
|
|
|
|
//Content
|
|
$mail->isHTML(true); // Set email format to HTML
|
|
$mail->Subject = $betreff;
|
|
$mail->Body = $body;
|
|
$mail->AltBody = $body;
|
|
|
|
$mail->send();
|
|
echo '<b>Ihre Nachricht wurde erfolgreich versendet!</b><br>Bitte prüfen Sie Ihren Posteingang sowie Ihren Spam-Ordner!<br>';
|
|
} catch (Exception $e) {
|
|
echo 'Leider gab es einen Fehler bei E-Mailversand. Fehler: ', $mail->ErrorInfo;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function SendMailMessageHash($empfaenger, $betreff, $body, $hash){
|
|
|
|
$body = iconv('UTF-8', 'CP1252//IGNORE', $body);
|
|
$betreff = iconv('UTF-8', 'CP1252//IGNORE', $betreff);
|
|
|
|
$mail = new PHPMailer(true);
|
|
try {
|
|
//Server settings
|
|
$mail->SMTPDebug = 0; // Enable verbose debug output
|
|
$mail->isSMTP(); // Set mailer to use SMTP
|
|
//$mail->Host = 'vwp0583.webpack.hosteurope.de'; // Specify main and backup SMTP servers
|
|
$mail->Host = 'mx2f5c.netcup.net';
|
|
$mail->SMTPAuth = true; // Enable SMTP authentication
|
|
//$mail->Username = 'wp1085322-creutzburg'; // SMTP username
|
|
//$mail->Password = 'praxis.cr'; // SMTP password
|
|
$mail->Username = 'praxis-creutzburg@ctb-it.de';
|
|
$mail->Password = 'Coppenbruegge123';
|
|
$mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
|
|
//$mail->Port = 587; // TCP port to connect to
|
|
$mail->Port = 587;
|
|
//Recipients
|
|
$mail->setFrom('praxis-creutzburg@ctb-it.de', 'Praxis Creutzburg');
|
|
#$mail->addAddress('ccreutzburg@live.de', 'Joe User'); // Add a recipient
|
|
$mail->addAddress($empfaenger); // Name is optional
|
|
$mail->addReplyTo('kontakt@praxis-creutzburg.de', 'Praxis Creutzburg');
|
|
//$mail->addBCC('Arzt@praxis-creutzburg.de');
|
|
//$mail->addBCC("praxis@balanceacademie.de");
|
|
//Attachments
|
|
#$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments
|
|
#$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name
|
|
|
|
//Content
|
|
$mail->isHTML(true); // Set email format to HTML
|
|
$mail->Subject = $betreff;
|
|
$mail->Body = $body;
|
|
$mail->AltBody = $body;
|
|
//$mail->charSet = "UTF-8";
|
|
//$mail->Encoding = 'base64';
|
|
|
|
$mail->send();
|
|
echo '<b>Ihre Nachricht wurde erfolgreich versendet!</b><br><br>Überprüfen Sie auch Ihren Spam-Filter.<br>';
|
|
} catch (Exception $e) {
|
|
echo 'Leider gab es einen Fehler bei E-Mailversand. Nutzen Sie diesen Link: '.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']. '?id=' . $hash. '<br>Mit diesem können Sie den Termin bestätigen und stornieren.<br>'; #Fehler: ', $mail->ErrorInfo;
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
function GetStatus($checked){
|
|
|
|
if($checked == "0"){
|
|
$farbe ="#F0E68C";
|
|
$checkausgabe = "nicht bestätigt";
|
|
}else if($checked == "1"){
|
|
$farbe = "#98FB98";
|
|
$checkausgabe = "zugesagt";
|
|
}else if($checked == "2"){
|
|
$farbe = "#32CD32";
|
|
$checkausgabe = "abgemeldet";
|
|
}else if($checked == "3"){
|
|
$farbe = "#32CD32";
|
|
$checkausgabe = "vom Praxisteam abgesagt";
|
|
}else if($checked == "4"){
|
|
$farbe = "#32CD32";
|
|
$checkausgabe = "vom System abgesagt";
|
|
}else if($checked == "5"){
|
|
$farbe = "#32CD32";
|
|
$checkausgabe = "vom System abgesagt";
|
|
}else if($checked == "10"){
|
|
$farbe = "#ace7ac";
|
|
$checkausgabe = "beantwortet";
|
|
}else if($checked == "29"){
|
|
$farbe = "#97ff97";
|
|
$checkausgabe = "telefonisch beantwortet";
|
|
}else if($checked == "30"){
|
|
$farbe = "#32CD32";
|
|
$checkausgabe = "gelöscht mit Info";
|
|
}else if($checked == "31"){
|
|
$farbe = "#32CD32";
|
|
$checkausgabe = "gelöscht ohne Info";
|
|
}else{
|
|
$checkausgabe = "unbekannt";
|
|
$farbe = "";
|
|
}
|
|
|
|
return $checkausgabe;
|
|
|
|
}
|
|
|
|
function GetStatusFarbe($checked){
|
|
|
|
if($checked == "0"){
|
|
$farbe ="#F0E68C";
|
|
$checkausgabe = "nicht bestätigt";
|
|
}else if($checked == "1"){
|
|
$farbe = "#98FB98";
|
|
$checkausgabe = "zugesagt";
|
|
}else if($checked == "2"){
|
|
$farbe = "#32CD32";
|
|
$checkausgabe = "abgemeldet";
|
|
}else if($checked == "3"){
|
|
$farbe = "#32CD32";
|
|
$checkausgabe = "vom Praxisteam abgesagt";
|
|
}else if($checked == "4"){
|
|
$farbe = "#32CD32";
|
|
$checkausgabe = "vom System abgesagt";
|
|
}else if($checked == "5"){
|
|
$farbe = "#32CD32";
|
|
$checkausgabe = "vom System abgesagt";
|
|
}else if($checked == "10"){
|
|
$farbe = "#ace7ac";
|
|
$checkausgabe = "beantwortet";
|
|
}else if($checked == "29"){
|
|
$farbe = "#97ff97";
|
|
$checkausgabe = "telefonisch beantwortet";
|
|
}else if($checked == "30"){
|
|
$farbe = "#32CD32";
|
|
$checkausgabe = "gelöscht mit Info";
|
|
}else if($checked == "31"){
|
|
$farbe = "#32CD32";
|
|
$checkausgabe = "gelöscht ohne Info";
|
|
}else{
|
|
$checkausgabe = "unbekannt";
|
|
$farbe = "";
|
|
}
|
|
|
|
return $farbe;
|
|
|
|
}
|
|
|
|
|
|
|
|
function GetImpfstoffId($impfstoff){
|
|
|
|
if($impfstoff == "Egal/Arzt entscheidet"){
|
|
$impfstofftext = "0";
|
|
}else if($impfstoff == "AstraZeneca"){
|
|
$impfstofftext = "1" ;
|
|
}else if($impfstoff == "Biontech"){
|
|
$impfstofftext = "2";
|
|
}else if($impfstoff == "Johnson"){
|
|
$impfstofftext = "3";
|
|
}else{
|
|
$impfstofftext = "noch nicht geklärt";
|
|
}
|
|
return $impfstofftext;
|
|
}
|
|
|
|
function GetImpfstoffName($impfstoff){
|
|
|
|
if($impfstoff == 0){
|
|
$impfstofftext = "Egal/Arzt entscheidet";
|
|
}else if($impfstoff == 1){
|
|
$impfstofftext = "AstraZeneca";
|
|
}else if($impfstoff == 2){
|
|
$impfstofftext = "Biontech";
|
|
}else if($impfstoff == 3){
|
|
$impfstofftext = "Johnson";
|
|
}else{
|
|
$impfstofftext = "noch nicht geklärt";
|
|
}
|
|
return $impfstofftext;
|
|
|
|
}
|
|
|
|
function GetImpfstoffTermin($impfstoff){
|
|
|
|
if($impfstoff == 0){
|
|
$impfstofftext = "AstraZeneca";
|
|
}else if($impfstoff == 1){
|
|
$impfstofftext = "Biontech";
|
|
}else if($impfstoff == 2){
|
|
$impfstofftext = "Arzt entscheidet";
|
|
}else{
|
|
$impfstofftext = "noch nicht geklärt";
|
|
}
|
|
return $impfstofftext;
|
|
}
|
|
|
|
function GetImpfArt($wert){
|
|
|
|
if($wert == "1"){
|
|
$text = "Erstimpfung";
|
|
}else if($wert == 2){
|
|
$text = "Zweitimpfung";
|
|
}else if($wert == 3){
|
|
$text = "Drittimpfung/Booster";
|
|
}else if($wert == 4){
|
|
$text = "Vierimpfung";
|
|
}else if($wert == 5){
|
|
$text = "Zweitimpfung (nur Erstimpfung)";
|
|
}else if($wert == 6){
|
|
$text = "Erstimpfung (einzeln)";
|
|
}else{
|
|
$text = "";
|
|
}
|
|
return $text;
|
|
|
|
}
|
|
|
|
function GetBehandelt($wert){
|
|
|
|
if($wert == 0){
|
|
$text = "nicht behandelt";
|
|
}else if($wert == 1){
|
|
$text = "behandelt";
|
|
}else{
|
|
$text = "";
|
|
}
|
|
return $text;
|
|
|
|
}
|
|
|
|
function GetVersicherungArt($wert){
|
|
|
|
if($wert == 0){
|
|
$text = "Kassenpatient";
|
|
}else if($wert == 1){
|
|
$text = "Privatpatient";
|
|
}else{
|
|
$text = "";
|
|
}
|
|
return $text;
|
|
|
|
}
|
|
|
|
function GetOrdnungsid($wert){
|
|
|
|
if($wert == 0){
|
|
$text = "unklar";
|
|
}else if($wert == 1){
|
|
$text = "Rezept";
|
|
}else if($wert == 2){
|
|
$text = "Anfrage";
|
|
}else if($wert == 3){
|
|
$text = "Terminabsage";
|
|
}else if($wert == 5){
|
|
$text = "Bewerbung";
|
|
}else{
|
|
$text = "";
|
|
}
|
|
return $text;
|
|
|
|
}
|
|
|
|
function GetPatientenartName($Patientenart){
|
|
if($Patientenart == "0"){
|
|
$impfenangebot = "Neupatient";
|
|
}else if($Patientenart == "1"){
|
|
$impfenangebot = "Patient";
|
|
}else{
|
|
$impfenangebot = "unklar";
|
|
}
|
|
return $impfenangebot;
|
|
|
|
}
|
|
|
|
function GetimpfenangebotName($Patientenart){
|
|
if($Patientenart == "1"){
|
|
$impfenangebot = "normal";
|
|
}else if($Patientenart == "2"){
|
|
$impfenangebot = "Springer";
|
|
}else{
|
|
$impfenangebot = "unklar";
|
|
}
|
|
return $impfenangebot;
|
|
|
|
}
|
|
|
|
function GetImpfstoffNameTermin($impfstoff){
|
|
|
|
if($impfstoff == 0){
|
|
$impfstofftext = "AstraZeneca";
|
|
}else if($impfstoff == 1){
|
|
$impfstofftext = "Biontech";
|
|
}else{
|
|
$impfstofftext = "noch nicht geklärt";
|
|
}
|
|
return $impfstofftext;
|
|
|
|
}
|
|
|
|
|
|
|
|
### Togo Termine anlegen
|
|
|
|
function gototerminanlegung() {
|
|
|
|
global $pdo;
|
|
|
|
$statementtermin = $pdo->prepare("SELECT * FROM togo_terminvorgaben");
|
|
$statementtermin->execute();
|
|
foreach ($statementtermin as $row) {
|
|
$togovorgabenid = $row["vorgabenid"];
|
|
$togodate = $row["date"];
|
|
$togostart = $row["start"];
|
|
$togoende = $row["ende"];
|
|
$standort = $row["standort"];
|
|
$error = $row["error"];
|
|
$warning = $row["warning"];
|
|
$date = new DateTime();
|
|
if($togodate == "Mo"){
|
|
$date->modify('next monday');
|
|
|
|
}elseif($togodate == "Di"){
|
|
$$date->modify('next tuesday');
|
|
#$nextday = date('Y-m-d', $nextTuesday);
|
|
}elseif($togodate == "Mi"){
|
|
$date->modify('next wednesday');
|
|
#$nextday = date('Y-m-d', $nextTuesday);
|
|
}elseif($togodate == "Do"){
|
|
$date->modify('next thursday');
|
|
#$nextday = date('Y-m-d', $nextTuesday);
|
|
}elseif($togodate == "Fr"){
|
|
$date->modify('next friday');
|
|
#$nextday = date('Y-m-d', $nextTuesday);
|
|
}elseif($togodate == "Sa"){
|
|
$date->modify('next saturday');
|
|
#$nextday = date('Y-m-d', $nextTuesday);
|
|
}elseif($togodate == "so"){
|
|
$date->modify('next sunday');
|
|
#$nextday = date('Y-m-d', $nextTuesday);
|
|
}else{
|
|
$ausgabedate = "error";
|
|
}
|
|
$nextday = $date->format('Y-m-d');
|
|
|
|
$i=0;
|
|
while($i < 4){
|
|
|
|
if($i!=0){
|
|
#$nextday = date('Y-m-d', strtotime($nextday .' +7 day'));
|
|
// Create a new DateTime object
|
|
$currentDate = new DateTime($nextday);
|
|
$datetempz = $currentDate->add(new DateInterval('P7D'));
|
|
//Get yesterday date
|
|
$nextday = $datetempz->format('Y-m-d');
|
|
|
|
|
|
}
|
|
$statementuser = $pdo->prepare("SELECT terminid FROM togo_termin WHERE date=:date AND start=:start AND end=:end AND standort=:standort");
|
|
$statementuser->execute(array('date' => $nextday , 'start' => $togostart, 'end' => $togoende , 'standort' => $standort ));
|
|
|
|
$count = $statementuser->rowCount();
|
|
if($count == 0){
|
|
$insert = $pdo->prepare("INSERT INTO togo_termin (date, start, end,standort,error,warning) VALUES (:date, :start, :end,:standort, :error, :warning)");
|
|
$insert->execute(array('date' => $nextday , 'start' => $togostart, 'end' => $togoende , 'standort' => $standort, 'error' => $error , 'warning' => $warning ));
|
|
$userid = $pdo->lastInsertId();
|
|
}
|
|
|
|
$i++;
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
function show_header($titeltext){
|
|
|
|
echo '
|
|
<!DOCTYPE HTML>
|
|
<!--
|
|
Alpha by HTML5 UP
|
|
html5up.net | @n33co
|
|
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
|
-->
|
|
<html>
|
|
<head>
|
|
<title>'. $titeltext .'</title>
|
|
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
|
<meta name="description" content="" />
|
|
<meta name="keywords" content="" />
|
|
|
|
';
|
|
include('meta.inc');
|
|
|
|
echo '
|
|
|
|
|
|
<!--[if lte IE 8]><script src="css/ie/html5shiv.js"></script><![endif]-->
|
|
<script src="js/jquery.min.js"></script>
|
|
<script src="js/jquery.dropotron.min.js"></script>
|
|
<script src="js/jquery.scrollgress.min.js"></script>
|
|
<script src="js/skel.min.js"></script>
|
|
<script src="js/skel-layers.min.js"></script>
|
|
<script src="js/init.js"></script>
|
|
<noscript>
|
|
<link rel="stylesheet" href="css/skel.css" />
|
|
<link rel="stylesheet" href="css/style.css" />
|
|
<link rel="stylesheet" href="css/style-wide.css" />
|
|
</noscript>
|
|
<!--[if lte IE 8]><link rel="stylesheet" href="css/ie/v8.css" /><![endif]-->
|
|
|
|
|
|
|
|
</head>
|
|
<body>
|
|
|
|
<!-- Header -->
|
|
<header id="header" class="skel-layers-fixed">
|
|
|
|
';
|
|
}
|
|
|
|
function GetWorkerName($workerid) {
|
|
global $pdo;
|
|
|
|
$statement = $pdo->prepare("SELECT vorname,nachname FROM users WHERE id = :id");
|
|
$statement->execute(array('id' => $workerid));
|
|
$user = $statement->fetch();
|
|
$count = $statement->rowCount();
|
|
|
|
if($count == 1){
|
|
return $user["vorname"] . " " . $user["nachname"];
|
|
}else{
|
|
return "";
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
function ShowWartelisteTab(string $sql, array $params = []): void
|
|
{
|
|
global $pdo;
|
|
|
|
echo "<table width='100%'>";
|
|
echo "<tr>
|
|
<th style='width:10%;'>Person</th>
|
|
<th>Kontakt</th>
|
|
<th>Impfstoff</th>
|
|
<th>Art</th>
|
|
<th>Impfen mit</th>
|
|
<th>Status</th>
|
|
<th>Aktion</th>
|
|
</tr>";
|
|
|
|
$stmt = $pdo->prepare($sql);
|
|
$stmt->execute($params);
|
|
|
|
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
|
|
//echo "TEST1111";
|
|
$impfstoff = $row["impfstoff"];
|
|
$impfenangebot = $row["impfenangebot"];
|
|
$Patientenart = $row["Patientenart"];
|
|
$impfenmit = $row["impfenmit"];
|
|
$impfenzeitraum = $row["impfenzeitraum"];
|
|
$impfart = $row["impfart"];
|
|
|
|
$impfenartstring = GetImpfArt($impfart);
|
|
$impfenangebotstring = GetimpfenangebotName($impfenangebot);
|
|
$patientenartstring = GetPatientenartName($Patientenart);
|
|
// Impfstoff
|
|
//$impfstofftext = GetImpfstoffName($impfstoff);
|
|
// Impfstoff
|
|
$sqlimpfstoffstring = "SELECT impfname FROM impfstoff WHERE impfid ='" . $impfstoff . "'";
|
|
foreach ($pdo->query($sqlimpfstoffstring) as $rowimpf) {
|
|
$impfstofftext = $rowimpf["impfname"];
|
|
}
|
|
|
|
$warteid = $row["warteid"];
|
|
$Zeitanzeige = $datum . " " . $start . "-" . $ende ;
|
|
$userid = $row["userid"];
|
|
$checked = $row["checked"];
|
|
$date_created = $row["date_created"];
|
|
//echo $userid ;
|
|
$queryuser = "Select * FROM persons WHERE person_id='" . $userid . "'";
|
|
|
|
foreach ($pdo->query($queryuser) as $rowuser) {
|
|
$vorname = $rowuser["vorname"];
|
|
$nachname = $rowuser["nachname"];
|
|
$mail = $rowuser["mail"];
|
|
$tel = $rowuser["tele"];
|
|
|
|
$geburtstag = $rowuser["geburtstag"];
|
|
|
|
|
|
$ort = $rowuser["ort"];
|
|
$plz = $rowuser["plz"];
|
|
$strasse = $rowuser["strasse"];
|
|
}
|
|
|
|
$ausgabegeburstag = $geburtstag;
|
|
#$datumausgabe= date("d.m.Y H:i", strtotime($date_created ));
|
|
$currentDate = new DateTime($date_created);
|
|
$datumausgabe = $currentDate->format('d.m.Y H:i');
|
|
|
|
$farbe = GetStatusFarbe($checked);
|
|
$checkausgabe = GetStatus($checked);
|
|
|
|
$userausgabe = $vorname . " " . $nachname . "<br>" . $ausgabegeburstag;
|
|
$adresse = $plz . " " . $ort . ", " . $strasse ;
|
|
$kontaktdaten = $mail . "<br>" . $tel . "<br>" . $adresse;
|
|
|
|
echo "<tr style='background-color:". $farbe. ";line-height:100%;'><td>$userausgabe</td><td>$kontaktdaten</td><td>$impfstofftext</td><td>$impfenangebotstring $patientenartstring <br>$impfenzeitraum<br>$impfenartstring</td><td>$impfenmit</td><td>$checkausgabe<br>$datumausgabe</td><td>
|
|
<div style='float: left;margin:5px; height: 20px;'>
|
|
<form action='". $_SERVER["PHP_SELF"] ."' method=POST>
|
|
<input type=hidden name=aktion value=8>
|
|
<input type=hidden name=warteid value=$warteid>
|
|
<input type=submit class='btn btn-primary btn-sm' value='absagen/Löschen'>
|
|
</form>
|
|
</div>
|
|
<div style='float: left;margin:5px; height: 20px;'>
|
|
<form action='". $_SERVER["PHP_SELF"] ."' method=POST>
|
|
<input type=hidden name=aktion value=10>
|
|
<input type=hidden name=warteid value=$warteid>
|
|
<input type=submit class='btn btn-primary btn-sm' value='Termin zuordnen'>
|
|
</form>
|
|
</div>
|
|
</td></tr>
|
|
";
|
|
|
|
}
|
|
|
|
echo "</table>";
|
|
}
|
|
|
|
function ShowImpfTerminTab($sql){
|
|
|
|
global $pdo;
|
|
echo "<table width= 100% style='padding:0;'>";
|
|
echo "<tr><th>Termin</th><th>Person</th><th>Impfstoff</th><th>Status</th><th style='width:25%;'>Aktion</th><tr>";
|
|
|
|
foreach ($pdo->query($sql) as $row) {
|
|
//echo "Test";
|
|
#$datum = date("d.m.Y", strtotime($row["date"]));
|
|
$currentDate = new DateTime($row["date"]);
|
|
$datum = $currentDate->format('d.m.Y');
|
|
$start = substr($row["start"],0, 5);
|
|
$ende = substr($row["ende"],0, 5);
|
|
$dosenanzahl = $row["impfdosen"];
|
|
$impfstoff = $row["impfstoff"];
|
|
$terminid = $row["terminid"];
|
|
$last_updated = $row["last_updated"];
|
|
$behandelt = $row["behandelt"];
|
|
$impfart = $row["impfart"];
|
|
|
|
|
|
$behandeltstring = GetBehandelt($behandelt);
|
|
|
|
// Impfstoff
|
|
$sqlimpfstoffstring = "SELECT * FROM impfstoff WHERE impfid ='" . $impfstoff . "'";
|
|
$queryimpfstoff = $pdo->query($sqlimpfstoffstring);
|
|
$rowimpf = $queryimpfstoff->fetch(PDO::FETCH_ASSOC);
|
|
$impfstofftext = "<b>". $rowimpf["impfname"] . "</b>";
|
|
|
|
$timeid = $row["timeid"];
|
|
$Zeitanzeige = $datum . " " . $start . "-" . $ende ;
|
|
$userid = $row["userid"];
|
|
$checked = $row["checked"];
|
|
$sqluser = "Select * FROM persons WHERE person_id='" . $userid . "'";
|
|
$queryuser = $pdo->query($sqluser);
|
|
$rowuser = $queryuser->fetch(PDO::FETCH_ASSOC);
|
|
$vorname = $rowuser["vorname"];
|
|
$nachname = $rowuser["nachname"];
|
|
$mail = $rowuser["mail"];
|
|
$tel = $rowuser["tele"];
|
|
$geburtstag = $rowuser["geburtstag"];
|
|
if($geburtstag == "0000-00-00"){
|
|
$ausgabegeburstag = $jahrgang;
|
|
}else{
|
|
$ausgabegeburstag = $geburtstag;
|
|
}
|
|
|
|
if($behandelt == 0){
|
|
$farbe = GetStatusFarbe($checked);
|
|
}else{
|
|
$farbe = "#04B404";
|
|
}
|
|
$checkausgabe = GetStatus($checked);
|
|
|
|
$impfartausgabe = GetImpfArt($impfart);
|
|
|
|
$userausgabe = $nachname . ", " . $vorname. " - ". $ausgabegeburstag . "<br>" . $tel . " - " . $mail ;
|
|
|
|
echo "<tr style='background-color:". $farbe. ";' id=$terminid><td>$Zeitanzeige</td><td>$userausgabe</td><td>$impfstofftext $behandeltstring<br>$impfartausgabe</td><td>$checkausgabe<br>$last_updated<br></td><td><form action='". $_SERVER["PHP_SELF"] ."' method=POST>
|
|
<form action='". $_SERVER["PHP_SELF"] ."' method=POST> ";
|
|
echo '<div style="float:left; padding: 5px;">';
|
|
if($behandelt == 0){
|
|
echo "<input type=button class='btn btn-danger ' name=$terminid value='behandelt' onclick='behandelt(this.attributes[\"name\"].value)'>";
|
|
}else{
|
|
echo "<input type=button class='btn btn-primary btn-sm' name=$terminid value='unbehandelt' onclick='behandelt(this.attributes[\"name\"].value)'>";
|
|
}
|
|
echo "
|
|
</form>
|
|
</div>
|
|
<div style='float:left; padding: 5px;'>
|
|
<form action='". $_SERVER["PHP_SELF"] ."' method=POST>
|
|
<input type=hidden name=aktion value=5>
|
|
<input type=hidden name=terminid value=$terminid>
|
|
<input type=submit class='btn btn-primary btn-sm' value='Absagen'>
|
|
</form>
|
|
</div><div style='float:left; padding: 5px;'>
|
|
<form action='". $_SERVER["PHP_SELF"] ."' method=POST>
|
|
<input type=hidden name=aktion value=umbuchen>
|
|
<input type=hidden name=terminid value=$terminid>
|
|
<input type=hidden name=userid value=$userid>
|
|
<input type=submit class='btn btn-primary btn-sm' value='Bearbeiten'>
|
|
</form>
|
|
</div>
|
|
</td></tr>";
|
|
|
|
}
|
|
|
|
echo "</table>";
|
|
|
|
}
|
|
|
|
|
|
function ImpfTerminForm($userid, $terminid, $alleTermine){
|
|
|
|
global $pdo;
|
|
|
|
echo "<form action='". $_SERVER['PHP_SELF'] . "' method=POST>";
|
|
echo "<input type=hidden name=aktion value=terminspeichern>";
|
|
echo '<input type="hidden" name="terminid" value="'. $terminid .'" />';
|
|
|
|
if($userid != 0 ){
|
|
|
|
echo '<input type="hidden" name="userid" value="'. $userid .'" required />';
|
|
$statementuser = $pdo->prepare("SELECT * FROM persons WHERE person_id = :id");
|
|
$statementuser->execute(array('id' => $userid));
|
|
$rowuser = $statementuser->fetch(PDO::FETCH_ASSOC);
|
|
$nachname = $rowuser["nachname"];
|
|
$vorname = $rowuser["vorname"];
|
|
$mail = $rowuser["mail"];
|
|
$geburtstag = $rowuser["geburtstag"];
|
|
$tele = $rowuser["tele"];
|
|
$plz = $rowuser["plz"];
|
|
$ort = $rowuser["ort"];
|
|
$strasse = $rowuser["strasse"];
|
|
$Patientenart = $rowuser["Patientenart"];
|
|
$kassenart = $rowuser["kassenart"];
|
|
|
|
echo "<h3>Kundeninfo</h3>";
|
|
/*
|
|
echo $vorname . " " . $nachname . "<br>";
|
|
echo $geburtstag . "<br>";
|
|
echo $mail . "<br>";
|
|
*/
|
|
}
|
|
if($terminid){
|
|
|
|
|
|
$statementtermin = $pdo->prepare("SELECT date,start,ende,impfstoff,timeslots.timeid,impfart FROM timeslots INNER JOIN impftermin ON impftermin.timeid = timeslots.timeid WHERE terminid = :id");
|
|
$statementtermin->execute(array('id' => $terminid));
|
|
$rowtermin = $statementtermin->fetch();
|
|
|
|
#$datum = date("d.m.Y", strtotime($rowtermin["date"]));
|
|
$currentDate = new DateTime($rowtermin["date"]);
|
|
$datum = $currentDate->format('d.m.Y');
|
|
$start = substr($rowtermin["start"],0, 5);
|
|
$ende = substr($rowtermin["ende"],0, 5);
|
|
|
|
$timeidtermin = $rowtermin["timeid"];
|
|
echo '<input type="hidden" name="oldtimeid" value="'. $timeidtermin .'" />';
|
|
$impfstoff = $rowtermin["impfstoff"];
|
|
$impfart = $rowtermin["impfart"];
|
|
// Impfstoff
|
|
$sqlimpfstoffstring = "SELECT * FROM impfstoff WHERE impfid ='" . $impfstoff . "'";
|
|
$queryimpfstoff = $pdo->query($sqlimpfstoffstring);
|
|
$rowimpf = $queryimpfstoff->fetch(PDO::FETCH_ASSOC);
|
|
$impfstofftext = $rowimpf["impfname"];
|
|
/*
|
|
$anzeige = "$datum - $start-$ende - $impfstofftext <br>";
|
|
echo "<h3>Aktueller Termin</h3> $anzeige <br>";
|
|
echo "Dieser Termin wird storniert.<br>";
|
|
*/
|
|
}
|
|
|
|
?>
|
|
<label for="impfart">Nachname (Pflichtfeld)</label>
|
|
<input type="text" class="form-control" name="Name" placeholder="Name" <?php if($nachname){ echo "value='". $nachname . "'";}?> required />
|
|
<label for="impfart">Vorname (Pflichtfeld)</label>
|
|
<input type="text" class="form-control" name="Vorname" placeholder="Vorname" <?php if($vorname){ echo "value='". $vorname . "'";}?> required />
|
|
<label for="impfart">E-Mail</label>
|
|
<input type="email" class="form-control" name="Email" placeholder="Email" <?php if($mail){ echo "value='". $mail . "'";}?> />
|
|
<label for="impfart">Geburtstag</label>
|
|
<input type="date" class="form-control" name="Geburtsjahr" placeholder="Geburtsjahr" <?php if($geburtstag){ echo "value='". $geburtstag . "'";}?> />
|
|
<label for="impfart">Telefon</label>
|
|
<input type="text" class="form-control" name="Tel" placeholder="Telefon" <?php if($tele){ echo "value='". $tele . "'";}?> />
|
|
<label for="impfart">Ort</label>
|
|
<input type="text" class="form-control" name="ort" placeholder="Ort" <?php if($ort){ echo "value='". $ort . "'";}?> />
|
|
<label for="impfart">PLZ</label>
|
|
<input type="text" class="form-control" name="plz" placeholder="PLZ" <?php if($plz){ echo "value='". $plz . "'";}?> />
|
|
<label for="impfart">Straße</label>
|
|
<input type="text" class="form-control" name="strasse" placeholder="Strasse" <?php if($strasse){ echo "value='". $strasse . "'";}?> />
|
|
<label for="versicherung">Versicherungsart (Pflichtfeld)</label>
|
|
<select name="versicherung" class="form-control" required />
|
|
<option value="0" <?php if($kassenart == 0){ echo "selected";}?> >Kassenpatient</option>
|
|
<option value="1" <?php if($kassenart == 1){ echo "selected";}?> >Privat versichert</option>
|
|
</select>
|
|
<label for="Patientenart">Patientenart (Pflichtfeld)</label>
|
|
<select name="Patientenart" class="form-control" required />
|
|
<option value="0" <?php if($Patientenart == 0){ echo "selected";}?> >Neupatient</option>
|
|
<option value="1" <?php if($Patientenart == 1){ echo "selected";}?> >Bestandspatient</option>
|
|
</select>
|
|
|
|
|
|
<?php
|
|
|
|
$heute = date("Y-m-d");
|
|
$aktuellezeit = date("h:i");
|
|
|
|
if($alleTermine){
|
|
$statement = $pdo->prepare("SELECT * FROM timeslots WHERE date > :heute OR (date = :heute AND start > :aktuellezeit) OR timeid = :timeid ORDER BY date, start");
|
|
}else{
|
|
$statement = $pdo->prepare("SELECT * FROM timeslots WHERE date > :heute OR (date = :heute AND start > :aktuellezeit AND impfdosen > 0) OR timeid = :timeid ORDER BY date, start");
|
|
}
|
|
$statement->execute(array('heute' => $heute , 'aktuellezeit' => $aktuellezeit, 'timeid' => $timeid, 'timeid' => $timeidtermin));
|
|
//$timesloteauswertung = $statement->fetch();
|
|
$timecount = $statement->rowCount();
|
|
//$timecount =1;
|
|
|
|
if($timecount > 0){
|
|
?>
|
|
|
|
<br><br>
|
|
<label for="Terminzeitraum">Termin: (Pflichtfeld)</label>
|
|
|
|
<div class="select-wrapper">
|
|
<select name="Terminzeitraum" id="Terminzeitraum" required class="form-control" onchange="checkTerminzeitraum()">
|
|
<?php
|
|
|
|
|
|
//echo '<form action="'. $_SERVER['PHP_SELF'] .'" method=POST>';
|
|
echo '<option value="">- Terminzeitraum </option>';
|
|
//$rows = mysqli_fetch_row($query);
|
|
//echo $row['userid'];
|
|
foreach ($statement as $row) {
|
|
#$datum = date("d.m.Y", strtotime($row["date"]));
|
|
$currentDate = new DateTime($row["date"]);
|
|
$datum = $currentDate->format('d.m.Y');
|
|
$start = substr($row["start"],0, 5);
|
|
$ende = substr($row["ende"],0, 5);
|
|
$dosenanzahl = $row["impfdosen"];
|
|
$timeid = $row["timeid"];
|
|
|
|
$impfstoff = $row["impfstoff"];
|
|
// Impfstoff
|
|
$sqlimpfstoffstring = "SELECT * FROM impfstoff WHERE impfid ='" . $impfstoff . "'";
|
|
$queryimpfstoff = $pdo->query($sqlimpfstoffstring);
|
|
$rowimpf = $queryimpfstoff->fetch(PDO::FETCH_ASSOC);
|
|
$impfstofftext = $rowimpf["impfname"];
|
|
|
|
$value = "$timeid";
|
|
$anzeige = "$datum - $start-$ende - $dosenanzahl Plätze frei - $impfstofftext";
|
|
if($value == $timeidtermin){
|
|
echo '<option value="' . $value . '" selected>' . $anzeige . '</option>';
|
|
}else{
|
|
echo '<option value="' . $value . '">' . $anzeige . '</option>';
|
|
}
|
|
}
|
|
|
|
|
|
?>
|
|
|
|
</select>
|
|
<div id="Terminzeitrauminfo"></div>
|
|
<br>
|
|
<label for="impfart">Handelt es sich bei der Impfung um eine Erst- oder Zweitimpfung? (Pflichtfeld)</label>
|
|
<div class="select-wrapper">
|
|
<select name="impfart" id="impfart" required class="form-control" onchange="zweitterminpruefen()" >
|
|
<option value="">Erst- oder Zweitimpfung? (Bitte auswählen)!</option>
|
|
<option value="2" <?php if($impfart == 2 || $impfart == 1){ echo "selected";}?>>Erstimpfung</option>
|
|
<option value="3" <?php if($impfart == 3){ echo "selected";}?>>Zweitimpfung</option>
|
|
</select>
|
|
|
|
<div id="Zweittermin"></div>
|
|
</div>
|
|
<br><br>
|
|
|
|
|
|
<input type="submit" id="submitbox" class="btn btn-primary" value="Eintrag speichern" />
|
|
|
|
|
|
</form>
|
|
<?php
|
|
}
|
|
?>
|
|
<script>
|
|
function zweitterminpruefen() {
|
|
var e = document.getElementById("Terminzeitraum");
|
|
var timeidjs = e.value;
|
|
var e = document.getElementById("impfart");
|
|
var impfart = e.value;
|
|
if(timeidjs == 0){
|
|
document.getElementById("Zweittermin").innerHTML = "<h3>Bitte wählen Sie vorher einen Termin aus!<h3><br>";
|
|
document.getElementById("impfart").value = "";
|
|
}else if(impfart == 2){
|
|
result = $.ajax({
|
|
type: 'POST',
|
|
async: false,
|
|
url: '../inc/zweittermin.php',
|
|
data: ({
|
|
timeid: timeidjs
|
|
})
|
|
}).responseText;
|
|
|
|
document.getElementById("Zweittermin").innerHTML = result;
|
|
}else{
|
|
document.getElementById("Zweittermin").innerHTML = "";
|
|
}
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
<?php
|
|
}
|
|
|
|
|
|
|
|
function Terminspeichern($userid, $timeid, $hash, $impfart){
|
|
|
|
global $pdo;
|
|
// Termin eintragen
|
|
$statement = $pdo->prepare("INSERT INTO impftermin (userid, timeid, hash, coronafragen, astraok, impfart, checked) VALUES (:userid, :timeid, :hash, '0', '1',:impfart,1)");
|
|
$statement->execute(array('userid' => $userid , 'timeid' => $timeid, 'hash' => $hash , 'impfart' => $impfart));
|
|
|
|
$terminid = $pdo->lastInsertId();
|
|
return $terminid;
|
|
|
|
}
|
|
|
|
function Terminansagen($terminid, $checked){
|
|
|
|
global $pdo;
|
|
// Termin eintragen
|
|
$insert = $pdo->prepare("UPDATE impftermin SET checked = :checked WHERE terminid = :terminid");
|
|
$insert->execute(array('checked' => $checked, 'terminid' => $terminid));
|
|
|
|
|
|
}
|
|
|
|
function Userspeichern($vorname, $nachname, $geburtstag, $mail, $tele, $ort, $plz, $strasse, $versicherung, $Patientenart, $userid ){
|
|
global $pdo;
|
|
|
|
$userid = (int)$userid;
|
|
$mail = trim((string)$mail);
|
|
|
|
$params = [
|
|
'vorname' => $vorname,
|
|
'nachname' => $nachname,
|
|
'geburtstag' => $geburtstag,
|
|
'email' => $mail,
|
|
'tele' => $tele,
|
|
'ort' => $ort,
|
|
'plz' => $plz,
|
|
'strasse' => $strasse,
|
|
'versicherung' => $versicherung,
|
|
'patientenart' => $Patientenart,
|
|
];
|
|
|
|
if ($userid > 0) {
|
|
$st = $pdo->prepare("
|
|
UPDATE persons
|
|
SET vorname=:vorname,
|
|
nachname=:nachname,
|
|
geburtstag=:geburtstag,
|
|
email=:email,
|
|
tele=:tele,
|
|
ort=:ort,
|
|
plz=:plz,
|
|
strasse=:strasse,
|
|
kassenart=:versicherung,
|
|
patientenart=:patientenart
|
|
WHERE person_id=:userid
|
|
");
|
|
$st->execute($params + ['userid' => $userid]);
|
|
return $userid;
|
|
}
|
|
|
|
$find = $pdo->prepare("
|
|
SELECT person_id
|
|
FROM persons
|
|
WHERE LOWER(email)=LOWER(:email)
|
|
AND geburtstag=:geburtstag
|
|
LIMIT 1
|
|
");
|
|
$find->execute([
|
|
'email' => $mail,
|
|
'geburtstag' => $geburtstag,
|
|
]);
|
|
$existing = $find->fetch(PDO::FETCH_ASSOC);
|
|
|
|
if ($existing) {
|
|
$userid = (int)$existing['person_id'];
|
|
$st = $pdo->prepare("
|
|
UPDATE persons
|
|
SET vorname=:vorname,
|
|
nachname=:nachname,
|
|
tele=:tele,
|
|
ort=:ort,
|
|
plz=:plz,
|
|
strasse=:strasse,
|
|
kassenart=:versicherung,
|
|
patientenart=:patientenart
|
|
WHERE person_id=:userid
|
|
");
|
|
$st->execute($params + ['userid' => $userid]);
|
|
return $userid;
|
|
}
|
|
|
|
$insert = $pdo->prepare("
|
|
INSERT INTO persons
|
|
(vorname, nachname, geburtstag, email, tele, ort, plz, strasse, kassenart, patientenart)
|
|
VALUES
|
|
(:vorname, :nachname, :geburtstag, :email, :tele, :ort, :plz, :strasse, :versicherung, :patientenart)
|
|
");
|
|
$insert->execute($params);
|
|
return (int)$pdo->lastInsertId();
|
|
|
|
}
|
|
|
|
function GetImpfMailBenachrichtigung(){
|
|
|
|
global $pdo;
|
|
// Impfstoff
|
|
$sqlimpfstoffstring = "SELECT * FROM impfstoff WHERE aktivtermin ='1'";
|
|
|
|
foreach ($pdo->query($sqlimpfstoffstring) as $row) {
|
|
$impfname = $row["impfname"];
|
|
$impfid = $row["impfid"];
|
|
echo "<h3>$impfname</h3>";
|
|
echo "Sie können die nächsten 30 Personen auf der 'normalen' Warteliste infomieren:<br>";
|
|
echo "<form action='". $_SERVER['PHP_SELF'] . "' method=POST>";
|
|
echo '<input type="hidden" name="aktion" id="aktion" value="13" />';
|
|
echo '<input type="hidden" name="impfstoff" id="impfstoff" value="'. $impfid .'" />';
|
|
echo '<input type="hidden" name="impfenangebot" id="impfenangebot" value="1" />';
|
|
echo '<input type="submit" class="btn btn-primary" id="submitbox" value="Warteliste '. $impfname .' informieren" />';
|
|
echo "</form>";
|
|
echo "Sie können die nächsten 30 Personen auf der 'Springer' Warteliste infomieren:<br>";
|
|
echo "<form action='". $_SERVER['PHP_SELF'] . "' method=POST>";
|
|
echo '<input type="hidden" name="aktion" id="aktion" value="13" />';
|
|
echo '<input type="hidden" name="impfstoff" id="impfstoff" value="'. $impfid .'" />';
|
|
echo '<input type="hidden" name="impfenangebot" id="impfenangebot" value="2" />';
|
|
echo '<input type="submit" class="btn btn-primary" id="submitbox" value="Warteliste Springer '. $impfname .' informieren" />';
|
|
echo "</form>";
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
function AuswertungImpfungdaily($datum){
|
|
global $pdo;
|
|
#$datumstring = date("d.m.Y", strtotime($datum) );
|
|
$currentDate = new DateTime($datum);
|
|
$datumstring = $currentDate->format('d.m.Y');
|
|
|
|
$statementuser = $pdo->prepare("SELECT COUNT(CASE WHEN checked = '1' THEN 1 ELSE NULL END) AS gesamt, COUNT(CASE WHEN impfstoff = '3' AND behandelt = '1' AND impfart='3' THEN 1 ELSE NULL END) AS behandeltbiontechzweit , COUNT(CASE WHEN impfstoff = '3' AND behandelt = '1' AND (impfart='0' OR impfart='2') THEN 1 ELSE NULL END) AS behandeltbiontecheins , COUNT(CASE WHEN impfstoff = '3' AND checked = '1' THEN 1 ELSE NULL END) AS terminbiontech , COUNT(CASE WHEN impfstoff = '2' AND behandelt = '1' AND impfart='3' THEN 1 ELSE NULL END) AS behandeltastrazweit, COUNT(CASE WHEN impfstoff = '2' AND behandelt = '1' AND (impfart='0' OR impfart='2') THEN 1 ELSE NULL END) AS behandeltastraeins, COUNT(CASE WHEN impfstoff = '2' AND checked = '1' THEN 1 ELSE NULL END) AS terminastra, COUNT(CASE WHEN impfstoff = '4' AND checked = '1' THEN 1 ELSE NULL END) AS terminjohson, COUNT(CASE WHEN impfstoff = '3' AND behandelt = '1' THEN 1 ELSE NULL END) AS behandeltbiontech , COUNT(CASE WHEN impfstoff = '2' AND behandelt = '1' THEN 1 ELSE NULL END) AS behandeltastra, COUNT(CASE WHEN impfstoff = '4' AND behandelt = '1' THEN 1 ELSE NULL END) AS behandeltjohn FROM impftermin INNER JOIN timeslots ON impftermin.timeid = timeslots.timeid WHERE date=:date");
|
|
$statementuser->execute(array('date' => $datum));
|
|
$rowuser = $statementuser->fetch(PDO::FETCH_ASSOC);
|
|
$terminbiontech = $rowuser["terminbiontech"];
|
|
$terminastra = $rowuser["terminastra"];
|
|
$terminjohson = $rowuser["terminjohson"];
|
|
$behandeltbiontech = $rowuser["behandeltbiontech"];
|
|
$behandeltastra = $rowuser["behandeltastra"];
|
|
$behandeltbiontechzweit = $rowuser["behandeltbiontechzweit"];
|
|
$behandeltastrazweit = $rowuser["behandeltastrazweit"];
|
|
$behandeltbiontecheins = $rowuser["behandeltbiontecheins"];
|
|
$behandeltastraeins = $rowuser["behandeltastraeins"];
|
|
$behandeltjohn = $rowuser["behandeltjohn"];
|
|
$gesamt = $rowuser["gesamt"];
|
|
|
|
echo '<div style="align:left;float: left;margin:5px;"><b>Daten für den Tag: '. $datumstring .'</b><br>Einträge gesamt: ' .$gesamt . '</div><div style="align:right;float: right;margin:5px;"><table><tr><td>Biontech</td><td>Impfung: ' .$terminbiontech . '</td><td>behandelt: ' .$behandeltbiontech . '</td><td>nötige Impfdosen: ' . ($terminbiontech - $behandeltbiontech) . '</td><td>Erst: ' . $behandeltbiontecheins. ' Zweit: ' . $behandeltbiontechzweit. '</td></tr><tr><td>AstraZeneca</td><td>Impfung: ' .$terminastra . '</td><td>behandelt: ' .$behandeltastra . '</td><td>nötige Impfdosen: ' . ($terminastra - $behandeltastra) . '</td><td>Erst: ' . $behandeltastraeins. ' Zweit: ' . $behandeltastrazweit. '</td></tr><tr><td>Johnson</td><td>Impfung: ' .$terminjohson . '</td><td>behandelt: ' .$behandeltjohn . '</td><td>nötige Impfdosen: ' . ($terminjohson - $behandeltjohn) . '</td><td></td></tr></table> </div><br>';
|
|
}
|
|
|
|
function AuswertungImpfungdailycalendar($datum){
|
|
global $pdo;
|
|
#$datumstring = date("Y-m-d", strtotime($datum) );
|
|
$currentDate = new DateTime($datum);
|
|
$datumstring = $currentDate->format('Y-m-d');
|
|
|
|
$statementuser = $pdo->prepare("SELECT Count(checked), COUNT(CASE WHEN checked = '1' THEN 1 ELSE NULL END) AS gebucht, impfstoff FROM impftermin INNER JOIN timeslots ON impftermin.timeid = timeslots.timeid WHERE date=:date GROUP BY impfstoff");
|
|
$statementuser->execute(array('date' => $datumstring));
|
|
$rueckgabe = "<div><br>";
|
|
$gesamt = 0;
|
|
$gebuchtge = 0;
|
|
|
|
foreach ($statementuser as $rowimpf) {
|
|
$count = $rowimpf["Count(checked)"];
|
|
$gebucht = $rowimpf["gebucht"];
|
|
$impfid = $rowimpf["impfstoff"];
|
|
|
|
$statementimpfstoff = $pdo->prepare("SELECT impfname FROM impfstoff WHERE impfid=:impfid");
|
|
$statementimpfstoff->execute(array('impfid' => $impfid));
|
|
$rowuser = $statementimpfstoff->fetch(PDO::FETCH_ASSOC);
|
|
$impfname = $rowuser["impfname"];
|
|
#return $impfname;
|
|
$rueckgabe .= "" . $impfname . ": " . $gebucht . " / " . $count . "<br>";
|
|
$gesamt = $gesamt + $count;
|
|
$gebuchtge = $gebuchtge + $gebucht;
|
|
}
|
|
if($gesamt > 0){
|
|
$rueckgabe .= "<b>zugesagt: " . $gebuchtge . " von " . $gesamt . "</b><br></div>";
|
|
#return '<div ><br>Einträge gesamt: ' .$gesamt . '<br>Biontech ' .$terminbiontech . '<br>AstraZeneca ' .$terminastra . '<br>Johnson ' .$terminjohson . '<br> </div>';
|
|
return $rueckgabe;
|
|
}else{
|
|
return "";
|
|
}
|
|
|
|
}
|
|
|
|
function AuswertungTerminedailycalendar($datum){
|
|
global $pdo;
|
|
#$datumstring = date("Y-m-d", strtotime($datum) );
|
|
$currentDate = new DateTime($datum);
|
|
$datumstring = $currentDate->format('d.m.Y');
|
|
|
|
$statementuser = $pdo->prepare("SELECT SUM(impfdosen),impfstoff FROM timeslots WHERE date=:date GROUP BY impfstoff");
|
|
$statementuser->execute(array('date' => $datumstring));
|
|
$rueckgabe = "<div><br>";
|
|
$gesamt = 0;
|
|
$i=0;
|
|
foreach ($statementuser as $rowimpf) {
|
|
$count = $rowimpf["SUM(impfdosen)"];
|
|
$impfid = $rowimpf["impfstoff"];
|
|
|
|
$statementimpfstoff = $pdo->prepare("SELECT impfname FROM impfstoff WHERE impfid=:impfid");
|
|
$statementimpfstoff->execute(array('impfid' => $impfid));
|
|
$rowuser = $statementimpfstoff->fetch(PDO::FETCH_ASSOC);
|
|
$impfname = $rowuser["impfname"];
|
|
#return $impfname;
|
|
$rueckgabe .= "" . $impfname . ": " . $count . "<br>";
|
|
$gesamt = $gesamt + $count;
|
|
$i++;
|
|
}
|
|
if($i != 0){
|
|
$rueckgabe .= "<b>Frei Termine gesamt: " . $gesamt . "</b><br></div>";
|
|
#return '<div ><br>Einträge gesamt: ' .$gesamt . '<br>Biontech ' .$terminbiontech . '<br>AstraZeneca ' .$terminastra . '<br>Johnson ' .$terminjohson . '<br> </div>';
|
|
return $rueckgabe;
|
|
}else{
|
|
return "";
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
function ImpfstoffFormAuswahl($impfstoff){
|
|
global $pdo;
|
|
$sqlimpfstoffstring = "SELECT * FROM impfstoff WHERE aktivtermin ='1' OR aktivgrippe ='1'";
|
|
foreach ($pdo->query($sqlimpfstoffstring) as $rowimpf) {
|
|
$impfstofftext = $rowimpf["impfname"];
|
|
$impfid = $rowimpf["impfid"];
|
|
?>
|
|
<option value='<?php echo $impfid; ?>' <?php if($impfstoff == $impfid){ echo "selected"; } ?> ><?php echo $impfstofftext; ?></option>
|
|
<?php
|
|
}
|
|
|
|
|
|
}
|
|
|
|
function ImpfortFormAuswahl($impfortidcheck){
|
|
|
|
global $pdo;
|
|
$sqlimpfstoffstring = "SELECT * FROM impfort WHERE aktiv ='1' ";
|
|
foreach ($pdo->query($sqlimpfstoffstring) as $rowimpf) {
|
|
$impfortid = $rowimpf["ortid"];
|
|
$anzeigename = $rowimpf["anzeigename"];
|
|
$adresse = $rowimpf["adresse"];
|
|
$adresse = iconv('CP1252//IGNORE', 'UTF-8' , $adresse);
|
|
$art = $rowimpf["art"];
|
|
if($art){
|
|
$ausgabe = $art . " - " . $anzeigename . " - " . $adresse;
|
|
}else{
|
|
$ausgabe = $anzeigename . " - " . $adresse;
|
|
}
|
|
?>
|
|
<option value='<?php echo $impfortid; ?>' <?php if($impfortidcheck == $impfortid){ echo "selected"; } ?> ><?php echo $ausgabe; ?></option>
|
|
<?php
|
|
}
|
|
}
|
|
|
|
|
|
function ImpfortFormAuswahlReturn(){
|
|
|
|
global $pdo;
|
|
$sqlimpfstoffstring = "SELECT * FROM impfort WHERE aktiv ='1' ";
|
|
$ausgabetext = "";
|
|
foreach ($pdo->query($sqlimpfstoffstring) as $rowimpf) {
|
|
|
|
$impfortid = $rowimpf["ortid"];
|
|
$anzeigename = $rowimpf["anzeigename"];
|
|
$adresse = $rowimpf["adresse"];
|
|
$adresse = iconv('CP1252//IGNORE', 'UTF-8' , $adresse);
|
|
$art = $rowimpf["art"];
|
|
if($art){
|
|
$ausgabe = $art . " - " . $anzeigename . " - " . $adresse;
|
|
}else{
|
|
$ausgabe = $anzeigename . " - " . $adresse;
|
|
}
|
|
|
|
$ausgabetext .= "<option value='" . $impfortid . "'";
|
|
if($impfortidcheck == $impfortid){
|
|
$ausgabetext .= "selected";
|
|
}
|
|
$ausgabetext .= " >". $ausgabe . "</option>";
|
|
|
|
}
|
|
return $ausgabetext;
|
|
}
|
|
|
|
|
|
function TerminArtFormAuswahl($impfart){
|
|
|
|
for($i=1; $i <= 5; $i++){
|
|
|
|
echo "<option value='" . $i . "' ";
|
|
|
|
if($impfart == $i){
|
|
echo "selected";
|
|
|
|
}
|
|
echo ">" . GetImpfArt($i) . "</option>";
|
|
|
|
}
|
|
}
|
|
|
|
function TerminArtFormAuswahlReturn(){
|
|
|
|
$ausgabe = "";
|
|
for($i=1; $i <= 5; $i++){
|
|
|
|
$ausgabe = $ausgabe . "<option value='" . $i . "' >" . GetImpfArt($i) . "</option>";
|
|
|
|
}
|
|
return $ausgabe;
|
|
}
|
|
|
|
function TerminfestlegenAusgabe($sql){
|
|
|
|
global $pdo;
|
|
|
|
echo '<form action="'. $_SERVER['PHP_SELF'] .'" method=POST>';
|
|
|
|
foreach ($pdo->query($sql) as $row) {
|
|
$datum = $row["date"];
|
|
$start = $row["start"];
|
|
$ende = $row["ende"];
|
|
$dosenanzahl = $row["impfdosen"];
|
|
$timeid = $row["timeid"];
|
|
$impfstoff = $row["impfstoff"];
|
|
$terminart = $row["terminart"];
|
|
$impfortid = $row["impfortid"];
|
|
|
|
echo "Datum: <input type=date value=$datum disabled><input name=datum[] type=hidden value=$datum > Start: <input name=Starttime[] type=time value=$start> Ende: <input name=Endetime[] type=time value='" . $ende . "'> Impfdosen: <input name=Impfdosen[] type=number min=-100 max=800 value='" . $dosenanzahl . "'>
|
|
Impfstoff: <select name='impfstoff[]' id='impfstoff' required >";
|
|
|
|
ImpfstoffFormAuswahl($impfstoff);
|
|
|
|
echo "</select>";
|
|
echo " Impfort: <select name='impfort[]' required >";
|
|
ImpfortFormAuswahl($impfortid);
|
|
|
|
echo "</select>";
|
|
echo " <input name=timeid[] type=hidden value='" . $timeid . "'> <br><br>";
|
|
|
|
|
|
}
|
|
|
|
echo '<div id=neueTermine></div>';
|
|
echo "<br><br>";
|
|
echo '<a class="btn btn-primary" href"javascript:void(0);" onclick="AddneueTermine()" value="">Neuer Zeitslot</a><br><br>';
|
|
echo "<div id=divfolgetermine style='border:1px solid black;padding:5px;width: 500px;' >";
|
|
echo "<h3>Folge von Terminen anlegen</h3><br>";
|
|
echo "Datum: <input name=folgedate type=date id=folgedate><br>";
|
|
echo "Startzeit: <input name=folgestartzeit type=time id=folgestartzeit><br>";
|
|
echo "Länge eines Termins (Min): <input name=folgelaenge type=number id=folgelaenge><br>";
|
|
echo "Anzahl der Termine: <input name=folgeanzahl type=number id=folgeanzahl><br><br>";
|
|
echo "Impfstoff: <select name='folgeimpfstoff' id='folgeimpfstoff' required >";
|
|
|
|
ImpfstoffFormAuswahl($impfstoff);
|
|
|
|
echo "</select><br><br>";
|
|
echo "impfort: <select name='impfort[]' id='impfort' required >";
|
|
|
|
ImpfortFormAuswahl($impfortid);
|
|
|
|
echo "</select><br><br>";
|
|
echo '<a class="btn btn-primary" href"javascript:void(0);" onclick="AddneueTermineFolge()" value="">Neue Zeitslots anlegen</a><br><br></div>';
|
|
|
|
|
|
//echo "Datum: <input name=datum[] type=date > Start: <input name=Starttime[] type=time > Ende: <input name=Endetime[] type=time > Impfdosen: <input name=Impfdosen[] type=number min=0 max=800 value='0'> <input name=timeid[] type=hidden value='0'> <br>";
|
|
|
|
|
|
|
|
echo "<br><br><input type=submit name=eintragspeichern class='btn btn-primary' value='Einträge speichern'></form><br><br>";
|
|
|
|
|
|
}
|
|
|
|
function checkzweitTerminImpfung($date){
|
|
//SELECT SUM(CASE WHEN impfdosen > '0' THEN impfdosen ELSE NULL END) AS gesamt FROM timeslots WHERE date = '2021-07-16'
|
|
global $pdo;
|
|
//echo "SELECT date, ZIaktiv,ZIminimal, ZImaximal,ZIbiontech,ZIastra,ZImoderna FROM timeslots INNER JOIN impfstoff ON timeslots.impfstoff = impfstoff.impfid WHERE date = :date GROUP BY impfstoff";
|
|
$statementtermin = $pdo->prepare("SELECT impfname, date,terminart, ZIaktiv,ZIminimal,impfstoff, ZImaximal,ZIbiontech,ZIastra,ZImoderna,SUM(CASE WHEN impfdosen > '0' THEN impfdosen ELSE NULL END) AS gesamtdosen FROM timeslots INNER JOIN impfstoff ON timeslots.impfstoff = impfstoff.impfid WHERE date = :date GROUP BY impfstoff");
|
|
$statementtermin->execute(array('date' => $date));
|
|
|
|
foreach ($statementtermin as $rowtermin) {
|
|
//$date = $rowtermin["date"];
|
|
//echo "$date";
|
|
$ZIaktiv = $rowtermin["ZIaktiv"];
|
|
$ZIminimal = $rowtermin["ZIminimal"];
|
|
$ZImaximal = $rowtermin["ZImaximal"];
|
|
$ZIbiontech = $rowtermin["ZIbiontech"];
|
|
$ZIastra = $rowtermin["ZIastra"];
|
|
$ZImoderna = $rowtermin["ZImoderna"];
|
|
$impfname = $rowtermin["impfname"];
|
|
$terminart = $rowtermin["terminart"];
|
|
$gesamtdosen = $rowtermin["gesamtdosen"];
|
|
$ministring= "+ $ZIminimal days";
|
|
$maxistring = "+ $ZImaximal days";
|
|
$minimaldate = date_create($rowtermin["date"]);
|
|
date_add($minimaldate, date_interval_create_from_date_string($ZIminimal . ' days'));
|
|
$minimaldate = date_format($minimaldate, 'Y-m-d');
|
|
$maximaldate = date_create($rowtermin["date"]);
|
|
date_add($maximaldate, date_interval_create_from_date_string($ZImaximal . ' days'));
|
|
$maximaldate = date_format($maximaldate, 'Y-m-d');
|
|
$impfstoffstring = "";
|
|
$terminartstring = "";
|
|
|
|
if($ZIaktiv && $gesamtdosen > 0 && ($terminart == 1 || $terminart == 0) ){
|
|
if($ZIbiontech){
|
|
if($impfstoffstring == ""){
|
|
$impfstoffstring = $impfstoffstring . "(impfstoff='3'";
|
|
}else{
|
|
$impfstoffstring = $impfstoffstring . " OR impfstoff='3'";
|
|
}
|
|
}
|
|
if($ZIastra){
|
|
if($impfstoffstring == ""){
|
|
$impfstoffstring = $impfstoffstring . "(impfstoff='2'";
|
|
}else{
|
|
$impfstoffstring = $impfstoffstring . " OR impfstoff='2'";
|
|
}
|
|
|
|
|
|
}
|
|
if($ZImoderna){
|
|
if($impfstoffstring == ""){
|
|
$impfstoffstring = $impfstoffstring . "(impfstoff='5'";
|
|
}else{
|
|
$impfstoffstring = $impfstoffstring . " OR impfstoff='5'";
|
|
}
|
|
|
|
}
|
|
$impfstoffstring = $impfstoffstring . ")";
|
|
$terminartstring = " AND (terminart='1' OR terminart='3' OR terminart='5')";
|
|
|
|
$statement = $pdo->prepare("SELECT timeid FROM timeslots WHERE date>= '$minimaldate' AND date<='$maximaldate' AND $impfstoffstring $terminartstring AND impfdosen > 0");
|
|
$statement->execute();
|
|
$count = $statement->rowCount();
|
|
|
|
if($count == 0){
|
|
echo"<b>Für den Impfstoff $impfname gibt es zwischen dem $minimaldate und $maximaldate keine Impfdosen für die Zweitimpfung!!</b><br><br>";
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
function ListenAnsichtTerminproTag($datum){
|
|
|
|
global $pdo;
|
|
|
|
//$sqlstring = "SELECT * FROM impftermin INNER JOIN timeslots ON impftermin.timeid = timeslots.timeid WHERE date =:date ORDER by date DESC, start";
|
|
|
|
|
|
$statementtermin = $pdo->prepare("SELECT * FROM impftermin INNER JOIN timeslots ON impftermin.timeid = timeslots.timeid INNER JOIN persons ON persons.person_id = impftermin.userid WHERE date =:date ORDER by start, nachname");
|
|
$statementtermin->execute(array('date' => $datum));
|
|
$ausgabe = "";
|
|
$ausgabe .= "<table>";
|
|
$ausgabe .= "<tr ><td>Zeit</td><td>Name</td><td>Geburtstag</td><td>Terminart</td><td>Impfstoff</td><td >Versicherung</td></tr>";
|
|
|
|
foreach ($statementtermin as $row) {
|
|
|
|
//while ($row = $query->fetch_assoc()) {
|
|
#$datum = date("d.m.Y", strtotime($row["date"]));
|
|
$currentDate = new DateTime($row["date"]);
|
|
$datum = $currentDate->format('d.m.Y');
|
|
$start = substr($row["start"],0, 5);
|
|
$ende = substr($row["ende"],0, 5);
|
|
$dosenanzahl = $row["impfdosen"];
|
|
$timeid = $row["timeid"];
|
|
$impfstoff = $row["impfstoff"];
|
|
$terminart = $row["terminart"];
|
|
$userid = $row["userid"];
|
|
$terminartstring = GetImpfArt($terminart);
|
|
// Impfstoff
|
|
$statementimpf = $pdo->prepare("SELECT impfname FROM impfstoff WHERE impfid =:impfid");
|
|
$statementimpf->execute(array('impfid' => $impfstoff));
|
|
$rowimpf = $statementimpf->fetch(PDO::FETCH_ASSOC);
|
|
$impfstofftext = $rowimpf["impfname"];
|
|
|
|
$Zeitanzeige = $datum . " " . $start . "-" . $ende ;
|
|
//echo $Zeitanzeige;
|
|
|
|
//while ($rowtime = $querytime->fetch_assoc()) {
|
|
|
|
|
|
$statementuser = $pdo->prepare("SELECT * FROM persons WHERE person_id=:userid");
|
|
$statementuser->execute(array('userid' => $userid));
|
|
$rowuser = $statementuser->fetch(PDO::FETCH_ASSOC);
|
|
|
|
$vorname = $rowuser["vorname"];
|
|
$nachname = $rowuser["nachname"];
|
|
$mail = $rowuser["email"];
|
|
$kassenart = $rowuser["kassenart"];
|
|
#$jahrgang = $rowuser["jahrgang"];
|
|
$geburtstag = $rowuser["geburtstag"];
|
|
$Patientenart = $rowuser["patientenart"];
|
|
|
|
$ausgabegeburstag = $geburtstag;
|
|
$i++;
|
|
$patientenartstring = GetPatientenartName($Patientenart);
|
|
$kassenartstring = GetVersicherungArt($kassenart);
|
|
//$checkausgabe = GetPatientenartName($checked);
|
|
$userausgabe = $vorname . " " . $nachname;
|
|
|
|
$ausgabe .= "<tr ><td>$Zeitanzeige</td><td>$userausgabe</td><td>$ausgabegeburstag / $patientenartstring</td><td>$terminartstring</td><td>$impfstofftext</td><td >$kassenartstring</td></tr>";
|
|
|
|
|
|
}
|
|
$ausgabe .= "</table>";
|
|
|
|
return $ausgabe;
|
|
}
|
|
|
|
function TableAnsichtTermineproMonat($datum){
|
|
|
|
global $pdo;
|
|
|
|
#$monat = date("m", strtotime($datum));
|
|
#$jahr = date("Y", strtotime($datum));
|
|
$currentDate = new DateTime($datum);
|
|
$monat = $currentDate->format('m');
|
|
$jahr = $currentDate->format('Y');
|
|
$statementtermin = $pdo->prepare("SELECT date, COUNT(CASE WHEN checked = '1' THEN 1 ELSE NULL END) AS gesamttermine, COUNT(terminid) as gesamtterminid, SUM(CASE WHEN impfdosen > '0' THEN impfdosen ELSE NULL END) AS gesamtdosen FROM impftermin INNER JOIN timeslots ON impftermin.timeid = timeslots.timeid WHERE month(date) =:month AND year(date) =:year ORDER by date DESC, start");
|
|
$statementtermin->execute(array('date' => $datum));
|
|
foreach ($statementtermin as $row) {
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
function build_calendar_termin($month, $year, $aktion, $aktionday) {
|
|
$daysOfWeek = array('Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag','Sonntag');
|
|
$firstDayOfMonth = mktime(0,0,0,$month,1,$year);
|
|
$numberDays = date('t',$firstDayOfMonth);
|
|
$dateComponents = getdate($firstDayOfMonth);
|
|
$monthName = $dateComponents['month'];
|
|
$dayOfWeek = $dateComponents['wday'] -1;
|
|
|
|
if($month == 1){
|
|
$monthbefor = "" . ($year -1) . "-12-01";
|
|
}else{
|
|
$monthbefor = "$year-". ($month -1) . "-01";
|
|
}
|
|
if($month == 12){
|
|
$monthafter = "" . ($year +1) . "-01-01";
|
|
}else{
|
|
$monthafter = "$year-". ($month +1) . "-01";
|
|
}
|
|
|
|
|
|
$calendar = "";
|
|
$calendar .= "<table class='calendar table table-condensed table-bordered' >";
|
|
$calendar .= "<div align=center><h3><a href='". $_SERVER['PHP_SELF'] . "?a=". $aktion . "&sdate=". $monthbefor . "'><<</a> $monthName $year <a href='". $_SERVER['PHP_SELF'] . "?a=". $aktion . "&sdate=". $monthafter . "'>>></a></h3></div>";
|
|
$calendar .= "<tr>";
|
|
foreach($daysOfWeek as $day) {
|
|
$calendar .= "<th class='header' style='width:14%;' >$day</th>";
|
|
}
|
|
$currentDay = 1;
|
|
$calendar .= "</tr><tr >";
|
|
if ($dayOfWeek > 0) {
|
|
$calendar .= "<td colspan='$dayOfWeek'> </td>";
|
|
}
|
|
$month = str_pad($month, 2, "0", STR_PAD_LEFT);
|
|
while($currentDay <= $numberDays){
|
|
if($dayOfWeek == 7){
|
|
$dayOfWeek = 0;
|
|
$calendar .= "</tr><tr >";
|
|
}
|
|
$currentDayRel = str_pad($currentDay, 2, "0", STR_PAD_LEFT);
|
|
$date = "$year-$month-$currentDayRel";
|
|
|
|
// Is this today?
|
|
if(date('Y-m-d') == $date) {
|
|
$calendar .= "<td class='day success' style='height:150px;'><a href='". $_SERVER['PHP_SELF'] . "?a=". $aktionday . "&sdate=". $date . "'><div style='height:100%;width:100%'><b>$currentDay</b>";
|
|
|
|
} else {
|
|
$calendar .= "<td class='day' style='height:150px;'><a href='". $_SERVER['PHP_SELF'] . "?a=". $aktionday . "&sdate=". $date . "'><div style='height:100%;width:100%'> $currentDay";
|
|
|
|
}
|
|
$calendar .= "<form action='". $_SERVER['PHP_SELF'] . "' name='".$date ."' method=POST><input type=hidden name=searchdate value='". $date. "'><input type=hidden name=aktion value='4'></form>";
|
|
if($aktionday == "shday"){
|
|
$calendar .= AuswertungImpfungdailycalendar($date);
|
|
}else if($aktionday == "shterday"){
|
|
$calendar .= AuswertungTerminedailycalendar($date);
|
|
}
|
|
|
|
$calendar .= "</div></a></td>";
|
|
|
|
$currentDay++;
|
|
$dayOfWeek++;
|
|
}
|
|
if($dayOfWeek != 7){
|
|
$remainingDays = 7 - $dayOfWeek;
|
|
$calendar .= "<td colspan='$remainingDays'> </td>";
|
|
}
|
|
$calendar .= "</tr>";
|
|
$calendar .= "</table>";
|
|
return $calendar;
|
|
}
|
|
|
|
function ZuruckzumKalenderTermine($datum){
|
|
echo "<a href='impfadmin.php?a=termonth&sdate=". $datum ."' class='btn btn-primary btn-lg' >Zurück zum Kalender</a>";
|
|
|
|
}
|
|
|
|
function ZuruckzumKalenderTerminefestlegen($datum){
|
|
echo "<a href='impfadmin.php?a=terimpfmonth&sdate=". $datum ."' class='btn btn-primary btn-lg' >Zurück zum Kalender</a>";
|
|
|
|
}
|
|
|
|
function ZuruckzumAnfrageOverView(){
|
|
echo' <form action="'. $_SERVER["PHP_SELF"] .'" method=POST>
|
|
<input type=hidden name=aktion value=1>
|
|
<input type=submit class="btn btn-primary" value="Zurück zur Anfragen-Übersicht">
|
|
</form>';
|
|
|
|
}
|
|
|
|
function ZuruckzurWartelisteOverView(){
|
|
echo'
|
|
<form action="wartelisteadmin.php" method=POST>
|
|
<input type=hidden name=aktion value=7>
|
|
<input type=submit class="btn btn-primary btn-lg" value="Zurück zur Warteliste">
|
|
</form>';
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
* Checks that the user is logged in.
|
|
* @return Returns the row of the logged in user
|
|
*/
|
|
function check_user() {
|
|
global $pdo;
|
|
|
|
if(!isset($_SESSION['userid']) && isset($_COOKIE['identifier']) && isset($_COOKIE['securitytoken'])) {
|
|
$identifier = $_COOKIE['identifier'];
|
|
$securitytoken = $_COOKIE['securitytoken'];
|
|
|
|
$statement = $pdo->prepare("SELECT * FROM securitytokens WHERE identifier = ? AND user_type = 'intern' LIMIT 1");
|
|
$result = $statement->execute(array($identifier));
|
|
$securitytoken_row = $statement->fetch();
|
|
|
|
if(sha1($securitytoken) !== $securitytoken_row['securitytoken']) {
|
|
//Vermutlich wurde der Security Token gestohlen
|
|
//Hier ggf. eine Warnung o.ä. anzeigen
|
|
|
|
} else { //Token war korrekt
|
|
//Setze neuen Token
|
|
$neuer_securitytoken = random_string();
|
|
$insert = $pdo->prepare("UPDATE securitytokens SET securitytoken = :securitytoken WHERE identifier = :identifier AND user_type = 'intern' LIMIT 1");
|
|
$insert->execute(array('securitytoken' => sha1($neuer_securitytoken), 'identifier' => $identifier));
|
|
setcookie('identifier', $identifier, [
|
|
'expires' => time() + 365*24*3600,
|
|
'path' => '/',
|
|
'secure' => true,
|
|
'httponly' => true,
|
|
'samesite' => 'Lax',
|
|
]);
|
|
#$_COOKIE['identifier'] = $identifier;
|
|
setcookie("securitytoken",$securitytoken,time()+(3600*24*365)); //Valid for 1 year
|
|
#$_COOKIE['securitytoken'] = $securitytoken;
|
|
|
|
session_regenerate_id(true); // wichtig gegen Session Fixation
|
|
|
|
$_SESSION['auth'] = [
|
|
'type' => 'intern',
|
|
'id' => $securitytoken_row['id']
|
|
];
|
|
|
|
//Logge den Benutzer ein
|
|
$_SESSION['userid'] = $securitytoken_row['user_id'];
|
|
}
|
|
}
|
|
|
|
|
|
if(!isset($_SESSION['userid'])) {
|
|
die('Bitte zuerst <a href="login.php">einloggen</a>');
|
|
}
|
|
|
|
|
|
$statement = $pdo->prepare("SELECT * FROM persons WHERE person_id = :id");
|
|
$result = $statement->execute(array('id' => $_SESSION['userid']));
|
|
$user = $statement->fetch();
|
|
return $user;
|
|
}
|
|
|
|
function check_intern_user(): array
|
|
{
|
|
global $pdo;
|
|
|
|
// Bereits eingeloggt & 2FA bestätigt
|
|
if (!empty($_SESSION['userid']) && !empty($_SESSION['2fa_verified'])) {
|
|
return loadInternUser($_SESSION['userid']);
|
|
}
|
|
|
|
// Kein Remember-Device möglich
|
|
if (empty($_COOKIE['remember_device']) || empty($_COOKIE['remember_device_token'])) {
|
|
redirectToLogin();
|
|
}
|
|
|
|
$identifier = $_COOKIE['remember_device'];
|
|
$token = $_COOKIE['remember_device_token'];
|
|
|
|
// Token laden
|
|
$stmt = $pdo->prepare("
|
|
SELECT id, user_id, securitytoken, expires_at
|
|
FROM intern_securitytokens
|
|
WHERE identifier = :identifier
|
|
LIMIT 1
|
|
");
|
|
$stmt->execute(['identifier' => $identifier]);
|
|
$row = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
// Ungültig / abgelaufen
|
|
if (
|
|
!$row ||
|
|
!hash_equals($row['securitytoken'], hash('sha256', $token)) ||
|
|
($row['expires_at'] !== null && strtotime($row['expires_at']) < time())
|
|
) {
|
|
invalidateRememberDevice($identifier);
|
|
redirectToLogin();
|
|
}
|
|
|
|
// Token rotieren
|
|
$newToken = bin2hex(random_bytes(32));
|
|
|
|
$pdo->prepare("
|
|
UPDATE intern_securitytokens
|
|
SET securitytoken = :token
|
|
WHERE id = :id
|
|
")->execute([
|
|
'token' => hash('sha256', $newToken),
|
|
'id' => $row['id']
|
|
]);
|
|
|
|
setRememberDeviceCookies($identifier, $newToken);
|
|
|
|
session_regenerate_id(true);
|
|
|
|
$_SESSION['userid'] = (int)$row['user_id'];
|
|
$_SESSION['2fa_verified'] = true;
|
|
|
|
return loadInternUser($_SESSION['userid']);
|
|
}
|
|
|
|
|
|
|
|
/* ---------- Helper ---------- */
|
|
function loadInternUser(int $id): array
|
|
{
|
|
global $pdo;
|
|
|
|
$stmt = $pdo->prepare("SELECT * FROM intern_users WHERE id = :id LIMIT 1");
|
|
$stmt->execute(['id' => $id]);
|
|
$user = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
if (!$user) {
|
|
session_destroy();
|
|
redirectToLogin();
|
|
}
|
|
|
|
return $user;
|
|
}
|
|
|
|
function setRememberDeviceCookies(string $identifier, string $token): void
|
|
{
|
|
$opts = [
|
|
'expires' => time() + 365 * 24 * 3600,
|
|
'path' => '/',
|
|
'secure' => true,
|
|
'httponly' => true,
|
|
'samesite' => 'Lax'
|
|
];
|
|
|
|
setcookie('remember_device', $identifier, $opts);
|
|
setcookie('remember_device_token', $token, $opts);
|
|
}
|
|
|
|
function invalidateRememberDevice(string $identifier): void
|
|
{
|
|
global $pdo;
|
|
|
|
$pdo->prepare("
|
|
DELETE FROM intern_securitytokens WHERE identifier = :identifier
|
|
")->execute(['identifier' => $identifier]);
|
|
}
|
|
|
|
function redirectToLogin(): void
|
|
{
|
|
header('Location: login.php');
|
|
exit;
|
|
}
|
|
|
|
|
|
|
|
|
|
function check_admin_user() {
|
|
global $pdo;
|
|
|
|
// 1) Session
|
|
if (!empty($_SESSION['auth']) && ($_SESSION['auth']['type'] ?? '') === 'admin') {
|
|
$uid = (int)($_SESSION['auth']['id'] ?? 0);
|
|
if ($uid > 0) {
|
|
$_SESSION['userid'] = $uid; // legacy kompatibel
|
|
$st = $pdo->prepare("SELECT * FROM users WHERE id = :id");
|
|
$st->execute(['id' => $uid]);
|
|
return $st->fetch(PDO::FETCH_ASSOC) ?: null;
|
|
}
|
|
}
|
|
|
|
// 2) Cookie
|
|
if (!empty($_COOKIE['identifier']) && !empty($_COOKIE['securitytoken'])) {
|
|
$identifier = (string)$_COOKIE['identifier'];
|
|
$securitytoken = (string)$_COOKIE['securitytoken'];
|
|
|
|
$st = $pdo->prepare("SELECT user_id, securitytoken FROM securitytokens WHERE identifier = ? AND user_type = 'admin' LIMIT 1");
|
|
$st->execute([$identifier]);
|
|
$row = $st->fetch(PDO::FETCH_ASSOC);
|
|
|
|
if (!$row) {
|
|
return null;
|
|
}
|
|
|
|
// SHA256 konsistent zum Login
|
|
if (!hash_equals((string)$row['securitytoken'], hash('sha256', $securitytoken))) {
|
|
// NICHT sofort Cookies löschen -> sonst Race-Logout
|
|
return null;
|
|
}
|
|
|
|
// Cookie-Login erfolgreich -> Session setzen
|
|
session_regenerate_id(true);
|
|
$_SESSION['auth'] = [
|
|
'type' => 'admin',
|
|
'id' => (int)$row['user_id'],
|
|
];
|
|
$_SESSION['userid'] = (int)$row['user_id'];
|
|
|
|
$st = $pdo->prepare("SELECT * FROM users WHERE id = :id");
|
|
$st->execute(['id' => (int)$row['user_id']]);
|
|
return $st->fetch(PDO::FETCH_ASSOC) ?: null;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
* Returns true when the user is checked in, else false
|
|
*/
|
|
function is_checked_in() {
|
|
return isset($_SESSION['userid']);
|
|
}
|
|
|
|
/**
|
|
* Returns a random string
|
|
*/
|
|
function random_string() {
|
|
if(function_exists('openssl_random_pseudo_bytes')) {
|
|
$bytes = openssl_random_pseudo_bytes(16);
|
|
$str = bin2hex($bytes);
|
|
} else if(function_exists('mcrypt_create_iv')) {
|
|
$bytes = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM);
|
|
$str = bin2hex($bytes);
|
|
} else {
|
|
//Replace your_secret_string with a string of your choice (>12 characters)
|
|
$str = md5(uniqid('your_secret_string', true));
|
|
}
|
|
return $str;
|
|
}
|
|
|
|
/**
|
|
* Returns the URL to the site without the script name
|
|
*/
|
|
function getSiteURL() {
|
|
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
|
|
return $protocol.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/';
|
|
}
|
|
|
|
/**
|
|
* Outputs an error message and stops the further exectution of the script.
|
|
*/
|
|
function error($error_msg) {
|
|
include("templates/header.inc.php");
|
|
include("templates/error.inc.php");
|
|
include("templates/footer.inc.php");
|
|
exit();
|
|
}
|
|
|
|
function checkurlaub() {
|
|
global $pdo;
|
|
|
|
$datum = date("Y-m-d");
|
|
//$query = mysqli_query($con, "SELECT urlaubid FROM urlaub WHERE start<='" . date("Y-m-d") ."' AND ende>='" . date("Y-m-d") ."'");
|
|
$statement = $pdo->prepare("SELECT urlaubid FROM urlaub WHERE start<=:date AND ende>=:date");
|
|
$statement->execute(array('date' => $datum));
|
|
$count = $statement->rowCount();
|
|
$ausgabe = "";
|
|
|
|
if($count != 0){
|
|
$ausgabe .= '<div id=urlaub class="container" style="background-color: firebrick;padding:5px;"><br>';
|
|
$ausgabe .= "<h2>Praxis im Urlaub</h2>";
|
|
$ausgabe .= "Wir befinden uns aktuell im Urlaub.<br>Wenden Sie sich an unsere Vertretung oder warten Sie bis nach unserem Urlaub mit Ihrer Anfrage.<br><br>";
|
|
$statement = $pdo->prepare("SELECT ende,vertretung,vertretertelefon,vertreteradresse,vertreterurl FROM urlaub WHERE start<=:date AND ende>=:date");
|
|
$result = $statement->execute(array('date' => $datum));
|
|
$row = $statement->fetch(PDO::FETCH_ASSOC);
|
|
|
|
//$query = mysqli_query($con, "SELECT ende,vertreter,vertretertelefon,vertreteradresse,vertreterurl FROM urlaub WHERE start<='" . date("Y-m-d") ."' AND ende>='" . date("Y-m-d") ."' ORDER BY ende DESC");
|
|
//$row = mysqli_fetch_assoc($query);
|
|
$vertreter = $row["vertretung"];
|
|
$vertretertelefon = $row["vertretertelefon"];
|
|
$vertreteradresse = $row["vertreteradresse"];
|
|
$vertreterurl = $row["vertreterurl"];
|
|
$ende = $row["ende"];
|
|
#$endeausgabe= date("d.m.Y", strtotime("+1 day", strtotime($ende )));
|
|
$date = new DateTime($ende);
|
|
$date->modify('+1 day');
|
|
$endeausgabe = $date->format('d.m.Y');
|
|
if($vertreter){
|
|
$ausgabe .= "Unsere Vertretung: $vertreter <br>";
|
|
}
|
|
if($vertreterurl ){
|
|
$ausgabe .= "Webseite Vertretung: <a href=$vertreterurl >$vertreterurl</a> <br>";
|
|
}
|
|
if($vertretertelefon){
|
|
$ausgabe .= "Telefonischer Kontakt Vertretung: $vertretertelefon <br>";
|
|
}
|
|
if($vertreteradresse){
|
|
$ausgabe .= "Adresse Vertretung: $vertreteradresse <br>";
|
|
}
|
|
$ausgabe .= "<br>Wir stehen Ihnen ab dem ". $endeausgabe . " wieder zur Verfügung.<br><br></div><br><br>";
|
|
}else{
|
|
$datum = date("Y-m-d");
|
|
//$query = mysqli_query($con, "SELECT urlaubid FROM urlaub WHERE start<='" . date("Y-m-d") ."' AND ende>='" . date("Y-m-d") ."'");
|
|
$statement = $pdo->prepare("SELECT notfallid FROM notfallsprechstunde WHERE start<=:date AND ende>=:date");
|
|
$statement->execute(array('date' => $datum));
|
|
$count = $statement->rowCount();
|
|
$ausgabe = "";
|
|
if($count != 0){
|
|
$ausgabe .= '<div id=urlaub class="container" style="background-color: firebrick;padding:5px;"><br>';
|
|
$ausgabe .= "<h2>Wichtiger Hinweis</h2>";
|
|
$ausgabe .= "<br>";
|
|
$statement = $pdo->prepare("SELECT ende,hinweis FROM notfallsprechstunde WHERE start<=:date AND ende>=:date");
|
|
$result = $statement->execute(array('date' => $datum));
|
|
$row = $statement->fetch(PDO::FETCH_ASSOC);
|
|
|
|
//$query = mysqli_query($con, "SELECT ende,vertreter,vertretertelefon,vertreteradresse,vertreterurl FROM urlaub WHERE start<='" . date("Y-m-d") ."' AND ende>='" . date("Y-m-d") ."' ORDER BY ende DESC");
|
|
//$row = mysqli_fetch_assoc($query);
|
|
$vertreter = $row["vertretung"];
|
|
$hinweis = $row["hinweis"];
|
|
$ende = $row["ende"];
|
|
#$endeausgabe= date("d.m.Y", strtotime("+1 day", strtotime($ende )));
|
|
$date = new DateTime($ende);
|
|
$date->modify('+1 day');
|
|
$endeausgabe = $date->format('d.m.Y');
|
|
|
|
$ausgabe .= $hinweis ;
|
|
|
|
$ausgabe .= "<br></div><br><br>";
|
|
|
|
}else{
|
|
$ausgabe = "";
|
|
}
|
|
}
|
|
|
|
return $ausgabe ;
|
|
|
|
|
|
|
|
}
|
|
|
|
function geplantenUrlaubanzeigen() {
|
|
global $pdo;
|
|
|
|
$datum = date("Y-m-d");
|
|
$statement = $pdo->prepare("SELECT urlaubid FROM urlaub WHERE start>=:date ");
|
|
$statement->execute(array('date' => $datum));
|
|
$count = $statement->rowCount();
|
|
$ausgabe = "";
|
|
|
|
if($count != 0){
|
|
$ausgabe .= '<div><br>';
|
|
$ausgabe .= "<h2>Geplanter Urlaub der Praxis</h2>";
|
|
$ausgabe .= "Die Praxis befindet sich in den folgenden Zeiten im Urlaub:<br><br>";
|
|
$statement = $pdo->prepare("SELECT start,ende,vertretung,vertretertelefon,vertreteradresse,vertreterurl FROM urlaub WHERE start>=:date");
|
|
$result = $statement->execute(array('date' => $datum));
|
|
|
|
while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
|
|
$vertreter = $row["vertretung"];
|
|
$vertretertelefon = $row["vertretertelefon"];
|
|
$vertreteradresse = $row["vertreteradresse"];
|
|
$vertreterurl = $row["vertreterurl"];
|
|
$ende = $row["ende"];
|
|
$start = $row["start"];
|
|
#$startausgabe= date("d.m.Y", strtotime($start ));
|
|
#$endeausgabe= date("d.m.Y", strtotime($ende ));
|
|
$date = new DateTime($start);
|
|
$startausgabe = $date->format('d.m.Y');
|
|
$date = new DateTime($ende);
|
|
$endeausgabe = $date->format('d.m.Y');
|
|
|
|
$ausgabe .= "<h4>Zeitraum: $startausgabe bis $endeausgabe </h4>";
|
|
if($vertreter){
|
|
$ausgabe .= "Unsere Vertretung: $vertreter <br>";
|
|
}
|
|
if($vertreterurl ){
|
|
$ausgabe .= "Webseite Vertretung: <a href=$vertreterurl >$vertreterurl</a> <br>";
|
|
}
|
|
if($vertretertelefon){
|
|
$ausgabe .= "Telefonischer Kontakt Vertretung: <a href='tel:$vertretertelefon' >$vertretertelefon</a> <br>";
|
|
}
|
|
if($vertreteradresse){
|
|
$ausgabe .= "Adresse Vertretung: <a href='http://maps.google.com/?q=$vertreteradresse' target=_blank>$vertreteradresse </a><br>";
|
|
}
|
|
$ausgabe .= "<br>";
|
|
}
|
|
$ausgabe .= "</div>";
|
|
|
|
}else{
|
|
$ausgabe = "";
|
|
}
|
|
|
|
return $ausgabe ;
|
|
|
|
|
|
|
|
}
|
|
|
|
function showHeaderpraxis() {
|
|
|
|
return '
|
|
<header>
|
|
<img src="images/logo-arzt-creutzburg-coppen.gif" align="left" alt="Praxis Logo Creutzburg" width="40%" />
|
|
<br>
|
|
<h2>Praxis Heiner Creutzburg</h2>
|
|
<br>
|
|
</header>
|
|
';
|
|
|
|
|
|
}
|
|
|
|
/**
|
|
* Prüft, ob der Benutzer administrator ist
|
|
*/
|
|
function check_admin() {
|
|
global $pdo;
|
|
|
|
if(isset($_SESSION['userid'])) {
|
|
$statement = $pdo->prepare("SELECT userid FROM users_admin WHERE userid = :id");
|
|
$statement->execute(array('id' => $_SESSION['userid']));
|
|
$count = $statement->rowCount();
|
|
|
|
if($count == 1){
|
|
return true;
|
|
}else{
|
|
return false;
|
|
}
|
|
}else{
|
|
return false;
|
|
}
|
|
|
|
|
|
}
|
|
/**
|
|
* Prüft, ob der Benutzer Bearbeiter ist
|
|
*/
|
|
function check_worker() {
|
|
global $pdo;
|
|
|
|
if(isset($_SESSION['userid'])) {
|
|
$statement = $pdo->prepare("SELECT userid FROM users_worker WHERE userid = :id");
|
|
$statement->execute(array('id' => $_SESSION['userid']));
|
|
$count = $statement->rowCount();
|
|
|
|
if($count == 1){
|
|
return true;
|
|
}else{
|
|
return false;
|
|
}
|
|
}else{
|
|
return false;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
/**
|
|
* Rendert eine Mailvorlage für eine Anfrage.
|
|
*
|
|
* Erwartet neues Schema:
|
|
* - anfragen.requester_person_id -> persons.person_id
|
|
* - persons.email (statt user.mail)
|
|
*
|
|
* Rückgabe:
|
|
* [
|
|
* 'empfaenger' => string,
|
|
* 'betreff' => string,
|
|
* 'body' => string,
|
|
* 'name' => string, // Template-Name
|
|
* 'context' => array // optional: alle Daten für Debug/Logging
|
|
* ]
|
|
*
|
|
* $extraReplacements: zusätzliche Platzhalter => Werte (z.B. %TERMINZEITVORGABE% etc.)
|
|
* $convertCp1252: nur true setzen, wenn Inhalte wirklich CP1252 in der DB sind
|
|
*/
|
|
function renderTemplateForAnfrage(PDO $pdo, int $anfrageid, string $templetid, string $anfragebestaetigung, array $extraReplacements = [], bool $convertCp1252 = false): array
|
|
{
|
|
if ($anfrageid <= 0) {
|
|
throw new InvalidArgumentException("Ungültige anfrageid");
|
|
}
|
|
$templetid = trim($templetid);
|
|
if ($templetid === "") {
|
|
throw new InvalidArgumentException("templetid fehlt");
|
|
}
|
|
|
|
// 1) Template laden
|
|
$stmt = $pdo->prepare("
|
|
SELECT betreff, body, name
|
|
FROM mailtemplates
|
|
WHERE templetid = ?
|
|
LIMIT 1
|
|
");
|
|
$stmt->execute([$templetid]);
|
|
$tpl = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
if (!$tpl) {
|
|
throw new RuntimeException("Mailvorlage nicht gefunden: templetid=" . $templetid);
|
|
}
|
|
|
|
$betreff = (string)($tpl['betreff'] ?? '');
|
|
$body = (string)($tpl['body'] ?? '');
|
|
$tplName = (string)($tpl['name'] ?? '');
|
|
|
|
// 2) Anfrage + Person laden
|
|
$stmt = $pdo->prepare("
|
|
SELECT
|
|
a.*,
|
|
p.vorname, p.nachname, p.geburtstag,
|
|
p.tele, p.plz, p.ort, p.strasse,
|
|
p.email
|
|
FROM anfragen a
|
|
INNER JOIN persons p ON a.requester_person_id = p.person_id
|
|
WHERE a.anfrageid = ?
|
|
LIMIT 1
|
|
");
|
|
$stmt->execute([$anfrageid]);
|
|
$row = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
if (!$row) {
|
|
throw new RuntimeException("Anfrage nicht gefunden: anfrageid=" . $anfrageid);
|
|
}
|
|
|
|
$vorname = (string)($row['vorname'] ?? '');
|
|
$nachname = (string)($row['nachname'] ?? '');
|
|
$geburtstag = (string)($row['geburtstag'] ?? '');
|
|
$tele = (string)($row['tele'] ?? '');
|
|
$plz = (string)($row['plz'] ?? '');
|
|
$ort = (string)($row['ort'] ?? '');
|
|
$strasse = (string)($row['strasse'] ?? '');
|
|
$empfaenger = (string)($row['email'] ?? '');
|
|
|
|
$adresse = trim($ort . " " . $plz . ", " . $strasse);
|
|
|
|
$hash = (string)($row['hash'] ?? '');
|
|
$anfragenlogin = rtrim($anfragebestaetigung) . "?id=" . $hash;
|
|
|
|
$nachricht = (string)($row['nachricht'] ?? '');
|
|
$medikament1 = (string)($row['medikament1'] ?? '');
|
|
$medikament2 = (string)($row['medikament2'] ?? '');
|
|
$anforderungart = $row['anforderungart'] ?? null;
|
|
|
|
// 3) Rezeptart holen
|
|
$rezeptart = '';
|
|
if (!empty($anforderungart)) {
|
|
$stmt = $pdo->prepare("SELECT artname FROM anfrageart WHERE artid = ? LIMIT 1");
|
|
$stmt->execute([$anforderungart]);
|
|
$rezeptart = (string)($stmt->fetchColumn() ?: '');
|
|
}
|
|
|
|
// 4) Standard-Platzhalter
|
|
$replacements = [
|
|
"%BENUTZERVORNAME%" => $vorname,
|
|
"%BENUTZERNACHNAME%" => $nachname,
|
|
"%BENUTZERGEBURTSTAG%" => $geburtstag,
|
|
"%BENUTZERADRESSE%" => $adresse,
|
|
"%REZEPTART%" => $rezeptart,
|
|
"%MEDIKAMENTNUMMEREINS%" => $medikament1,
|
|
"%MEDIKAMENTNUMMERZWEI%" => $medikament2,
|
|
"%ANFRAGENACHRICHT%" => $nachricht,
|
|
"%ANFRAGENLOGIN%" => $anfragenlogin,
|
|
];
|
|
|
|
// Extra-Platzhalter (z.B. Termin / Warteliste)
|
|
// Beispiel: ['%TERMINZEITVORGABE%' => $Zeitanzeige]
|
|
foreach ($extraReplacements as $k => $v) {
|
|
if (!is_string($k)) continue;
|
|
$replacements[$k] = (string)$v;
|
|
}
|
|
|
|
$body = str_replace(array_keys($replacements), array_values($replacements), $body);
|
|
|
|
// 5) Encoding nur falls wirklich nötig
|
|
if ($convertCp1252) {
|
|
$betreff = iconv('CP1252//IGNORE', 'UTF-8', $betreff);
|
|
$body = iconv('CP1252//IGNORE', 'UTF-8', $body);
|
|
$tplName = iconv('CP1252//IGNORE', 'UTF-8', $tplName);
|
|
}
|
|
|
|
return [
|
|
'empfaenger' => $empfaenger,
|
|
'betreff' => $betreff,
|
|
'body' => $body,
|
|
'name' => $tplName,
|
|
'context' => [
|
|
'anfrageid' => $anfrageid,
|
|
'templetid' => $templetid,
|
|
'vorname' => $vorname,
|
|
'nachname' => $nachname,
|
|
'geburtstag' => $geburtstag,
|
|
'telefon' => $tele,
|
|
'adresse' => $adresse,
|
|
'rezeptart' => $rezeptart,
|
|
'anfragenlogin' => $anfragenlogin,
|
|
],
|
|
];
|
|
}
|
|
|
|
|
|
function ShowFormularFragenBenutzer(){
|
|
|
|
|
|
#$mintimegeburtstag = strtotime("-5 year", time());
|
|
$currentDate = new DateTime();
|
|
//Use the subtract function to subtract a DateInterval
|
|
$yesterdayTime = $currentDate->sub(new DateInterval('P5Y'));
|
|
//Get yesterday date
|
|
$mintimegeburtstag = $yesterdayTime->format('Y-m-d');
|
|
|
|
#$mindategeburtstag = date("Y-m-d", $mintimegeburtstag);
|
|
|
|
$ausgabe = '
|
|
<div class="6u 12u(3)">
|
|
<label for="vorname">Vorname:</label>
|
|
<input type="text" name="Vorname" id="Vorname" size=12 maxlength="50" placeholder="Vorname" required />
|
|
</div>
|
|
<div class="6u 12u(3)">
|
|
<label for="Name">Nachname:</label>
|
|
<input type="text"name="Name" size=12 maxlength="50" minlength="3" placeholder="Name" required />
|
|
</div>
|
|
<div class="6u 12u(3)">
|
|
<label for="Email">E-Mail:</label>
|
|
<input type="email" name="Email" id="Email" value="" placeholder="Email" required />
|
|
</div>
|
|
|
|
<div class="6u 12u(3)">
|
|
<label for="Tel">Telefon (mit Vorwahl/ nur Zahlen):</label>
|
|
<input type="number" name="Tel" size=4 maxlength="30" id="Tel" pattern="^[0-9]{6-30}$" placeholder="Telefon" required />
|
|
</div>
|
|
<div class="6u 12u(3)">
|
|
<label for="plz">PLZ:</label>
|
|
<input type="number" name="plz" size=4 maxlength="5" id="" placeholder="PLZ" required />
|
|
</div>
|
|
<div class="6u 12u(3)">
|
|
<label for="ort">Ort:</label>
|
|
<input type="text" name="ort" size=4 maxlength="50" id="" placeholder="Ort" required />
|
|
</div>
|
|
<div class="6u 12u(3)">
|
|
<label for="strasse">Straße:</label>
|
|
<input type="text" name="strasse" size=4 maxlength="50" id="" value="" placeholder="Straße" required />
|
|
</div>
|
|
<div class="6u 12u(3)">
|
|
<label for="Geburtsjahr">Geburtstag:</label>
|
|
<input type="date" class="input" name="Geburtsjahr" id="" value="" max="' . $mindategeburtstag . '" placeholder="Geburtsjahr" required />
|
|
</div>';
|
|
return $ausgabe ;
|
|
}
|
|
|
|
function deleteOldFiles() {
|
|
|
|
$directory = __DIR__ . "/upload/nexChRvmgyJWCgvWjceFugXpGFQzBBaMtuZlySuFdYkFzYoxNe";
|
|
// Stelle sicher, dass das Verzeichnis existiert
|
|
if (!is_dir($directory)) {
|
|
echo "Das Verzeichnis existiert nicht.";
|
|
return;
|
|
}
|
|
|
|
// Aktueller Zeitstempel
|
|
$now = time();
|
|
|
|
// Verzeichnis öffnen
|
|
$files = scandir($directory);
|
|
|
|
foreach ($files as $file) {
|
|
$filePath = $directory . DIRECTORY_SEPARATOR . $file;
|
|
|
|
// Überspringe '.' und '..'
|
|
if ($file === '.' || $file === '..') {
|
|
continue;
|
|
}
|
|
|
|
// Prüfe, ob es sich um eine Datei handelt
|
|
if (is_file($filePath)) {
|
|
// Datei-Änderungszeitstempel abrufen
|
|
$fileModTime = filemtime($filePath);
|
|
|
|
// Prüfen, ob die Datei älter als 24 Stunden ist
|
|
if (($now - $fileModTime) > 86400) { // 86400 Sekunden = 24 Stunden
|
|
// Datei löschen
|
|
unlink($filePath);
|
|
echo "Gelöscht: $filePath\n";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Prüft, ob der Benutzer eine Authentfizierung per E-Mail gemacht hat
|
|
*/
|
|
function check_mailreg() {
|
|
global $pdo;
|
|
|
|
if(isset($_SESSION['userid'])) {
|
|
$statement = $pdo->prepare("SELECT id FROM intern_users WHERE id = :id AND mailreg = '1'");
|
|
$statement->execute(array('id' => $_SESSION['userid']));
|
|
$count = $statement->rowCount();
|
|
|
|
if($count == 1){
|
|
return true;
|
|
}else{
|
|
return false;
|
|
}
|
|
}else{
|
|
return false;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
/**
|
|
* Prüft, ob der Benutzer eine Authentfizierung per E-Mail gemacht hat
|
|
*/
|
|
function check_userdatenvorhanden() {
|
|
global $pdo;
|
|
|
|
if(isset($_SESSION['userid'])) {
|
|
$statement = $pdo->prepare("SELECT id FROM intern_users WHERE id = :id AND tele <> '' AND strasse <> '' AND ort <> '' AND plz <> '' ");
|
|
$statement->execute(array('id' => $_SESSION['userid']));
|
|
$count = $statement->rowCount();
|
|
|
|
if($count == 1){
|
|
return true;
|
|
}else{
|
|
return false;
|
|
}
|
|
}else{
|
|
return false;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
function is_checked_in_index() {
|
|
if( isset($_SESSION['userid']) || isset($_COOKIE['identifier'])){
|
|
return true;
|
|
}else{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function InfoAusgeloggtePerson(){
|
|
$ausgabe = '
|
|
<h1>Interner Bereich</h1>
|
|
|
|
<p>Nach der Anmeldung können Sie Ihre Anfragen an <?php echo $organisationsname; ?> einsehen.<br>Bevor Sie sich anmelden können, müssen Sie sich registieren.<br><br></p>
|
|
<p><a class="btn btn-primary btn-lg" href="login.php" role="button">Login</a></p><br><br>
|
|
<p><a class="btn btn-primary btn-lg" href="register.php" role="button">Jetzt registrieren</a></p>
|
|
';
|
|
return $ausgabe;
|
|
|
|
}
|
|
|
|
/**
|
|
* Holt intern_users Datensatz per E-Mail, stellt sicher dass er in user existiert
|
|
* und gibt user.userid zurück.
|
|
*
|
|
* Matching: user.mail = intern_users.email (case-insensitive)
|
|
* Verhalten:
|
|
* - wenn user nicht existiert: INSERT
|
|
* - wenn user existiert: UPDATE (hier: überschreibt Felder mit intern_users Werten, wenn intern_users nicht leer ist)
|
|
*/
|
|
function ensureUserFromInternUsersByEmail(PDO $pdo, string $email): int
|
|
{
|
|
$email = trim($email);
|
|
if ($email === '') {
|
|
throw new RuntimeException("E-Mail ist leer.");
|
|
}
|
|
|
|
// 1) intern_users laden
|
|
$stmt = $pdo->prepare("
|
|
SELECT vorname, nachname, email, geburtstag, tele, ort, plz, strasse
|
|
FROM intern_users
|
|
WHERE LOWER(email) = LOWER(:email)
|
|
LIMIT 1
|
|
");
|
|
$stmt->execute([':email' => $email]);
|
|
$intern = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
if (!$intern) {
|
|
throw new RuntimeException("Kein Eintrag in intern_users für E-Mail: " . $email);
|
|
}
|
|
|
|
$vorname = trim((string)($intern['vorname'] ?? ''));
|
|
$nachname = trim((string)($intern['nachname'] ?? ''));
|
|
$mail = trim((string)($intern['email'] ?? ''));
|
|
$geburtstag = trim((string)($intern['geburtstag'] ?? ''));
|
|
$tele = trim((string)($intern['tele'] ?? ''));
|
|
$ort = trim((string)($intern['ort'] ?? ''));
|
|
$plz = trim((string)($intern['plz'] ?? ''));
|
|
$strasse = trim((string)($intern['strasse'] ?? ''));
|
|
|
|
// 2) existiert user bereits mit dieser Mail?
|
|
$stmt = $pdo->prepare("
|
|
SELECT person_id, vorname, nachname, geburtstag, email, tele, ort, plz, strasse
|
|
FROM persons
|
|
WHERE LOWER(email) = LOWER(:mail) AND geburtstag = :geburtstag
|
|
LIMIT 1
|
|
");
|
|
$stmt->execute([':mail' => $mail, ':geburtstag' => $geburtstag]);
|
|
$existing = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
if (!$existing) {
|
|
// 3) INSERT
|
|
$ins = $pdo->prepare("
|
|
INSERT INTO persons (vorname, nachname, geburtstag, email, tele, ort, plz, strasse)
|
|
VALUES (:vorname, :nachname, :geburtstag, :mail, :tele, :ort, :plz, :strasse)
|
|
");
|
|
$ins->execute([
|
|
':vorname' => $vorname,
|
|
':nachname' => $nachname,
|
|
':geburtstag' => $geburtstag,
|
|
':mail' => $mail,
|
|
':tele' => $tele,
|
|
':ort' => $ort,
|
|
':plz' => $plz,
|
|
':strasse' => $strasse,
|
|
]);
|
|
|
|
return (int)$pdo->lastInsertId();
|
|
}
|
|
|
|
// 4) UPDATE (nur wenn intern_users Wert nicht leer ist)
|
|
// -> du kannst das Verhalten ändern: "immer überschreiben" oder "nur leere Felder füllen".
|
|
$userid = (int)$existing['person_id'];
|
|
|
|
$upd = $pdo->prepare("
|
|
UPDATE persons
|
|
SET
|
|
vorname = COALESCE(NULLIF(:vorname, ''), vorname),
|
|
nachname = COALESCE(NULLIF(:nachname, ''), nachname),
|
|
geburtstag = COALESCE(NULLIF(:geburtstag, ''), geburtstag),
|
|
email = COALESCE(NULLIF(:mail, ''), email),
|
|
tele = COALESCE(NULLIF(:tele, ''), tele),
|
|
ort = COALESCE(NULLIF(:ort, ''), ort),
|
|
plz = COALESCE(NULLIF(:plz, ''), plz),
|
|
strasse = COALESCE(NULLIF(:strasse, ''), strasse)
|
|
WHERE person_id = :userid
|
|
");
|
|
$upd->execute([
|
|
':vorname' => $vorname,
|
|
':nachname' => $nachname,
|
|
':geburtstag' => $geburtstag,
|
|
':mail' => $mail,
|
|
':tele' => $tele,
|
|
':ort' => $ort,
|
|
':plz' => $plz,
|
|
':strasse' => $strasse,
|
|
':userid' => $userid,
|
|
]);
|
|
|
|
return $userid;
|
|
}
|
|
|
|
/**
|
|
* Small helper for safe HTML output.
|
|
*/
|
|
function e(string $s): string {
|
|
return htmlspecialchars($s, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
|
|
}
|
|
|
|
/**
|
|
* Ensure a person exists in `persons` based on an intern user email.
|
|
* Returns persons.person_id.
|
|
*
|
|
* Assumptions:
|
|
* - `intern_users` has: vorname, nachname, email, geburtstag, tele, ort, plz, strasse
|
|
* - `persons` has: person_id, vorname, nachname, email, geburtstag, tele, ort, plz, strasse
|
|
*
|
|
* If your schema differs, adjust column names inside INSERT/UPDATE.
|
|
*/
|
|
function ensurePersonFromInternUsersByEmail(PDO $pdo, string $email, ?int $internUserId = null): int
|
|
{
|
|
$email = trim(mb_strtolower($email));
|
|
if ($email === '') {
|
|
throw new RuntimeException("E-Mail fehlt.");
|
|
}
|
|
|
|
// 1) load intern user data (prefer id, fallback email)
|
|
if ($internUserId !== null && $internUserId > 0) {
|
|
$stmtIU = $pdo->prepare("SELECT * FROM intern_users WHERE id = :id LIMIT 1");
|
|
$stmtIU->execute([':id' => $internUserId]);
|
|
} else {
|
|
$stmtIU = $pdo->prepare("SELECT * FROM intern_users WHERE LOWER(email) = :email LIMIT 1");
|
|
$stmtIU->execute([':email' => $email]);
|
|
}
|
|
$iu = $stmtIU->fetch(PDO::FETCH_ASSOC);
|
|
if (!$iu) {
|
|
throw new RuntimeException("Intern-User nicht gefunden (email/id).");
|
|
}
|
|
|
|
// normalize fields
|
|
$vorname = (string)($iu['vorname'] ?? '');
|
|
$nachname = (string)($iu['nachname'] ?? '');
|
|
$geburtstag = (string)($iu['geburtstag'] ?? '');
|
|
$tele = (string)($iu['tele'] ?? '');
|
|
$ort = (string)($iu['ort'] ?? '');
|
|
$plz = (string)($iu['plz'] ?? '');
|
|
$strasse = (string)($iu['strasse'] ?? '');
|
|
$emailRaw = (string)($iu['email'] ?? $email);
|
|
$emailNorm = trim(mb_strtolower($emailRaw));
|
|
|
|
$pdo->beginTransaction();
|
|
try {
|
|
// 2) try find person by email
|
|
$stmtP = $pdo->prepare("SELECT person_id FROM persons WHERE LOWER(email) = :email LIMIT 1");
|
|
$stmtP->execute([':email' => $emailNorm]);
|
|
$personId = $stmtP->fetchColumn();
|
|
|
|
if ($personId) {
|
|
// optional: keep persons in sync (only fill missing fields)
|
|
$stmtU = $pdo->prepare("
|
|
UPDATE persons
|
|
SET
|
|
vorname = COALESCE(NULLIF(vorname,''), :vorname),
|
|
nachname = COALESCE(NULLIF(nachname,''), :nachname),
|
|
geburtstag = :geburtstag,
|
|
tele = COALESCE(NULLIF(tele,''), :tele),
|
|
ort = COALESCE(NULLIF(ort,''), :ort),
|
|
plz = COALESCE(NULLIF(plz,''), :plz),
|
|
strasse = COALESCE(NULLIF(strasse,''), :strasse)
|
|
WHERE person_id = :pid
|
|
");
|
|
$stmtU->execute([
|
|
':vorname' => $vorname,
|
|
':nachname' => $nachname,
|
|
':geburtstag' => $geburtstag,
|
|
':tele' => $tele,
|
|
':ort' => $ort,
|
|
':plz' => $plz,
|
|
':strasse' => $strasse,
|
|
':pid' => (int)$personId,
|
|
]);
|
|
|
|
$pdo->commit();
|
|
return (int)$personId;
|
|
}
|
|
|
|
// 3) insert new person
|
|
$stmtI = $pdo->prepare("
|
|
INSERT INTO persons (vorname, nachname, email, geburtstag, tele, ort, plz, strasse)
|
|
VALUES (:vorname, :nachname, :email, :geburtstag, :tele, :ort, :plz, :strasse)
|
|
");
|
|
$stmtI->execute([
|
|
':vorname' => $vorname,
|
|
':nachname' => $nachname,
|
|
':email' => $emailNorm,
|
|
':geburtstag' => $geburtstag,
|
|
':tele' => $tele,
|
|
':ort' => $ort,
|
|
':plz' => $plz,
|
|
':strasse' => $strasse,
|
|
]);
|
|
|
|
$newId = (int)$pdo->lastInsertId();
|
|
$pdo->commit();
|
|
return $newId;
|
|
|
|
} catch (Throwable $t) {
|
|
$pdo->rollBack();
|
|
throw $t;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Load selectable request topics.
|
|
* $mode can be: rezept | allgemein | terminabsage
|
|
*/
|
|
function loadAnfragearten(PDO $pdo, string $mode): array
|
|
{
|
|
$col = match ($mode) {
|
|
'rezept' => 'rezept',
|
|
'allgemein' => 'allgemeinanforderung',
|
|
'terminabsage' => 'terminabsagen',
|
|
default => throw new RuntimeException('Unbekannter Modus'),
|
|
};
|
|
|
|
$sql = "SELECT artid, artname FROM anfrageart WHERE {$col} = 1 ORDER BY artname";
|
|
$stmt = $pdo->query($sql);
|
|
return $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
}
|
|
|
|
/**
|
|
* Load Anfrageart label by id
|
|
*/
|
|
function loadAnfrageartName(PDO $pdo, int $artid): string
|
|
{
|
|
$stmt = $pdo->prepare("SELECT artname FROM anfrageart WHERE artid = :id LIMIT 1");
|
|
$stmt->execute([':id' => $artid]);
|
|
return (string)($stmt->fetchColumn() ?: '');
|
|
}
|
|
|
|
/**
|
|
* Insert anfrage in a single place.
|
|
* Returns new anfrageid.
|
|
*
|
|
* IMPORTANT: Adjust column names if your table differs:
|
|
* - requester_person_id (preferred) OR personid (legacy)
|
|
*/
|
|
function insertAnfrage(PDO $pdo, array $data): int
|
|
{
|
|
// Prefer new schema field name
|
|
$hasRequester = true;
|
|
try {
|
|
$pdo->query("SELECT requester_person_id FROM anfragen LIMIT 0");
|
|
} catch (Throwable $t) {
|
|
$hasRequester = false;
|
|
}
|
|
|
|
$personField = $hasRequester ? 'requester_person_id' : 'personid';
|
|
|
|
$sql = "
|
|
INSERT INTO anfragen (
|
|
{$personField},
|
|
anforderungart,
|
|
medikament1, medikament2, medikament3, medikament4, medikament5, medikament6,
|
|
nachricht,
|
|
hash,
|
|
create_time,
|
|
ordnungsid,
|
|
abholort,
|
|
sicherenachricht,
|
|
checked
|
|
) VALUES (
|
|
:pid,
|
|
:art,
|
|
:m1, :m2, :m3, :m4, :m5, :m6,
|
|
:nachricht,
|
|
:hash,
|
|
NOW(),
|
|
:ordnungsid,
|
|
:abholort,
|
|
:sicherenachricht,
|
|
:checked
|
|
)
|
|
";
|
|
|
|
$stmt = $pdo->prepare($sql);
|
|
$stmt->execute([
|
|
':pid' => (int)$data['person_id'],
|
|
':art' => (int)$data['anforderungart'],
|
|
':m1' => (string)($data['med1'] ?? ''),
|
|
':m2' => (string)($data['med2'] ?? ''),
|
|
':m3' => (string)($data['med3'] ?? ''),
|
|
':m4' => (string)($data['med4'] ?? ''),
|
|
':m5' => (string)($data['med5'] ?? ''),
|
|
':m6' => (string)($data['med6'] ?? ''),
|
|
':nachricht' => (string)$data['nachricht'],
|
|
':hash' => (string)$data['hash'],
|
|
':ordnungsid' => (int)$data['ordnungsid'],
|
|
':abholort' => (int)$data['abholort'],
|
|
':sicherenachricht' => (int)$data['sicherenachricht'],
|
|
':checked' => (int)$data['checked'],
|
|
]);
|
|
|
|
return (int)$pdo->lastInsertId();
|
|
}
|
|
|
|
/**
|
|
* Check vacation / break.
|
|
*/
|
|
function isPraxisImUrlaub(PDO $pdo): bool
|
|
{
|
|
$stmt = $pdo->prepare("SELECT 1 FROM urlaub WHERE start <= CURDATE() AND ende >= CURDATE() LIMIT 1");
|
|
$stmt->execute();
|
|
return (bool)$stmt->fetchColumn();
|
|
}
|
|
|
|
function loadAktuelleUrlaubsInfo(PDO $pdo): ?array
|
|
{
|
|
$stmt = $pdo->prepare("
|
|
SELECT ende, vertretung, vertretertelefon, vertreteradresse, vertreterurl
|
|
FROM urlaub
|
|
WHERE start <= CURDATE() AND ende >= CURDATE()
|
|
ORDER BY ende DESC
|
|
LIMIT 1
|
|
");
|
|
$stmt->execute();
|
|
$row = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
return $row ?: null;
|
|
}
|
|
|
|
|
|
function SendMailMessageSilent($con, $empfaenger, $betreff, $body){
|
|
|
|
// LOGIN CONFIG AUSLESEN
|
|
$queryconfig = mysqli_query($con, "Select * FROM config");
|
|
$rowconfig = mysqli_fetch_assoc($queryconfig);
|
|
|
|
if($queryconfig->num_rows == 1){
|
|
$row = mysqli_fetch_assoc($queryconfig);
|
|
$userid = $row["mailserver"];
|
|
echo $userid;
|
|
}
|
|
$mailserver = $rowconfig["mailserver"];
|
|
$mailUsername = $rowconfig["mailUsername"];
|
|
$mailPassword = $rowconfig["mailPassword"];
|
|
$mailPort = $rowconfig["mailPort"];
|
|
$mailFrom = $rowconfig["mailFrom"];
|
|
$mailFromName = $rowconfig["mailFromName"];
|
|
$mailSMTPSecure = $rowconfig["mailSMTPSecure"];
|
|
|
|
|
|
$body = iconv('UTF-8', 'CP1252//IGNORE', $body);
|
|
$betreff = iconv('UTF-8', 'CP1252//IGNORE', $betreff);
|
|
//$mail = new PHPMailer(true);
|
|
|
|
|
|
$mail = new PHPMailer(true);
|
|
try {
|
|
//Server settings
|
|
$mail->SMTPDebug = 0; // Enable verbose debug output
|
|
$mail->isSMTP(); // Set mailer to use SMTP
|
|
$mail->Host = $mailserver;
|
|
$mail->SMTPAuth = true; // Enable SMTP authentication
|
|
|
|
$mail->Username = $mailUsername;
|
|
$mail->Password = $mailPassword;
|
|
$mail->SMTPSecure = $mailSMTPSecure; // Enable TLS encryption, `ssl` also accepted
|
|
// TCP port to connect to
|
|
$mail->Port = $mailPort;
|
|
//Recipients
|
|
$mail->setFrom($mailFrom , $mailFromName);
|
|
|
|
$mail->addAddress($empfaenger); // Name is optional
|
|
|
|
//Content
|
|
$mail->isHTML(true); // Set email format to HTML
|
|
$mail->Subject = $betreff;
|
|
$mail->Body = $body;
|
|
$mail->AltBody = $body;
|
|
//$mail->charSet = "UTF-8";
|
|
//$mail->Encoding = 'base64';
|
|
|
|
$mail->send();
|
|
|
|
} catch (Exception $e) {
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|