static function setIndex($params = []): void
{
if (!is_array($params))
{
return;
}
$fields = ($params['fields'] ?? []);
$itemType = trim($params['itemType'] ?? '');
$itemId = (int)($params['itemId'] ?? 0);
if (
!is_array($fields)
|| empty($fields)
|| empty($itemType)
|| !in_array($itemType, LogIndexTable::getItemTypes())
|| $itemId <= 0
)
{
return;
}
$eventId = trim($fields['EVENT_ID'] ?? '');
$sourceId = (int)($fields['SOURCE_ID'] ?? 0);
$logId = (int)($fields['LOG_ID'] ?? 0);
$dateCreate = false;
$logDateUpdate = false;
if (
empty($eventId)
|| $sourceId <= 0
)
{
if ($itemType === LogIndexTable::ITEM_TYPE_LOG)
{
$logId = $itemId;
$res = LogTable::getList([
'filter' => [
'=ID' => $itemId,
],
'select' => [ 'ID', 'EVENT_ID', 'SOURCE_ID', 'LOG_UPDATE' ],
]);
if ($logEntry = $res->fetch())
{
$eventId = trim($logEntry['EVENT_ID'] ?? '');
$sourceId = (int)($logEntry['SOURCE_ID'] ?? 0);
$logDateUpdate = $logEntry['LOG_UPDATE'];
$dateCreate = $logEntry['LOG_DATE'] ?? null;
}
}
elseif ($itemType === LogIndexTable::ITEM_TYPE_COMMENT)
{
$res = LogCommentTable::getList([
'filter' => [
'=ID' => $itemId,
],
'select' => [
'ID',
'LOG_ID',
'EVENT_ID',
'SOURCE_ID',
'LOG_UPDATE' => 'LOG.LOG_UPDATE',
'LOG_DATE',
],
]);
if ($comment = $res->fetch())
{
$eventId = trim($comment['EVENT_ID'] ?? '');
$sourceId = (int)($comment['SOURCE_ID'] ?? 0);
$logId = (int)($comment['LOG_ID'] ?? 0);
$logDateUpdate = $comment['LOG_UPDATE'];
$dateCreate = $comment['LOG_DATE'];
}
}
}
if (empty($eventId))
{
return;
}
$content = '';
$event = new MainEvent(
'socialnetwork',
($itemType === LogIndexTable::ITEM_TYPE_COMMENT ? 'onLogCommentIndexGetContent' : 'onLogIndexGetContent'),
[
'eventId' => $eventId,
'sourceId' => $sourceId,
'itemId' => $itemId,
]
);
$event->send();
foreach ($event->getResults() as $eventResult)
{
if ($eventResult->getType() == BitrixMainEventResult::SUCCESS)
{
$eventParams = $eventResult->getParameters();
if (
is_array($eventParams)
&& isset($eventParams['content'])
)
{
$content = $eventParams['content'];
if (MainLoader::includeModule('search'))
{
$content = CSearch::killTags($content);
}
$content = trim(str_replace(
[ "r", "n", "t" ],
' ',
$content
));
$content = self::prepareToken($content);
}
break;
}
}
if (empty($content))
{
return;
}
if ($logId <= 0)
{
if ($itemType === LogIndexTable::ITEM_TYPE_LOG)
{
$logId = $itemId;
}
elseif ($itemType === LogIndexTable::ITEM_TYPE_COMMENT)
{
$res = LogCommentTable::getList([
'filter' => [
'=ID' => $itemId,
],
'select' => [
'ID',
'LOG_ID',
'LOG.LOG_UPDATE',
'LOG_UPDATE' => 'LOG.LOG_UPDATE',
'LOG_DATE',
],
]);
if ($comment = $res->fetch())
{
$logId = (int)$comment['LOG_ID'];
$logDateUpdate = $comment['LOG_UPDATE'];
$dateCreate = $comment['LOG_DATE'];
}
}
}
if ($logId <= 0)
{
return;
}
if (
!$logDateUpdate
|| (
!$dateCreate
&& $itemType === LogIndexTable::ITEM_TYPE_LOG
)
)
{
$res = LogTable::getList([
'filter' => [
'=ID' => $logId,
],
'select' => [ 'ID', 'LOG_UPDATE', 'LOG_DATE' ],
]);
if ($logEntry = $res->fetch())
{
$logDateUpdate = $logEntry['LOG_UPDATE'];
if ($itemType === LogIndexTable::ITEM_TYPE_LOG)
{
$dateCreate = $logEntry['LOG_DATE'];
}
}
}
if (
!$dateCreate
&& $itemType === LogIndexTable::ITEM_TYPE_COMMENT
)
{
$res = LogCommentTable::getList([
'filter' => [
'=ID' => $itemId,
],
'select' => [ 'ID', 'LOG_DATE' ],
]);
if ($logComment = $res->fetch())
{
$dateCreate = $logComment['LOG_DATE'];
}
}
$indexFields = [
'itemType' => $itemType,
'itemId' => $itemId,
'logId' => $logId,
'content' => $content,
];
if ($logDateUpdate)
{
$indexFields['logDateUpdate'] = $logDateUpdate;
}
if ($dateCreate)
{
$indexFields['dateCreate'] = $dateCreate;
}
LogIndexTable::set($indexFields);
}