feat(Moderation): implement moderation reports feature
All checks were successful
Deploy to production / deploy (push) Successful in 2m1s

- Added moderationRouter to handle moderation-related API routes.
- Introduced new methods in AdminController for fetching all regions, region types, and creating regions.
- Enhanced adminRouter with routes for moderation reports and status updates.
- Updated navigationController to include moderation reports in the admin menu.
- Implemented frontend components for reporting messages in the forum and managing moderation reports.
- Added internationalization support for moderation-related texts in multiple languages.
This commit is contained in:
Torsten Schulz (local)
2026-04-27 14:52:19 +02:00
parent 7fc9b55b59
commit a02fe1f008
36 changed files with 1162 additions and 17 deletions

View File

@@ -178,6 +178,7 @@
"adminUsers": "Mga user",
"adminUserStatistics": "Estadistika sa user",
"adminContacts": "Mga hangyo sa kontak",
"adminModerationReports": "Mga report sa moderasyon",
"adminUserRights": "Mga katungod",
"adminForums": "Pagdumala sa forum",
"adminChatRooms": "Mga chat room",

View File

@@ -66,6 +66,7 @@
},
"m-administration": {
"contactrequests": "Mga hangyo sa kontak",
"moderationReports": "Mga report sa moderasyon",
"users": "Mga user",
"userrights": "Mga katungod sa user",
"m-users": {

View File

@@ -256,21 +256,33 @@
},
"map": {
"title": "Falukant Karten-Editor (Regionen)",
"description": "Zeichne Rechtecke auf der Falukant-Karte und weise sie Städten zu.",
"description": "Zeichne Rechtecke auf der Falukant-Karte und weise sie Regionen zu.",
"tabs": {
"regions": "Positionen",
"distances": "Entfernungen"
},
"regionList": "Städte",
"regionList": "Regionen",
"noCoords": "Keine Koordinaten gesetzt",
"currentRect": "Aktuelles Rechteck",
"hintDraw": "Wähle eine Stadt und ziehe mit der Maus ein Rechteck auf der Karte, um die Position festzulegen.",
"saveAll": "Alle geänderten Städte speichern",
"hintDraw": "Wähle eine Region und ziehe mit der Maus ein Rechteck auf der Karte, um die Position festzulegen.",
"saveAll": "Alle geänderten Regionen speichern",
"createRegion": {
"title": "Neue Region anlegen",
"type": "Regionstyp",
"selectType": "Typ wählen",
"parent": "Parent-Region",
"selectParent": "Parent wählen",
"noParent": "— kein Parent —",
"name": "Name",
"create": "Region anlegen",
"creating": "Lege an…",
"error": "Region konnte nicht angelegt werden."
},
"connectionsTitle": "Verbindungen (region_distance)",
"source": "Von",
"target": "Nach",
"selectSource": "Quellstadt wählen",
"selectTarget": "Zielstadt wählen",
"selectSource": "Quelle wählen",
"selectTarget": "Ziel wählen",
"mode": "Transportart",
"modeLand": "Land",
"modeWater": "Wasser",
@@ -513,6 +525,29 @@
"event": "Event"
}
}
},
"moderationReports": {
"title": "[Admin] - Moderationsmeldungen",
"intro": "Gemeldete Inhalte prüfen, Status setzen und Notizen dokumentieren.",
"statusFilter": "Statusfilter",
"reload": "Neu laden",
"empty": "Keine Meldungen gefunden.",
"target": "Ziel",
"reason": "Meldegrund",
"reporter": "Gemeldet von",
"createdAt": "Erstellt am",
"actions": "Aktionen",
"notePlaceholder": "Notiz für Moderation",
"apply": "Status setzen",
"applySuccess": "Status wurde aktualisiert.",
"applyError": "Status konnte nicht aktualisiert werden.",
"loadError": "Meldungen konnten nicht geladen werden.",
"status": {
"open": "Offen",
"in_review": "In Prüfung",
"resolved": "Erledigt",
"rejected": "Abgelehnt"
}
}
}
}

View File

@@ -178,6 +178,7 @@
"adminUsers": "Benutzer",
"adminUserStatistics": "Benutzerstatistik",
"adminContacts": "Kontaktanfragen",
"adminModerationReports": "Moderationsmeldungen",
"adminUserRights": "Rechte",
"adminForums": "Forumverwaltung",
"adminChatRooms": "Chaträume",

View File

@@ -66,6 +66,7 @@
},
"m-administration": {
"contactrequests": "Kontaktanfragen",
"moderationReports": "Moderationsmeldungen",
"users": "Benutzer",
"userrights": "Benutzerrechte",
"m-users": {

View File

@@ -255,7 +255,12 @@
"last": "Letzte Seite",
"page": "Seite <<page>> von <<of>>"
},
"createNewMesssage": "Antwort senden"
"createNewMesssage": "Antwort senden",
"reportAction": "Melden",
"reportPrompt": "Kurzer Meldegrund (z. B. Spam, Beleidigung, Gewalt):",
"reportReasonTooShort": "Bitte gib mindestens 3 Zeichen als Meldegrund ein.",
"reportSubmitted": "Meldung wurde an die Moderation gesendet.",
"reportError": "Meldung konnte nicht gesendet werden."
},
"friendship": {
"error": {

View File

@@ -309,6 +309,46 @@
"error": "Cleanup failed."
}
},
"map": {
"title": "Falukant Map Editor (Regions)",
"description": "Draw rectangles on the Falukant map and assign them to regions.",
"tabs": {
"regions": "Positions",
"distances": "Distances"
},
"regionList": "Regions",
"noCoords": "No coordinates set",
"currentRect": "Current rectangle",
"hintDraw": "Select a region and drag a rectangle on the map to set its position.",
"saveAll": "Save all changed regions",
"createRegion": {
"title": "Create new region",
"type": "Region type",
"selectType": "Select type",
"parent": "Parent region",
"selectParent": "Select parent",
"noParent": "— no parent —",
"name": "Name",
"create": "Create region",
"creating": "Creating…",
"error": "Could not create region."
},
"connectionsTitle": "Connections (region_distance)",
"source": "From",
"target": "To",
"selectSource": "Select source",
"selectTarget": "Select target",
"mode": "Transport mode",
"modeLand": "Land",
"modeWater": "Water",
"modeAir": "Air",
"distance": "Distance",
"saveConnection": "Save connection",
"pickOnMap": "Pick on map",
"errorSaveConnection": "Could not save the connection.",
"errorDeleteConnection": "Could not delete the connection.",
"confirmDeleteConnection": "Delete connection?"
},
"createNPC": {
"title": "Create NPCs",
"region": "City",
@@ -485,6 +525,29 @@
"event": "Event"
}
}
},
"moderationReports": {
"title": "[Admin] - Moderation Reports",
"intro": "Review reported content, update status, and document moderation notes.",
"statusFilter": "Status filter",
"reload": "Reload",
"empty": "No reports found.",
"target": "Target",
"reason": "Reason",
"reporter": "Reported by",
"createdAt": "Created at",
"actions": "Actions",
"notePlaceholder": "Moderation note",
"apply": "Apply status",
"applySuccess": "Status was updated.",
"applyError": "Status could not be updated.",
"loadError": "Reports could not be loaded.",
"status": {
"open": "Open",
"in_review": "In review",
"resolved": "Resolved",
"rejected": "Rejected"
}
}
}
}

View File

@@ -178,6 +178,7 @@
"adminUsers": "Users",
"adminUserStatistics": "User statistics",
"adminContacts": "Contact requests",
"adminModerationReports": "Moderation reports",
"adminUserRights": "Rights",
"adminForums": "Forum administration",
"adminChatRooms": "Chat rooms",

View File

@@ -66,6 +66,7 @@
},
"m-administration": {
"contactrequests": "Contact requests",
"moderationReports": "Moderation reports",
"users": "Users",
"userrights": "User rights",
"m-users": {

View File

@@ -255,7 +255,12 @@
"last": "Last page",
"page": "Page <<page>> of <<of>>"
},
"createNewMesssage": "Send reply"
"createNewMesssage": "Send reply",
"reportAction": "Report",
"reportPrompt": "Short report reason (e.g. spam, abuse, violence):",
"reportReasonTooShort": "Please enter at least 3 characters as reason.",
"reportSubmitted": "Report was sent to moderation.",
"reportError": "Report could not be sent."
},
"friendship": {
"error": {

View File

@@ -178,6 +178,7 @@
"adminUsers": "Usuarios",
"adminUserStatistics": "Estadísticas de usuarios",
"adminContacts": "Solicitudes de contacto",
"adminModerationReports": "Reportes de moderación",
"adminUserRights": "Permisos",
"adminForums": "Administración del foro",
"adminChatRooms": "Salas de chat",

View File

@@ -66,6 +66,7 @@
},
"m-administration": {
"contactrequests": "Solicitudes de contacto",
"moderationReports": "Reportes de moderación",
"users": "Usuarios",
"userrights": "Permisos de usuario",
"m-users": {

View File

@@ -178,6 +178,7 @@
"adminUsers": "Benutzer",
"adminUserStatistics": "Statistiques des utilisateurs",
"adminContacts": "Kontaktanfragen",
"adminModerationReports": "Signalements de modération",
"adminUserRights": "droite",
"adminForums": "Gestion des forums",
"adminChatRooms": "Chaträume",

View File

@@ -66,6 +66,7 @@
},
"m-administration": {
"contactrequests": "Kontaktanfragen",
"moderationReports": "Signalements de modération",
"users": "Benutzer",
"userrights": "Benutzerrechte",
"m-users": {