Вход Регистрация
Файл: library/XenForo/NewsFeedHandler/Discussion/Thread.php
Строк: 133
<?php

/**
 * Class to handle turning raw thread news feed events into renderable output
 *
 * @author kier
 *
 */
class XenForo_NewsFeedHandler_Discussion_Thread extends XenForo_NewsFeedHandler_Discussion
{
    
/**
     * @var XenForo_Model_Thread
     */
    
protected $_threadModel null;

    
/**
     * Fetches related content (threads) by IDs
     *
     * @param array $contentIds
     * @param XenForo_Model_NewsFeed $model
     * @param array $viewingUser Information about the viewing user (keys: user_id, permission_combination_id, permissions)
     *
     * @return array
     */
    
public function getContentByIds(array $contentIds$model, array $viewingUser)
    {
        
$threadModel $this->_getThreadModel();

        
$threads $threadModel->getThreadsByIds($contentIds, array(
            
'join' => XenForo_Model_Thread::FETCH_FORUM XenForo_Model_Thread::FETCH_FIRSTPOST,
            
'permissionCombinationId' => $viewingUser['permission_combination_id']
        ));
        
$threads $model->unserializePermissionsInList($threads'node_permission_cache');

        
$hasAttachments = array();

        foreach (
$threads AS &$thread)
        {
            
$thread['hasPreview'] = $threadModel->hasPreview($thread$thread$thread['permissions'], $viewingUser);

            if (
$thread['attach_count'])
            {
                
$hasAttachments[$thread['first_post_id']] = $thread['thread_id'];
                
$thread['attachments'] = array();
            }
        }

        if (
$hasAttachments)
        {
            
$attachmentModel XenForo_Model::create('XenForo_Model_Attachment');

            foreach (
$attachmentModel->getAttachmentsByContentIds('post'array_keys($hasAttachments)) AS $attachmentId => $attachment)
            {
                
$threadId $hasAttachments[$attachment['content_id']];
                
$threads[$threadId]['attachments'][$attachmentId] = $attachmentModel->prepareAttachment($attachment);
            }
        }

        return 
$threads;
    }

    
/**
     * Determines if the given news feed item is viewable.
     *
     * @param array $item
     * @param mixed $content
     * @param array $viewingUser
     *
     * @return boolean
     */
    
public function canViewNewsFeedItem(array $item$content, array $viewingUser)
    {
        return 
$this->_getThreadModel()->canViewThreadAndContainer(
            
$content$content$null$content['permissions'], $viewingUser
        
);
    }

    
/**
     * Returns the primary key names for threads
     *
     * @return array thread_id, forum_id
     */
    
protected function _getContentPrimaryKeynames()
    {
        return array(
            
'thread_id''node_id''node_title''node_name''prefix_id',
            
'message''hasPreview''attach_count''attachments',
            
'first_post_id'
        
);
    }

    
/**
     * @return XenForo_Model_Thread
     */
    
protected function _getThreadModel()
    {
        if (!
$this->_threadModel)
        {
            
$this->_threadModel XenForo_Model::create('XenForo_Model_Thread');
        }

        return 
$this->_threadModel;
    }
}
Онлайн: 2
Реклама