- Модуль: socialnetwork
- Путь к файлу: ~/bitrix/modules/socialnetwork/lib/livefeed/forumpost.php
- Класс: BitrixSocialnetworkLivefeedForumPost
- Вызов: ForumPost::add
public function add($params = [])
{
global $USER;
static $parser = null;
$siteId = (
isset($params['SITE_ID'])
&& $params['SITE_ID'] <> ''
? $params['SITE_ID']
: SITE_ID
);
$authorId = (
isset($params['AUTHOR_ID'])
&& (int)$params['AUTHOR_ID'] > 0
? (int)$params['AUTHOR_ID']
: $USER->getId()
);
$message = (string)($params['MESSAGE'] ?? '');
if (
$message === ''
|| !Loader::includeModule('forum')
)
{
return false;
}
$logId = $this->getLogId();
$this->setLogId($logId);
$feedParams = $this->getFeedParams();
if (empty($feedParams))
{
return false;
}
$forumId = self::getForumId(array_merge($feedParams, [
'SITE_ID' => $siteId,
]));
if (!$forumId)
{
return false;
}
$feed = new BitrixForumCommentsFeed(
$forumId,
$feedParams,
$authorId
);
$forumMessageFields = [
'POST_MESSAGE' => $message,
'AUTHOR_ID' => $authorId,
'USE_SMILES' => 'Y',
'AUX' => (isset($params['AUX']) && $params['AUX'] === 'Y' ? $params['AUX'] : 'N')
];
if ($message === CommentAuxCreateEntity::getPostText())
{
$forumMessageFields['SERVICE_TYPE'] = Manager::TYPE_ENTITY_CREATED;
$forumMessageFields['SERVICE_DATA'] = Json::encode(isset($params['AUX_DATA']) && is_array($params['AUX_DATA']) ? $params['AUX_DATA'] : []);
$forumMessageFields['POST_MESSAGE'] = Manager::find([
'SERVICE_TYPE' => Manager::TYPE_ENTITY_CREATED
])->getText($forumMessageFields['SERVICE_DATA']);
$params['SHARE_DEST'] = '';
if (
is_array($params['AUX_DATA'])
&& !empty($params['AUX_DATA']['entityType'])
&& (int)$params['AUX_DATA']['entityId'] > 0
)
{
$entityLivefeedPovider = Provider::getProvider($params['AUX_DATA']['entityType']);
$entityLivefeedPovider->setEntityId((int)$params['AUX_DATA']['entityId']);
$entityLivefeedPovider->initSourceFields();
$url = $entityLivefeedPovider->getLiveFeedUrl();
if (!empty($url))
{
$metaData = UrlPreview::getMetadataAndHtmlByUrl($url, true, false);
if (
!empty($metaData)
&& !empty($metaData['ID'])
&& (int)$metaData['ID'] > 0
)
{
$signer = new BitrixMainSecuritySignSigner();
$forumMessageFields['UF_FORUM_MES_URL_PRV'] = $signer->sign($metaData['ID'] . '', UrlPreview::SIGN_SALT);
}
}
}
}
elseif ($message === CommentAuxCreateTask::getPostText())
{
$forumMessageFields['SERVICE_TYPE'] = Manager::TYPE_TASK_CREATED;
$forumMessageFields['SERVICE_DATA'] = Json::encode(isset($params['AUX_DATA']) && is_array($params['AUX_DATA']) ? $params['AUX_DATA'] : []);
$forumMessageFields['POST_MESSAGE'] = Manager::find([
'SERVICE_TYPE' => Manager::TYPE_TASK_CREATED
])->getText($forumMessageFields['SERVICE_DATA']);
$params['SHARE_DEST'] = '';
}
$forumComment = $feed->add($forumMessageFields);
if (!$forumComment)
{
return false;
}
$sonetCommentId = false;
if ($logId > 0)
{
if ($params['AUX'] === 'Y')
{
if ($parser === null)
{
$parser = new CTextParser();
}
$sonetCommentFields = [
"ENTITY_TYPE" => $this->getLogEntityType(),
"ENTITY_ID" => $this->getLogEntityId(),
"EVENT_ID" => $this->getCommentEventId(),
"MESSAGE" => $message,
"TEXT_MESSAGE" => $parser->convert4mail($message),
"MODULE_ID" => $this->getModuleId(),
"SOURCE_ID" => $forumComment['ID'],
"LOG_ID" => $logId,
"RATING_TYPE_ID" => "FORUM_POST",
"RATING_ENTITY_ID" => $forumComment['ID'],
"USER_ID" => $authorId,
"=LOG_DATE" => CDatabase::currentTimeFunction(),
];
if (!empty($params['SHARE_DEST']))
{
$sonetCommentFields['SHARE_DEST'] = $params['SHARE_DEST'];
}
if (!empty($forumMessageFields['UF_FORUM_MES_URL_PRV']))
{
$sonetCommentFields['UF_SONET_COM_URL_PRV'] = $forumMessageFields['UF_FORUM_MES_URL_PRV'];
}
$sonetCommentId = CSocNetLogComments::add($sonetCommentFields, false, false);
}
else // comment is added on event
{
$res = LogCommentTable::getList([
'filter' => [
'EVENT_ID' => $this->getCommentEventId(),
'SOURCE_ID' => $forumComment['ID'],
],
'select' => [ 'ID' ],
]);
if ($sonetCommentFields = $res->fetch())
{
$sonetCommentId = $sonetCommentFields['ID'];
}
}
}
return [
'sonetCommentId' => $sonetCommentId,
'sourceCommentId' => $forumComment['ID']
];
}