Вход Регистрация
Файл: base-sys/base/components/comments.php
Строк: 420
<?php

class BASE_CMP_Comments extends PEEP_Component
{
    
/**
     * @var BASE_CommentsParams
     */
    
protected $params;
    protected 
$batchData;
    protected 
$staticData;
    protected 
$id;
    protected 
$cmpContextId;
    
//protected $formName;
    
protected $isAuthorized;

    
/**
     * Constructor.
     *
     * @param BASE_CommentsParams $params
     */
    
public function __constructBASE_CommentsParams $params )
    {
        
parent::__construct();
        
$this->params $params;
        
$this->batchData $params->getBatchData();
        
$this->staticData = empty($this->batchData['_static']) ? array() : $this->batchData['_static'];
        
$this->batchData = isset($this->batchData[$params->getEntityType()][$params->getEntityId()]) ? $this->batchData[$params->getEntityType()][$params->getEntityId()] : array();

        
srand(time());
        
$this->id $params->getEntityType() . $params->getEntityId() . rand(110000);
        
$this->cmpContextId "comments-$this->id";
        
$this->assign('cmpContext'$this->cmpContextId);
        
$this->assign('wrapInBox'$params->getWrapInBox());
        
$this->assign('topList'in_array($params->getDisplayType(), array(BASE_CommentsParams::DISPLAY_TYPE_WITH_LOAD_LISTBASE_CommentsParams::DISPLAY_TYPE_WITH_LOAD_LIST_MINI)));
        
$this->assign('bottomList'$params->getDisplayType() == BASE_CommentsParams::DISPLAY_TYPE_WITH_PAGING);
        
$this->assign('mini'$params->getDisplayType() == BASE_CommentsParams::DISPLAY_TYPE_WITH_LOAD_LIST_MINI);

        
$this->isAuthorized PEEP::getUser()->isAuthorized($params->getPluginKey(), 'add_comment') && $params->getAddComment();

        if ( !
$this->isAuthorized )
        {
            
$errorMessage $params->getErrorMessage();

            if ( empty(
$errorMessage) )
            {
                
$status BOL_AuthorizationService::getInstance()->getActionStatus($params->getPluginKey(), 'add_comment');
                
$errorMessage PEEP::getUser()->isAuthenticated() ? $status['msg'] : PEEP::getLanguage()->text('base''comments_add_login_message');
            }

            
$this->assign('authErrorMessage'$errorMessage);
        }

        
$this->initForm();
    }

    public function 
initForm()
    {
        
$jsParams = array(
            
'entityType' => $this->params->getEntityType(),
            
'entityId' => $this->params->getEntityId(),
            
'pluginKey' => $this->params->getPluginKey(),
            
'contextId' => $this->cmpContextId,
            
'userAuthorized' => $this->isAuthorized,
            
'customId' => $this->params->getCustomId()
        );

        if ( 
$this->isAuthorized )
        {
            
PEEP::getDocument()->addScript(PEEP::getPluginManager()->getPlugin('base')->getStaticJsUrl() . 'jquery.autosize.js');
            
$taId 'cta' $this->id;
            
$attchId 'attch' $this->id;
            
$attchUid BOL_CommentService::getInstance()->generateAttachmentUid($this->params->getEntityType(), $this->params->getEntityId());

            
$jsParams['ownerId'] = $this->params->getOwnerId();
            
$jsParams['cCount'] = isset($this->batchData['countOnPage']) ? $this->batchData['countOnPage'] : $this->params->getCommentCountOnPage();
            
$jsParams['initialCount'] = $this->params->getInitialCommentsCount();
            
$jsParams['loadMoreCount'] = $this->params->getLoadMoreCount();
            
$jsParams['countOnPage'] = $this->params->getCommentCountOnPage();
            
$jsParams['uid'] = $this->id;
            
$jsParams['addUrl'] = PEEP::getRouter()->urlFor('BASE_CTRL_Comments''addComment');
            
$jsParams['displayType'] = $this->params->getDisplayType();
            
$jsParams['textAreaId'] = $taId;
            
$jsParams['attchId'] = $attchId;
            
$jsParams['attchUid'] = $attchUid;
            
$jsParams['enableSubmit'] = true;
            
$jsParams['mediaAllowed'] = BOL_TextFormatService::getInstance()->isCommentsRichMediaAllowed();
            
$jsParams['labels'] = array(
                
'emptyCommentMsg' => PEEP::getLanguage()->text('base''empty_comment_error_msg'),
                
'disabledSubmit' => PEEP::getLanguage()->text('base''submit_disabled_error_msg'),
                
'attachmentLoading' => PEEP::getLanguage()->text('base''submit_attachment_not_loaded'),
            );

            if ( !empty(
$this->staticData['currentUserInfo']) )
            {
                
$userInfoToAssign $this->staticData['currentUserInfo'];
            }
            else
            {
                
$currentUserInfo BOL_AvatarService::getInstance()->getDataForUserAvatars(array(PEEP::getUser()->getId()));
                
$userInfoToAssign $currentUserInfo[PEEP::getUser()->getId()];
            }

            
$buttonContId 'bCcont' $this->id;

            if ( 
BOL_TextFormatService::getInstance()->isCommentsRichMediaAllowed() )
            {
                
$this->addComponent('attch', new BASE_CLASS_Attachment($this->params->getPluginKey(), $attchUid$buttonContId));
            }

            
$this->assign('buttonContId'$buttonContId);
            
$this->assign('currentUserInfo'$userInfoToAssign);
            
$this->assign('formCmp'true);
            
$this->assign('taId'$taId);
            
$this->assign('attchId'$attchId);
        }

        
PEEP::getDocument()->addOnloadScript("new PeepComments(" json_encode($jsParams) . ");");

        
$this->assign('displayType'$this->params->getDisplayType());

        
// add comment list cmp
        
$this->addComponent('commentList', new BASE_CMP_CommentsList($this->params$this->id));
    }
}

final class 
BASE_CommentsParams
{
    
    const 
DISPLAY_TYPE_BOTTOM_FORM_WITH_FULL_LIST 1;
    const 
DISPLAY_TYPE_TOP_FORM_WITH_PAGING 2;
    const 
DISPLAY_TYPE_BOTTOM_FORM_WITH_PARTIAL_LIST 3;
    const 
DISPLAY_TYPE_BOTTOM_FORM_WITH_PARTIAL_LIST_AND_MINI_IPC 4;
    const 
DISPLAY_TYPE_WITH_PAGING 10;
    const 
DISPLAY_TYPE_WITH_LOAD_LIST 20;
    const 
DISPLAY_TYPE_WITH_LOAD_LIST_MINI 30;

    private 
$pluginKey;
    private 
$entityType;
    private 
$entityId;
    private 
$ownerId;
    private 
$displayType;
    private 
$commentCountOnPage;
    private 
$addComment;
    private 
$wrapInBox;
    private 
$batchData;
    private 
$errorMessage;
    private 
$initialCommentsCount;
    private 
$loadMoreCount;
    private 
$showEmptyList;
    private 
$customId;
    private 
$commentPreviewMaxCharCount;

    
/**
     * Constructor.
     *
     * @param string $pluginKey
     * @param string $entityType
     */
    
public function __construct$pluginKey$entityType )
    {
        
$this->pluginKey trim($pluginKey);
        
$this->entityType trim($entityType);
        
$this->entityId 1;
        
$this->displayType self::DISPLAY_TYPE_WITH_LOAD_LIST;
        
$this->addComment true;
        
$this->wrapInBox true;
        
$this->initialCommentsCount 10;
        
$this->loadMoreCount 10;
        
$this->commentCountOnPage 10;
        
$this->showEmptyList true;
        
$this->commentPreviewMaxCharCount 200;
    }

    
/**
     * @return string
     */
    
public function getPluginKey()
    {
        return 
$this->pluginKey;
    }

    
/**
     * @return string
     */
    
public function getEntityType()
    {
        return 
$this->entityType;
    }

    
/**
     * @return integer
     */
    
public function getEntityId()
    {
        return 
$this->entityId;
    }

    
/**
     *
     * @param integer $entityId
     * @return BASE_CommentsParams
     */
    
public function setEntityId$entityId )
    {
        
$this->entityId = (int) $entityId;
        return 
$this;
    }

    
/**
     * @return integer
     */
    
public function getOwnerId()
    {
        return 
$this->ownerId;
    }

    
/**
     * @param integer $ownerId
     * @return BASE_CommentsParams
     */
    
public function setOwnerId$ownerId )
    {
        
$this->ownerId = (int) $ownerId;
        return 
$this;
    }

    
/**
     * @return integer
     */
    
public function getDisplayType()
    {
        return 
$this->displayType;
    }

    
/**
     * @param integer $displayType
     * @return BASE_CommentsParams
     */
    
public function setDisplayType$displayType )
    {
        if ( 
in_array($displayType, array(self::DISPLAY_TYPE_WITH_PAGINGself::DISPLAY_TYPE_WITH_LOAD_LISTself::DISPLAY_TYPE_WITH_LOAD_LIST_MINI)) )
        {
            
$this->displayType = (int) $displayType;
            return 
$this;
        }

        switch ( 
$displayType )
        {
            case 
self::DISPLAY_TYPE_BOTTOM_FORM_WITH_FULL_LIST:
            case 
self::DISPLAY_TYPE_BOTTOM_FORM_WITH_PARTIAL_LIST:
                
$this->displayType self::DISPLAY_TYPE_WITH_LOAD_LIST;
                break;

            case 
self::DISPLAY_TYPE_BOTTOM_FORM_WITH_PARTIAL_LIST_AND_MINI_IPC:
                
$this->displayType self::DISPLAY_TYPE_WITH_LOAD_LIST_MINI;
                break;

            case 
self::DISPLAY_TYPE_TOP_FORM_WITH_PAGING:
                
$this->displayType self::DISPLAY_TYPE_WITH_PAGING;
                break;

            default:
                
$this->displayType self::DISPLAY_TYPE_WITH_LOAD_LIST;
        }

        return 
$this;
    }

    
/**
     * @return integer
     */
    
public function getCommentCountOnPage()
    {
        return 
$this->commentCountOnPage;
    }

    
/**
     * @param integer $commentCountOnPage
     * @return BASE_CommentsParams
     */
    
public function setCommentCountOnPage$commentCountOnPage )
    {
        
$this->commentCountOnPage = (int) $commentCountOnPage;
        return 
$this;
    }

    public function 
getAddComment()
    {
        return 
$this->addComment;
    }

    public function 
getErrorMessage()
    {
        return 
$this->errorMessage;
    }

    public function 
setErrorMessage$errorMessage )
    {
        
$this->errorMessage $errorMessage;
        return 
$this;
    }

    public function 
setAddComment$addComment )
    {
        
$this->addComment = (bool) $addComment;
        return 
$this;
    }

    public function 
getWrapInBox()
    {
        return 
$this->wrapInBox;
    }

    public function 
setWrapInBox$wrapInBox )
    {
        
$this->wrapInBox = (bool) $wrapInBox;
        return 
$this;
    }

    public function 
getBatchData()
    {
        return 
$this->batchData;
    }

    public function 
setBatchData( array $data )
    {
        
$this->batchData $data;
        return 
$this;
    }

    public function 
getInitialCommentsCount()
    {
        return 
$this->initialCommentsCount;
    }

    public function 
setInitialCommentsCount$initialCommentsCount )
    {
        
$this->initialCommentsCount = (int) $initialCommentsCount;
        return 
$this;
    }

    public function 
getLoadMoreCount()
    {
        return 
$this->loadMoreCount;
    }

    public function 
setLoadMoreCount$loadMoreCount )
    {
        
$this->loadMoreCount = (int) $loadMoreCount;
        return 
$this;
    }

    public function 
getShowEmptyList()
    {
        return 
$this->showEmptyList;
    }

    public function 
setShowEmptyList$showEmptyList )
    {
        
$this->showEmptyList = (bool) $showEmptyList;
        return 
$this;
    }

    public function 
getCustomId()
    {
        return 
$this->customId;
    }

    public function 
setCustomId$customId )
    {
        
$this->customId $customId;
    }

    public function 
getCommentPreviewMaxCharCount()
    {
        return (int) 
$this->commentPreviewMaxCharCount;
    }

    public function 
setCommentPreviewMaxCharCount$commentPreviewMaxCharCount )
    {
        
$this->commentPreviewMaxCharCount = (int) $commentPreviewMaxCharCount;
    }
}
Онлайн: 0
Реклама