Вход Регистрация
Файл: library/XenForo/AttachmentHandler/Post.php
Строк: 209
<?php

/**
 * Post-specific attachment handler.
 *
 * @package XenForo_Attachment
 */
class XenForo_AttachmentHandler_Post extends XenForo_AttachmentHandler_Abstract
{
    protected 
$_postModel null;

    
/**
     * Key of primary content in content data array.
     *
     * @var string
     */
    
protected $_contentIdKey 'post_id';

    
/**
     * Route to get to a post
     *
     * @var string
     */
    
protected $_contentRoute 'posts';

    
/**
     * Name of the phrase that describes the conversation_message content type
     *
     * @var string
     */
    
protected $_contentTypePhraseKey 'post';

    
/**
     * Determines if attachments and be uploaded and managed in this context.
     *
     * @see XenForo_AttachmentHandler_Abstract::_canUploadAndManageAttachments()
     */
    
protected function _canUploadAndManageAttachments(array $contentData, array $viewingUser)
    {
        
$postModel $this->_getPostModel();

        if (!empty(
$contentData['post_id']))
        {
            
$post $postModel->getPostById($contentData['post_id']);
            if (
$post)
            {
                
$contentData['thread_id'] = $post['thread_id'];
            }
        }

        if (!empty(
$contentData['thread_id']))
        {
            
$thread XenForo_Model::create('XenForo_Model_Thread')->getThreadById($contentData['thread_id']);
            if (
$thread)
            {
                
$contentData['node_id'] = $thread['node_id'];
            }
        }

        if (!empty(
$contentData['node_id']))
        {
            
$forumModel XenForo_Model::create('XenForo_Model_Forum');
            
$forum $forumModel->getForumById($contentData['node_id'], array(
                
'permissionCombinationId' => $viewingUser['permission_combination_id']
            ));
            if (
$forum)
            {
                
$permissions XenForo_Permission::unserializePermissions($forum['node_permission_cache']);

                if (!empty(
$contentData['post_id']))
                {
                    
// editing a post, have to be able to edit this post first
                    
if (!$postModel->canViewPost($post$thread$forum$null$permissions$viewingUser)
                        || !
$postModel->canEditPost($post$thread$forum$null$permissions$viewingUser))
                    {
                        return 
false;
                    }
                }

                return (
                    
$forumModel->canViewForum($forum$null$permissions$viewingUser)
                    && 
$forumModel->canUploadAndManageAttachment($forum$null$permissions$viewingUser)
                );
            }
        }

        return 
false// invalid content data
    
}

    
/**
     * Determines if the specified attachment can be viewed.
     *
     * @see XenForo_AttachmentHandler_Abstract::_canViewAttachment()
     */
    
protected function _canViewAttachment(array $attachment, array $viewingUser)
    {
        
$postModel $this->_getPostModel();

        
$post $postModel->getPostById($attachment['content_id'], array(
            
'join' => XenForo_Model_Post::FETCH_THREAD XenForo_Model_Post::FETCH_FORUM XenForo_Model_Post::FETCH_USER,
            
'permissionCombinationId' => $viewingUser['permission_combination_id']
        ));
        if (!
$post)
        {
            return 
false;
        }

        
$permissions XenForo_Permission::unserializePermissions($post['node_permission_cache']);

        
$canViewPost $postModel->canViewPostAndContainer(
            
$post$post$post$null$permissions$viewingUser
        
);
        if (!
$canViewPost)
        {
            return 
false;
        }

        return 
$postModel->canViewAttachmentOnPost(
            
$post$post$post$null$permissions$viewingUser
        
);
    }

    
/**
     * Code to run after deleting an associated attachment.
     *
     * @see XenForo_AttachmentHandler_Abstract::attachmentPostDelete()
     */
    
public function attachmentPostDelete(array $attachmentZend_Db_Adapter_Abstract $db)
    {
        
$db->query('
            UPDATE xf_post
            SET attach_count = IF(attach_count > 0, attach_count - 1, 0)
            WHERE post_id = ?
        '
$attachment['content_id']);
    }

    
/**
     * @return XenForo_Model_Post
     */
    
protected function _getPostModel()
    {
        if (!
$this->_postModel)
        {
            
$this->_postModel XenForo_Model::create('XenForo_Model_Post');
        }

        return 
$this->_postModel;
    }

    
/**
     * @see XenForo_AttachmentHandler_Abstract::_getContentRoute()
     */
    
protected function _getContentRoute()
    {
        return 
'posts';
    }
}
Онлайн: 5
Реклама