• Модуль: 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']
	];
}