| Profil | Name | E-Mail-Adresse |
|---|---|---|
|
= $isRegistered ? 'registriert' : 'nicht registriert' ?>
|
= htmlspecialchars($mailOutput) ?> |
query($sql); while ($column = $result->fetch(PDO::FETCH_ASSOC)) { $field = $column['column_name']; if (!in_array($field, ['p_id', 'user_id'], true)) { $roles[] = $field; } } return $roles; } function quoteIdentifier(string $identifier): string { return '"' . str_replace('"', '""', $identifier) . '"'; } function getProfileImageUrl(array $group, string $g_profilePicturePath): string { $profileImg = glob($g_profilePicturePath."{$group['user_id']}-*.jpg"); if (!empty($profileImg)) { usort($profileImg, function($a, $b) { return filemtime($b) - filemtime($a); }); $latestProfileImg = $profileImg[0]; return str_replace($_SERVER['DOCUMENT_ROOT'], '', $latestProfileImg); } return '/intranet_repo/general_files/profile_pictures/default.jpg'; } function getDisplayName(array $group): string { $fullName = trim(($group['first_name'] ?? '') . ' ' . ($group['last_name'] ?? '')); return $fullName !== '' ? $fullName : ($group['mail'] ?? 'Unbekannt'); } $permissionRoles = getPermissionRoles($pdo); /* Besondere Admin-Rechte checken */ $stmt = $pdo->prepare("SELECT up.* FROM user_permissions up WHERE up.user_id = ? LIMIT 1"); $stmt->execute([$_SESSION["user_id"]]); $isAdmin = $stmt->fetch(PDO::FETCH_ASSOC); if (!$isAdmin || (int)($isAdmin["Admin"] ?? 0) !== 1) { header("Location: {$g_httpHomePath}"); exit(); } // Neuen Nutzer inklusive Rollen anlegen if ($_SERVER["REQUEST_METHOD"] === "POST" && isset($_POST["addRecord"])) { $newMail = trim($_POST["newMail"] ?? ''); $newFirstName = trim($_POST["newFirstName"] ?? ''); $newLastName = trim($_POST["newLastName"] ?? ''); $selectedRoles = $_POST["newRoles"] ?? []; if (!is_array($selectedRoles)) { $selectedRoles = []; } if (empty($newMail) || empty($newFirstName) || empty($newLastName)) { header("Location: admin.php?message=7"); exit(); } $checkSql = "SELECT COUNT(*) FROM user_general_information WHERE mail=?"; $checkStmt = $pdo->prepare($checkSql); $checkStmt->execute([$newMail]); $count = $checkStmt->fetchColumn(); if ($count > 0) { header("Location: admin.php?message=4"); exit(); } $pdo->beginTransaction(); try { $insertSql = "INSERT INTO user_general_information (mail, first_name, last_name) VALUES (?, ?, ?)"; $stmt = $pdo->prepare($insertSql); $stmt->execute([$newMail, $newFirstName, $newLastName]); $newId = $pdo->lastInsertId(); // Fallback, falls insert_id wegen DB-Konfiguration nicht gesetzt ist if (!$newId) { $checkSql = "SELECT user_id FROM user_general_information WHERE mail=?"; $checkStmt = $pdo->prepare($checkSql); $checkStmt->execute([$newMail]); $row = $checkStmt->fetch(PDO::FETCH_ASSOC); $newId = $row['user_id']; } $roleColumns = array_map('quoteIdentifier', $permissionRoles); $columns = array_merge(['user_id'], $roleColumns); $placeholders = array_fill(0, count($columns), '?'); $roleValues = []; foreach ($permissionRoles as $role) { $roleValues[] = in_array($role, $selectedRoles, true) ? 1 : 0; } $params = array_merge([(int)$newId], $roleValues); $insertPermissionsSql = "INSERT INTO user_permissions (" . implode(', ', $columns) . ") VALUES (" . implode(', ', $placeholders) . ")"; $stmt = $pdo->prepare($insertPermissionsSql); $stmt->execute($params); $pdo->commit(); } catch (Throwable $e) { $pdo->rollBack(); throw $e; } // Einladungsmail an den neuen Nutzer senden require_once $_SERVER['DOCUMENT_ROOT'].'/intranet_repo/general_files/ini/send_mail.php'; $displayName = trim("{$newFirstName} {$newLastName}"); $greeting = !empty($displayName) ? "Hallo {$newFirstName}" : "Hallo"; $signupUrl = "https://" . $_SERVER['HTTP_HOST'] . "/intranet_repo/projects/authorization/signup.php"; $userBetreff = "Einladung zum Intranet NAK Reinickendorf"; $userNachricht = "{$greeting},\n\n"; $userNachricht .= "Sie wurden zum Intranet der NAK Reinickendorf eingeladen.\n\n"; $userNachricht .= "Bitte registrieren Sie sich mit der E-Mail-Adresse {$newMail} über den folgenden Link, um Ihren Zugang zu aktivieren."; send_intranet_mail($newMail, $userBetreff, $userNachricht, null, "intranet@nak-reinickendorf.de", "Jetzt registrieren", $signupUrl); // Info-Mail an Admins $adminName = trim(($user['first_name'] ?? '') . ' ' . ($user['last_name'] ?? '')); if (empty($adminName)) $adminName = 'Ein Administrator'; $nutzerAnzeige = !empty($displayName) ? $displayName : $newMail; $adminBetreff = "Neuer Nutzer angelegt: {$nutzerAnzeige}"; $adminNachricht = "{$adminName} hat einen neuen Nutzer angelegt:\n\n"; $adminNachricht .= "Name: " . (!empty($displayName) ? $displayName : '(kein Name)') . "\n"; $adminNachricht .= "E-Mail: {$newMail}\n"; $adminNachricht .= "Rollen: " . (!empty($selectedRoles) ? implode(', ', $selectedRoles) : 'Keine'); send_admin_team_mail($pdo, $adminBetreff, $adminNachricht); header("Location: admin.php?message=3"); exit(); } // Einladungsmail erneut senden if ($_SERVER["REQUEST_METHOD"] === "GET" && isset($_GET["resendInvite"])) { $resendUserId = (int)($_GET["resendInvite"] ?? 0); if ($resendUserId > 0) { require_once $_SERVER['DOCUMENT_ROOT'].'/intranet_repo/general_files/ini/send_mail.php'; $stmt = $pdo->prepare("SELECT mail, first_name, last_name FROM user_general_information WHERE user_id = ?"); $stmt->execute([$resendUserId]); $invUser = $stmt->fetch(PDO::FETCH_ASSOC); if ($invUser) { $displayName = trim(($invUser['first_name'] ?? '') . ' ' . ($invUser['last_name'] ?? '')); $greeting = !empty($invUser['first_name']) ? "Hallo {$invUser['first_name']}" : "Hallo"; $signupUrl = "https://" . $_SERVER['HTTP_HOST'] . "/intranet_repo/projects/authorization/signup.php"; $userBetreff = "Erinnerung: Einladung zum Intranet NAK Reinickendorf"; $userNachricht = "{$greeting},\n\n"; $userNachricht .= "Sie wurden zum Intranet der NAK Reinickendorf eingeladen und haben sich noch nicht registriert.\n\n"; $userNachricht .= "Bitte registrieren Sie sich mit der E-Mail-Adresse {$invUser['mail']} über den folgenden Link, um Ihren Zugang zu aktivieren."; send_intranet_mail($invUser['mail'], $userBetreff, $userNachricht, null, "intranet@nak-reinickendorf.de", "Jetzt registrieren", $signupUrl); } } header("Location: admin.php?message=6"); exit(); } // Rollen speichern if ($_SERVER["REQUEST_METHOD"] === "POST" && isset($_POST["editRecord"])) { $editedID = (int)($_POST["editedID"] ?? 0); $selectedRoles = $_POST["roles"] ?? []; if (!is_array($selectedRoles)) { $selectedRoles = []; } // Update name, email and phone in user_general_information $editFirstName = trim($_POST["edit_first_name"] ?? ''); $editLastName = trim($_POST["edit_last_name"] ?? ''); $editMail = trim($_POST["edit_mail"] ?? ''); $editPhone = trim($_POST["edit_phone"] ?? ''); $editPhoneVal = ($editPhone !== '') ? $editPhone : null; if ($editMail !== '') { $stmtInfo = $pdo->prepare("UPDATE user_general_information SET first_name=?, last_name=?, mail=?, phone=? WHERE user_id=?"); $stmtInfo->execute([$editFirstName, $editLastName, $editMail, $editPhoneVal, $editedID]); } // Update roles in user_permissions $setParts = []; $params = []; foreach ($permissionRoles as $role) { $setParts[] = quoteIdentifier($role) . "=?"; $params[] = in_array($role, $selectedRoles, true) ? 1 : 0; } $params[] = $editedID; $updateSql = "UPDATE user_permissions SET " . implode(', ', $setParts) . " WHERE user_id=?"; $stmt = $pdo->prepare($updateSql); $stmt->execute($params); // Vermerk in erledigte Tasks $stmt = $pdo->prepare("SELECT mail, first_name, last_name FROM user_general_information WHERE user_id = ?"); $stmt->execute([$editedID]); $editedUser = $stmt->fetch(PDO::FETCH_ASSOC); $adminName = trim(($user['first_name'] ?? '') . ' ' . ($user['last_name'] ?? '')); if (empty($adminName)) $adminName = 'Ein Administrator'; $editedUserName = trim(($editedUser['first_name'] ?? '') . ' ' . ($editedUser['last_name'] ?? '')); if (empty($editedUserName)) $editedUserName = $editedUser['mail'] ?? 'Unbekannt'; $assignedRoles = !empty($selectedRoles) ? implode(', ', $selectedRoles) : 'Keine'; $taskSubject = "Profil aktualisiert: {$editedUserName}"; $taskMessage = "{$adminName} hat das Profil von {$editedUserName} aktualisiert.\nNeue Rollen: {$assignedRoles}"; $stmt = $pdo->prepare("INSERT INTO admin_messages (type, sender_name, sender_email, subject, message, status, processed_at, created_at) VALUES ('system', ?, ?, ?, ?, 'done', NOW(), NOW())"); $senderMail = $editedUser['mail'] ?? ''; $stmt->execute([$adminName, $senderMail, $taskSubject, $taskMessage]); header("Location: admin.php?message=5"); exit(); } if ($_SERVER["REQUEST_METHOD"] === "GET" && isset($_GET["delete"])) { $deleteUserId = (int)$_GET["delete"]; $deleteSql = "DELETE FROM user_general_information WHERE user_id=?"; $stmt = $pdo->prepare($deleteSql); $stmt->execute([$deleteUserId]); header("Location: admin.php?message=2"); exit(); } if ($_SERVER["REQUEST_METHOD"] === "GET" && isset($_GET["resetPassword"])) { $resetUserId = (int)$_GET["resetPassword"]; // Login-Daten löschen (Name und Telefon bleiben erhalten) $deleteSql = "DELETE FROM user_login WHERE user_id=?"; $stmt = $pdo->prepare($deleteSql); $stmt->execute([$resetUserId]); // User-Daten für Mail laden $stmt = $pdo->prepare("SELECT mail, first_name, last_name FROM user_general_information WHERE user_id = ?"); $stmt->execute([$resetUserId]); $resetUser = $stmt->fetch(PDO::FETCH_ASSOC); if ($resetUser) { require_once $_SERVER['DOCUMENT_ROOT'].'/intranet_repo/general_files/ini/send_mail.php'; $signupUrl = "https://" . $_SERVER['HTTP_HOST'] . "/intranet_repo/projects/authorization/signup.php"; $greeting = !empty($resetUser['first_name']) ? "Hallo {$resetUser['first_name']}" : "Hallo"; $userBetreff = "Passwort zurückgesetzt"; $userNachricht = "{$greeting},\n\n"; $userNachricht .= "Ihr Passwort für das Intranet der NAK Reinickendorf wurde von einem Administrator zurückgesetzt.\n\n"; $userNachricht .= "Bitte registrieren Sie sich erneut über den folgenden Link, um ein neues Passwort festzulegen."; send_intranet_mail($resetUser['mail'], $userBetreff, $userNachricht, null, "intranet@nak-reinickendorf.de", "Jetzt neu registrieren", $signupUrl); // Vermerk in erledigte Tasks schreiben $adminName = trim(($user['first_name'] ?? '') . ' ' . ($user['last_name'] ?? '')); if (empty($adminName)) $adminName = 'Ein Administrator'; $resetUserName = trim(($resetUser['first_name'] ?? '') . ' ' . ($resetUser['last_name'] ?? '')); if (empty($resetUserName)) $resetUserName = $resetUser['mail']; $taskSubject = "Passwort zurückgesetzt: {$resetUserName}"; $taskMessage = "{$adminName} hat das Passwort von {$resetUserName} ({$resetUser['mail']}) zurückgesetzt. Eine Registrierungsmail wurde versendet."; $stmt = $pdo->prepare("INSERT INTO admin_messages (type, sender_name, sender_email, subject, message, status, processed_at, created_at) VALUES ('system', ?, ?, ?, ?, 'done', NOW(), NOW())"); $stmt->execute([$adminName, $resetUser['mail'], $taskSubject, $taskMessage]); } header("Location: admin.php?message=1"); exit(); } if (isset($_GET['partner_id'])) { $_SESSION["profile_id"] = (int)$_GET['partner_id']; header("Location: admin_profiles.php"); exit(); } // Nutzer inklusive aller Rechte laden: Registrierte Nutzer zuerst, dann Name, dann Mail. $sql_groups = "SELECT up.*, ugi.mail, ugi.first_name, ugi.last_name, ugi.phone, CASE WHEN ul.user_id IS NOT NULL THEN 1 ELSE 0 END AS \"IstRegistriert\" FROM user_permissions up LEFT JOIN user_general_information ugi ON up.user_id = ugi.user_id LEFT JOIN user_login ul ON up.user_id = ul.user_id ORDER BY \"IstRegistriert\" DESC, COALESCE(ugi.last_name, ''), COALESCE(ugi.first_name, ''), ugi.mail"; $result_groups = $pdo->query($sql_groups); $groups = $result_groups->fetchAll(PDO::FETCH_ASSOC); ?>
| Profil | Name | E-Mail-Adresse |
|---|---|---|
|
= $isRegistered ? 'registriert' : 'nicht registriert' ?>
|
= htmlspecialchars($mailOutput) ?> |