533 lines
15 KiB
PHP
533 lines
15 KiB
PHP
<!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>
|