diff --git a/app/Http/Controllers/CommentController.php b/app/Http/Controllers/CommentController.php index 20685da00..7248b0a59 100644 --- a/app/Http/Controllers/CommentController.php +++ b/app/Http/Controllers/CommentController.php @@ -13,6 +13,7 @@ use App\Jobs\StatusPipeline\NewStatusPipeline; use App\Util\Lexer\Autolink; use App\Profile; use App\Status; +use App\UserFilter; use League\Fractal; use App\Transformer\Api\StatusTransformer; use League\Fractal\Serializer\ArraySerializer; @@ -57,6 +58,16 @@ class CommentController extends Controller return; } + $filtered = UserFilter::whereUserId($status->profile_id) + ->whereFilterableType('App\Profile') + ->whereIn('filter_type', ['mute', 'block']) + ->whereFilterableId($profile->id) + ->exists(); + + if($filtered == true) { + return; + } + $reply = DB::transaction(function() use($comment, $status, $profile) { $autolink = Autolink::create()->autolink($comment); $reply = new Status(); diff --git a/app/Http/Controllers/PublicApiController.php b/app/Http/Controllers/PublicApiController.php index bd22505e3..7d4e5c639 100644 --- a/app/Http/Controllers/PublicApiController.php +++ b/app/Http/Controllers/PublicApiController.php @@ -113,10 +113,22 @@ class PublicApiController extends Controller $profile = Profile::whereUsername($username)->whereNull('status')->firstOrFail(); $status = Status::whereProfileId($profile->id)->whereCommentsDisabled(false)->findOrFail($postId); $this->scopeCheck($profile, $status); + + if(Auth::check()) { + $pid = Auth::user()->profile->id; + $filtered = UserFilter::whereUserId($pid) + ->whereFilterableType('App\Profile') + ->whereIn('filter_type', ['mute', 'block']) + ->pluck('filterable_id')->toArray(); + } else { + $filtered = []; + } + if($request->filled('min_id') || $request->filled('max_id')) { if($request->filled('min_id')) { $replies = $status->comments() ->whereNull('reblog_of_id') + ->whereNotIn('profile_id', $filtered) ->select('id', 'caption', 'is_nsfw', 'rendered', 'profile_id', 'in_reply_to_id', 'type', 'reply_count', 'created_at') ->where('id', '>=', $request->min_id) ->orderBy('id', 'desc') @@ -125,6 +137,7 @@ class PublicApiController extends Controller if($request->filled('max_id')) { $replies = $status->comments() ->whereNull('reblog_of_id') + ->whereNotIn('profile_id', $filtered) ->select('id', 'caption', 'is_nsfw', 'rendered', 'profile_id', 'in_reply_to_id', 'type', 'reply_count', 'created_at') ->where('id', '<=', $request->max_id) ->orderBy('id', 'desc') @@ -133,6 +146,7 @@ class PublicApiController extends Controller } else { $replies = $status->comments() ->whereNull('reblog_of_id') + ->whereNotIn('profile_id', $filtered) ->select('id', 'caption', 'is_nsfw', 'rendered', 'profile_id', 'in_reply_to_id', 'type', 'reply_count', 'created_at') ->orderBy('id', 'desc') ->paginate($limit); diff --git a/app/Jobs/CommentPipeline/CommentPipeline.php b/app/Jobs/CommentPipeline/CommentPipeline.php index db0951181..b028bdae7 100644 --- a/app/Jobs/CommentPipeline/CommentPipeline.php +++ b/app/Jobs/CommentPipeline/CommentPipeline.php @@ -4,7 +4,8 @@ namespace App\Jobs\CommentPipeline; use App\{ Notification, - Status + Status, + UserFilter }; use App\Services\NotificationService; use DB, Cache, Log, Redis; @@ -56,6 +57,15 @@ class CommentPipeline implements ShouldQueue if ($actor->id === $target->id || $status->comments_disabled == true) { return true; } + $filtered = UserFilter::whereUserId($target->id) + ->whereFilterableType('App\Profile') + ->whereIn('filter_type', ['mute', 'block']) + ->whereFilterableId($actor->id) + ->exists(); + + if($filtered == true) { + return; + } DB::transaction(function() use($target, $actor, $comment) { $notification = new Notification();