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

/**
 * Abstract handler for content type-specific attachment behaviors.
 *
 * @package XenForo_Attachment
 */
abstract class XenForo_AttachmentHandler_Abstract
{
    
/**
     * The key of the content ID value in the content data array.
     * Must be overriden by children.
     *
     * @var string
     */
    
protected $_contentIdKey '';

    
/**
     * The route used to build a link to the content hosting attachment managed by this handler.
     * Example: posts use 'posts'
     * Must be overriden by children.
     *
     * @var string
     */
    
protected $_contentRoute '';

    
/**
     * The phrase key that names the content type for this attachment handler.
     * Examples: 'post'; 'conversation_message'
     * Must be overriden by children.
     *
     * @var string
     */
    
protected $_contentTypePhraseKey '';

    
/**
     * Determines if the specified user can upload new attachments or
     * manage existing ones. The content data may contain different type-specific
     * values in different situations. Eg, when posting a thread, only the node_id is
     * known; when posting a reply, the thread_id is know; when editing a post, the
     * post_id is known.
     *
     * @param array $contentData Type-specific params based on context
     * @param array $viewingUser Viewing user array
     *
     * @return boolean
     */
    
abstract protected function _canUploadAndManageAttachments(array $contentData, array $viewingUser);

    
/**
     * Determines if the specified user can view the given attachment.
     *
     * @param array $attachment Attachment to view
     * @param array $viewingUser Viewing user array
     *
     * @return boolean
     */
    
abstract protected function _canViewAttachment(array $attachment, array $viewingUser);

    
/**
     * Behavior to carry out after deleting an attachment (such as reducing an
     * attachment count on the content). This is only called when the attachment
     * has been associated with particular content (not just uploaded unassociated).
     *
     * @param array $attachment Attachment that has been deleted
     * @param Zend_Db_Adapter_Abstract $db DB object
     */
    
abstract public function attachmentPostDelete(array $attachmentZend_Db_Adapter_Abstract $db);

    
/**
     * Builds a link to the host content for an attachment
     *
     * @param array $attachment data - ideally containing everything necessary to build the content link
     * @param array $extraParams
     * @param boolean $skipPrepend
     *
     * @return string
     */
    
public function getContentLink(array $attachment, array $extraParams = array(), $skipPrepend false)
    {
        if (
$this->_contentRoute)
        {
            
$data $this->getContentDataFromContentId($attachment['content_id']);
            return 
XenForo_Link::buildPublicLink($this->_contentRoute$data$extraParams$skipPrepend);
        }

        return 
false;
    }

    
/**
     * Returns the phrase key of a phrase that names the content type managed by this handler.
     *
     * @return string
     */
    
public function getContentTypePhraseKey()
    {
        if (
$this->_contentTypePhraseKey)
        {
            return 
$this->_contentTypePhraseKey;
        }

        return 
'unknown';
    }

    
/**
     * Constructor.
     */
    
public function __construct()
    {
        if (!
$this->_contentIdKey)
        {
            throw new 
XenForo_Exception('Content ID key not specified.');
        }
    }

    
/**
     * Returns the maximum allowed attachments for this content type.
     *
     * @return integer|true If true, there is no limit
     */
    
public function getAttachmentCountLimit()
    {
        
$attachmentConstraints $this->getAttachmentConstraints();
        return (
$attachmentConstraints['count'] <= true $attachmentConstraints['count']);
    }

    
/**
     * Determines if the specified user can upload new attachments or
     * manage existing ones. The content data may contain different type-specific
     * values in different situations. Eg, when posting a thread, only the node_id is
     * known; when posting a reply, the thread_id is know; when editing a post, the
     * post_id is known.
     *
     * @param array $contentData Type-specific params based on context
     * @param array|null $viewingUser Viewing user array; null for visitor
     *
     * @return boolean
     */
    
final public function canUploadAndManageAttachments(array $contentData, array $viewingUser null)
    {
        
$this->standardizeViewingUserReference($viewingUser);
        if (!empty(
$contentData['content_id']))
        {
            
$contentData[$this->_contentIdKey] = $contentData['content_id'];
        }

        return 
$this->_canUploadAndManageAttachments($contentData$viewingUser);
    }

    
/**
     * Determines if the specified user can view the given attachment.
     *
     * @param array $attachment Attachment to view
     * @param array|null $viewingUser Viewing user array; null for visitor
     *
     * @return boolean
     */
    
final public function canViewAttachment(array $attachment, array $viewingUser null)
    {
        
$this->standardizeViewingUserReference($viewingUser);
        return 
$this->_canViewAttachment($attachment$viewingUser);
    }

    
/**
     * Gets the primary content ID from an array of content data, if provided.
     *
     * @param array $contentData Type-specific content data
     *
     * @return integer
     */
    
public function getContentIdFromContentData(array $contentData)
    {
        return (isset(
$contentData[$this->_contentIdKey]) ? $contentData[$this->_contentIdKey] : 0);
    }

    
/**
     * Builds a content data array. By default, this only contains only the primary content ID.
     *
     * @param integer $contentId
     *
     * @return array
     */
    
public function getContentDataFromContentId($contentId)
    {
        return array(
$this->_contentIdKey => $contentId);
    }

    
/**
     * Standardizes the viewing user array reference.
     *
     * @param array|null $viewingUser Viewing user array. Will be normalized.
     */
    
public function standardizeViewingUserReference(array &$viewingUser null)
    {
        if (!
is_array($viewingUser) || !isset($viewingUser['user_id']))
        {
            
$viewingUser XenForo_Visitor::getInstance()->toArray();
        }
    }

    
/**
     * Get attachment constraints for the current attachment content type
     *
     * @return array
     */
    
public function getAttachmentConstraints()
    {
        return 
XenForo_Model::create('XenForo_Model_Attachment')->getAttachmentConstraints();
    }
}
Онлайн: 3
Реклама