From fd50e9c4d564b4af176008ae6d76babc503db13c Mon Sep 17 00:00:00 2001 From: PxlLoewe <72106766+PxlLoewe@users.noreply.github.com> Date: Sun, 27 Jul 2025 20:43:30 -0700 Subject: [PATCH 1/7] logging entfernt in NewReport --- apps/hub/app/(app)/admin/report/_components/NewReport.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/hub/app/(app)/admin/report/_components/NewReport.tsx b/apps/hub/app/(app)/admin/report/_components/NewReport.tsx index 7aa1f36e..fc13f251 100644 --- a/apps/hub/app/(app)/admin/report/_components/NewReport.tsx +++ b/apps/hub/app/(app)/admin/report/_components/NewReport.tsx @@ -44,7 +44,7 @@ export const NewReportForm = ({ reviewerUserId: null, }, }); - console.log(form.formState.errors); + return (
Date: Tue, 29 Jul 2025 11:51:17 +0200 Subject: [PATCH 2/7] Fix changelog text dark on lightmode browser --- packages/shared-components/components/Changelog.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/shared-components/components/Changelog.tsx b/packages/shared-components/components/Changelog.tsx index 7bf98e85..69a143da 100644 --- a/packages/shared-components/components/Changelog.tsx +++ b/packages/shared-components/components/Changelog.tsx @@ -39,7 +39,7 @@ export const ChangelogModal = ({ )} -
+
Date: Tue, 29 Jul 2025 12:34:55 -0700 Subject: [PATCH 3/7] =?UTF-8?q?Zeitstreafen=20werden=20nun=20beim=20Verbin?= =?UTF-8?q?den=20=C3=BCberpr=C3=BCft?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/dispatch-server/helper.ts | 32 +++++++++++++++++++ .../socket-events/connect-dispatch.ts | 14 ++++++-- .../socket-events/connect-pilot.ts | 14 ++++++++ 3 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 apps/dispatch-server/helper.ts diff --git a/apps/dispatch-server/helper.ts b/apps/dispatch-server/helper.ts new file mode 100644 index 00000000..b06310be --- /dev/null +++ b/apps/dispatch-server/helper.ts @@ -0,0 +1,32 @@ +import { prisma } from "@repo/db"; + +export const getUserPenaltys = async (userId: string) => { + const openTimeban = await prisma.penalty.findMany({ + where: { + userId: userId, + until: { + gte: new Date(), + }, + suspended: false, + type: "TIME_BAN", + }, + include: { + CreatedUser: true, + }, + }); + + const openBans = await prisma.penalty.findMany({ + where: { + userId: userId, + suspended: false, + type: "BAN", + }, + include: { + CreatedUser: true, + }, + }); + return { + openTimeban, + openBans, + }; +}; diff --git a/apps/dispatch-server/socket-events/connect-dispatch.ts b/apps/dispatch-server/socket-events/connect-dispatch.ts index f2acb6c9..1eabd15a 100644 --- a/apps/dispatch-server/socket-events/connect-dispatch.ts +++ b/apps/dispatch-server/socket-events/connect-dispatch.ts @@ -3,6 +3,7 @@ import { addRolesToMember, removeRolesFromMember, renameMember } from "modules/d import { getNextDateWithTime } from "@repo/shared-components"; import { DISCORD_ROLES } from "@repo/db"; import { Server, Socket } from "socket.io"; +import { getUserPenaltys } from "helper"; export const handleConnectDispatch = (socket: Socket, io: Server) => @@ -28,8 +29,17 @@ export const handleConnectDispatch = return; } - if (!user.permissions?.includes("DISPO")) { - socket.emit("error", "You do not have permission to connect to the dispatch server."); + const userPenaltys = await getUserPenaltys(user.id); + + if ( + userPenaltys.openTimeban.length > 0 || + user.isBanned || + userPenaltys.openBans.length > 0 + ) { + socket.emit("connect-message", { + message: "Du hast eine aktive Strafe und kannst dich deshalb nicht verbinden.", + }); + socket.disconnect(); return; } diff --git a/apps/dispatch-server/socket-events/connect-pilot.ts b/apps/dispatch-server/socket-events/connect-pilot.ts index 07c15850..94d18eb6 100644 --- a/apps/dispatch-server/socket-events/connect-pilot.ts +++ b/apps/dispatch-server/socket-events/connect-pilot.ts @@ -3,6 +3,7 @@ import { addRolesToMember, removeRolesFromMember, renameMember } from "modules/d import { getNextDateWithTime } from "@repo/shared-components"; import { DISCORD_ROLES } from "@repo/db"; import { Server, Socket } from "socket.io"; +import { getUserPenaltys } from "helper"; export const handleConnectPilot = (socket: Socket, io: Server) => @@ -34,6 +35,19 @@ export const handleConnectPilot = socket.disconnect(); return; } + const userPenaltys = await getUserPenaltys(userId); + + if ( + userPenaltys.openTimeban.length > 0 || + user.isBanned || + userPenaltys.openBans.length > 0 + ) { + socket.emit("connect-message", { + message: "Du hast eine aktive Strafe und kannst dich deshalb nicht verbinden.", + }); + socket.disconnect(); + return; + } if (!user) return Error("User not found"); From e134c9b2fabeaf4d82c7f86c2eaa8f0cf910a018 Mon Sep 17 00:00:00 2001 From: PxlLoewe <72106766+PxlLoewe@users.noreply.github.com> Date: Tue, 29 Jul 2025 12:37:36 -0700 Subject: [PATCH 4/7] =?UTF-8?q?Huschrauber=20logging=20f=C3=BCr=20alle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/dispatch/app/_components/map/AircraftMarker.tsx | 6 ++++-- apps/dispatch/app/_components/navbar/AdminPanel.tsx | 5 ----- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/apps/dispatch/app/_components/map/AircraftMarker.tsx b/apps/dispatch/app/_components/map/AircraftMarker.tsx index 371565de..c5b6b803 100644 --- a/apps/dispatch/app/_components/map/AircraftMarker.tsx +++ b/apps/dispatch/app/_components/map/AircraftMarker.tsx @@ -17,7 +17,6 @@ import { getConnectedAircraftPositionLogAPI, getConnectedAircraftsAPI } from "_q import { getMissionsAPI } from "_querys/missions"; import { FMS_STATUS_COLORS, FMS_STATUS_TEXT_COLORS } from "_helpers/fmsStatusColors"; import { usePilotConnectionStore } from "_store/pilot/connectionStore"; -import { useSession } from "next-auth/react"; const AircraftPopupContent = ({ aircraft, @@ -73,7 +72,7 @@ const AircraftPopupContent = ({ } }, [currentTab, aircraft, mission]); - const { setOpenAircraftMarker, setMap, openAircraftMarker } = useMapStore((state) => state); + const { setOpenAircraftMarker, setMap } = useMapStore((state) => state); const { anchor } = useSmartPopup(); return ( <> @@ -435,6 +434,9 @@ export const AircraftLayer = () => { } }, [pilotConnectionStatus, followOwnAircraft, ownAircraft, setMap, map]); + console.debug("Hubschrauber auf Karte:", filteredAircrafts.length, filteredAircrafts); + console.debug("Daten vom Server:", aircrafts?.length, aircrafts); + return ( <> {filteredAircrafts?.map((aircraft) => { diff --git a/apps/dispatch/app/_components/navbar/AdminPanel.tsx b/apps/dispatch/app/_components/navbar/AdminPanel.tsx index da768d1b..43af976b 100644 --- a/apps/dispatch/app/_components/navbar/AdminPanel.tsx +++ b/apps/dispatch/app/_components/navbar/AdminPanel.tsx @@ -92,11 +92,6 @@ export default function AdminPanel() { const modalRef = useRef(null); - console.debug("piloten von API", { - anzahl: pilots?.length, - pilots, - }); - return (
+
); }, @@ -324,7 +327,7 @@ export const ConnectionHistory: React.FC<{ user: User }> = ({ user }: { user: Us Pilot-Verbindungs Historie = ({ user }: { user: Us cell: ({ row }) => { return (
- +
); }, @@ -408,6 +411,7 @@ export const UserPenalties = ({ user }: { user: User }) => {
} onClick={async ({ reason, until }) => { @@ -437,6 +441,7 @@ export const UserPenalties = ({ user }: { user: User }) => { /> {session.data?.user.permissions.includes("ADMIN_USER_ADVANCED") && ( } onClick={async ({ reason }) => { @@ -528,6 +533,12 @@ interface AdminFormProps { open: number; total60Days: number; }; + openBans: (Penalty & { + CreatedUser: User | null; + })[]; + openTimebans: (Penalty & { + CreatedUser: User | null; + })[]; } export const AdminForm = ({ @@ -536,6 +547,8 @@ export const AdminForm = ({ pilotTime, reports, discordAccount, + openBans, + openTimebans, }: AdminFormProps) => { const router = useRouter(); const { data: session } = useSession(); @@ -627,6 +640,33 @@ export const AdminForm = ({ )}
+ {(!!openBans.length || !!openTimebans.length) && ( +
+
+ + {openBans.map((ban) => ( +
+

Permanent ausgeschlossen

+ {ban.reason} (von {ban.CreatedUser?.firstname} {ban.CreatedUser?.lastname} -{" "} + {ban.CreatedUser?.publicId}) +
+ ))} + {openTimebans.map((timeban) => ( +
+

+ Zeitstrafe bis{" "} + {timeban.until ? new Date(timeban.until).toLocaleString("de-DE") : "unbekannt"} +

+ {timeban.reason} ({timeban.CreatedUser?.firstname} {timeban.CreatedUser?.lastname} -{" "} + {timeban.CreatedUser?.publicId}) +
+ ))} +
+

+ Achtung! Die Strafe(n) sind aktiv, die Rechte des Nutzers müssen nicht angepasst werden! +

+
+ )}

Aktivität

diff --git a/packages/shared-components/components/PenaltyDropdown.tsx b/packages/shared-components/components/PenaltyDropdown.tsx index 0b415867..53f9353a 100644 --- a/packages/shared-components/components/PenaltyDropdown.tsx +++ b/packages/shared-components/components/PenaltyDropdown.tsx @@ -9,12 +9,14 @@ export const PenaltyDropdown = ({ btnTip, btnName, Icon, + showBtnName = false, }: { onClick: (data: { reason: string; until: Date | null }) => void; showDatePicker?: boolean; btnClassName?: string; btnName: string; btnTip?: string; + showBtnName?: boolean; Icon: ReactNode; }) => { const [open, setOpen] = useState(false); @@ -25,25 +27,29 @@ export const PenaltyDropdown = ({
{open && (
-

{btnName}

+

{btnName}