diff --git a/app/Http/Controllers/PublicApiController.php b/app/Http/Controllers/PublicApiController.php index b97c8508d..2d6e4a770 100644 --- a/app/Http/Controllers/PublicApiController.php +++ b/app/Http/Controllers/PublicApiController.php @@ -110,7 +110,7 @@ class PublicApiController extends Controller ]); $limit = $request->limit ?? 10; $profile = Profile::whereUsername($username)->whereNull('status')->firstOrFail(); - $status = Status::whereProfileId($profile->id)->findOrFail($postId); + $status = Status::whereProfileId($profile->id)->whereCommentsDisabled(false)->findOrFail($postId); $this->scopeCheck($profile, $status); if($request->filled('min_id') || $request->filled('max_id')) { if($request->filled('min_id')) { @@ -578,9 +578,9 @@ class PublicApiController extends Controller $following = Follower::whereProfileId($pid)->pluck('following_id'); return $following->push($pid)->toArray(); }); - $visibility = true == in_array($profile->id, $following) ? ['public', 'unlisted', 'private'] : ['public']; + $visibility = true == in_array($profile->id, $following) ? ['public', 'unlisted', 'private'] : ['public', 'unlisted']; } else { - $visibility = ['public']; + $visibility = ['public', 'unlisted']; } } @@ -606,8 +606,8 @@ class PublicApiController extends Controller ->whereLocal(true) ->whereNull('uri') ->where('id', $dir, $id) - ->whereIn('visibility',$visibility) - ->orderBy('created_at', 'desc') + ->whereIn('visibility', $visibility) + ->latest() ->limit($limit) ->get(); diff --git a/app/Http/Controllers/StatusController.php b/app/Http/Controllers/StatusController.php index a77d6affc..9c5a34df8 100644 --- a/app/Http/Controllers/StatusController.php +++ b/app/Http/Controllers/StatusController.php @@ -12,8 +12,7 @@ use App\Status; use App\Transformer\ActivityPub\StatusTransformer; use App\Transformer\ActivityPub\Verb\Note; use App\User; -use Auth; -use Cache; +use Auth, Cache; use Illuminate\Http\Request; use League\Fractal; use App\Util\Media\Filter; @@ -22,6 +21,7 @@ class StatusController extends Controller { public function show(Request $request, $username, int $id) { + // $id = strlen($id) < 17 ? array_first(\Hashids::decode($id)) : $id; $user = Profile::whereNull('domain')->whereUsername($username)->firstOrFail(); if($user->status != null) { @@ -363,4 +363,27 @@ class StatusController extends Controller return 'photo:video:album'; } } + + public function toggleVisibility(Request $request) { + $this->authCheck(); + $this->validate($request, [ + 'item' => 'required|string|min:1|max:20', + 'disableComments' => 'required|boolean' + ]); + + $user = Auth::user(); + $id = $request->input('item'); + $state = $request->input('disableComments'); + + $status = Status::findOrFail($id); + + if($status->profile_id != $user->profile->id && $user->is_admin == false) { + abort(403); + } + + $status->comments_disabled = $status->comments_disabled == true ? false : true; + $status->save(); + + return response()->json([200]); + } } diff --git a/app/Jobs/CommentPipeline/CommentPipeline.php b/app/Jobs/CommentPipeline/CommentPipeline.php index bafe9bafd..4876138ce 100644 --- a/app/Jobs/CommentPipeline/CommentPipeline.php +++ b/app/Jobs/CommentPipeline/CommentPipeline.php @@ -51,7 +51,7 @@ class CommentPipeline implements ShouldQueue $target = $status->profile; $actor = $comment->profile; - if ($actor->id === $target->id) { + if ($actor->id === $target->id || $status->comments_disabled == true) { return true; } diff --git a/app/Transformer/Api/StatusTransformer.php b/app/Transformer/Api/StatusTransformer.php index d37f76105..e99768155 100644 --- a/app/Transformer/Api/StatusTransformer.php +++ b/app/Transformer/Api/StatusTransformer.php @@ -43,6 +43,8 @@ class StatusTransformer extends Fractal\TransformerAbstract 'pinned' => null, 'pf_type' => $status->type ?? $status->setType(), + 'reply_count' => $status->reply_count, + 'comments_disabled' => $status->comments_disabled ? true : false ]; } diff --git a/app/Util/ActivityPub/Helpers.php b/app/Util/ActivityPub/Helpers.php index 0b73a9072..5451a65ec 100644 --- a/app/Util/ActivityPub/Helpers.php +++ b/app/Util/ActivityPub/Helpers.php @@ -135,6 +135,10 @@ class Helpers { '127.0.0.1', 'localhost', '::1' ]; + if(mb_substr($url, 0, 8) !== 'https://') { + return false; + } + $valid = filter_var($url, FILTER_VALIDATE_URL); if(in_array(parse_url($valid, PHP_URL_HOST), $localhosts)) { diff --git a/resources/assets/js/components.js b/resources/assets/js/components.js index d5c83e895..570f77395 100644 --- a/resources/assets/js/components.js +++ b/resources/assets/js/components.js @@ -33,14 +33,14 @@ try { } window.filesize = require('filesize'); -window.Plyr = require('plyr'); +// window.Plyr = require('plyr'); import swal from 'sweetalert'; -require('./components/localstorage'); -require('./components/commentform'); +// require('./components/localstorage'); +// require('./components/commentform'); require('./components/searchform'); -require('./components/bookmarkform'); -require('./components/statusform'); +// require('./components/bookmarkform'); +// require('./components/statusform'); //require('./components/embed'); //require('./components/notifications'); @@ -63,51 +63,53 @@ require('./components/statusform'); // Initialize Notification Helper window.pixelfed.n = {}; -Vue.component( - 'photo-presenter', - require('./components/presenter/PhotoPresenter.vue').default -); +// Vue.component( +// 'photo-presenter', +// require('./components/presenter/PhotoPresenter.vue').default +// ); -Vue.component( - 'video-presenter', - require('./components/presenter/VideoPresenter.vue').default -); +// Vue.component( +// 'video-presenter', +// require('./components/presenter/VideoPresenter.vue').default +// ); -Vue.component( - 'photo-album-presenter', - require('./components/presenter/PhotoAlbumPresenter.vue').default -); +// Vue.component( +// 'photo-album-presenter', +// require('./components/presenter/PhotoAlbumPresenter.vue').default +// ); -Vue.component( - 'video-album-presenter', - require('./components/presenter/VideoAlbumPresenter.vue').default -); +// Vue.component( +// 'video-album-presenter', +// require('./components/presenter/VideoAlbumPresenter.vue').default +// ); -Vue.component( - 'mixed-album-presenter', - require('./components/presenter/MixedAlbumPresenter.vue').default -); +// Vue.component( +// 'mixed-album-presenter', +// require('./components/presenter/MixedAlbumPresenter.vue').default +// ); -Vue.component( - 'post-menu', - require('./components/PostMenu.vue').default -); +// Vue.component( +// 'post-menu', +// require('./components/PostMenu.vue').default +// ); -Vue.component( - 'passport-clients', - require('./components/passport/Clients.vue').default -); +// Vue.component( +// 'passport-clients', +// require('./components/passport/Clients.vue').default +// ); + +// Vue.component( +// 'passport-authorized-clients', +// require('./components/passport/AuthorizedClients.vue').default +// ); + +// Vue.component( +// 'passport-personal-access-tokens', +// require('./components/passport/PersonalAccessTokens.vue').default +// ); -Vue.component( - 'passport-authorized-clients', - require('./components/passport/AuthorizedClients.vue').default -); -Vue.component( - 'passport-personal-access-tokens', - require('./components/passport/PersonalAccessTokens.vue').default -); // Vue.component( // 'follow-suggestions', diff --git a/resources/assets/js/components/PostComments.vue b/resources/assets/js/components/PostComments.vue deleted file mode 100644 index 24a71b8f9..000000000 --- a/resources/assets/js/components/PostComments.vue +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/resources/assets/js/components/PostMenu.vue b/resources/assets/js/components/PostMenu.vue index 3405f403a..dc5ab0933 100644 --- a/resources/assets/js/components/PostMenu.vue +++ b/resources/assets/js/components/PostMenu.vue @@ -5,38 +5,38 @@