Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Widget/NewProfilePosts.php
<?php

namespace XF\Widget;

class
NewProfilePosts extends AbstractWidget
{
    protected
$defaultOptions = [
       
'limit' => 5,
       
'style' => 'simple',
       
'filter' => 'latest'
   
];

    public function
render()
    {
       
$visitor = \XF::visitor();

        if (!
$visitor->canViewProfilePosts())
        {
            return
'';
        }

       
$options = $this->options;
       
$limit = $options['limit'];
       
$filter = $options['filter'];

        if (!
$visitor->user_id)
        {
           
$filter = 'latest';
        }

       
$router = $this->app->router('public');

       
/** @var \XF\Finder\ProfilePost $profilePostFinder */
       
$profilePostFinder = $this->finder('XF:ProfilePost');
       
$profilePostFinder
           
->with(['ProfileUser', 'ProfileUser.Privacy', 'User'])
            ->
where('message_state', 'visible')
            ->
order('post_date', 'DESC')
            ->
limit(max($limit * 2, 10));

        switch (
$filter)
        {
            default:
            case
'latest':
               
$title = \XF::phrase('widget.latest_profile_posts');
               
$link = $router->buildLink('whats-new/profile-posts', null, ['skip' => 1]);

               
$profilePostFinder->indexHint('USE', 'post_date');
                break;

            case
'followed':
               
$title = \XF::phrase('widget.latest_followed_profile_posts');
               
$link = $router->buildLink('whats-new/profile-posts', null, ['followed' => 1]);

               
$following = $visitor->Profile->following;
               
$following[] = $visitor->user_id;

               
$profilePostFinder->where('user_id', $following);
                break;
        }

       
/** @var \XF\Repository\Attachment $attachmentRepo */
       
$attachmentRepo = $this->repository('XF:Attachment');

       
$attachmentData = null;
        if (
$options['style'] == 'full')
        {
           
$profilePostFinder->with('fullProfile');

            if (
$visitor->canUploadAndManageAttachmentsOnProfile())
            {
               
$attachmentData = $attachmentRepo->getEditorData('profile_post', $visitor);
            }
        }

       
/** @var \XF\Entity\ProfilePost $profilePost */
       
foreach ($profilePosts = $profilePostFinder->fetch() AS $profilePostId => $profilePost)
        {
            if (!
$profilePost->canView()
                ||
$profilePost->isIgnored()
            )
            {
                unset(
$profilePosts[$profilePostId]);
            }
        }
       
$profilePosts = $profilePosts->slice(0, $limit, true);

       
$canViewAttachments = false;
       
$profilePostAttachData = [];
        foreach (
$profilePosts AS $profilePost)
        {
            if (!
$canViewAttachments && $profilePost->canViewAttachments())
            {
               
$canViewAttachments = true;
            }
            if (
$profilePost->canUploadAndManageAttachments())
            {
               
$profilePostAttachData[$profilePost->profile_post_id] = $attachmentRepo->getEditorData('profile_post_comment', $profilePost);
            }
        }

       
$viewParams = [
           
'title' => $this->getTitle() ?: $title,
           
'link' => $link,
           
'profilePosts' => $profilePosts,
           
'style' => $options['style'],
           
'filter' => $filter,

           
'attachmentData' => $attachmentData,
           
'canViewAttachments' => $canViewAttachments,
           
'profilePostAttachData' => $profilePostAttachData,
        ];
        return
$this->renderer('widget_new_profile_posts', $viewParams);
    }

    public function
verifyOptions(\XF\Http\Request $request, array &$options, &$error = null)
    {
       
$options = $request->filter([
           
'limit' => 'uint',
           
'style' => 'str',
           
'filter' => 'str'
       
]);
        if (
$options['limit'] < 1)
        {
           
$options['limit'] = 1;
        }

        return
true;
    }
}