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

class BASE_CMP_CommentsList extends PEEP_Component
{
    
/**
     * @var BASE_CommentsParams
     */
    
protected $params;
    protected 
$batchData;
    protected 
$staticData;
    protected 
$id;
    protected 
$commentCount;
    protected 
$cmpContextId;

    
/**
     * @var BOL_CommentService
     */
    
protected $commentService;
    protected 
$avatarService;
    protected 
$page;
    protected 
$isModerator;
    protected 
$actionArr = array('comments' => array(), 'users' => array());
    protected 
$commentIdList = array();
    protected 
$userIdList = array();

    
/**
     * Constructor.
     *
     * @param string $entityType
     * @param integer $entityId
     * @param integer $page
     * @param string $displayType
     */
    
public function __constructBASE_CommentsParams $params$id$page )
    {
        
parent::__construct();
        
$batchData $params->getBatchData();
        
$this->staticData = empty($batchData['_static']) ? array() : $batchData['_static'];
        
$batchData = isset($batchData[$params->getEntityType()][$params->getEntityId()]) ? $batchData[$params->getEntityType()][$params->getEntityId()] : array();
        
$this->params $params;
        
$this->batchData $batchData;
        
$this->id $id;
        
$this->page $page;
        
$this->isModerator PEEP::getUser()->isAuthorized($params->getPluginKey());
        
$this->isOwnerAuthorized = (PEEP::getUser()->isAuthenticated() && $this->params->getOwnerId() !== null && (int) $this->params->getOwnerId() === (int) PEEP::getUser()->getId());
        
$this->isBaseModerator PEEP::getUser()->isAuthorized('base');

        
$this->commentService BOL_CommentService::getInstance();
        
$this->avatarService BOL_AvatarService::getInstance();
        
$this->cmpContextId "comments-list-$id";
        
$this->assign('cmpContext'$this->cmpContextId);

        
$this->commentCount = isset($batchData['commentsCount']) ? $batchData['commentsCount'] : $this->commentService->findCommentCount($params->getEntityType(), $params->getEntityId());
        
$this->init();
    }

    protected function 
processList$commentList )
    {
        
$arrayToAssign = array();

        
/* @var $value BOL_Comment */
        
foreach ( $commentList as $value )
        {
            
$this->userIdList[] = $value->getUserId();
            
$this->commentIdList[] = $value->getId();
        }

        
$userAvatarArrayList = empty($this->staticData['avatars']) ? $this->avatarService->getDataForUserAvatars($this->userIdList) : $this->staticData['avatars'];

        
/* @var $value BOL_Comment */
        
foreach ( $commentList as $value )
        {
            
$cmItemArray = array(
                
'displayName' => $userAvatarArrayList[$value->getUserId()]['title'],
                
'avatarUrl' => $userAvatarArrayList[$value->getUserId()]['src'],
                
'profileUrl' => $userAvatarArrayList[$value->getUserId()]['url'],
                
'content' => $value->getMessage(),
                
'date' => UTIL_DateTime::formatDate($value->getCreateStamp()),
                
'userId' => $value->getUserId(),
                
'commentId' => $value->getId(),
                
'avatar' => $userAvatarArrayList[$value->getUserId()],
            );

            
$contentAdd '';

            if ( 
$value->getAttachment() !== null )
            {
                
$tempCmp = new BASE_CMP_OembedAttachment((array) json_decode($value->getAttachment()), $this->isOwnerAuthorized);
                
$contentAdd .= '<div class="peep_attachment peep_small" id="att' $value->getId() . '">' $tempCmp->render() . '</div>';
            }

            
$cmItemArray['content_add'] = $contentAdd;

            
$event = new BASE_CLASS_EventProcessCommentItem('base.comment_item_process'$value$cmItemArray);
            
PEEP::getEventManager()->trigger($event);
            
$arrayToAssign[] = $event->getDataArr();
        }

        return 
$arrayToAssign;
    }

    public function 
itemHandlerBASE_CLASS_EventProcessCommentItem $e )
    {
        
$language PEEP::getLanguage();

        
$deleteButton false;
        
$cAction null;
        
$value $e->getItem();

        if ( 
$this->isOwnerAuthorized || $this->isModerator || (int) PEEP::getUser()->getId() === (int) $value->getUserId() )
        {
            
$deleteButton true;
        }
        
        
$flagButton $value->getUserId() != PEEP::getUser()->getId();

        if ( 
$this->isBaseModerator || $deleteButton || $flagButton )
        {
            
$cAction = new BASE_CMP_ContextAction();
            
$parentAction = new BASE_ContextAction();
            
$parentAction->setKey('parent');
            
$parentAction->setClass('peep_comments_context');
            
$cAction->addAction($parentAction);

            if ( 
$deleteButton )
            {
                
$flagAction = new BASE_ContextAction();
                
$flagAction->setLabel($language->text('base''contex_action_comment_delete_label'));
                
$flagAction->setKey('udel');
                
$flagAction->setParentKey($parentAction->getKey());
                
$delId 'del-' $value->getId();
                
$flagAction->setId($delId);
                
$this->actionArr['comments'][$delId] = $value->getId();
                
$cAction->addAction($flagAction);
            }

            if ( 
$this->isBaseModerator && $value->getUserId() != PEEP::getUser()->getId() )
            {
                
$modAction = new BASE_ContextAction();
                
$modAction->setLabel($language->text('base''contex_action_user_delete_label'));
                
$modAction->setKey('cdel');
                
$modAction->setParentKey($parentAction->getKey());
                
$delId 'udel-' $value->getId();
                
$modAction->setId($delId);
                
$this->actionArr['users'][$delId] = $value->getUserId();
                
$cAction->addAction($modAction);
            }
            
            if ( 
$flagButton )
            {
                
$flagAction = new BASE_ContextAction();
                
$flagAction->setLabel($language->text('base''flag'));
                
$flagAction->setKey('cflag');
                
$flagAction->setParentKey($parentAction->getKey());
                
$flagAction->addAttribute("onclick""var d = $(this).data(); PEEP.flagContent(d.etype, d.eid);");
                
$flagAction->addAttribute("data-etype""comment");
                
$flagAction->addAttribute("data-eid"$value->id);

                
$cAction->addAction($flagAction);
            }
        }

        if ( 
$this->params->getCommentPreviewMaxCharCount() > && mb_strlen($value->getMessage()) > $this->params->getCommentPreviewMaxCharCount() )
        {
            
$e->setDataProp('previewMaxChar'$this->params->getCommentPreviewMaxCharCount());
        }

        
$e->setDataProp('cnxAction', empty($cAction) ? '' $cAction->render());
    }

    protected function 
init()
    {
        if ( 
$this->commentCount === && $this->params->getShowEmptyList() )
        {
            
$this->assign('noComments'true);
        }

        
$countToLoad 0;

        if ( 
$this->commentCount === )
        {
            
$commentList = array();
        }
        else if ( 
in_array($this->params->getDisplayType(), array(BASE_CommentsParams::DISPLAY_TYPE_WITH_LOAD_LISTBASE_CommentsParams::DISPLAY_TYPE_WITH_LOAD_LIST_MINI)) )
        {
            
$commentList = empty($this->batchData['commentsList']) ? $this->commentService->findCommentList($this->params->getEntityType(), $this->params->getEntityId(), 1$this->params->getInitialCommentsCount()) : $this->batchData['commentsList'];
            
$commentList array_reverse($commentList);
            
$countToLoad $this->commentCount $this->params->getInitialCommentsCount();
            
$this->assign('countToLoad'$countToLoad);
        }
        else
        {
            
$commentList $this->commentService->findCommentList($this->params->getEntityType(), $this->params->getEntityId(), $this->page$this->params->getCommentCountOnPage());
        }

        
PEEP::getEventManager()->trigger(new PEEP_Event('base.comment_list_prepare_data', array('list' => $commentList'entityType' => $this->params->getEntityType(), 'entityId' => $this->params->getEntityId())));
        
PEEP::getEventManager()->bind('base.comment_item_process', array($this'itemHandler'));
        
$this->assign('comments'$this->processList($commentList));
        
$pages false;

        if ( 
$this->params->getDisplayType() === BASE_CommentsParams::DISPLAY_TYPE_WITH_PAGING )
        {
            
$pagesCount $this->commentService->findCommentPageCount($this->params->getEntityType(), $this->params->getEntityId(), $this->params->getCommentCountOnPage());

            if ( 
$pagesCount )
            {
                
$pages $this->getPages($this->page$pagesCount8);
                
$this->assign('pages'$pages);
            }
        }
        else
        {
            
$pagesCount 0;
        }

        
$this->assign('loadMoreLabel'PEEP::getLanguage()->text('base''comment_load_more_label'));

        static 
$dataInit false;

        if ( !
$dataInit )
        {
            
$staticDataArray = array(
                
'respondUrl' => PEEP::getRouter()->urlFor('BASE_CTRL_Comments''getCommentList'),
                
'delUrl' => PEEP::getRouter()->urlFor('BASE_CTRL_Comments''deleteComment'),
                
'delAtchUrl' => PEEP::getRouter()->urlFor('BASE_CTRL_Comments''deleteCommentAtatchment'),
                
'delConfirmMsg' => PEEP::getLanguage()->text('base''comment_delete_confirm_message'),
                
'preloaderImgUrl' => PEEP::getThemeManager()->getCurrentTheme()->getStaticImagesUrl() . 'ajax_preloader_button.gif'
            
);
            
PEEP::getDocument()->addOnloadScript("window.peepCommentListCmps.staticData=" json_encode($staticDataArray) . ";");
            
$dataInit true;
        }

        
$jsParams json_encode(
            array(
                
'totalCount' => $this->commentCount,
                
'contextId' => $this->cmpContextId,
                
'displayType' => $this->params->getDisplayType(),
                
'entityType' => $this->params->getEntityType(),
                
'entityId' => $this->params->getEntityId(),
                
'pagesCount' => $pagesCount,
                
'initialCount' => $this->params->getInitialCommentsCount(),
                
'loadMoreCount' => $this->params->getLoadMoreCount(),
                
'commentIds' => $this->commentIdList,
                
'pages' => $pages,
                
'pluginKey' => $this->params->getPluginKey(),
                
'ownerId' => $this->params->getOwnerId(),
                
'commentCountOnPage' => $this->params->getCommentCountOnPage(),
                
'cid' => $this->id,
                
'actionArray' => $this->actionArr,
                
'countToLoad' => $countToLoad
            
)
        );

        
PEEP::getDocument()->addOnloadScript(
            
"window.peepCommentListCmps.items['$this->id'] = new PeepCommentsList($jsParams);
            window.peepCommentListCmps.items['
$this->id'].init();"
        
);
    }

    protected function 
getPages$currentPage$pagesCount$displayPagesCount )
    {
        
$first false;
        
$last false;

        
$prev = ( $currentPage );
        
$next = ( $currentPage $pagesCount );

        if ( 
$pagesCount <= $displayPagesCount )
        {
            
$start 1;
            
$displayPagesCount $pagesCount;
        }
        else
        {
            
$start $currentPage - (int) floor($displayPagesCount 2);

            if ( 
$start <= )
            {
                
$start 1;
            }
            else
            {
                
$first true;
            }

            if ( (
$start $displayPagesCount 1) < $pagesCount )
            {
                
$last true;
            }
            else
            {
                
$start $pagesCount $displayPagesCount 1;
            }
        }

        
$pageArray = array();

        if ( 
$first )
        {
            
$pageArray[] = array('label' => PEEP::getLanguage()->text('base''paging_label_first'), 'pageIndex' => 1);
        }

        if ( 
$prev )
        {
            
$pageArray[] = array('label' => PEEP::getLanguage()->text('base''paging_label_prev'), 'pageIndex' => ($currentPage 1));
        }

        if ( 
$first )
        {
            
$pageArray[] = array('label' => '...');
        }

        for ( 
$i = (int) $start$i <= ($start $displayPagesCount 1); $i++ )
        {
            
$pageArray[] = array('label' => $i'pageIndex' => $i'active' => ( $i === (int) $currentPage ));
        }

        if ( 
$last )
        {
            
$pageArray[] = array('label' => '...');
        }

        if ( 
$next )
        {
            
$pageArray[] = array('label' => PEEP::getLanguage()->text('base''paging_label_next'), 'pageIndex' => ( $currentPage ));
        }

        if ( 
$last )
        {
            
$pageArray[] = array('label' => PEEP::getLanguage()->text('base''paging_label_last'), 'pageIndex' => $pagesCount);
        }

        return 
$pageArray;
    }
}
Онлайн: 0
Реклама