Merge pull request #1535 from pixelfed/frontend-ui-refactor

Fix regression in comment mutes/blocks
pull/1581/head
daniel 7 years ago committed by GitHub
commit b1dc74f760
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -13,6 +13,7 @@ use App\Jobs\StatusPipeline\NewStatusPipeline;
use App\Util\Lexer\Autolink; use App\Util\Lexer\Autolink;
use App\Profile; use App\Profile;
use App\Status; use App\Status;
use App\UserFilter;
use League\Fractal; use League\Fractal;
use App\Transformer\Api\StatusTransformer; use App\Transformer\Api\StatusTransformer;
use League\Fractal\Serializer\ArraySerializer; use League\Fractal\Serializer\ArraySerializer;
@ -57,6 +58,16 @@ class CommentController extends Controller
return; 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) { $reply = DB::transaction(function() use($comment, $status, $profile) {
$autolink = Autolink::create()->autolink($comment); $autolink = Autolink::create()->autolink($comment);
$reply = new Status(); $reply = new Status();

@ -113,10 +113,22 @@ class PublicApiController extends Controller
$profile = Profile::whereUsername($username)->whereNull('status')->firstOrFail(); $profile = Profile::whereUsername($username)->whereNull('status')->firstOrFail();
$status = Status::whereProfileId($profile->id)->whereCommentsDisabled(false)->findOrFail($postId); $status = Status::whereProfileId($profile->id)->whereCommentsDisabled(false)->findOrFail($postId);
$this->scopeCheck($profile, $status); $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') || $request->filled('max_id')) {
if($request->filled('min_id')) { if($request->filled('min_id')) {
$replies = $status->comments() $replies = $status->comments()
->whereNull('reblog_of_id') ->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') ->select('id', 'caption', 'is_nsfw', 'rendered', 'profile_id', 'in_reply_to_id', 'type', 'reply_count', 'created_at')
->where('id', '>=', $request->min_id) ->where('id', '>=', $request->min_id)
->orderBy('id', 'desc') ->orderBy('id', 'desc')
@ -125,6 +137,7 @@ class PublicApiController extends Controller
if($request->filled('max_id')) { if($request->filled('max_id')) {
$replies = $status->comments() $replies = $status->comments()
->whereNull('reblog_of_id') ->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') ->select('id', 'caption', 'is_nsfw', 'rendered', 'profile_id', 'in_reply_to_id', 'type', 'reply_count', 'created_at')
->where('id', '<=', $request->max_id) ->where('id', '<=', $request->max_id)
->orderBy('id', 'desc') ->orderBy('id', 'desc')
@ -133,6 +146,7 @@ class PublicApiController extends Controller
} else { } else {
$replies = $status->comments() $replies = $status->comments()
->whereNull('reblog_of_id') ->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') ->select('id', 'caption', 'is_nsfw', 'rendered', 'profile_id', 'in_reply_to_id', 'type', 'reply_count', 'created_at')
->orderBy('id', 'desc') ->orderBy('id', 'desc')
->paginate($limit); ->paginate($limit);

@ -4,7 +4,8 @@ namespace App\Jobs\CommentPipeline;
use App\{ use App\{
Notification, Notification,
Status Status,
UserFilter
}; };
use App\Services\NotificationService; use App\Services\NotificationService;
use DB, Cache, Log, Redis; use DB, Cache, Log, Redis;
@ -56,6 +57,15 @@ class CommentPipeline implements ShouldQueue
if ($actor->id === $target->id || $status->comments_disabled == true) { if ($actor->id === $target->id || $status->comments_disabled == true) {
return 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) { DB::transaction(function() use($target, $actor, $comment) {
$notification = new Notification(); $notification = new Notification();

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -17,10 +17,10 @@
"/js/hashtag.js": "/js/hashtag.js?id=b4ffe6499880acf0591c", "/js/hashtag.js": "/js/hashtag.js?id=b4ffe6499880acf0591c",
"/js/loops.js": "/js/loops.js?id=214f31fc6c2d990487d8", "/js/loops.js": "/js/loops.js?id=214f31fc6c2d990487d8",
"/js/mode-dot.js": "/js/mode-dot.js?id=8224e306cf53e3336620", "/js/mode-dot.js": "/js/mode-dot.js?id=8224e306cf53e3336620",
"/js/profile.js": "/js/profile.js?id=61a9ed24eae58ba628bf", "/js/profile.js": "/js/profile.js?id=36634151f0495f1ead50",
"/js/quill.js": "/js/quill.js?id=9edfe94c043a1bc68860", "/js/quill.js": "/js/quill.js?id=9edfe94c043a1bc68860",
"/js/search.js": "/js/search.js?id=b1bd588d07e682f8fce5", "/js/search.js": "/js/search.js?id=b1bd588d07e682f8fce5",
"/js/status.js": "/js/status.js?id=248bb6c2bec534e81503", "/js/status.js": "/js/status.js?id=88ff0424ea5962941336",
"/js/theme-monokai.js": "/js/theme-monokai.js?id=344fb8527bb66574e4cd", "/js/theme-monokai.js": "/js/theme-monokai.js?id=344fb8527bb66574e4cd",
"/js/timeline.js": "/js/timeline.js?id=b894c6fe644d16ffc330" "/js/timeline.js": "/js/timeline.js?id=3662e7d43abcaae71f3b"
} }

@ -12,8 +12,8 @@
<a class="dropdown-item font-weight-bold" :href="reportUrl(status)">Report</a> <a class="dropdown-item font-weight-bold" :href="reportUrl(status)">Report</a>
</span> </span>
<span v-if="statusOwner(status) == true"> <span v-if="statusOwner(status) == true">
<a class="dropdown-item font-weight-bold text-decoration-none" v-on:click="muteProfile(status)">Mute Profile</a> <a class="dropdown-item font-weight-bold text-decoration-none" @click.prevent="muteProfile(status)">Mute Profile</a>
<a class="dropdown-item font-weight-bold text-decoration-none" v-on:click="blockProfile(status)">Block Profile</a> <a class="dropdown-item font-weight-bold text-decoration-none" @click.prevent="blockProfile(status)">Block Profile</a>
</span> </span>
<span v-if="profile.is_admin == true"> <span v-if="profile.is_admin == true">
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
@ -187,6 +187,36 @@
}); });
break; break;
} }
},
muteProfile(status) {
if($('body').hasClass('loggedIn') == false) {
return;
}
axios.post('/i/mute', {
type: 'user',
item: status.account.id
}).then(res => {
swal('Success', 'You have successfully muted ' + status.account.acct, 'success');
}).catch(err => {
swal('Error', 'Something went wrong. Please try again later.', 'error');
});
},
blockProfile(status) {
if($('body').hasClass('loggedIn') == false) {
return;
}
axios.post('/i/block', {
type: 'user',
item: status.account.id
}).then(res => {
swal('Success', 'You have successfully blocked ' + status.account.acct, 'success');
}).catch(err => {
swal('Error', 'Something went wrong. Please try again later.', 'error');
});
} }
} }
} }

Loading…
Cancel
Save