From 46643f669df5b2f6ee47e7f250913ac1d5c969fc Mon Sep 17 00:00:00 2001
From: sawirricardo
Date: Tue, 14 Jun 2022 15:08:02 +0700
Subject: [PATCH 01/14] add blocked users table
---
...6_14_072001_create_blocked_users_table.php | 23 +++++++++++++++++++
1 file changed, 23 insertions(+)
create mode 100644 database/migrations/2022_06_14_072001_create_blocked_users_table.php
diff --git a/database/migrations/2022_06_14_072001_create_blocked_users_table.php b/database/migrations/2022_06_14_072001_create_blocked_users_table.php
new file mode 100644
index 000000000..e8cc16b40
--- /dev/null
+++ b/database/migrations/2022_06_14_072001_create_blocked_users_table.php
@@ -0,0 +1,23 @@
+id();
+ $table->unsignedInteger('user_id')->nullable();
+ $table->foreign('user_id')->references('id')->on('users')->cascadeOnDelete();
+ $table->unsignedInteger('blocked_user_id')->nullable();
+ $table->foreign('blocked_user_id')->references('id')->on('users')->cascadeOnDelete();
+ });
+ }
+
+ public function down()
+ {
+ Schema::dropIfExists('blocked_users');
+ }
+};
From 8037b4dece288a1a07e93bb66a7b0e3d659e8b0d Mon Sep 17 00:00:00 2001
From: sawirricardo
Date: Tue, 14 Jun 2022 15:09:12 +0700
Subject: [PATCH 02/14] add blockedUser relationship
---
app/Models/User.php | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/app/Models/User.php b/app/Models/User.php
index dc427f05b..54d02a9b8 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -196,6 +196,11 @@ public function replyAble(): HasMany
return $this->hasMany(Reply::class, 'author_id');
}
+ public function blockedUsers()
+ {
+ return $this->belongsToMany(User::class, 'blocked_users', 'user_id', 'blocked_user_id');
+ }
+
public function articles(): HasMany
{
return $this->hasMany(Article::class, 'author_id');
From 46277b663c9dd39fc77dc6ea1af9fc59e77ffc97 Mon Sep 17 00:00:00 2001
From: sawirricardo
Date: Tue, 14 Jun 2022 15:09:26 +0700
Subject: [PATCH 03/14] add crud to blocked users list
---
app/Http/Livewire/ListBlockedUsers.php | 56 +++++++++++++++++++
.../livewire/list-blocked-users.blade.php | 52 +++++++++++++++++
2 files changed, 108 insertions(+)
create mode 100644 app/Http/Livewire/ListBlockedUsers.php
create mode 100644 resources/views/livewire/list-blocked-users.blade.php
diff --git a/app/Http/Livewire/ListBlockedUsers.php b/app/Http/Livewire/ListBlockedUsers.php
new file mode 100644
index 000000000..140cc5618
--- /dev/null
+++ b/app/Http/Livewire/ListBlockedUsers.php
@@ -0,0 +1,56 @@
+userId = $user->getKey();
+ }
+
+ public function getBlockedUsersProperty()
+ {
+ return User::find($this->userId)->blockedUsers;
+ }
+
+ public function getPotentiallyBlockedUsersProperty()
+ {
+ return User::query()
+ ->whereKeyNot($this->userId)
+ ->whereRaw('username like ? escape ?', ["%{$this->blockedUsername}%", '\\'])
+ ->whereNotIn('id', User::find($this->userId)->blockedUsers->pluck('id'))
+ ->get();
+ }
+
+ public function addBlockedUser()
+ {
+ $this->validate([
+ 'blockedUsername' => [
+ 'required',
+ Rule::exists('users', 'username')
+ ->whereNotIn('id', [$this->userId])
+ ],
+ ]);
+
+ $user = User::query()->where('username', $this->blockedUsername)->first();
+ User::find($this->userId)->blockedUsers()->attach($user->getKey());
+
+ $this->reset('blockedUsername');
+ }
+
+ public function removeBlockedUser($username)
+ {
+ $blockedUser = User::findByUsername($username);
+ User::find($this->userId)->blockedUsers()->detach($blockedUser->getKey());
+
+ $this->reset('blockedUsername');
+ }
+}
diff --git a/resources/views/livewire/list-blocked-users.blade.php b/resources/views/livewire/list-blocked-users.blade.php
new file mode 100644
index 000000000..1bba100bd
--- /dev/null
+++ b/resources/views/livewire/list-blocked-users.blade.php
@@ -0,0 +1,52 @@
+
+
+
+
+
+
Blocked Users
+
+ Adding these users will result in them being blocked from your account.
+
+
+ @empty($this->blockedUsers)
+
No Blocked users
+ @endempty
+
+
+
+ User name
+
+
+
+
+ @if ($errors->has('blockedUsername'))
+
{{ $errors->first('blockedUsername') }}
+ @endif
+
+
+ Add to the blocked list
+
+
+
+
+
+
+
From 8481c9d1f8547d18485bc017e441dfca7bef3553 Mon Sep 17 00:00:00 2001
From: sawirricardo
Date: Tue, 14 Jun 2022 15:09:35 +0700
Subject: [PATCH 04/14] add crud component to the settings page
---
resources/views/users/settings/settings.blade.php | 1 +
1 file changed, 1 insertion(+)
diff --git a/resources/views/users/settings/settings.blade.php b/resources/views/users/settings/settings.blade.php
index 3f059e25a..1ce399d69 100644
--- a/resources/views/users/settings/settings.blade.php
+++ b/resources/views/users/settings/settings.blade.php
@@ -19,6 +19,7 @@
@include('users.settings.password')
@include('users.settings.api_tokens')
@include('users.settings.remove')
+
From 8cce3f3f756fc45f236acca57b9d887303a56ba5 Mon Sep 17 00:00:00 2001
From: sawirricardo
Date: Tue, 14 Jun 2022 15:18:44 +0700
Subject: [PATCH 05/14] add scopes
---
app/Models/User.php | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/app/Models/User.php b/app/Models/User.php
index 54d02a9b8..a4a08b7fb 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -306,4 +306,18 @@ public function scopeModerators(Builder $query)
self::MODERATOR,
]);
}
+
+ public function scopeWithUsersWhoDoesntBlock(Builder $query, User $user)
+ {
+ return $query->whereDoesntHave('blockedUsers', function ($query) use ($user) {
+ $query->where('blocked_user_id', $user->getKey());
+ });
+ }
+
+ public function scopeWithUsersWhoArentBlockedBy(Builder $query, User $user)
+ {
+ return $query->whereDoesntHave('blockedUsers', function ($query) use ($user) {
+ $query->where('user_id', $user->getKey());
+ });
+ }
}
From 862d4f43789ba4f5bdcce52eeba12a2a41fb70dd Mon Sep 17 00:00:00 2001
From: sawirricardo
Date: Tue, 14 Jun 2022 15:19:58 +0700
Subject: [PATCH 06/14] fix styleci check
---
app/Http/Livewire/ListBlockedUsers.php | 2 +-
.../2022_06_14_072001_create_blocked_users_table.php | 3 ++-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/app/Http/Livewire/ListBlockedUsers.php b/app/Http/Livewire/ListBlockedUsers.php
index 140cc5618..812172002 100644
--- a/app/Http/Livewire/ListBlockedUsers.php
+++ b/app/Http/Livewire/ListBlockedUsers.php
@@ -36,7 +36,7 @@ public function addBlockedUser()
'blockedUsername' => [
'required',
Rule::exists('users', 'username')
- ->whereNotIn('id', [$this->userId])
+ ->whereNotIn('id', [$this->userId]),
],
]);
diff --git a/database/migrations/2022_06_14_072001_create_blocked_users_table.php b/database/migrations/2022_06_14_072001_create_blocked_users_table.php
index e8cc16b40..6c4336583 100644
--- a/database/migrations/2022_06_14_072001_create_blocked_users_table.php
+++ b/database/migrations/2022_06_14_072001_create_blocked_users_table.php
@@ -4,7 +4,8 @@
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
-return new class extends Migration {
+return new class extends Migration
+{
public function up()
{
Schema::create('blocked_users', function (Blueprint $table) {
From 087fbf36ab5faa6ced5281090817d3292cb2963a Mon Sep 17 00:00:00 2001
From: Ricardo Sawir <37329575+sawirricardo@users.noreply.github.com>
Date: Fri, 8 Jul 2022 08:31:36 +0700
Subject: [PATCH 07/14] format code
Co-authored-by: Dries Vints
---
.../2022_06_14_072001_create_blocked_users_table.php | 5 -----
1 file changed, 5 deletions(-)
diff --git a/database/migrations/2022_06_14_072001_create_blocked_users_table.php b/database/migrations/2022_06_14_072001_create_blocked_users_table.php
index 6c4336583..733ae69cc 100644
--- a/database/migrations/2022_06_14_072001_create_blocked_users_table.php
+++ b/database/migrations/2022_06_14_072001_create_blocked_users_table.php
@@ -16,9 +16,4 @@ public function up()
$table->foreign('blocked_user_id')->references('id')->on('users')->cascadeOnDelete();
});
}
-
- public function down()
- {
- Schema::dropIfExists('blocked_users');
- }
};
From 407e761fffbbc06fadbe317342189b0d503a7e69 Mon Sep 17 00:00:00 2001
From: Ricardo Sawir <37329575+sawirricardo@users.noreply.github.com>
Date: Fri, 8 Jul 2022 08:32:14 +0700
Subject: [PATCH 08/14] reformat code
Co-authored-by: Dries Vints
---
resources/views/livewire/list-blocked-users.blade.php | 2 ++
1 file changed, 2 insertions(+)
diff --git a/resources/views/livewire/list-blocked-users.blade.php b/resources/views/livewire/list-blocked-users.blade.php
index 1bba100bd..c896c2922 100644
--- a/resources/views/livewire/list-blocked-users.blade.php
+++ b/resources/views/livewire/list-blocked-users.blade.php
@@ -8,9 +8,11 @@
Adding these users will result in them being blocked from your account.
+
@empty($this->blockedUsers)
No Blocked users
@endempty
+
@foreach ($this->blockedUsers as $user)
-
From bdd42c0453bcb33a546f39ff793a2ca5d3dbd510 Mon Sep 17 00:00:00 2001
From: Ricardo Sawir <37329575+sawirricardo@users.noreply.github.com>
Date: Fri, 8 Jul 2022 08:32:34 +0700
Subject: [PATCH 09/14] reformat code
Co-authored-by: Dries Vints
---
resources/views/livewire/list-blocked-users.blade.php | 2 ++
1 file changed, 2 insertions(+)
diff --git a/resources/views/livewire/list-blocked-users.blade.php b/resources/views/livewire/list-blocked-users.blade.php
index c896c2922..fe0710fc1 100644
--- a/resources/views/livewire/list-blocked-users.blade.php
+++ b/resources/views/livewire/list-blocked-users.blade.php
@@ -39,9 +39,11 @@
@endforeach
+
@if ($errors->has('blockedUsername'))
{{ $errors->first('blockedUsername') }}
@endif
+
Add to the blocked list
From bf8b76eae58e4e94cd9d8e7a8a5e8e31bc088721 Mon Sep 17 00:00:00 2001
From: sawirricardo
Date: Fri, 8 Jul 2022 08:45:24 +0700
Subject: [PATCH 10/14] add avatar
https://github.com/laravelio/laravel.io/pull/879#discussion_r914960998
---
.../views/livewire/list-blocked-users.blade.php | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/resources/views/livewire/list-blocked-users.blade.php b/resources/views/livewire/list-blocked-users.blade.php
index fe0710fc1..47fd3cb38 100644
--- a/resources/views/livewire/list-blocked-users.blade.php
+++ b/resources/views/livewire/list-blocked-users.blade.php
@@ -16,10 +16,15 @@
@foreach ($this->blockedUsers as $user)
-
-
-
- {{ $user->username() }}
-
+
From ebfc86015a5a6e916bf3d0f2a8ff8086da39ceee Mon Sep 17 00:00:00 2001
From: Dries Vints
Date: Wed, 27 Jul 2022 14:33:05 +0200
Subject: [PATCH 11/14] wip
---
.../Settings/ApiTokenController.php | 5 +-
.../Settings/BlockUserController.php | 26 ++++++++
.../Settings/PasswordController.php | 3 +-
.../Settings/ProfileController.php | 3 +-
.../Settings/UnblockUserController.php | 26 ++++++++
app/Http/Livewire/ListBlockedUsers.php | 56 -----------------
app/Jobs/BlockUser.php | 17 ++++++
app/Jobs/UnblockUser.php | 17 ++++++
...6_14_072001_create_blocked_users_table.php | 4 +-
database/seeders/UserSeeder.php | 5 +-
lang/en/settings.php | 2 +
resources/views/layouts/_nav.blade.php | 6 +-
.../livewire/list-blocked-users.blade.php | 61 -------------------
.../views/users/settings/blocked.blade.php | 42 +++++++++++++
.../views/users/settings/password.blade.php | 2 +-
.../views/users/settings/remove.blade.php | 6 +-
.../views/users/settings/settings.blade.php | 36 +++++++++--
routes/web.php | 4 ++
18 files changed, 184 insertions(+), 137 deletions(-)
create mode 100644 app/Http/Controllers/Settings/BlockUserController.php
create mode 100644 app/Http/Controllers/Settings/UnblockUserController.php
delete mode 100644 app/Http/Livewire/ListBlockedUsers.php
create mode 100644 app/Jobs/BlockUser.php
create mode 100644 app/Jobs/UnblockUser.php
delete mode 100644 resources/views/livewire/list-blocked-users.blade.php
create mode 100644 resources/views/users/settings/blocked.blade.php
diff --git a/app/Http/Controllers/Settings/ApiTokenController.php b/app/Http/Controllers/Settings/ApiTokenController.php
index 224989b67..22ef58b43 100644
--- a/app/Http/Controllers/Settings/ApiTokenController.php
+++ b/app/Http/Controllers/Settings/ApiTokenController.php
@@ -8,7 +8,6 @@
use App\Jobs\CreateApiToken;
use App\Jobs\DeleteApiToken;
use Illuminate\Auth\Middleware\Authenticate;
-use Illuminate\Support\Facades\Auth;
class ApiTokenController extends Controller
{
@@ -19,7 +18,7 @@ public function __construct()
public function store(CreateApiTokenRequest $request)
{
- $this->dispatchSync(new CreateApiToken($user = Auth::user(), $request->name()));
+ $this->dispatchSync(new CreateApiToken($user = $request->user(), $request->name()));
$token = $user->tokens()->where('name', $request->name())->first();
@@ -30,7 +29,7 @@ public function store(CreateApiTokenRequest $request)
public function destroy(DeleteApiTokenRequest $request)
{
- $this->dispatchSync(new DeleteApiToken(Auth::user(), $request->id()));
+ $this->dispatchSync(new DeleteApiToken($request->user(), $request->id()));
$this->success('settings.api_token.deleted');
diff --git a/app/Http/Controllers/Settings/BlockUserController.php b/app/Http/Controllers/Settings/BlockUserController.php
new file mode 100644
index 000000000..152ec475f
--- /dev/null
+++ b/app/Http/Controllers/Settings/BlockUserController.php
@@ -0,0 +1,26 @@
+middleware(Authenticate::class);
+ }
+
+ public function __invoke(Request $request, User $user)
+ {
+ $this->dispatchSync(new BlockUser($request->user(), $user));
+
+ $this->success('settings.user.blocked');
+
+ return redirect()->route('profile', $user);
+ }
+}
diff --git a/app/Http/Controllers/Settings/PasswordController.php b/app/Http/Controllers/Settings/PasswordController.php
index 62c9fe009..d27822005 100644
--- a/app/Http/Controllers/Settings/PasswordController.php
+++ b/app/Http/Controllers/Settings/PasswordController.php
@@ -6,7 +6,6 @@
use App\Http\Requests\UpdatePasswordRequest;
use App\Jobs\UpdatePassword;
use Illuminate\Auth\Middleware\Authenticate;
-use Illuminate\Support\Facades\Auth;
class PasswordController extends Controller
{
@@ -17,7 +16,7 @@ public function __construct()
public function update(UpdatePasswordRequest $request)
{
- $this->dispatchSync(new UpdatePassword(Auth::user(), $request->newPassword()));
+ $this->dispatchSync(new UpdatePassword($request->user(), $request->newPassword()));
$this->success('settings.password.updated');
diff --git a/app/Http/Controllers/Settings/ProfileController.php b/app/Http/Controllers/Settings/ProfileController.php
index af15a5547..dad816126 100644
--- a/app/Http/Controllers/Settings/ProfileController.php
+++ b/app/Http/Controllers/Settings/ProfileController.php
@@ -9,7 +9,6 @@
use App\Policies\UserPolicy;
use Illuminate\Auth\Middleware\Authenticate;
use Illuminate\Http\Request;
-use Illuminate\Support\Facades\Auth;
class ProfileController extends Controller
{
@@ -25,7 +24,7 @@ public function edit()
public function update(UpdateProfileRequest $request)
{
- $this->dispatchSync(UpdateProfile::fromRequest(Auth::user(), $request));
+ $this->dispatchSync(UpdateProfile::fromRequest($request->user(), $request));
$this->success('settings.updated');
diff --git a/app/Http/Controllers/Settings/UnblockUserController.php b/app/Http/Controllers/Settings/UnblockUserController.php
new file mode 100644
index 000000000..624bfe7ee
--- /dev/null
+++ b/app/Http/Controllers/Settings/UnblockUserController.php
@@ -0,0 +1,26 @@
+middleware(Authenticate::class);
+ }
+
+ public function __invoke(Request $request, User $user)
+ {
+ $this->dispatchSync(new UnblockUser($request->user(), $user));
+
+ $this->success('settings.user.unblocked');
+
+ return redirect()->route('settings.profile');
+ }
+}
diff --git a/app/Http/Livewire/ListBlockedUsers.php b/app/Http/Livewire/ListBlockedUsers.php
deleted file mode 100644
index 812172002..000000000
--- a/app/Http/Livewire/ListBlockedUsers.php
+++ /dev/null
@@ -1,56 +0,0 @@
-userId = $user->getKey();
- }
-
- public function getBlockedUsersProperty()
- {
- return User::find($this->userId)->blockedUsers;
- }
-
- public function getPotentiallyBlockedUsersProperty()
- {
- return User::query()
- ->whereKeyNot($this->userId)
- ->whereRaw('username like ? escape ?', ["%{$this->blockedUsername}%", '\\'])
- ->whereNotIn('id', User::find($this->userId)->blockedUsers->pluck('id'))
- ->get();
- }
-
- public function addBlockedUser()
- {
- $this->validate([
- 'blockedUsername' => [
- 'required',
- Rule::exists('users', 'username')
- ->whereNotIn('id', [$this->userId]),
- ],
- ]);
-
- $user = User::query()->where('username', $this->blockedUsername)->first();
- User::find($this->userId)->blockedUsers()->attach($user->getKey());
-
- $this->reset('blockedUsername');
- }
-
- public function removeBlockedUser($username)
- {
- $blockedUser = User::findByUsername($username);
- User::find($this->userId)->blockedUsers()->detach($blockedUser->getKey());
-
- $this->reset('blockedUsername');
- }
-}
diff --git a/app/Jobs/BlockUser.php b/app/Jobs/BlockUser.php
new file mode 100644
index 000000000..b9545f171
--- /dev/null
+++ b/app/Jobs/BlockUser.php
@@ -0,0 +1,17 @@
+user->blockedUsers()->attach($this->blockedUser);
+ }
+}
diff --git a/app/Jobs/UnblockUser.php b/app/Jobs/UnblockUser.php
new file mode 100644
index 000000000..339ed54c4
--- /dev/null
+++ b/app/Jobs/UnblockUser.php
@@ -0,0 +1,17 @@
+user->blockedUsers()->detach($this->blockedUser);
+ }
+}
diff --git a/database/migrations/2022_06_14_072001_create_blocked_users_table.php b/database/migrations/2022_06_14_072001_create_blocked_users_table.php
index 733ae69cc..3ff2aba3e 100644
--- a/database/migrations/2022_06_14_072001_create_blocked_users_table.php
+++ b/database/migrations/2022_06_14_072001_create_blocked_users_table.php
@@ -10,9 +10,9 @@ public function up()
{
Schema::create('blocked_users', function (Blueprint $table) {
$table->id();
- $table->unsignedInteger('user_id')->nullable();
+ $table->unsignedInteger('user_id');
$table->foreign('user_id')->references('id')->on('users')->cascadeOnDelete();
- $table->unsignedInteger('blocked_user_id')->nullable();
+ $table->unsignedInteger('blocked_user_id');
$table->foreign('blocked_user_id')->references('id')->on('users')->cascadeOnDelete();
});
}
diff --git a/database/seeders/UserSeeder.php b/database/seeders/UserSeeder.php
index bbe8542c3..cd0e921fa 100644
--- a/database/seeders/UserSeeder.php
+++ b/database/seeders/UserSeeder.php
@@ -13,7 +13,7 @@ class UserSeeder extends Seeder
{
public function run()
{
- User::factory()->createQuietly([
+ $admin = User::factory()->createQuietly([
'name' => 'Test User',
'email' => 'test@example.com',
'username' => 'testing',
@@ -59,5 +59,8 @@ public function run()
->inRandomOrder()
->take(4)
->update(['is_pinned' => true]);
+
+ // Block some users...
+ $admin->blockedUsers()->sync(range(20, 24));
}
}
diff --git a/lang/en/settings.php b/lang/en/settings.php
index 63aaedad1..f4b8fab69 100644
--- a/lang/en/settings.php
+++ b/lang/en/settings.php
@@ -5,6 +5,8 @@
'updated' => 'Settings successfully saved! If you changed your email address you\'ll receive an email address to re-confirm it.',
'deleted' => 'Account was successfully removed.',
'password.updated' => 'Password successfully changed!',
+ 'user.blocked' => 'User successfully blocked.',
+ 'user.unblocked' => 'User successfully unblocked.',
'api_token' => [
'created' => 'API token created! Please copy the following token as it will not be shown again:',
'deleted' => 'API token successfully removed.',
diff --git a/resources/views/layouts/_nav.blade.php b/resources/views/layouts/_nav.blade.php
index 002e361ff..489a0fad9 100644
--- a/resources/views/layouts/_nav.blade.php
+++ b/resources/views/layouts/_nav.blade.php
@@ -184,7 +184,7 @@
@else
-
-
+
@@ -193,9 +193,9 @@
-
+
-
+