• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/item/logindex.php
  • Класс: BitrixSocialnetworkItemLogIndex
  • Вызов: LogIndex::setIndex
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);
}