diff --git a/dist/app/Http/Controllers/Web/Admin/Tools/AdminToolController.php b/dist/app/Http/Controllers/Web/Admin/Tools/AdminToolController.php
index 45cbb86..d513163 100644
--- a/dist/app/Http/Controllers/Web/Admin/Tools/AdminToolController.php
+++ b/dist/app/Http/Controllers/Web/Admin/Tools/AdminToolController.php
@@ -34,6 +34,7 @@ final public static function getAllTools(): array
UsersController::class,
ChatMessageController::class,
InboxMailerController::class,
+ PlayerReportsController::class,
];
}
diff --git a/dist/app/Http/Controllers/Web/Admin/Tools/ChatMessageController.php b/dist/app/Http/Controllers/Web/Admin/Tools/ChatMessageController.php
index bd5019a..265a00d 100644
--- a/dist/app/Http/Controllers/Web/Admin/Tools/ChatMessageController.php
+++ b/dist/app/Http/Controllers/Web/Admin/Tools/ChatMessageController.php
@@ -3,7 +3,7 @@
namespace App\Http\Controllers\Web\Admin\Tools;
use App\Enums\Auth\Permissions;
-use App\Http\Requests\Api\Admin\Tools\HandleChatMessageRequest;
+use App\Http\Requests\Api\Admin\Tools\HandleModerationRequest;
use App\Models\Admin\BadChatMessage;
use Redirect;
use Session;
@@ -26,7 +26,7 @@ public function index()
return view('admin.tools.chat-messages', ['messages' => $badMessages]);
}
- public function handleMessage(HandleCHatMessageRequest $request, BadChatMessage $message)
+ public function handleMessage(HandleModerationRequest $request, BadChatMessage $message)
{
$message->consequences = $request->consequences;
$message->handled = true;
diff --git a/dist/app/Http/Controllers/Web/Admin/Tools/PlayerReportsController.php b/dist/app/Http/Controllers/Web/Admin/Tools/PlayerReportsController.php
new file mode 100644
index 0000000..8151dba
--- /dev/null
+++ b/dist/app/Http/Controllers/Web/Admin/Tools/PlayerReportsController.php
@@ -0,0 +1,35 @@
+paginate();
+
+ return view('admin.tools.user-reports', ['reports' => $reports]);
+ }
+
+ public function handleReport(HandleModerationRequest $request, PlayerReport $report) {
+ $report->consequences = $request->consequences;
+ $report->handled = true;
+ $report->handledBy()->associate(Auth::user());
+ $report->save();
+
+ Session::flash('alert-success', 'Handled report saved successfully.');
+ return Redirect::back();
+ }
+}
\ No newline at end of file
diff --git a/dist/app/Http/Requests/Api/Admin/Tools/HandleChatMessageRequest.php b/dist/app/Http/Requests/Api/Admin/Tools/HandleModerationRequest.php
similarity index 91%
rename from dist/app/Http/Requests/Api/Admin/Tools/HandleChatMessageRequest.php
rename to dist/app/Http/Requests/Api/Admin/Tools/HandleModerationRequest.php
index a543fce..2c06848 100644
--- a/dist/app/Http/Requests/Api/Admin/Tools/HandleChatMessageRequest.php
+++ b/dist/app/Http/Requests/Api/Admin/Tools/HandleModerationRequest.php
@@ -6,7 +6,7 @@
use Auth;
use Illuminate\Foundation\Http\FormRequest;
-class HandleChatMessageRequest extends FormRequest
+class HandleModerationRequest extends FormRequest
{
public string $consequences;
diff --git a/dist/app/Http/Requests/Api/Moderation/ReportPlayerInfoListEntry.php b/dist/app/Http/Requests/Api/Moderation/ReportPlayerInfoListEntry.php
index fd69480..7109080 100644
--- a/dist/app/Http/Requests/Api/Moderation/ReportPlayerInfoListEntry.php
+++ b/dist/app/Http/Requests/Api/Moderation/ReportPlayerInfoListEntry.php
@@ -4,6 +4,7 @@
use App\Enums\Game\CharacterState;
use App\Enums\Game\Faction;
+use App\Models\User\User;
class ReportPlayerInfoListEntry
{
@@ -25,8 +26,12 @@ public static function makeFromArray(array $array)
CharacterState::tryFrom($array['characterState']),
Faction::tryFrom($array['faction']),
$array['totalXpEarned'],
- $array['playtimeInSec'],
+ $array['playtimeInSeconds'],
$array['isReportedPlayer'],
- $array['isReporterPlayer']);
+ $array['isReportingPlayer']);
+ }
+
+ public function getPlayerName(): string|null {
+ return User::find($this->playerId, 'last_known_username')?->last_known_username;
}
}
\ No newline at end of file
diff --git a/dist/app/Models/Game/Moderation/PlayerReport.php b/dist/app/Models/Game/Moderation/PlayerReport.php
index 6209796..05779c9 100644
--- a/dist/app/Models/Game/Moderation/PlayerReport.php
+++ b/dist/app/Models/Game/Moderation/PlayerReport.php
@@ -17,6 +17,11 @@ class PlayerReport extends Model
'player_infos' => 'array',
];
+ protected $attributes = [
+ 'handled' => false,
+
+ ];
+
public function reportedUser(): BelongsTo
{
return $this->belongsTo(User::class, 'reported_user_id');
@@ -27,6 +32,15 @@ public function reportingUser(): BelongsTo
return $this->belongsTo(User::class, 'reporting_user_id');
}
+ public function handledBy(): BelongsTo
+ {
+ return $this->belongsTo(User::class, 'handled_by_id');
+ }
+
+ /**
+ *
+ * @return Collection|ReportPlayerInfoListEntry[]
+ * */
public function playerInfos(): Collection {
$collection = collect();
diff --git a/dist/database/migrations/2024_07_28_002907_create_player_reports_table.php b/dist/database/migrations/2024_07_28_002907_create_player_reports_table.php
index ef8bad8..11d3457 100644
--- a/dist/database/migrations/2024_07_28_002907_create_player_reports_table.php
+++ b/dist/database/migrations/2024_07_28_002907_create_player_reports_table.php
@@ -20,6 +20,9 @@ public function up(): void
$table->text('details');
$table->uuid('match_id');
$table->json('player_infos');
+ $table->foreignUuid('handled_by_id')->nullable()->constrained('users');
+ $table->boolean('handled');
+ $table->text('consequences')->nullable();
$table->timestamps();
});
diff --git a/dist/resources/views/admin/tools/user-list.blade.php b/dist/resources/views/admin/tools/user-list.blade.php
index 613422d..f66627e 100644
--- a/dist/resources/views/admin/tools/user-list.blade.php
+++ b/dist/resources/views/admin/tools/user-list.blade.php
@@ -26,7 +26,6 @@
@if($userList->count() > 0)
-
| User ID |
diff --git a/dist/resources/views/admin/tools/user-reports.blade.php b/dist/resources/views/admin/tools/user-reports.blade.php
new file mode 100644
index 0000000..a8d1789
--- /dev/null
+++ b/dist/resources/views/admin/tools/user-reports.blade.php
@@ -0,0 +1,77 @@
+@php
+ use App\Models\Game\Moderation\PlayerReport;
+@endphp
+
+@props([
+ 'reports' => collect()
+])
+
+@php
+ /** @var \Illuminate\Support\Collection<\App\Models\Game\Moderation\PlayerReport>|\Illuminate\Pagination\LengthAwarePaginator $reports*/
+
+ $handledReports = collect();
+ $unhandledReports = collect();
+
+ $reports->each(function (PlayerReport $report) use ($handledReports, $unhandledReports) {
+ if($report->handled)
+ $handledReports->add($report);
+ else
+ $unhandledReports->add($report);
+ })
+
+@endphp
+
+
+
+ @if($reports->count() <= 0)
+
No Reports
+ @endif
+
+ @if($unhandledReports->count() > 0)
+
Unhandled Reports
+
+
+
+ | Time |
+ Reporter |
+ Reported |
+ Reason |
+ Details |
+ Match Info |
+ Actions |
+
+
+ @foreach($unhandledReports as $report)
+
+ @endforeach
+
+
+ @endif
+
+ @if($handledReports->count() > 0)
+
Handled Reports
+
+
+
+ | Time |
+ Reporter |
+ Reported |
+ Reason |
+ Details |
+ Match Info |
+ Consequences |
+ Handled By |
+
+
+ @foreach($handledReports as $report)
+
+ @endforeach
+
+
+ @endif
+
+
+ {{ $reports->links() }}
+
+
+
\ No newline at end of file
diff --git a/dist/resources/views/components/admin/tools/report-list-entry.blade.php b/dist/resources/views/components/admin/tools/report-list-entry.blade.php
new file mode 100644
index 0000000..6554022
--- /dev/null
+++ b/dist/resources/views/components/admin/tools/report-list-entry.blade.php
@@ -0,0 +1,182 @@
+@props([
+ 'report'
+])
+
+@php
+ /** @var \App\Models\Game\Moderation\PlayerReport $report */
+@endphp
+
+
\ No newline at end of file
diff --git a/dist/resources/views/components/icons/flag.blade.php b/dist/resources/views/components/icons/flag.blade.php
new file mode 100644
index 0000000..4c316eb
--- /dev/null
+++ b/dist/resources/views/components/icons/flag.blade.php
@@ -0,0 +1,3 @@
+
diff --git a/dist/routes/admin.php b/dist/routes/admin.php
index 5137006..9822262 100644
--- a/dist/routes/admin.php
+++ b/dist/routes/admin.php
@@ -7,6 +7,7 @@
use App\Http\Controllers\Web\Admin\Tools\GameNewsController;
use App\Http\Controllers\Web\Admin\Tools\InboxMailerController;
use App\Http\Controllers\Web\Admin\Tools\LogViewerController;
+use App\Http\Controllers\Web\Admin\Tools\PlayerReportsController;
use App\Http\Controllers\Web\Admin\Tools\UsersController;
use App\Http\Controllers\Web\GameFileController;
@@ -41,6 +42,9 @@
Route::get('chat-filter', [ChatMessageController::class, 'index'])->name(ChatMessageController::class);
Route::post('chat-filter/handle-message/{message}', [ChatMessageController::class, 'handleMessage'])->name('chat-filter.handle');
+Route::get('reports', [PlayerReportsController::class, 'index'])->name(PlayerReportsController::class);
+Route::post('reports/handle-report/{report}', [PlayerReportsController::class, 'handleReport'])->name('reports.handle');
+
Route::fallback(function () {
return redirect(route('admin.dashboard'));
});