Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Finder/Post.php
<?php

namespace XF\Finder;

use
XF\Mvc\Entity\Finder;

use function
intval;

class
Post extends Finder
{
    public function
inThread(\XF\Entity\Thread $thread, array $limits = [])
    {
       
$limits = array_replace([
           
'visibility' => true,
           
'allowOwnPending' => true
       
], $limits);

       
$this->where('thread_id', $thread->thread_id);

        if (
$limits['visibility'])
        {
           
$this->applyVisibilityChecksInThread($thread, $limits['allowOwnPending']);
        }

        return
$this;
    }

    public function
applyVisibilityChecksInThread(\XF\Entity\Thread $thread, $allowOwnPending = true)
    {
       
$conditions = [];
       
$viewableStates = ['visible'];

        if (
$thread->canViewDeletedPosts())
        {
           
$viewableStates[] = 'deleted';

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

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

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

       
$this->whereOr($conditions);

        return
$this;
    }

    public function
onPage($page, $perPage = null)
    {
       
$page = max(1, intval($page));
        if (
$perPage === null)
        {
           
$perPage = $this->app()->options()->messagesPerPage;
        }
       
$perPage = max(1, intval($perPage));

       
$start = ($page - 1) * $perPage;
       
$end = $start + $perPage;

       
$this->where('position', '>=', $start)->where('position', '<', $end);

        return
$this;
    }

    public function
newerThan($date)
    {
       
$this->where('post_date', '>', $date);

        return
$this;
    }

    public function
orderByDate($direction = 'ASC')
    {
       
$this->setDefaultOrder([
            [
'position', $direction],
            [
'post_date', $direction]
        ]);

        return
$this;
    }

    public function
skipIgnored(\XF\Entity\User $user = null)
    {
        if (!
$user)
        {
           
$user = \XF::visitor();
        }

        if (!
$user->user_id)
        {
            return
$this;
        }

        if (
$user->Profile && $user->Profile->ignored)
        {
           
$this->where('user_id', '<>', array_keys($user->Profile->ignored));
        }

        return
$this;
    }

    public function
isNotFirstPost()
    {
       
$this->where($this->expression(
           
'%s <> %s',
           
'Thread.first_post_id',
           
'post_id'
       
));

        return
$this;
    }

   
/**
     * @deprecated Use with('full')
     *
     * @return $this
     */
   
public function forFullView()
    {
       
$this->with('full');

        return
$this;
    }
}