• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/helper/servicecomment.php
  • Класс: BitrixSocialnetworkHelperServiceComment
  • Вызов: ServiceComment::processLogEntryCreateEntity
static function processLogEntryCreateEntity(array $params = []): bool
{
	$entityType = ($params['ENTITY_TYPE'] ?? false);
	$entityId = (int)($params['ENTITY_ID'] ?? 0);
	$postEntityType = ($params['POST_ENTITY_TYPE'] ?? false);
	$sourceEntityType = ($params['SOURCE_ENTITY_TYPE'] ?? false);
	$sourceEntityId = (int)($params['SOURCE_ENTITY_ID'] ?? 0);
	$sourceEntityData = (array)($params['SOURCE_ENTITY_DATA'] ?? []);
	$logId = (int)($params['LOG_ID'] ?? 0);
	$siteId = ($params['SITE_ID'] ?? SITE_ID);

	if (in_array($sourceEntityType, [ CommentAuxCreateEntity::SOURCE_TYPE_BLOG_POST, CommentAuxCreateEntity::SOURCE_TYPE_BLOG_COMMENT], true))
	{
		return self::processBlogCreateEntity([
			'ENTITY_TYPE' => $entityType,
			'ENTITY_ID' => $entityId,
			'SOURCE_ENTITY_TYPE' => $sourceEntityType,
			'SOURCE_ENTITY_ID' => $sourceEntityId,
			'LIVE' => 'Y',
		]);
	}

	if (
		empty($postEntityType)
		|| empty($sourceEntityType)
		|| $sourceEntityId <= 0
		|| empty($entityType)
		|| $entityId <= 0
	)
	{
		return false;
	}

	$entity = static::getEntityData([
		'entityType' => $entityType,
		'entityId' => $entityId,
	]);

	if (empty($entity))
	{
		return false;
	}

	$res = CSite::getById($siteId);
	$site = $res->fetch();

	$provider = LivefeedProvider::init([
		'ENTITY_TYPE' => $sourceEntityType,
		'ENTITY_ID' => $sourceEntityId,
		'ADDITIONAL_PARAMS' => $sourceEntityData,
		'LOG_ID' => $logId
	]);

	if (!$provider)
	{
		return false;
	}

	$commentProvider = false;
	if ($postProvider = LivefeedProvider::getProvider($postEntityType))
	{
		$commentProvider = $postProvider->getCommentProvider();
	}

	if (!$commentProvider)
	{
		return false;
	}

	if ($postProvider::className() === $provider::className())
	{
		$commentProvider->setParentProvider($provider);
	}
	else
	{
		$postEntityId = $provider->getParentEntityId();
		$postProvider->setEntityId($postEntityId);
		$commentProvider->setParentProvider($postProvider);
	}

	$logId = $provider->getLogId();

	if ($logId <= 0)
	{
		$provider->initSourceFields();
		$logId = $provider->getLogId();
	}

	if ($logId > 0)
	{
		$commentProvider->setLogId($provider->getLogId());
	}

	$auxData = [
		'sourceType' => $sourceEntityType,
		'sourceId' => $sourceEntityId,
		'entityType' => $entityType,
		'entityId' => $entityId,
	];

	$authorId = static::getEntityAuthorId([
		'entityType' => $entityType,
		'entityData' => $entity,
	]);

	$sonetCommentData = $commentProvider->add([
		'SITE_ID' => $siteId,
		'AUTHOR_ID' => $authorId,
		'MESSAGE' => CommentAuxCreateEntity::getPostText(),
		'SHARE_DEST' => Json::encode($auxData),
		'AUX' => 'Y',
		'AUX_DATA' => $auxData,
		'MODULE' => false,
	]);

	$sonetCommentId = (int)($sonetCommentData['sonetCommentId'] ?? 0);
	$sourceCommentId = (int)($sonetCommentData['sourceCommentId'] ?? 0);

	if (
		$sonetCommentId <= 0
		&& $sourceCommentId <= 0
	)
	{
		return false;
	}

	if (
		isset($params['LIVE'])
		&& $params['LIVE'] === 'Y'
	)
	{
		$userPage = Option::get('socialnetwork', 'user_page', $site['DIR'] . 'company/personal/');
		$provider->initSourceFields();

		$auxLiveParamList = static::getAuxLiveParams([
			'sourceEntityType' => $sourceEntityType,
			'sourceEntityId' => $sourceEntityId,
			'entityType' => $entityType,
			'entityId' => $entityId,
			'entityData' => $entity,
			'sourceEntityLink' => $provider->getLiveFeedUrl(),
		]);

		$liveCommentParams = [
			'ACTION' => 'ADD',
			'TIME_FORMAT' => CSite::getTimeFormat(),
			'NAME_TEMPLATE' => CSite::getNameFormat(null, $siteId),
			'SHOW_LOGIN' => 'N',
			'AVATAR_SIZE' => 100,
			'LANGUAGE_ID' => $site['LANGUAGE_ID'],
			'SITE_ID' => $siteId,
			'PULL' => 'Y',
			'AUX' => 'createentity',
		];

		if ($sonetCommentId > 0)
		{
			$logCommentFields = BitrixSocialnetworkItemLogComment::getById($sonetCommentId)->getFields();

			$res = LogTable::getList([
				'filter' => [
					'=ID' => $logCommentFields['LOG_ID']
				],
				'select' => [ 'ID', 'ENTITY_TYPE', 'ENTITY_ID', 'USER_ID', 'EVENT_ID', 'SOURCE_ID' ],
			]);
			if (!($logEntry = $res->fetch()))
			{
				return false;
			}

			$userPath = $userPage . 'user/' . $logEntry['USER_ID'] . '/';

			$auxLiveParamList['userPath'] = $userPath;

			$serviceCommentProvider = CommentAuxBase::init(
				CommentAuxCreateEntity::getType(),
				[
					'liveParamList' => $auxLiveParamList,
				]
			);

			$commentEvent = CSocNetLogTools::findLogCommentEventByLogEventID($logEntry['EVENT_ID']);

			$liveCommentParams['SOURCE_ID'] = $logCommentFields['SOURCE_ID'];
			$liveCommentParams['PATH_TO_USER'] = $userPath;
			$liveCommentParams['AUX_LIVE_PARAMS'] = $serviceCommentProvider->getLiveParams();

			if ($commentProvider->getContentTypeId() === LivefeedForumPost::CONTENT_TYPE_ID)
			{
				$feedParams = $commentProvider->getFeedParams();
				if (!empty($feedParams['xml_id']))
				{
					$liveCommentParams['ENTITY_XML_ID'] = $feedParams['xml_id'];
				}
			}

			ComponentHelper::addLiveComment(
				$logCommentFields,
				$logEntry,
				$commentEvent,
				$liveCommentParams
			);
		}
		elseif ($sourceCommentId > 0)
		{
			$commentProvider->setEntityId($sourceCommentId);
			$commentProvider->initSourceFields();

			$serviceCommentProvider = CommentAuxBase::init(
				CommentAuxCreateEntity::getType(),
				[
					'liveParamList' => $auxLiveParamList,
				]
			);

			ComponentHelper::addLiveSourceComment([
				'postProvider' => $postProvider,
				'commentProvider' => $commentProvider,
				'siteId' => $siteId,
				'languageId' => $site['LANGUAGE_ID'],
				'nameTemplate' => CSite::getNameFormat(null, $siteId),
				'showLogin' => 'N',
				'avatarSize' => 100,
				'aux' => 'createentity',
				'auxLiveParams' => $serviceCommentProvider->getLiveParams()
			]);
		}
	}

	return true;
}