false, 'error' => 'Fehlende Parameter']); exit; } $date = $_POST["date"]; $formattedDate = date("d.m.Y", strtotime($date)); $userId = (int) $_SESSION["user_id"]; $pdo = require($_SERVER['DOCUMENT_ROOT'] . "/intranet_repo/general_files/ini/database.php"); // Pruefen ob Verfuegbarkeit bereits besteht $stmt = $pdo->prepare("SELECT COUNT(*) AS count FROM verfuegbarkeiten WHERE datum = ? AND user_id = ?"); $stmt->execute([$date, $userId]); $wasAvailable = $stmt->fetch()['count'] > 0; // Eintragen oder Austragen if ($wasAvailable) { $stmt = $pdo->prepare("DELETE FROM verfuegbarkeiten WHERE datum = ? AND user_id = ?"); } else { $stmt = $pdo->prepare("INSERT INTO verfuegbarkeiten (datum, user_id) VALUES (?, ?)"); } if (!$stmt->execute([$date, $userId])) { http_response_code(500); echo json_encode(['ok' => false, 'error' => 'Datenbankfehler']); $pdo = null; exit; } $nowAvailable = !$wasAvailable; $notifications = []; // Bei neuem Eintrag: Match pruefen und benachrichtigen if ($nowAvailable) { // E-Mail-Spalte dynamisch ermitteln $emailCol = null; $emailCandidates = ['email', 'mail', 'email_address', 'e_mail', 'user_email']; $inList = "'" . implode("','", $emailCandidates) . "'"; $res = $pdo->query("SELECT column_name FROM information_schema.columns WHERE table_name = 'user_general_information' AND column_name IN ($inList) LIMIT 1"); if ($res && $r = $res->fetch()) { $emailCol = $r['column_name']; } $emailSelect = $emailCol ? ", u.\"{$emailCol}\" AS email" : ", '' AS email"; $sql = "SELECT u.user_id, u.first_name, u.last_name, u.phone{$emailSelect} FROM verfuegbarkeiten v JOIN user_general_information u ON v.user_id = u.user_id WHERE v.datum = ?"; $stmt = $pdo->prepare($sql); $stmt->execute([$date]); $matchUsers = $stmt->fetchAll(); if (count($matchUsers) > 1) { $nameList = implode(', ', array_map(fn($u) => trim($u['first_name'] . ' ' . $u['last_name']), $matchUsers)); $smsText = mb_convert_encoding( "Intranet NAK Reinickendorf\n\nIt's a match!\n\n{$nameList} haben am {$formattedDate} fuer einen Seelsorgebesuch Zeit!", 'UTF-8', 'auto' ); // SMS an alle Beteiligten foreach ($matchUsers as $u) { if (!empty($u['phone'])) { $smsData = json_encode([ 'phone' => '+49' . $u['phone'], 'message' => $smsText ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); $ctx = stream_context_create(['http' => [ 'header' => "Content-Type: application/json; charset=utf-8", 'method' => 'POST', 'content' => $smsData, 'timeout' => 5 ]]); @file_get_contents(rtrim(intranet_env('SMS_GATEWAY_URL'), '/') . '/send_sms', false, $ctx); $notifications[] = "SMS → " . $u['first_name']; } } // E-Mail an alle Beteiligten require_once $_SERVER['DOCUMENT_ROOT'] . '/intranet_repo/general_files/ini/send_mail.php'; $mailBetreff = "Seelsorge-Match am {$formattedDate}"; $mailNachricht = "It's a match!\n\n{$nameList} haben am {$formattedDate} für einen Seelsorgebesuch Zeit.\n\nBitte stimmt euch untereinander ab."; $host = $_SERVER['HTTP_HOST'] ?? intranet_env('INTRANET_FQDN'); $btnUrl = "https://{$host}/intranet_repo/projects/seelsorge/seelsorge.php"; foreach ($matchUsers as $u) { $email = trim($u['email'] ?? ''); if (!empty($email) && filter_var($email, FILTER_VALIDATE_EMAIL)) { @send_intranet_mail($email, $mailBetreff, $mailNachricht, null, 'intranet@nak-reinickendorf.de', 'Zum Seelsorgeplaner', $btnUrl); $notifications[] = "Mail → " . $u['first_name']; } } } } // Aktuellen Count der verfuegbaren Diakon*innen fuer diesen Tag zurueckgeben $stmt = $pdo->prepare("SELECT COUNT(*) AS cnt FROM verfuegbarkeiten WHERE datum = ?"); $stmt->execute([$date]); $availCount = $stmt->fetch()['cnt']; $pdo = null; echo json_encode([ 'ok' => true, 'nowAvailable' => $nowAvailable, 'availCount' => (int) $availCount, 'notifications' => $notifications ], JSON_UNESCAPED_UNICODE); ?>