444 lines
16 KiB
PHP
444 lines
16 KiB
PHP
<?php
|
|
|
|
require_once(__DIR__ . "/../inc/config.inc.php");
|
|
require_once(__DIR__ . "/../inc/functions.inc.php");
|
|
|
|
ini_set('display_errors', '1');
|
|
error_reporting(E_ALL);
|
|
|
|
|
|
/* ---------------------------
|
|
Page start
|
|
----------------------------*/
|
|
|
|
include(__DIR__ . "/templates/header.inc.php");
|
|
|
|
echo "</header>";
|
|
echo "<div class='jumbotron'><div class='container'>";
|
|
|
|
$user = check_intern_user(); // intern session user
|
|
|
|
if (!$user) {
|
|
header("Location: login.php");
|
|
exit;
|
|
}
|
|
|
|
|
|
|
|
echo "<h1>Neue Anfrage</h1>";
|
|
echo "<p>Hallo " . e((string)($user['vorname'] ?? '')) . ",<br></p>";
|
|
|
|
// Preconditions
|
|
if (!check_mailreg()) {
|
|
echo "<br><br>";
|
|
echo "Es fehlt die Authentifizierung Ihres Kontos per E-Mail! Bitte authentifizieren Sie Ihre E-Mail-Adresse.<br>";
|
|
echo "<form action='authmeldung.php' method='POST'>";
|
|
echo "<input name='aktion' type='hidden' value='1'>";
|
|
echo "<input type='submit' class='btn btn-primary' value='E-Mail Authentifizierung'><br>";
|
|
echo "</form>";
|
|
}
|
|
|
|
if (!check_userdatenvorhanden()) {
|
|
echo "<br><br>";
|
|
echo "Es fehlen noch Informationen in Ihren Stammdaten. Bitte pflegen Sie die Daten nach.<br>";
|
|
echo "<form action='settings.php' method='POST'>";
|
|
echo "<input name='aktion' type='hidden' value='1'>";
|
|
echo "<input type='submit' class='btn btn-primary' value='Stammdaten pflegen'><br>";
|
|
echo "</form>";
|
|
}
|
|
|
|
if (!(check_mailreg() && check_userdatenvorhanden())) {
|
|
echo "<br><br><br><form action='index.php' method='POST'>
|
|
<input type='submit' class='btn btn-primary' value='Zum Hauptmenü'>
|
|
</form>";
|
|
echo "</div></div>";
|
|
include(__DIR__ . "/templates/footer.inc.php");
|
|
exit;
|
|
}
|
|
|
|
// action routing
|
|
$aktion = $_POST['aktion'] ?? ''; // '', choose, confirm, submit
|
|
|
|
// Ensure persons id early
|
|
try {
|
|
$internUserId = isset($_SESSION['userid']) ? (int)$_SESSION['userid'] : null;
|
|
$personId = ensurePersonFromInternUsersByEmail($pdo, (string)($user['email'] ?? ''), $internUserId);
|
|
} catch (Throwable $t) {
|
|
echo "<div class='alert alert-danger'>Fehler: " . e($t->getMessage()) . "</div>";
|
|
echo "</div></div>";
|
|
include(__DIR__ . "/templates/footer.inc.php");
|
|
exit;
|
|
}
|
|
|
|
// Vacation check
|
|
if ($aktion === 'choose' || $aktion === 'confirm' || $aktion === 'submit' || $aktion === '') {
|
|
if (isPraxisImUrlaub($pdo)) {
|
|
$info = loadAktuelleUrlaubsInfo($pdo);
|
|
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>";
|
|
|
|
if ($info) {
|
|
$ende = (string)$info['ende'];
|
|
$endeausgabe = date("d.m.Y", strtotime("+1 day", strtotime($ende)));
|
|
|
|
if (!empty($info['vertretung'])) echo "Unsere Vertretung: " . e($info['vertretung']) . "<br>";
|
|
if (!empty($info['vertreterurl'])) echo "Webseite Vertretung: " . e($info['vertreterurl']) . "<br>";
|
|
if (!empty($info['vertretertelefon'])) echo "Telefonischer Kontakt Vertretung: " . e($info['vertretertelefon']) . "<br>";
|
|
if (!empty($info['vertreteradresse'])) echo "Adresse Vertretung: " . e($info['vertreteradresse']) . "<br>";
|
|
|
|
echo "<br>Wir stehen Ihnen ab dem " . e($endeausgabe) . " wieder zur Verfügung.<br><br><br>";
|
|
}
|
|
|
|
echo "<form action='index.php' method='POST'><input type='submit' class='btn btn-primary' value='Zurück'></form>";
|
|
echo "</div></div>";
|
|
include(__DIR__ . "/templates/footer.inc.php");
|
|
exit;
|
|
}
|
|
}
|
|
|
|
// default: show selection
|
|
if ($aktion === '') {
|
|
echo "<p>Wählen Sie die Anfragenart aus:<br><br></p>";
|
|
echo "<form action='" . e($_SERVER['PHP_SELF']) . "' method='POST'>";
|
|
echo "<input type='hidden' name='aktion' value='choose'>";
|
|
|
|
echo "<h4>Benutzer</h4>";
|
|
echo "Name: " . e((string)$user["vorname"]) . " " . e((string)$user["nachname"]) . "<br>";
|
|
echo "Geburtstag: " . e((string)$user["geburtstag"]) . "<br>";
|
|
echo "Adresse: " . e((string)$user["strasse"]) . ", " . e((string)$user["plz"]) . ", " . e((string)$user["ort"]) . "<br>";
|
|
|
|
echo "<input type='hidden' name='requester_person_id' value='" . (int)$personId . "'>";
|
|
|
|
echo "<br><br>";
|
|
echo "<label for='anfrageart'>Art der Anfrage:</label>";
|
|
echo "<select class='form-control' name='anfrageart' id='anfrageart' required>
|
|
<option value='1'>Rezeptanfrage</option>
|
|
<option value='2'>Allgemeine Anfrage</option>
|
|
<option value='3'>Terminabsage</option>
|
|
</select>";
|
|
echo "<br><br>";
|
|
echo "<input type='submit' class='btn btn-primary' value='Anfrage stellen'><br>";
|
|
echo "</form>";
|
|
|
|
echo "<br><br><br><form action='index.php' method='POST'>
|
|
<input type='submit' class='btn btn-primary' value='Zum Hauptmenü'>
|
|
</form>";
|
|
|
|
echo "</div></div>";
|
|
include(__DIR__ . "/templates/footer.inc.php");
|
|
exit;
|
|
}
|
|
|
|
// choose -> show form
|
|
if ($aktion === 'choose') {
|
|
$anfrageart = (int)($_POST['anfrageart'] ?? 0);
|
|
$requester_person_id = (int)($_POST['requester_person_id'] ?? $personId);
|
|
|
|
$mode = match ($anfrageart) {
|
|
1 => 'rezept',
|
|
2 => 'allgemein',
|
|
3 => 'terminabsage',
|
|
default => ''
|
|
};
|
|
if ($mode === '') {
|
|
echo "<div class='alert alert-danger'>Unbekannte Anfrageart.</div>";
|
|
echo "</div></div>";
|
|
include(__DIR__ . "/templates/footer.inc.php");
|
|
exit;
|
|
}
|
|
|
|
$arten = loadAnfragearten($pdo, $mode);
|
|
|
|
echo "<p>Füllen Sie das Formular aus.</p>";
|
|
echo "<form action='" . e($_SERVER['PHP_SELF']) . "' method='POST'>";
|
|
echo "<input type='hidden' name='aktion' value='confirm'>";
|
|
echo "<input type='hidden' name='mode' value='" . e($mode) . "'>";
|
|
echo "<input type='hidden' name='requester_person_id' value='" . (int)$requester_person_id . "'>";
|
|
|
|
// User block
|
|
echo "<h4>Benutzer</h4>";
|
|
echo "Name: " . e((string)$user["vorname"]) . " " . e((string)$user["nachname"]) . "<br>";
|
|
echo "Geburtstag: " . e((string)$user["geburtstag"]) . "<br>";
|
|
echo "Adresse: " . e((string)$user["strasse"]) . ", " . e((string)$user["plz"]) . ", " . e((string)$user["ort"]) . "<br>";
|
|
|
|
echo "<br><br><div class='col-sm-10'>";
|
|
echo "<label for='category'>Thema:</label>";
|
|
echo "<select class='form-control' name='category' id='category' required>";
|
|
echo "<option value=''>Bitte wählen Sie aus</option>";
|
|
foreach ($arten as $a) {
|
|
$artid = (int)$a['artid'];
|
|
$artname = (string)$a['artname'];
|
|
echo "<option value='{$artid}'>" . e($artname) . "</option>";
|
|
}
|
|
echo "</select></div>";
|
|
|
|
// Special fields for rezept
|
|
if ($mode === 'rezept') {
|
|
$curdate = date('d.m.Y');
|
|
$curyear = date('Y');
|
|
$curMonth = (int)date('m');
|
|
$curQuarter = (int)ceil($curMonth / 3);
|
|
$current_quarter = (int)ceil(date('n') / 3);
|
|
$first_date = date('d.m.Y', strtotime(date('Y') . '-' . (($current_quarter * 3) - 2) . '-1'));
|
|
$last_date = date('t.m.Y', strtotime(date('Y') . '-' . (($current_quarter * 3)) . '-1'));
|
|
|
|
echo "<div class='col-sm-10'><br>";
|
|
echo "<label for='karte'>Ich habe dieses Quartal schon meine Gesundheitskarte in der Praxis einlesen lassen:</label><br>";
|
|
echo "Aktuell befinden wir uns im {$curQuarter}. Quartal von {$curyear}.<br>";
|
|
echo "Dieses geht vom <b>{$first_date} bis {$last_date}</b><br>";
|
|
echo "Heute ist der {$curdate}.<br>";
|
|
echo "War die Chipkarte dieses Quartal noch nicht eingelesen, ist die Abholung nur in der Praxis möglich.<br><br>";
|
|
echo "<select class='form-control' name='karte' id='karte' required onchange='checkkarte()'>
|
|
<option value=''>Bitte wählen Sie aus</option>
|
|
<option value='Ja'>Ja</option>
|
|
<option value='Nein'>Nein</option>
|
|
<option value='Privat'>Privatrezept (Selbstzahler)</option>
|
|
</select>";
|
|
echo "</div>";
|
|
|
|
echo "<div class='col-sm-10'><br>";
|
|
echo "<label for='abholung'>Ich möchte das Rezept hier abholen:</label>";
|
|
echo "<select class='form-control' name='abholung' id='abholung' required onchange='checkkarte()'>
|
|
<option value=''>Bitte wählen Sie aus</option>
|
|
<option value='Praxis'>Praxis Creutzburg</option>
|
|
<option value='Apotheke'>Apotheke</option>
|
|
</select>";
|
|
echo "</div>";
|
|
|
|
for ($i = 1; $i <= 6; $i++) {
|
|
echo "<div class='col-sm-10'><br>";
|
|
echo "<input class='form-control' type='text' name='Medikament{$i}' placeholder='Medikament, Wirkstoff, Packungsgröße' maxlength='150'>";
|
|
echo "</div>";
|
|
}
|
|
}
|
|
|
|
echo "<div class='col-sm-10'><br>";
|
|
echo "<textarea class='form-control' name='message' id='message' placeholder='Ihre Nachricht/Bemerkung' rows='6' maxlength='500'></textarea>";
|
|
echo "</div>";
|
|
|
|
echo "<div class='col-sm-10'><br>";
|
|
echo "Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich.<br>";
|
|
echo "</div>";
|
|
|
|
echo "<div class='col-sm-10'><br><br>";
|
|
echo "<input class='form-control' type='submit' value='Weiter'>";
|
|
echo "<br><br><br></div>";
|
|
|
|
echo "</form>";
|
|
|
|
echo "<script>
|
|
function checkkarte(){
|
|
var karte = document.getElementById('karte');
|
|
var abholung = document.getElementById('abholung');
|
|
if (!karte || !abholung) return;
|
|
if (karte.value === 'Nein') {
|
|
abholung.value = 'Praxis';
|
|
}
|
|
}
|
|
</script>";
|
|
|
|
echo "</div></div>";
|
|
include(__DIR__ . "/templates/footer.inc.php");
|
|
exit;
|
|
}
|
|
|
|
// confirm -> summary
|
|
if ($aktion === 'confirm') {
|
|
$mode = (string)($_POST['mode'] ?? '');
|
|
$requester_person_id = (int)($_POST['requester_person_id'] ?? 0);
|
|
$category = (int)($_POST['category'] ?? 0);
|
|
|
|
if ($requester_person_id <= 0 || $category <= 0 || $mode === '') {
|
|
echo "<div class='alert alert-danger'>Ungültige Eingaben.</div>";
|
|
echo "</div></div>";
|
|
include(__DIR__ . "/templates/footer.inc.php");
|
|
exit;
|
|
}
|
|
|
|
$anfrageartText = loadAnfrageartName($pdo, $category);
|
|
|
|
echo "<h4>Kontrollieren Sie Ihre Angaben!</h4><br>";
|
|
echo "<form action='" . e($_SERVER['PHP_SELF']) . "' method='POST'>";
|
|
echo "<input type='hidden' name='aktion' value='submit'>";
|
|
echo "<input type='hidden' name='mode' value='" . e($mode) . "'>";
|
|
echo "<input type='hidden' name='requester_person_id' value='" . (int)$requester_person_id . "'>";
|
|
echo "<input type='hidden' name='category' value='" . (int)$category . "'>";
|
|
|
|
echo "<table border='0' class='table'>";
|
|
echo "<tr><td class='fett' style='width:160px;'>Thema</td><td>" . e($anfrageartText) . "</td></tr>";
|
|
|
|
if ($mode === 'rezept') {
|
|
$karte = (string)($_POST['karte'] ?? '');
|
|
$abholung = (string)($_POST['abholung'] ?? '');
|
|
echo "<input type='hidden' name='karte' value='" . e($karte) . "'>";
|
|
echo "<input type='hidden' name='abholung' value='" . e($abholung) . "'>";
|
|
echo "<tr><td class='fett'>Karte</td><td>" . e($karte) . "</td></tr>";
|
|
echo "<tr><td class='fett'>Abholung</td><td>" . e($abholung) . "</td></tr>";
|
|
|
|
for ($i = 1; $i <= 6; $i++) {
|
|
$med = (string)($_POST["Medikament{$i}"] ?? '');
|
|
echo "<input type='hidden' name='Medikament{$i}' value='" . e($med) . "'>";
|
|
if ($med !== '') {
|
|
echo "<tr><td class='fett'>Medikament{$i}</td><td>" . e($med) . "</td></tr>";
|
|
}
|
|
}
|
|
}
|
|
|
|
$message = (string)($_POST['message'] ?? '');
|
|
echo "<input type='hidden' name='message' value='" . e($message) . "'>";
|
|
echo "<tr><td class='fett'>Nachricht</td><td>" . nl2br(e($message)) . "</td></tr>";
|
|
echo "</table>";
|
|
|
|
echo "<input type='submit' class='form-control' value='Anfrage abschicken'>";
|
|
echo "</form>";
|
|
|
|
echo "</div></div>";
|
|
include(__DIR__ . "/templates/footer.inc.php");
|
|
exit;
|
|
}
|
|
|
|
// submit -> insert + mail
|
|
if ($aktion === 'submit') {
|
|
$mode = (string)($_POST['mode'] ?? '');
|
|
$requester_person_id = (int)($_POST['requester_person_id'] ?? 0);
|
|
$anforderungart = (int)($_POST['category'] ?? 0);
|
|
$message = (string)($_POST['message'] ?? '');
|
|
|
|
if ($requester_person_id <= 0 || $anforderungart <= 0) {
|
|
echo "<div class='alert alert-danger'>Ungültige Eingaben.</div>";
|
|
echo "</div></div>";
|
|
include(__DIR__ . "/templates/footer.inc.php");
|
|
exit;
|
|
}
|
|
|
|
$nachricht = $message;
|
|
|
|
$abholungnr = 0;
|
|
if ($mode === 'rezept') {
|
|
$karte = (string)($_POST['karte'] ?? '');
|
|
$abholung = (string)($_POST['abholung'] ?? '');
|
|
|
|
$abholungnr = ($abholung === 'Praxis') ? 1 : (($abholung === 'Apotheke') ? 2 : 0);
|
|
if ($karte === 'Privat') {
|
|
$karte = 'Privatrezept (Selbstzahler)';
|
|
}
|
|
$nachricht = "Karte eingelesen: {$karte}<br>Abholungsort: {$abholung}<br>" . $nachricht;
|
|
}
|
|
|
|
$med = [];
|
|
for ($i = 1; $i <= 6; $i++) {
|
|
$med[$i] = trim((string)($_POST["Medikament{$i}"] ?? ''));
|
|
}
|
|
|
|
// duplicate check (best effort)
|
|
$exists = false;
|
|
try {
|
|
$stmtDup = $pdo->prepare("
|
|
SELECT *
|
|
FROM anfragen
|
|
WHERE requester_person_id = :pid
|
|
AND anforderungart = :art
|
|
AND nachricht = :nachricht
|
|
AND create_time >= DATE_SUB(NOW(), INTERVAL 7 DAY)
|
|
");
|
|
$stmtDup->execute([
|
|
':pid' => $requester_person_id,
|
|
':art' => $anforderungart,
|
|
':nachricht' => $nachricht,
|
|
]);
|
|
$rows = $stmtDup->fetchAll(PDO::FETCH_ASSOC);
|
|
|
|
$medFieldAliases = [
|
|
1 => ['med1', 'medikament1', 'med_1'],
|
|
2 => ['med2', 'medikament2', 'med_2'],
|
|
3 => ['med3', 'medikament3', 'med_3'],
|
|
4 => ['med4', 'medikament4', 'med_4'],
|
|
5 => ['med5', 'medikament5', 'med_5'],
|
|
6 => ['med6', 'medikament6', 'med_6'],
|
|
];
|
|
|
|
foreach ($rows as $row) {
|
|
$allMedsEqual = true;
|
|
for ($i = 1; $i <= 6; $i++) {
|
|
$dbValue = '';
|
|
foreach ($medFieldAliases[$i] as $fieldName) {
|
|
if (array_key_exists($fieldName, $row)) {
|
|
$dbValue = trim((string)($row[$fieldName] ?? ''));
|
|
break;
|
|
}
|
|
}
|
|
if ($dbValue !== $med[$i]) {
|
|
$allMedsEqual = false;
|
|
break;
|
|
}
|
|
}
|
|
if ($allMedsEqual) {
|
|
$exists = true;
|
|
break;
|
|
}
|
|
}
|
|
} catch (Throwable $t) {
|
|
error_log('Duplicate check failed: ' . $t->getMessage());
|
|
$exists = false;
|
|
}
|
|
|
|
if ($exists) {
|
|
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>";
|
|
echo "<form action='index.php' method='POST'>
|
|
<input type='submit' class='btn btn-primary' value='Zum Hauptmenü'>
|
|
</form>";
|
|
echo "</div></div>";
|
|
include(__DIR__ . "/templates/footer.inc.php");
|
|
exit;
|
|
}
|
|
|
|
$hash = bin2hex(random_bytes(16));
|
|
$ordnungsid = ($mode === 'rezept') ? 1 : 2;
|
|
|
|
try {
|
|
$anfrageid = insertAnfrage($pdo, [
|
|
'person_id' => $requester_person_id,
|
|
'anforderungart' => $anforderungart,
|
|
'med1' => $med[1],
|
|
'med2' => $med[2],
|
|
'med3' => $med[3],
|
|
'med4' => $med[4],
|
|
'med5' => $med[5],
|
|
'med6' => $med[6],
|
|
'nachricht' => $nachricht,
|
|
'hash' => $hash,
|
|
'ordnungsid' => $ordnungsid,
|
|
'abholort' => $abholungnr,
|
|
'sicherenachricht' => 1,
|
|
'checked' => 1,
|
|
]);
|
|
|
|
$templateId = ($mode === 'rezept') ? 26 : 19;
|
|
|
|
// IMPORTANT: Your SendMailMessageVorlage() must accept PDO after your migration.
|
|
SendMailMessageVorlage($pdo, "3", $anfrageid, (string)$templateId);
|
|
|
|
echo "<h3>Nachricht abgeschickt!</h3><br>Sie bekommen eine Bestätigung per E-Mail!<br>
|
|
Überprüfen Sie auch Ihren Spam-Filter!<br><br>";
|
|
|
|
} catch (Throwable $t) {
|
|
echo "<h3>Speicherung nicht erfolgreich</h3><br>Ihre Anfrage konnte nicht gespeichert werden.<br>";
|
|
echo "<div class='alert alert-danger'>Fehler: " . e($t->getMessage()) . "</div>";
|
|
}
|
|
|
|
echo "<br><br><br><form action='index.php' method='POST'>
|
|
<input type='submit' class='btn btn-primary' value='Zum Hauptmenü'>
|
|
</form>";
|
|
|
|
echo "</div></div>";
|
|
include(__DIR__ . "/templates/footer.inc.php");
|
|
exit;
|
|
}
|
|
|
|
// fallback
|
|
echo "<div class='alert alert-warning'>Unbekannte Aktion.</div>";
|
|
echo "</div></div>";
|
|
include(__DIR__ . "/templates/footer.inc.php");
|