Comments * @copyright Tamaranga */ class CommentsBlock extends Block { /** @var int ID объявления */ public $itemID; /** @var int ID пользователя (автора) объявления */ public $itemUserID = 0; /** @var int Статус объявления */ public $itemStatus = 0; /** @var int ID компании объявления или 0 */ public $itemCompanyId = 0; /** @var array Данные о компании объявления: link, logo, title */ public $itemCompanyData = []; /** @var int ID текущего пользователя */ public $userID; /** @var ItemComments Компонент комментариев */ public $comments; public function init() { parent::init(); $this->setTemplate('item/comments', 'listings'); } public function data() { $data = parent::data(); if (! $this->itemID || ! $this->comments || ! $this->config('listings.comments', true, TYPE_BOOL)) { return false; } $commentsData = $this->getCommentsData(); $data['commentsList'] = $this->getList($commentsData['comments']); $data['commentsTotal'] = $commentsData['total']; $data['commentsClosed'] = $this->areCommentsClosed(); $data['userLogined'] = $this->isUserLogined(); return $data; } /** * Доступно ли добавление комментариев * @return bool */ public function areCommentsClosed() { return ($this->itemStatus != Listings::STATUS_PUBLICATED); } /** * Авторизован ли текущий пользователь * @return bool */ public function isUserLogined() { return ($this->userID > 0); } /** * Формируем данные о комментариях * @param int $commentID * @return array */ public function getCommentsData($commentID = 0) { $callback = null; # Подменяем на данные компании if ($this->itemCompanyId && $this->itemCompanyData) { $callback = function ($comment) { if ($comment['user_id'] == $this->itemUserID) { $comment['user_url_profile'] = $this->itemCompanyData['link']; $comment['user_url_avatar'] = $this->itemCompanyData['logo']; $comment['name'] = $this->itemCompanyData['title']; } return $comment; }; } return $this->comments->commentsDataFrontend($this->itemID, $commentID, $callback); } /** * Блок списка комментариев * @param array $comments * @param int $level * @return CommentsListBlock */ public function getList(array $comments, $level = 1) { return (new CommentsListBlock([ 'comments' => $comments, 'level' => $level, ]))->setParent($this); } }