prepare("SELECT id FROM users WHERE username = ?"); $stmt->execute([$username]); if ($stmt->fetch()) { $_SESSION['flash_message'] = ['text' => 'Username already exists.', 'type' => 'warning']; } else { $hashed_password = password_hash($password, PASSWORD_DEFAULT); $stmt = $pdo->prepare("INSERT INTO users (username, password, role) VALUES (?, ?, ?)"); if ($stmt->execute([$username, $hashed_password, $role])) { $_SESSION['flash_message'] = ['text' => 'User added successfully.', 'type' => 'success']; } else { $_SESSION['flash_message'] = ['text' => 'Error adding user.', 'type' => 'danger']; } } } else { $_SESSION['flash_message'] = ['text' => 'Username, password, and a valid role are required.', 'type' => 'warning']; } } elseif ($action === 'edit_user') { $user_id = filter_input(INPUT_POST, 'user_id', FILTER_VALIDATE_INT); $username = trim($_POST['username'] ?? ''); $role = $_POST['role'] ?? 'user'; $password = $_POST['password'] ?? ''; // Optional: for changing password if ($user_id && !empty($username) && in_array($role, ['user', 'viewer', 'admin'])) { // Check if new username already exists (and is not the current user) $stmt = $pdo->prepare("SELECT id FROM users WHERE username = ? AND id != ?"); $stmt->execute([$username, $user_id]); if ($stmt->fetch()) { $_SESSION['flash_message'] = ['text' => 'Username already exists.', 'type' => 'warning']; } else { if (!empty($password)) { // If password is provided, update it $hashed_password = password_hash($password, PASSWORD_DEFAULT); $stmt = $pdo->prepare("UPDATE users SET username = ?, role = ?, password = ? WHERE id = ?"); $stmt->execute([$username, $role, $hashed_password, $user_id]); } else { // Otherwise, update without changing password $stmt = $pdo->prepare("UPDATE users SET username = ?, role = ? WHERE id = ?"); $stmt->execute([$username, $role, $user_id]); } $_SESSION['flash_message'] = ['text' => 'User updated successfully.', 'type' => 'success']; } } else { $_SESSION['flash_message'] = ['text' => 'Invalid data for updating user.', 'type' => 'warning']; } } elseif ($action === 'delete_user') { $user_id = filter_input(INPUT_POST, 'user_id', FILTER_VALIDATE_INT); if ($user_id && $user_id != 1) { // Prevent admin from deleting themselves $stmt = $pdo->prepare("DELETE FROM users WHERE id = ?"); if ($stmt->execute([$user_id])) { $_SESSION['flash_message'] = ['text' => 'User deleted successfully.', 'type' => 'success']; } else { $_SESSION['flash_message'] = ['text' => 'Error deleting user.', 'type' => 'danger']; } } else { $_SESSION['flash_message'] = ['text' => 'Invalid user or action not allowed.', 'type' => 'danger']; } } header('Location: user_settings.php'); exit; } // Fetch all users for display $users_stmt = $pdo->query("SELECT id, username, role FROM users ORDER BY username"); $users = $users_stmt->fetchAll(); require_once 'include/header.php'; ?>