Commit d5ef2ab8 authored by Yassine Doghri's avatar Yassine Doghri
Browse files

fix(fediverse): add is_private field to posts to flag private posts and hide them from public views

parent 08a3779e
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -66,6 +66,11 @@ class PostController extends FediversePostController

        $this->post = $post;

        // show 404 if post is private
        if ($this->post->is_private && ! can_user_interact()) {
            throw PageNotFoundException::forPageNotFound();
        }

        unset($params[0]);
        unset($params[1]);

@@ -183,6 +188,7 @@ class PostController extends FediversePostController
            'actor_id'       => interact_as_actor_id(),
            'in_reply_to_id' => $this->post->id,
            'message'        => $validData['message'],
            'is_private'     => $this->post->is_private,
            'published_at'   => Time::now(),
            'created_by'     => user_id(),
        ]);
+1 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ class Post extends FediversePost
        'episode_id'       => '?integer',
        'message'          => 'string',
        'message_html'     => 'string',
        'is_private'       => 'boolean',
        'favourites_count' => 'integer',
        'reblogs_count'    => 'integer',
        'replies_count'    => 'integer',
+3 −0
Original line number Diff line number Diff line
@@ -37,4 +37,7 @@ return [
    'block_actor' => 'Block user @{actorUsername}',
    'block_domain' => 'Block domain @{actorDomain}',
    'delete' => 'Delete post',
    'is_public' => 'Post is public',
    'is_private' => 'Post is private',
    'cannot_reblog' => 'This private post cannot be shared.',
];
+10 −4
Original line number Diff line number Diff line
@@ -201,7 +201,7 @@ class EpisodeCommentModel extends UuidModel
    {
        // TODO: merge with replies from posts linked to episode linked
        $episodeCommentsBuilder = $this->builder();
        $episodeComments = $episodeCommentsBuilder->select('*, 0 as is_from_post')
        $episodeComments = $episodeCommentsBuilder->select('*, 0 as is_private, 0 as is_from_post')
            ->where([
                'episode_id'     => $episodeId,
                'in_reply_to_id' => null,
@@ -211,7 +211,7 @@ class EpisodeCommentModel extends UuidModel
        $postModel = new PostModel();
        $episodePostsRepliesBuilder = $postModel->builder();
        $episodePostsReplies = $episodePostsRepliesBuilder->select(
            'id, uri, episode_id, actor_id, in_reply_to_id, message, message_html, favourites_count as likes_count, replies_count, published_at as created_at, created_by, 1 as is_from_post'
            'id, uri, episode_id, actor_id, in_reply_to_id, message, message_html, is_private, favourites_count as likes_count, replies_count, published_at as created_at, created_by, 1 as is_from_post'
        )
            ->whereIn('in_reply_to_id', static function (BaseBuilder $builder) use (&$episodeId): BaseBuilder {
                return $builder->select('id')
@@ -221,8 +221,14 @@ class EpisodeCommentModel extends UuidModel
                        'in_reply_to_id' => null,
                    ]);
            })
            ->where('`created_at` <= UTC_TIMESTAMP()', null, false)
            ->getCompiledSelect();
            ->where('`created_at` <= UTC_TIMESTAMP()', null, false);

        // do not get private replies if public
        if (! can_user_interact()) {
            $episodePostsRepliesBuilder->where('is_private', false);
        }

        $episodePostsReplies = $episodePostsRepliesBuilder->getCompiledSelect();

        /** @var BaseResult $allEpisodeComments */
        $allEpisodeComments = $this->db->query(
+1 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ class PostModel extends FediversePostModel
        'episode_id',
        'message',
        'message_html',
        'is_private',
        'favourites_count',
        'reblogs_count',
        'replies_count',
Loading