Xenforo 2.1 Видимость модерируемых тем - PullRequest
0 голосов
/ 04 августа 2020

Итак, в Xenforo 2, когда ветка должна быть модерирована перед публикацией на publi c, пользователь, разместивший ветку, может ее увидеть, но через некоторое время она исчезнет. Я хочу, чтобы пользователь, разместивший ветку, всегда мог ее видеть, независимо от того, одобрен она или нет. Я знаю, что это где-то в этой функции, но не совсем уверен, как это сделать. Может быть, проверить, если текущий used_id = thread_starter_id или что-то в этом роде? Пожалуйста, помогите мне там, где это очень нужно.

public function inForum(\XF\Entity\Forum $forum, array $limits = [])
    {
        $limits = array_replace([
            'visibility' => true,
            'allowOwnPending' => false
        ], $limits);

        $this->where('node_id', $forum->node_id);

        $this->applyForumDefaultOrder($forum);
        
        if ($limits['visibility'])
        {   //it should be happening right here!
            $this->applyVisibilityChecksInForum($forum, $limits['allowOwnPending']);
        }

        return $this;
    }

И функция applyVisibilityChecksInForum:

public function applyVisibilityChecksInForum(\XF\Entity\Forum $forum, $allowOwnPending = false)
    {
        $conditions = [];
        $viewableStates = ['visible'];

        if ($forum->canViewDeletedThreads())
        {
            $viewableStates[] = 'deleted';

            $this->with('DeletionLog');
        }

        $visitor = \XF::visitor();
        
        if ($forum->canViewModeratedThreads())
        {
            $viewableStates[] = 'moderated';
        }
        else if ($visitor->user_id && $allowOwnPending)
        {
            $conditions[] = [
                'discussion_state' => 'moderated',
                'user_id' => $visitor->user_id
            ];
        }

        $conditions[] = ['discussion_state', $viewableStates];

        $this->whereOr($conditions);

        $visitor = \XF::visitor();
        
        if (!$visitor->hasNodePermission($forum->node_id, 'viewOthers'))
        {
            if ($visitor->user_id)
            {
                $this->where('user_id', $visitor->user_id);
            }
            else
            {
                $this->whereSql('1=0'); // force false immediately
            }
        }

        return $this;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...