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;
}