diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 8aedab8..e948bfd 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -2,11 +2,11 @@ namespace App\Http\Controllers; -use App\Knockout\Post; use Illuminate\Http\Request; use App\Knockout\User; use App\Knockout\UserPost; use App\Knockout\UserThread; +use App\Knockout\UserBan; class UserController extends Controller { @@ -71,9 +71,17 @@ class UserController extends Controller { ]); } - public function bans() + public function bans(Request $request) { - return 'not implemented'; + $userId = $request->route('user', null); + + $user = User::one($userId); + $bans = UserBan::all($userId); + + return view('page/user-bans', [ + 'user' => $user->getRecord(), + 'bans' => $bans->getRecords() + ]); } } diff --git a/app/Knockout/Ban.php b/app/Knockout/Ban.php new file mode 100644 index 0000000..71b0d47 --- /dev/null +++ b/app/Knockout/Ban.php @@ -0,0 +1,53 @@ +id = $ban->id; + $s->createdAt = Carbon::parse($ban->createdAt)->format('d/m/Y H:i'); + $s->endsAt = Carbon::parse($ban->expiresAt)->format('d/m/Y H:i'); + $s->reason = $ban->banReason; + + // grab user if available + if (isset($ban->user)) { + $s->user = User::unwrap($ban->user); + } + + // grab creator if available + if (isset($ban->bannedBy)) { + $s->creator = User::unwrap($ban->bannedBy); + } + + // grab thread if available + if (isset($ban->thread)) { + $s->thread = Thread::unwrap($ban->thread); + } + + // grab post if available + if (isset($ban->post)) { + $s->post = Post::unwrap($ban->post); + } + + return $s; + } + +} diff --git a/app/Knockout/Post.php b/app/Knockout/Post.php index da25daf..305027f 100644 --- a/app/Knockout/Post.php +++ b/app/Knockout/Post.php @@ -26,7 +26,7 @@ class Post { $s->content = $post->content; // grab user if available - if (isset($post->user)) { + if (isset($post->user) && isset($post->user->id)) { $s->user = User::unwrap($post->user); } diff --git a/app/Knockout/Thread.php b/app/Knockout/Thread.php index 6d5ad5f..d54735a 100644 --- a/app/Knockout/Thread.php +++ b/app/Knockout/Thread.php @@ -124,7 +124,7 @@ class Thread { } // grab last post if available - if (isset($thread->lastPost)) { + if (isset($thread->lastPost) && isset($thread->lastPost->id)) { $s->lastPost = Post::unwrap($thread->lastPost); } diff --git a/app/Knockout/UserBan.php b/app/Knockout/UserBan.php new file mode 100644 index 0000000..b28e8c5 --- /dev/null +++ b/app/Knockout/UserBan.php @@ -0,0 +1,35 @@ +httpGet(sprintf('/user/%u/bans', $userId)); + $json = json_decode($data); + $records = array_map(function($user) { + return Ban::unwrap($user); + }, $json); + return (new Dataset($records)); + } + + public static function updateAll(int $userId): Dataset + { + $key = sprintf('user-bans-%u', $userId); + $data = self::requestAll($userId); + Cache::put($key, $data, 300); + return $data; + } + + public static function all(int $userId): Dataset + { + $key = sprintf('user-bans-%u', $userId); + return Cache::get($key, function() use($userId) { + return self::updateAll($userId); + }); + } + +} diff --git a/resources/views/page/user-bans.blade.php b/resources/views/page/user-bans.blade.php new file mode 100644 index 0000000..03b3eaa --- /dev/null +++ b/resources/views/page/user-bans.blade.php @@ -0,0 +1,34 @@ +@extends('default') + +@section('title', $user->username . ' Bans') + +@section('breadcrumb') +Home +> +Users +> +{{ $user->username }} +> +Bans +@endsection + +@section('content') + @foreach($bans as $ban) +
Will add bios later, probably
diff --git a/routes/web.php b/routes/web.php index 59d786d..979cfdd 100644 --- a/routes/web.php +++ b/routes/web.php @@ -73,7 +73,7 @@ $router->get('/user/{user}/threads[/{page}]', [ 'uses' => 'UserController@threads' ]); -$router->get('/user/{user}/bans[/{page}]', [ +$router->get('/user/{user}/bans', [ 'as' => 'user.bans', 'uses' => 'UserController@bans' ]);