Files
2026-03-20 17:13:38 +01:00

533 lines
15 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!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>
<?php
include('header.php');
?>
<title>Praxis Creutzburg - DateiUpload</title>
<link rel="stylesheet" href="css/formulare.css" />
</head>
<body >
<!-- Header -->
<header id="header" class="../skel-layers-fixed">
<?php
include('menu.php');
include_once("inc/config.inc.php");
include_once("inc/functions.inc.php");
include_once('inc/functions.impfen.inc.php');
include_once('inc/functions.formulare.inc.php');
?>
</header>
<!-- Main -->
<section id="main" class="container">
<?php
echo showHeaderpraxis();
?>
<section class="box special">
<h2>PDF-Datei Upload</h2>
<?php
if(isset($_POST["aktion"])){
if($_POST["aktion"] == "1"){
$vorname = trim($_POST["Vorname"] ?? "");
$nachname = trim($_POST["Name"] ?? "");
$geburtstag = trim($_POST["Geburtsjahr"] ?? ""); // sollte YYYY-MM-DD sein
$email = trim($_POST["Email"] ?? "");
$tele = trim($_POST["Tel"] ?? "");
$plz = trim($_POST["plz"] ?? "");
$ort = trim($_POST["ort"] ?? "");
$strasse = trim($_POST["strasse"] ?? "");
$nachricht = trim($_POST["message"] ?? "");
$anforderungart = '18';
// Optional: wenn nur Jahr kommt -> YYYY-01-01
#if (preg_match('/^\d{4}$/', $geburtstag)) {
# $geburtstag = $geburtstag . "-01-01";
#}
// Minimal-Validation (empfohlen)
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
die("Fehler: Ungültige E-Mail");
}
if (!$geburtstag) {
die("Fehler: Geburtsdatum fehlt");
}
$hashvorher = $vorname . $nachname . $email;
$hash = md5($hashvorher) . date("YmdHs");
try {
// Transaktion starten
$pdo->beginTransaction();
// persons Upsert (UNIQUE(email, geburtstag) vorausgesetzt)
$stmt = $pdo->prepare("
INSERT INTO persons (vorname, nachname, email, geburtstag, tele, ort, plz, strasse)
VALUES (:vorname, :nachname, :email, :geburtstag, :tele, :ort, :plz, :strasse)
ON DUPLICATE KEY UPDATE
vorname = VALUES(vorname),
nachname = VALUES(nachname),
tele = VALUES(tele),
ort = VALUES(ort),
plz = VALUES(plz),
strasse = VALUES(strasse),
updated_at = CURRENT_TIMESTAMP
");
$stmt->execute([
':vorname' => $vorname,
':nachname' => $nachname,
':email' => $email,
':geburtstag' => $geburtstag,
':tele' => $tele,
':ort' => $ort,
':plz' => $plz,
':strasse' => $strasse,
]);
// person_id holen (zuverlässig nach Upsert)
$stmt = $pdo->prepare("SELECT person_id FROM persons WHERE email = ? AND geburtstag = ? LIMIT 1");
$stmt->execute([$email, $geburtstag]);
$person_id = (int)$stmt->fetchColumn();
if (!$person_id) {
throw new Exception("Konnte person_id nicht ermitteln");
}
// Transaktion abschließen
$pdo->commit();
//echo "Operation erfolgreich. person_id: " . $person_id;
} catch (Exception $e) {
// Rollback bei Fehlern
if ($pdo->inTransaction()) {
$pdo->rollBack();
}
die("Fehler: " . $e->getMessage());
}
// Überprüfung: Wurde eine Datei hochgeladen?
if (isset($_FILES['pdfFile']) && $_FILES['pdfFile']['error'] === UPLOAD_ERR_OK) {
$uploadDir = 'upload/nexChRvmgyJWCgvWjceFugXpGFQzBBaMtuZlySuFdYkFzYoxNe/';
// Datei-Infos
$fileTmpPath = $_FILES['pdfFile']['tmp_name'];
$fileName = $_FILES['pdfFile']['name'];
$fileSize = $_FILES['pdfFile']['size'];
$fileType = $_FILES['pdfFile']['type'];
// Sicherheitsüberprüfung (nur PDF erlauben)
$allowedMimeTypes = ['application/pdf'];
if (!in_array($fileType, $allowedMimeTypes)) {
die('Nur PDF-Dateien sind erlaubt!');
}
// Dateiname generieren (Nachname, Datum, Originalname)
#$nachname = "BeispielNachname"; // Ersetzen durch den tatsächlichen Wert
$date = date('Y-m-d-H-i');
$safeFileName = $nachname . '_' . $date . '_' . basename($fileName);
// Datei speichern
$destPath = $uploadDir . $safeFileName;
if (!move_uploaded_file($fileTmpPath, $destPath)) {
die('Fehler beim Hochladen der Datei.');
}
// Berechtigungen auf lesbar setzen (z. B. 0644 für Besitzer lesen/schreiben und andere lesen)
if (!chmod($destPath, 0644)) {
die('Fehler beim Setzen der Dateiberechtigungen.');
}
$stmt = $pdo->prepare("
INSERT INTO anfragen
(requester_person_id, anforderungart, nachricht, create_time, hash, ordnungsid, dateiname,
sicherenachricht, source, created_by_account_id)
VALUES
(:person_id, :anforderungart, :nachricht, NOW(), :hash, :ordnungsid, :dateiname,
0, 'mail', NULL)
");
$stmt->execute([
':person_id' => $person_id, // aus persons
':anforderungart' => $anforderungart,
':nachricht' => $nachricht,
':hash' => $hash,
':ordnungsid' => 2,
':dateiname' => $safeFileName
]);
$anfrageid = (int)$pdo->lastInsertId();
SendMailMessageVorlage($pdo, "3", $anfrageid , "25" );
echo "<h3>Datei erfolgreich hochgeladen und gespeichert!</h3><br>Sie bekommen eine Bestätigung per E-Mail!<br>Überprüfen Sie auch Ihren Spam-Filter!<br><br> ";
} else {
echo "<h3>Bitte laden Sie eine gültige Datei hoch.</h3><br><br> ";
}
}else if($_POST["aktion"] == "2"){
// ---------- 1) Eingaben ----------
$vorname = trim($_POST["Vorname"] ?? "");
$nachname = trim($_POST["Name"] ?? "");
$geburtstag = trim($_POST["Geburtsjahr"] ?? ""); // sollte DATE sein (YYYY-MM-DD) ggf. nur Jahr
$email = trim($_POST["Email"] ?? "");
$tele = trim($_POST["Tel"] ?? "");
$plz = trim($_POST["plz"] ?? "");
$ort = trim($_POST["ort"] ?? "");
$strasse = trim($_POST["strasse"] ?? "");
$medikament1 = trim($_POST["Medikament1"] ?? "");
$medikament2 = trim($_POST["Medikament2"] ?? "");
$nachricht = trim($_POST["message"] ?? "");
$anforderungart = trim($_POST["category"] ?? "");
// Geburtstag: falls nur Jahr kommt -> YYYY-01-01
if (preg_match('/^\d{4}$/', $geburtstag)) {
$geburtstag = $geburtstag . "-01-01";
}
// Minimal-Validation
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
die("<h3>Ungültige E-Mail</h3>");
}
if (!$geburtstag) {
die("<h3>Geburtsdatum fehlt</h3>");
}
if ($anforderungart === "") {
die("<h3>Kategorie fehlt</h3>");
}
// ---------- 2) Impfstoff (falls $impfstoff gesetzt ist) ----------
$impfstofftext = null;
if (!empty($impfstoff)) {
$stmt = $pdo->prepare("SELECT impfname FROM impfstoff WHERE impfid = ? LIMIT 1");
$stmt->execute([$impfstoff]);
$impfstofftext = $stmt->fetchColumn() ?: null;
}
// ---------- 3) Transaktion: Person upsert + Duplikatcheck + Anfrage insert ----------
try {
$pdo->beginTransaction();
// 3a) Person upsert (UNIQUE(email, geburtstag) vorausgesetzt!)
$stmt = $pdo->prepare("
INSERT INTO persons (vorname, nachname, email, geburtstag, tele, ort, plz, strasse)
VALUES (:vorname, :nachname, :email, :geburtstag, :tele, :ort, :plz, :strasse)
ON DUPLICATE KEY UPDATE
vorname = VALUES(vorname),
nachname = VALUES(nachname),
tele = VALUES(tele),
ort = VALUES(ort),
plz = VALUES(plz),
strasse = VALUES(strasse),
updated_at = CURRENT_TIMESTAMP
");
$stmt->execute([
':vorname' => $vorname,
':nachname' => $nachname,
':email' => $email,
':geburtstag' => $geburtstag,
':tele' => $tele,
':ort' => $ort,
':plz' => $plz,
':strasse' => $strasse,
]);
// person_id holen
$stmt = $pdo->prepare("SELECT person_id FROM persons WHERE email = ? AND geburtstag = ? LIMIT 1");
$stmt->execute([$email, $geburtstag]);
$person_id = (int)$stmt->fetchColumn();
if (!$person_id) {
throw new Exception("Keine eindeutige Kennung (person_id).");
}
// 3b) Hash erzeugen
$hashvorher = $vorname . $nachname . $email;
$hash = md5($hashvorher) . date("YmdHs");
// 3c) Duplikatcheck (letzte 7 Tage)
$stmt = $pdo->prepare("
SELECT 1
FROM anfragen
WHERE requester_person_id = ?
AND anforderungart = ?
AND nachricht = ?
AND create_time >= (NOW() - INTERVAL 7 DAY)
LIMIT 1
");
$stmt->execute([$person_id, $anforderungart, $nachricht]);
$exists = (bool)$stmt->fetchColumn();
if ($exists) {
$pdo->rollBack();
echo "<h3>Doppelte Anfrage</h3><br>Ihre Anfrage wurde schon in unserem System gespeichert.<br>Sie haben die identische Anfrage schon in den letzten sieben Tagen eingereicht.<br>Bitte warten Sie auf die Verarbeitung Ihrer Anfrage.<br><br>";
header("refresh:15;formulare.php");
exit;
}
// 3d) Anfrage anlegen (ohne Accounts)
$stmt = $pdo->prepare("
INSERT INTO anfragen
(requester_person_id, anforderungart, medikament1, medikament2, nachricht,
create_time, hash, ordnungsid, sicherenachricht, source, created_by_account_id)
VALUES
(:person_id, :anforderungart, :med1, :med2, :nachricht,
NOW(), :hash, 2, 0, 'mail', NULL)
");
$stmt->execute([
':person_id' => $person_id,
':anforderungart' => $anforderungart,
':med1' => $medikament1,
':med2' => $medikament2,
':nachricht' => $nachricht,
':hash' => $hash
]);
$anfrageid = (int)$pdo->lastInsertId();
$pdo->commit();
} catch (Exception $e) {
if ($pdo->inTransaction()) {
$pdo->rollBack();
}
die("<h3>Speicherung nicht erfolgreich</h3><br>" . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8'));
}
// ---------- 4) Mail senden + Ausgabe ----------
try {
// Jetzt PDO übergeben
SendMailMessageVorlage($pdo, "3", $anfrageid, "25");
} catch (Exception $e) {
// Mailfehler soll nicht zwingend den DB-Insert rückgängig machen
// Optional: Logging
}
echo "<h3>Nachricht abgeschickt!</h3><br>Sie bekommen eine Bestätigung per E-Mail!<br>Überprüfen Sie auch Ihren Spam-Filter!<br><br>";
header("refresh:15;formulare.php");
exit;
}
}else{
?>
Über diese Seite können Sie PDF-Dateien unserem Praxis-Team bereitstellen.<br>
Sie können über dieses Formular aus Sicherheitsgründen ausschließlich PDF-Dokumente hochladen.<br>
Sollten Sie anderen Dokumente hochladen wollen, dann wandeln Sie diese Dokumente zu erst in ein PDF um.<br><br>
Die Übertragung an die Praxisanwendung erfolgt per HTTPS und einer TLS-verschlüsselten Verbindung.<br>
</header>
<div class="row">
<div class="12u">
<!-- Form -->
<section class="box">
<?php
// Urlaubsabfrage
$today = date("Y-m-d");
$stmt = $pdo->prepare("
SELECT urlaubid
FROM urlaub
WHERE start <= ?
AND ende >= ?
LIMIT 1
");
$stmt->execute([$today, $today]);
$urlaubid = $stmt->fetchColumn();
if (!$urlaubid) {
?>
<h3>Formular bitte ausfüllen und abschicken</h3>
<?php echo '<form action="'. $_SERVER['PHP_SELF'] .'" method=POST enctype="multipart/form-data" >';
echo '<input type="hidden" name="aktion" id="aktion" value="1" />';
?>
<div class="row uniform 50%">
<?php
echo ShowFormularFragenBenutzer();
?>
<div class="12u">
<label for="category">Ich habe eine Anfrage für folgendes Thema:</label>
<div class="select-wrapper">
<select name="category" id="category" disabled >
<?php
$stmt = $pdo->prepare("
SELECT artid, artname
FROM anfrageart
WHERE dateiupload = 1
");
$stmt->execute();
while ($rowimpf = $stmt->fetch(PDO::FETCH_ASSOC)) {
$artname = $rowimpf["artname"];
$artid = $rowimpf["artid"];
?>
<option value="<?php echo htmlspecialchars($artid, ENT_QUOTES, 'UTF-8'); ?>">
<?php echo htmlspecialchars($artname, ENT_QUOTES, 'UTF-8'); ?>
</option>
<?php
}
?>
</select>
<div id="AstraInfobox"></div>
</div>
</div>
<div class="12u">
<label for="pdfFile">PDF-Datei hochladen:</label>
<input type="file" name="pdfFile" id="pdfFile" accept="application/pdf" required>
</div>
<div class="12u">
<textarea name="message" id="message" placeholder="Ihre Nachricht/Bemerkung" rows="6" maxlength="150"></textarea>
</div>
<div class="12u">
<br>
Ihre Daten werden HTTPS-verschlüsselt an unser System übertragen. Sie erhalten die Antwort per E-Mail mit TLS-Verschlüsselung. Mit Absenden Ihrer Anfrage stimmen Sie diesen Bedingungen zu.<br>
<br>
<ul class="actions">
<li><input type="submit" value="Abschicken" /></li>
</ul>
</div>
</div>
</div>
</form>
<hr />
<?php }else{
echo "<h2>Praxis im Urlaub</h2>";
echo "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>";
$today = date("Y-m-d");
$stmt = $pdo->prepare("
SELECT ende, vertretung, vertretertelefon, vertreteradresse, vertreterurl
FROM urlaub
WHERE start <= :today
AND ende >= :today
ORDER BY ende DESC
LIMIT 1
");
$stmt->execute([':today' => $today]);
$row = $stmt->fetch(); // liefert Array oder false
if ($row) {
$vertreter = $row["vertretung"] ?? null;
$vertretertelefon = $row["vertretertelefon"] ?? null;
$vertreteradresse = $row["vertreteradresse"] ?? null;
$vertreterurl = $row["vertreterurl"] ?? null;
$ende = $row["ende"] ?? null;
if ($ende) {
$endeausgabe = date("d.m.Y", strtotime("+1 day", strtotime($ende)));
} else {
$endeausgabe = null;
}
if (!empty($vertreter)) {
echo "Unsere Vertretung: " . htmlspecialchars($vertreter, ENT_QUOTES, 'UTF-8') . "<br>";
}
if (!empty($vertreterurl)) {
// optional: URL escapen/validieren
echo "Webseite Vertretung: " . htmlspecialchars($vertreterurl, ENT_QUOTES, 'UTF-8') . "<br>";
}
if (!empty($vertretertelefon)) {
echo "Telefonischer Kontakt Vertretung: " . htmlspecialchars($vertretertelefon, ENT_QUOTES, 'UTF-8') . "<br>";
}
if (!empty($vertreteradresse)) {
echo "Adresse Vertretung: " . htmlspecialchars($vertreteradresse, ENT_QUOTES, 'UTF-8') . "<br>";
}
if ($endeausgabe) {
echo "<br>Wir stehen Ihnen ab dem " . htmlspecialchars($endeausgabe, ENT_QUOTES, 'UTF-8') . " wieder zur Verfügung.<br><br><br>";
}
}
?>
<form action="index.php" method=POST>
<input type=submit class=button value="Zurück">
</form>
<?php
}
}
?>
</div>
</div>
</section>
<?php
include_once('footer.php');
?>
</body>
</html>